计算机网络相关 - 图1

1.OSI模型

  1. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/12810482/1620372892753-c4175131-f52a-47bf-b25d-40477328a0da.png#align=left&display=inline&height=407&margin=%5Bobject%20Object%5D&name=image.png&originHeight=407&originWidth=720&size=131104&status=done&style=none&width=720)
  • 应用层:为应用程序或用户请求提供各种请求服务。OSI参考模型最高层,也是最靠近用户的一层,为计算机用户、各种应用程序以及网络提供接口,也为用户直接提供各种网络服务。
  • 表示层:数据编码、格式转换、数据加密。提供各种用于应用层数据的编码和转换功能,确保一个系统的应用层发送的数据能被另一个系统的应用层识别。如果必要,该层可提供一种标准表示形式,用于将计算机内部的多种数据格式转换成通信中采用的标准表示形式。数据压缩和加密也是表示层可提供的转换功能之一。
  • 会话层:创建、管理和维护会话。接收来自传输层的数据,负责建立、管理和终止表示层实体之间的通信会话,支持它们之间的数据交换。该层的通信由不同设备中的应用程序之间的服务请求和响应组成。
  • 传输层:数据通信。建立主机端到端的链接,为会话层和网络层提供端到端可靠的和透明的数据传输服务,确保数据能完整的传输到网络层。
  • 网络层:IP选址及路由选择。通过路由选择算法,为报文或通信子网选择最适当的路径。控制数据链路层与传输层之间的信息转发,建立、维持和终止网络的连接。数据链路层的数据在这一层被转换为数据包,然后通过路径选择、分段组合、顺序、进/出路由等控制,将信息从一个网络设备传送到另一个网络设备。
  • 数据链路层:提供介质访问和链路管理。接收来自物理层的位流形式的数据,封装成帧,传送到网络层;将网络层的数据帧,拆装为位流形式的数据转发到物理层;负责建立和管理节点间的链路,通过各种控制协议,将有差错的物理信道变为无差错的、能可靠传输数据帧的数据链路。
  • 物理层:管理通信设备和网络媒体之间的互联互通。传输介质为数据链路层提供物理连接,实现比特流的透明传输。实现相邻计算机节点之间比特流的透明传送,屏蔽具体传输介质和物理设备的差异。

    1. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/12810482/1620373117233-1205c3b2-5fca-4895-a58a-8eab49b6ebb0.png#align=left&display=inline&height=383&margin=%5Bobject%20Object%5D&name=image.png&originHeight=383&originWidth=730&size=82049&status=done&style=none&width=730)

    2.TCP/UDP区别

    1、TCP 是面向连接的传输控制协议,而UDP 提供了无连接的数据报服务。
    2、TCP是保证数据的正确性,UDP可能会丢包
    3、UDP 具有较好的实时性,工作效率比 TCP 协议高。
    4、每一条TCP连接只能是点到点的,UDP支持一对一,一对多,多对一和多对多的交互通信
    5、TCP对系统资源要求较多,UDP对系统资源要求较少

    3.TCP协议

    3.0 基本概念

    1.MSL

    MSL(Maximum Segment Lifetime)最大报文生存时间。此缩写出现在TCP四次挥手中,主动关闭方的的TIME_WAIT状态。

    2.MTU

    MTU(Maximum Transmission Unit):最大传输单元,用来通知对方所能接受数据服务单元的最大尺寸,说明发送方能够接受的有效载荷大小。

    3.MSS

    MSS(Maximum Segment Size):最大报文段长度(MSS)是TCP协议的一个选项,用于在TCP连接建立时,收发双方协商通信时每一个报文段所能承载的最大数据长度(不包括文段头)。

  • 区分MTU和MSS

最大报文段长度(MSS)与最大传输单元(Maximum Transmission Unit, MTU)均是协议用来定义最大长度的。不同的是,MTU应用于OSI模型的第二层数据链接层,并无具体针对的协议。MTU限制了数据链接层上可以传输的数据包的大小,也因此限制了上层(网络层)的数据包大小。例如,如果已知某局域网的MTU为1500字节,则在网络层的因特网协议(Internet Protocol, IP)里,最大的数据包大小为1500字节(包含IP协议头)。MSS针对的是OSI模型里第四层传输层的TCP协议。因为MSS应用的协议在数据链接层的上层,MSS会受到MTU的限制。
image.png

