TCP/IP四层模型中的重点协议

目录

一、应用层协议

二、传输层重点协议

1、TCP/IP协议

【1】确认应答机制(安全)

 【2】超时重传机制(安全)

【3】连接管理机制(安全)

【4】滑动窗口(效率)

【5】流量控制(安全)

【6】拥塞控制(安全)

【7】延迟应答

【8】捎带应答(效率)

缓冲区

粘包问题

2、UDP协议

【1】UDP协议格式

【2】UDP特点

3、UDP/TCP区别

三、网络层和数据链路层协议

1、网络层协议

IP协议

2、数据链路层

【1】以太网

【2】MTU

【3】ARP协议


一、应用层协议

DNS:域名转IP;

NAT:子网IP转公网IP;

NAPT:(子网IP,子网端口)转(公网IP,公网端口)

NAT技术的缺陷:

  • 无法从NAT外部向内部服务器建立连接;
  • 转换表的生成和销毁都需要开销;
  • 通信过程中一旦NAT设备异常,即使存在热备,TCP连接也会断开。

二、传输层重点协议

1、TCP/IP协议

TCP协议段格式:

  • 6位标志位(重点了解三个):
    【1】ACK:确认应答;
    【2】SYN:请求建立连接;
    【3】FIN:请求断开连接。
  • 32位序号和32位确认序号:传输的数据会进行编号,并使用32位序号保存;确认应答时下一次数据存储的位置存储在32位确认应答序号中。
  • 16位窗口大小(TCP首部):流量窗口的大小。
  • 16位校验和:根据校验和,检验数据的完整性
    有些网站下载资源,提供了一种安全的校验方式:sha1、md5
    使用头文件信息+内容信息=>基于一定算法,生成一个字符串(进行安全校验)

TCP原理:

保证数据安全传输的前提下,尽可能的提高传输效率。

【1】确认应答机制(安全)

发送的数据,接收端需要返回确认收到的确认应答。

 【2】超时重传机制(安全)

发送端超过一定的时间限制,没有接收到ACK应答包,就会进行重传。

存在以下两种情况:

  • 发送数据丢包;
  • ACK应答包丢包。

如果是第二种情况,接收端会收到很多的重复数据,TCP协议需要能够识别重复的数据并去重(引入序列号即可)。

 超时时间的确定:

  • 超时时间的长短,随着网络环境的不同是有差异的。如果设置时间太长,会影响传输的效率;太短,会接收到很多的重复数据。
  • TCP为了保证在任何环境下都能比较高性能的通信,会动态计算这个时间。超时以500ms为一个单位,每次超时重发倍数以指数的形式增长,累积到一定的次数,TCP会认为出现异常,强制关闭连接。

【3】连接管理机制(安全)

正常情况下,TCP要经过三次握手后建立连接,四次挥手后断开连接。

建立连接:三次握手

 建立连接:

  1. 客户端发送SYN(申请和服务端建立连接);
  2. 服务端返回ACK+SYN(做出应答并申请建立服务端到客户端的连接);
  3. 客户端返回ACK(对第二个数据报做出应答)。

断开连接:四次挥手

 断开连接:

  1. 客户端发送FIN到服务端,申请和服务端断开连接;
  2. 服务端发送ACK响应=>服务端状态置为CLOSE_WAIT;
  3. 服务端发送FIN到客户端,申请和客户端断开连接=>客户端收到申请后,状态置为TIME_WAIT;
  4. 客户端返回ACK=>服务端状态置为CLOSED。

存在以下几个问题:

(1)双方的连接状态,为什么到最后才置为closed?

双方都要保证关闭连接,否则的话,如果太早置为closed,可能另一方无法收到对方传来的申请关闭的报文,导致一方连接无法关闭。

(2)第2、3个数据报为什么没有合并?

第二个数据报是系统内核返回的(不需要程序来发送);

第三个数据报是程序调用colse方法进行发送的(服务端在关闭连接前,可能需要做一些其他的工作)。

