TCP协议分析

时间:2024-04-07 22:13:30

介绍

TCP协议是传输层控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议TCP为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。

连接

三次握手抓包:

TCP协议分析

 

TCP协议分析

 

  1. 客户端发送SYN(SEQ=x)报文给服务器端,进入SYN_SEND状态。当某个主机开启一个TCP会话时,他的初始***是随机的,可能是0和4,294,967,295之间的任意值。TCP协议分析

 

  1. 服务器端收到SYN报文,回应一个SYN (SEQ=y)ACK(ACK=x+1)报文,进入SYN_RECV状态。

TCP协议分析

 

 

  1. 客户端收到服务器端的SYN报文,回应一个ACK(ACK=y+1)报文,进入Established状态。它的seq是它的上个请求的seq加1。

TCP协议分析

 

 

数据传输:

TCP协议分析

 

 [PSH,ACK] 进行数据传输,seq为上个客户端消息的ack的填充,ack为上个客户端消息seq+数据长度。

 

四次关闭:

由于客户端主动发送关闭之后,服务端还有可能进行数据的传送,所以此时还是半关闭状态,数据还可以进行传输,等待数据传输完成之后,服务器再发送一个FIN消息给客户端。客户端收到消息之后,发送ACK的确认消息后,断开连接。

 

TCP协议分析

 

本机客户端大包的分片:

TCP协议分析

 

在linux下服务器端抓包显示超过了mtu 1500个字节

TCP协议分析

 

查看ethtool -k eth0网卡generic-receive-offload: on为打开状态。

ethtool -K ens33 gro off关闭之后抓包后显示正常。

 

TCP协议分析

ethtool -k < 网络接口>,可以看到很多网络接口的offload特性。

这些offload特性都是为了提升网络收/发性能。TSO、UFO和GSO是对应网络发送,在接收方向上对应的是LRO、GRO。

 

TSO

 

TSO(TCP Segmentation Offload),是一种利用网卡对TCP数据包分片,减轻CPU负荷的一种技术,有时也被叫做 LSO (Large segment offload) ,TSO是针对TCP的,UFO是针对UDP的。如果硬件支持 TSO功能,同时也需要硬件支持的TCP校验计算和分散/聚集 (Scatter Gather) 功能。

 

GSO

 

GSO(Generic Segmentation Offload),它比TSO更通用,基本思想就是尽可能的推迟数据分片直至发送到网卡驱动之前,此时会检查网卡是否支持分片功能(如TSO、UFO),如果支持直接发送到网卡,如果不支持就进行分片后再发往网卡。这样大数据包只需走一次协议栈,而不是被分割成几个数据包分别走,这就提高了效率。

 

LRO

 

LRO(Large Receive Offload),通过将接收到的多个TCP数据聚合成一个大的数据包,然后传递给网络协议栈处理,以减少上层协议栈处理 开销,提高系统接收TCP数据包的能力。

 

GRO

 

GRO(Generic Receive Offload),基本思想跟LRO类似,克服了LRO的一些缺点,更通用。后续的驱动都使用GRO的接口,而不是LRO。

 

RSS

 

RSS(Receive Side Scaling),是一项网卡的新特性,俗称多队列。具备多个RSS队列的网卡,可以将不同的网络流分成不同的队列,再分别将这些队列分配到多个CPU核心上进行处理,从而将负荷分散,充分利用多核处理器的能力。