4.TTL

TTL(Time To Live):IP数据包在计算机网络中可以转发的最大跳数。TTL字段由IP数据包的发送者设置,在IP数据包从源到目的的整个转发路径上,每经过一个路由器,路由器都会修改这个TTL字段值,具体的做法是把该TTL的值减1,然后再将IP包转发出去。如果在IP包到达目的IP之前,TTL减少为0,路由器将会丢弃收到的TTL=0的IP包并向IP包的发送者发送 ICMP time exceeded消息。
TTL的主要作用是避免IP包在网络中的无限循环和收发,节省了网络资源,并能使IP包的发送者能收到告警消息。

3.1三次握手和四次挥手

参考文章:传送门

3.2 流量控制和拥塞控制

参考文章:传送门

  1. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/12810482/1620376663060-e5e0338b-2da7-4a49-a95f-ddc02af836cb.png#align=left&display=inline&height=301&margin=%5Bobject%20Object%5D&name=image.png&originHeight=301&originWidth=816&size=32341&status=done&style=none&width=816)

4.HTTP协议

4.1http1.0、1.1、2.0的区别

计算机网络相关 - 图3

  • 多路复用

多路复用,代替原来的序列和阻塞机制。所有就是请求的都是通过一个 TCP连接并发完成HTTP 1.x 中,如果想并发多个请求,**必须使用多个 TCP 链接**,且浏览器为了控制资源,还会对单个域名有 6-8个的TCP链接请求限制,如下图,红色圈出来的请求就因域名链接数已超过限制,而被挂起等待了一段时间:
计算机网络相关 - 图4
在 HTTP/2 中,有了二进制分帧之后,HTTP /2 不再依赖 TCP 链接去实现多流并行了,在 HTTP/2中:

  • 同域名下所有通信都在单个连接上完成。
  • 单个连接可以承载任意数量的双向数据流。
  • 数据流以消息的形式发送,而消息又由一个或多个帧组成,多个帧之间可以乱序发送,因为根据帧首部的流标识可以重新组装。