(3)客户端接收到第三个数据报后,状态置为time_wait,此状态需要等待多长时间?

time_wait的时间是2MSL。MSL是报文最大生存的时间,存在2MSL,保证没有接收到的报文已经消失,同时不存在报文丢失的情况,如果报文丢失,服务端进行重发的话,最长2MSL时间之后就会再次到达客户端。

(4)服务端出现大量的colse_wait,为什么?

服务器上出现大量的colse_wait状态,原因就是服务器没有正确关闭socket,导致四次挥手没有正确完成,只需要调用close方法即可解决问题。

【4】滑动窗口(效率)

作用:以并行的方式发送数据报,减少等待的时间,提高效率。

  •  窗口的大小:无需等待确认应答而可以继续发送数据的最大值;
    滑动窗口大小=Math.min(流量窗口,拥塞窗口)。
  • 系统内核需要维护维护这个窗口,开辟发送缓冲区记录哪些数据没有应答;只有确认应答的数据,才能从缓冲区中删掉。
  • 串口的大小决定吞吐量·。

发生丢包情况:

  1. ACK应答包丢失,没有影响,后续的ACK也能表示序号前的全部接收;
  2. 发送的数据包丢失:
    【1】接收的ACK的下一个序号,是接收端接收到的最大值+1(如果中间存在一段数据丢包,连续数值会中断);
    【2】快重传:连续三次接收到相同的下一个序号,就表示从下一个序号开始的数据丢包,需要重传。

【5】流量控制(安全)

接收端处理数据的速度有限。如果发送端发送的太快,导致接收端的缓冲区被打满,此时如果继续发送,就会造成丢包,继而引起丢包重传等一系列连锁反应。

TCP会根据接收端的处理能力来决定发送端的发送速度。(接收端将自己可以接收的缓冲区大小放入TCP首部中的“窗口大小”字段,通过ACK应答包返回给发送端。)

【6】拥塞控制(安全)

网络状况不明的情况下,贸然发送大量的数据报,可能产生网络阻塞。发送端在发送数据之前,先根据拥塞窗口(动态变化)进行探路。

 少量的丢包,仅仅是触发了超时重传,大量的丢包,就认为是网络拥塞。当TCP通信开始后,网络吞吐量逐渐上升,随着网络发生拥堵,吞吐量会立刻下降。

【7】延迟应答

