0%

计算机网络收集

在互联网早期的时候,我们输入的信息只能保存在本地,无法和其他电脑进行交互。我们保存的信息通常都以文本即简单字符的形式存在,文本是一种能够被计算机解析的有意义的二进制数据包。

一、连接

  1. 认识HTTP
  2. 分片上传及断点续传原理
  3. 大文件上传和断点续传实现
  4. 网络编程实战
  5. rfc793

二、常见

  1. POST和GET

    • GET在浏览器回退时是无害的,而POST会再次提交请求
    • GET产生的URL地址可以被Bookmark,而POST不可以
    • GET请求会被浏览器主动cache,而POST不会
    • GET请求只能进行url编码,而POST支持多种编码方式
    • GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留
    • GET请求在URL中传送的参数是有长度限制的,而POST没有有
    • 对参数的数据类型,GET只接受ASCII字符,而POST没有限制
    • GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息
    • GET参数通过URL传递,POST放在Request body中
    • 对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)
  2. 一次http请求过程

    • 域名解析,找到对应的服务器IP地址
    • 发起tcp的3次握手
    • 建立tcp连接后发起http请求
    • nginx主进程监听80端口
    • http请求到达服务器80端口
    • nginx服务判断如果是静态页面,nginx通过server找到服务器对应目录的对应文件返回给浏览器,
    • 如果是动态页面(如index.php),则加载nginx.conf配置文件里的fastcgi模块
      • nginx通过fastcgi_pass(默认是127.0.0.0:9000)把对应的请求按照fastcgi协议转发到php-fpm
      • php-fpm的master进程会监听9000端口,请求到达后交给work进程
      • php-fpm的worker进程调用php-cgi解释器并且生成php执行环境再去执行解析对应php文件
        • php-fpm是一个内置了php解释器的fastcgi服务,启动时能够自行读取php.ini配置和php-fpm.conf配置
      • php-cgi解释器最终将请求解析成静态页面并返回给nginx
    • 服务器响应http请求,浏览器得到html代码
    • 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等)
    • 浏览器对页面进行渲染呈现给用户
  3. http和https对比

    • https协议需要ca申请证书。
    • http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
    • http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
    • http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
  4. websocket与http的区别与联系

    • 相同
      • 都是基于tcp的应用层协议
      • 都使用Request/Response模型进行连接的建立
      • 都可以在网络中传输数据
      • 在连接的建立过程中对错误的处理方式相同,在这个阶段ws可能返回和http相同的返回码
    • 不同
      • http协议基于请求应答,只能做单向传输,是半双工协议,而ws是全双工协议,双方都可以在任何时刻向另一方发送数据
      • ws使用http来建立连接,但是定义了一系列新的header域,这些域在http中并不会使用
      • ws的连接不能通过中间人来转发,它必须是一个直接连接
      • ws在建立握手连接时数据是通过http协议传输的,但在建立连接之后,真正的数据传输阶段是不需要http协议参与的
      • ws传输的数据是二进制流,是以帧为单位的,http传输的是明文传输,是字符串传输,ws的数据帧有序
      • ws的请求的头部和http请求头部不同。
  5. http和tcp的区别

    • tcp协议对应于传输层,而http协议对应于应用层。
    • http协议是建立在tcp协议基础之上的,http请求会通过tcp建立起一个到服务器的连接通道,当本次请求需要的数据完毕后,http会立即将tcp连接断开。
    • http连接是一种无状态的短连接。无状态指的是浏览器每次向服务器发起请求的时候,不是通过一个连接,而是每次都建立一个新的连接,而tcp是有状态的长连接。
    • http客户首先发起建立与服务器tcp连接,一旦建立连接,浏览器进程和服务器进程就可以通过各自的套接字来访问tcp。
    • http协议一定通过指定的端口80,而使用Socket编程的话,就需要自己指定特定的端口。
  6. TCP与UDP的区别

    • TCP面向连接,UDP是无连接的。
    • TCP提供可靠的服务,通过TCP连接传送的数据无差错、不丢失、不重复且按序到达;UDP尽最大努力交付,即不保证可靠交付。
    • TCP面向字节流,它把数据看成一连串无结构的字节流;UDP是面向报文的,它没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低。
    • 每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
    • TCP首部20个字节;UDP的首部8个字节
    • TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道
    • TCP和UDP是OSI模型中的传输层中的协议,TCP提供可靠的通信传输,而UDP则常被用于让广播和细节控制交给应用的通信传输。
  7. HTTP协议的主要特点可概括如下:

    • 支持客户/服务器模式。
    • 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。
    • 灵活:HTTP允许传输任意类型的数据对象,正在传输的类型由Content-Type加以标记。
    • 无连接:无连接的含义是限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,即断开连接。
    • 无状态:HTTP协议是无状态协议(无状态是指协议对于事务处理没有记忆能力)。
  8. HTTP1.0和1.1对比

    • 缓存处理:在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。
    • 带宽优化及网络连接的使用:HTTP1.0中存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。
    • 错误通知的管理:在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。
    • Host头处理:在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。
    • 长连接:HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP1.1中默认开启Connection: keep-alive,一定程度上弥补了HTTP1.0每次请求都要创建连接的缺点。
  9. HTTP1.1和2.0主要区别

    • 多路复用:HTTP2.0使用了多路复用的技术,做到同一个连接并发处理多个请求,而且并发请求的数量比HTTP1.1大了好几个数量级。当然HTTP1.1也可以多建立几个TCP连接,来支持处理更多并发的请求,但是创建TCP连接本身也是有开销的。
      • TCP连接有一个预热和保护的过程,先检查数据是否传送成功,一旦成功过,则慢慢加大传输速度。因此对应瞬时并发的连接,服务器的响应就会变慢。所以最好能使用一个建立好的连接,并且这个连接可以支持瞬时并发的请求。
    • 数据压缩:HTTP1.1不支持header数据的压缩,HTTP2.0使用HPACK算法对header的数据进行压缩,这样数据体积小了,在网络上传输就会更快。
    • 服务器推送:当我们对支持HTTP2.0的web server请求数据的时候,服务器会顺便把一些客户端需要的资源一起推送到客户端,免得客户端再次创建连接发送请求到服务器端获取,这种方式非常合适加载静态资源。服务器端推送的这些资源其实存在客户端的某处地方,客户端直接从本地加载这些资源就可以了,不用走网络,速度自然是快很多的。
  10. 查看ip

    • curl ifconfig.me
    • curl ipinfo.io
    • ip138.com
  11. ifconfig:ifconfig命令被用于配置和显示Linux内核中网络接口的网络参数。用ifconfig命令配置的网卡信息,在网卡重启后机器重启后,配置就不存在。要想将上述的配置信息永远的存的电脑里,那就要修改网卡的配置文件了。

    • ifconfig命令用来查看和配置网络设备,通常需要以root身份登录或使用sudo以便在Linux机器上使用ifconfig。根据命令后参数的不同,可以实现不同的功能(查看和修改)。
    • 命令格式:ifconfig [网络设备] [参数]
    • 扩展:ip addr
    • 传送门
  12. 服务器大量的time wait

  13. 网络带宽充裕,但通信速度上不来