这一特性,使性能有了极大提升:

  • 同个域名只需要占用一个 TCP 连接,消除了因多个 TCP 连接而带来的延时和内存消耗。
  • 单个连接上可以并行交错的请求和响应,之间互不干扰。
  • 在HTTP/2中,每个请求都可以带一个31bit的优先值,0表示最高优先级, 数值越大优先级越低。有了这个优先值,客户端和服务器就可以在处理不同的流时采取不同的策略,以最优的方式发送流、消息和帧。
  • HTTP/2 的多路复用(Multiplexing) 则允许同时通过单一的 HTTP/2 连接发起多重的请求-响应消息。

    1. ![](https://cdn.nlark.com/yuque/0/2021/png/12810482/1620379234067-169568af-b485-4bb7-8bdc-25baef855e94.png#align=left&display=inline&height=714&margin=%5Bobject%20Object%5D&originHeight=714&originWidth=720&size=0&status=done&style=none&width=720)<br />因此 HTTP/2 可以很容易的去实现**多流并行**而不用依赖建立多个 TCP 连接,HTTP/2 把 HTTP 协议通信的基本单位缩小为一个一个的帧,这些帧对应着逻辑流中的消息。并行地在同一个 TCP 连接上**双向交换**消息。
  • 二进制分帧

在不改动 HTTP/1.x 的语义、方法、状态码、URI 以及首部字段….. 的情况下, HTTP/2 是如何做到「突破 HTTP1.1 的性能限制,改进传输性能,实现低延迟和高吞吐量」的 ?
关键之一就是在 应用层(HTTP/2)和传输层(TCP or UDP)之间增加一个二进制分帧层。

计算机网络相关 - 图5
在二进制分帧层中, HTTP/2 会将所有传输的信息分割为更小的消息和帧(frame),并对它们采用二进制格式的编码 ,其中 HTTP1.x 的首部信息会被封装到 HEADER frame,而相应的 Request Body 则封装到 DATA frame 里面。
HTTP/2 通信都在一个连接上完成,这个连接可以承载任意数量的双向数据流。
在过去, HTTP 性能优化的关键并不在于高带宽,而是低延迟。TCP 连接会随着时间进行自我「调谐」,起初会限制连接的最大速度,如果数据成功传输,会随着时间的推移提高传输的速度。这种调谐则被称为 TCP 慢启动。由于这种原因,让原本就具有突发性和短时性的 HTTP 连接变的十分低效。
HTTP/2 通过让所有数据流共用同一个连接,可以更有效地使用 TCP 连接,让高带宽也能真正的服务于 HTTP 的性能提升。
总结:

  • 单连接多资源的方式,减少服务端的链接压力,内存占用更少,连接吞吐量更大
  • 由于 TCP 连接的减少而使网络拥塞状况得以改善,同时慢启动时间的减少,使拥塞和丢包恢复速度更快

计算机网络相关 - 图6 计算机网络相关 - 图7

  • 头部压缩

HTTP 1.1请求的大小变得越来越大,有时甚至会大于TCP窗口的初始大小,因为它们需要等待带着ACK的响应回来以后才能继续被发送。HTTP/2对消息头采用HPACK(专为http/2头部设计的压缩格式)进行压缩传输,能够节省消息头占用的网络的流量。而HTTP/1.x每次请求,都会携带大量冗余头信息,浪费了很多带宽资源。
HTTP每一次通信都会携带一组头部,用于描述这次通信的的资源、浏览器属性、cookie等,例如
计算机网络相关 - 图8
为了减少这块的资源消耗并提升性能, HTTP/2对这些首部采取了压缩策略

  • HTTP/2在客户端和服务器端使用“首部表”来跟踪和存储之前发送的键-值对,对于相同的数据,不再通过每次请求和响应发送;
  • 首部表在HTTP/2的连接存续期内始终存在,由客户端和服务器共同渐进地更新;
  • 每个新的首部键-值对要么被追加到当前表的末尾,要么替换表中之前的值。

例如:下图中的两个请求, 请求一发送了所有的头部字段,第二个请求则只需要发送差异数据,这样可以减少冗余数据,降低开销。
计算机网络相关 - 图9

4.2 状态码

image.png

  • 204:服务器成功处理,但未返回内容
  • 200:客户端请求成功
  • 301:资源(网页等)被永久转移到其它URL
  • 302:资源临时跳转
  • 403:服务器拒绝执行此请求
  • 502:网关或者代理服务器,从远程服务器收到一个无效响应
  • 504:网关或者代理服务器,未及时从远程服务器获取请求

    4.3 post 和 get比较

    GET 和 POST 到底有什么区别? - 大宽宽的回答 - 知乎 https://www.zhihu.com/question/28586791/answer/767316172

POST和GET都是向服务器提交数据,并且都会从服务器获取数据。(语义不同)
区别:
1、传送方式:get通过地址栏传输,post通过报文传输。
2、传送长度:get参数有长度限制(受限于url长度),而post无限制
3、GET和POST还有一个重大区别,简单的说:
GET产生一个TCP数据包;POST产生两个TCP数据包
长的说:
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
也就是说,GET只需要汽车跑一趟就把货送到了,而POST得跑两趟,第一趟,先去和服务器打个招呼“嗨,我等下要送一批货来,你们打开门迎接我”,然后再回头把货送过去。
因为POST需要两步,时间上消耗的要多一点,看起来GET比POST更有效。因此Yahoo团队有推荐用GET替换POST来优化网站性能。但这是一个坑!跳入需谨慎。为什么?
1. GET与POST都有自己的语义,不能随便混用。
2. 据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。
3. 并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。

4.4 http完整请求过程

4.5 http和https的对比

4.5.1 http中存在的问题

  • 请求信息明文传输,容易被窃听截取。
  • 数据的完整性未校验,容易被篡改
  • 没有验证对方身份,存在冒充危险

    4.5.2 什么是HTTPS?

    为了解决上述问题,就用到了HTTPS。
    HTTPS 协议(HyperText Transfer Protocol over Secure Socket Layer):一般理解为HTTP+SSL/TLS,通过 SSL证书来验证服务器的身份,并为浏览器和服务器之间的通信进行加密
    https请求的过程
    image.png
    客户端浏览器进行 https 访问请求
  1. 客户端浏览器进行 https 访问请求
  2. 服务端收到 https 访问请求,会向客户浏览器发送自己的数字证书
    发送回来的数字证书中包含了各种信息,包括被证书链中上层 CA 私钥加密后得到的数字签名,还包含服务的端的公钥,以及该证书的上层签发机构是谁
  3. 浏览器自己来验证数字证书的可信性
    具体的操作过程是,浏览器拿到了服务端发送过来的数字证书之后,通过数字证书中指明的颁发者是谁,在系统或者浏览器的受信任证书中找到这个颁发者证书,并且用这个颁发者证书(上层证书)中暴露的公钥对数字证书中的数字签名进行解密操作,解密之后浏览器就可以拿到数字指纹或者称之为数字摘要,它是一个将服务端公钥通过数字摘要算法转化得到的 hash 值,浏览器如果要验证这个数字证书是合法的,实际就是验证这个数字指纹是匹配的,浏览器怎么验证指纹匹配呢?它会通过数字摘要算法把数字证书中的公钥转为新的数字指纹,然后浏览器拿这个新生成的数字指纹和利用上层 CA 公钥解密之后得到的数字指纹进行匹配,如果匹配的结果是一致的,那就直接说明该证书是没有问题的。
    由于存在一整套证书链,服务端返回的数字证书是由存储在浏览器中或者系统中的上层证书所签发的,然后这个上层证书又是由再上一层证书签发的,最上一层就是根证书了,根证书是自己签发自己,用自己的暴露的公钥可以对自己的数字签名解锁,这种层层签发的证书形成了一个有效的证书链,当我们识别出服务端返回的证书是合法的时候,我们会依次向上访问上层证书(一一解密),直到 root 根证书为止,若浏览器最终访问到它信任的根证书的时候,那么浏览器将会把服务端返回的数字证书识别为可信的数字证书,有时候你会发现浏览器会对没有安装中间证书的网站做出不可信的提示,这实际就是完整证书链缺失的后果
  4. 浏览器验证数字证书通过后随即生成对称秘钥
    由于在加密解密的效率上,对称要比非对称快 3 个数量级以上,所以在不断传输数据信息的过程中我们选择使用对称来加密,非对称主要是在最开始判定通信双方的合法性处有用。
  5. 浏览器将前面保存下来的数字证书中公钥对自己产生的对称秘钥加密并回传给服务器
    我们都知道直接使用对称加密的数据容易被,因为加密的锁同时也是解密的钥匙,所以一旦拿到就可以数据信息,所以我们决定在最开始验证往数字证书之后,需要保存下数字证书的公钥,然后使用这个公钥对客户浏览器产生的进行加密操作,再回传给服务端,这样就可以保证对称不对外暴露
  6. 服务端拿到被自己公钥加密的数据信息,通过自己的私钥进行解密
    服务端拿到回传过来的数据,通过自己的私钥进行解密,就可以得到客户端的对称**,并且将其进行存储
  7. 客户浏览器这个时候才开始正式发送含有[使用对称秘钥加密后的数据信息]的接口请求
  8. 服务端收到请求后进行解密拿到数据信息
    服务端收到请求后,通过某种匹配,选出刚才存储的**并对数据信息进行解密操作,这样就可以拿到数据明文了!

    4.5.3 http和https区别

    HTTPS和HTTP的区别主要如下:
  • HTTP 明文传输,数据未加密,安全性较差。https数据传输过程加密
  • 使用 HTTPS 协议需要到 CA 申请证书,一般免费证书较少,因而需要一定费用。
  • HTTP 页面响应速度比 HTTPS 快,主要是因为 HTTP 使用 TCP 三次握手建立连接,客户端和服务器需要交换 3 个包,而 HTTPS除了 TCP 的三个包,还要加上 ssl 握手需要的 9 个包,所共12 个包。
  • http 和 https 使用完全不同的连接方式,http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输身份认证的网络协议。端口也不一样,http是 80,https是 443
  • HTTPS 建构在 SSL/TLS 之上的 HTTP 协议,更耗费服务器资源。