如果接收端立即返回ACK应答,这时候返回的窗口可能比较小。(接收端的接收速度可能比较快,读走之后就可以设置更大的流量窗口。所以接收端不是立即返回流量窗口的大小,而是等待一段时间。

延迟通过时间和数量来限制:

  • 数量限制:每隔N个包就响应一次;
  • 时间限制:超过最大延迟时间就响应一次。

【8】捎带应答(效率)

无论是客户端还是服务端,都可以作为发送端或者接收端。无论是发送端还是接收端,接收到数据后,返回的ACK应答包可以和发送的数据合并在一起发送给对方。

缓冲区

创建一个TCP的socket,同时在内核中创建一个发送缓冲区和一个接收缓冲区:

  • 调用write时,数据先写入缓冲区;
  • 如果发送的字节数太长,会被拆分成多个数据包发送;
  • 如果发送的数据太短,就会先在缓冲区中等待,等到其他合适的时机发送;
  • 接收数据时,因为是先放入接收缓冲区;然后应用程序再调用read从接收缓冲区拿数据;
  • 对于TCP的一个连接,既有发送缓冲区,也有接收缓冲区,既可以读数据,也可以写数据。

由于缓冲区的存在,TCP程序的读和写不需要一一匹配:

  • 写100个字节,可以调用一次write写100个字节,也可以调用100次write,一次写一个字节;
  • 读数据也一样。

粘包问题

粘包问题中的包,指的是应用层的数据包:

  • 站在传输层的角度,TCP是一个一个报文按照序号排列好放在缓冲区中;
  • 站在应用层角度,看到的只是遗传连续的字节数据;
  • 此时应用层可能无法分辨数据从哪到哪是一个完整的数据包。(即没有明确的边界)

避免粘包问题:明确包与包之间的边界

  • 对于定长的包,按照固定的长度进行读和写;
  • 对于变长的包,可以在包头的位置,约定一个包总长度的字段,从而得到包的结束位置。
  • 对于变长的包,也可以在包与包之间使用明确的分隔符。

2、UDP协议

【1】UDP协议格式

  •  16位UDP长度,表示整个数据报(UDP首部和UDP数据)的最大长度;
  • 如果校验和出错,就会直接丢弃。

【2】UDP特点

(1)无连接:只需要知道接收端的IP和端口号就直接进行传输,不需要建立连接。

(2)不可靠:没有任何安全机制,如果因为网络故障无法发送到对方,UDP协议层也不会给应用层返回任何错误信息。

(3)面向数据报:应用层交给UDP多大的数据包,UDP原样发送,既不会拆分,也不会合并。

(4)UDP只有接收缓冲区,没有发送缓冲区(如果接收缓冲区满了,则后面发送的数据就会被丢弃)。

(5)大小受限:UDP协议有一个16位最大长度。也就是说UDP能传输的数据的最大长度是64K(包含UDP首部)。

3、UDP/TCP区别

  • UDP无连接,TCP有连接;
  • UDP不可靠,TCP可靠;
  • UDP是面向数据报,TCP是面向字节流;
  • UDP只有接收缓冲区;TCP既有接收缓冲区,也有发送缓冲区;
  • UDP大小受限(最大16位),TCP大小不限;
  • UDP使用场景(实时性要求高,允许少量丢包),TCP使用场景(可靠性比较高的地方)

三、网络层和数据链路层协议

1、网络层协议

IP协议

2、数据链路层

【1】以太网

以太网:不是一种具体的网路,是局域网的一种技术标准。既包含数据链路层的内容,也包含物理层的内容。

以太网帧:协议格式(在数据链路层封装数据报的格式)。封装以太网帧头(MAC)和帧尾(校验和)。

【2】MTU

以太网的最大传输单元。规定了传输数据的大小,超过以太网规定的最大限制,就会进行分包/分片。

MTU对于IP协议的影响:

  • 由于数据链路层MTU的限制,对于较大的IP数据包需要进行分包发送;
  • 到达接收端后,再将这些小包按照顺序重组,拼装在一起后返回给传输层;
  • 一旦这些小包中任意一个丢失,接收端的重组就会失败,但是IP层不会负责重新传送数据。

MTU对UDP的影响:

小包丢包后,接收端拿到后无法进行重组,整个UDP数据报就无用。

MTU对TCP协议的影响:

  • TCP的数据报封装到网络层之后换1是受制于MTU,所以TCP的数据报也不是无限大的。TCP单个数据报的最大长度为MSS(Max Segent Size)
  • TCP在建立连接时,通信双方会进行MSS的协商(双方在发送SYN的时候,会在TCP头部写入自己能支持的MSS的值,然后选择最小的作为最终的MSS)。

小包丢包,接收端拿到还是无法进行还原,但TCP有可靠的机制来保证重发=>有一定的影响,但影响不大。

【3】ARP协议

ARP协议是一个介于数据链路层和网络层之间的协议。ARP协议建立主机IP地址和MAC地址之间的映射。

ARP协议的工作流程:

  1. 源主机发出ARP请求,询问该IP地址的主机的物理地址,并将这个请求广播到本地网段;
  2. 目的主机接收到广播后,发送一个ARP应答数据包到源主机,将自己的硬件地址填写在应答包中;
  3. 每台主机都维护一个ARP缓存表。缓存表的表项有过期时间(一般是20分钟),如果该时间内没有再次使用这个表项,则该表项失效,下次还要发ARP请求来获取目的主机的硬件地址。

猜你喜欢

转载自blog.csdn.net/weixin_54342360/article/details/124920401
今日推荐