一、TCP原理分析

1.1 TCP三次握手介绍

第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机;

第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包;

第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。

备注:这里有一个重要的讯息为ack必须是seq+1,而第三次回包的ack为1,flags标记为S S. .

1.2 TCP四次挥手介绍

1;客户端发送一个FIN段,并包含一个希望接收者看到的自己当前的序列号K. 同时还包含一个ACK表示确认对方最近一次发过来的数据。

2;服务端将K值加1作为ACK序号值,表明收到了上一个包。这时上层的应用程序会被告知另一端发起了关闭操作,通常这将引起应用程序发起自己的关闭操作。

3;服务端发起自己的FIN段,ACK=K+1, Seq=L

4;客户端确认。ACK=L+1

备注:这里的seq和ack应答也是ack=seq+1的形式展示,最好的ack不是1这点和握手的报文不一样,flags标记为F F. .

1.3 TCP Flags介绍

tcp握手、传输数据或者挥手都会有不一样的flags标识,这点可以用肉眼去区分,以下简单梳理三种标识(其实存在8中比特位CWR,ECE,URG,ACK,PSH,RST,SYN,FIN)

SYN 握手时使用

PSH 数据传输至应用层使用

FIN 挥手时使用

RST Reset位,表明packet的发送方马上就要断开当前连接了。在http请求结束的时候一般可以看到一个数据包设置了RST位。

tcpdump图如下:

1.4 TCP数据报文传输

大多数人容易忽略传输报文的信息,这里一般其传输的seq是按照位置段如1:83模式进行传输的,而ack则是回复seq的末尾位置数

备注:如果是传输的报文数过多则会拆解成多个报文发送,其传输存在seq分段,ack确认也是每个报文进行答复 P表示PSH交个应用层处理,我这里客户端使用curl发起的请求

二、TCP报文拆解

2.1 完整报文
09:49:18.402678 IP 192.168.7.117.30796 > xiangys0134-k8s-node1.http: Flags [S], seq 1711181517, win 29200, options [mss 1460,sackOK,TS val 611524134 ecr 0,nop,wscale 9], length 0
09:49:18.402757 IP xiangys0134-k8s-node1.http > 192.168.7.117.30796: Flags [S.], seq 3153530998, ack 1711181518, win 28960, options [mss 1460,sackOK,TS val 1520359 ecr 611524134,nop,wscale 10], length 0
09:49:18.402857 IP 192.168.7.117.30796 > xiangys0134-k8s-node1.http: Flags [.], ack 1, win 58, options [nop,nop,TS val 611524135 ecr 1520359], length 0
09:49:18.402940 IP 192.168.7.117.30796 > xiangys0134-k8s-node1.http: Flags [P.], seq 1:78, ack 1, win 58, options [nop,nop,TS val 611524135 ecr 1520359], length 77: HTTP: GET / HTTP/1.1
09:49:18.402964 IP xiangys0134-k8s-node1.http > 192.168.7.117.30796: Flags [.], ack 78, win 29, options [nop,nop,TS val 1520359 ecr 611524135], length 0
09:49:18.403272 IP xiangys0134-k8s-node1.http > 192.168.7.117.30796: Flags [P.], seq 1:240, ack 78, win 29, options [nop,nop,TS val 1520360 ecr 611524135], length 239: HTTP: HTTP/1.1 200 OK
09:49:18.403364 IP 192.168.7.117.30796 > xiangys0134-k8s-node1.http: Flags [.], ack 240, win 60, options [nop,nop,TS val 611524135 ecr 1520360], length 0
09:49:18.403428 IP 192.168.7.117.30796 > xiangys0134-k8s-node1.http: Flags [F.], seq 78, ack 240, win 60, options [nop,nop,TS val 611524135 ecr 1520360], length 0
09:49:18.403485 IP xiangys0134-k8s-node1.http > 192.168.7.117.30796: Flags [F.], seq 240, ack 79, win 29, options [nop,nop,TS val 1520360 ecr 611524135], length 0
09:49:18.403561 IP 192.168.7.117.30796 > xiangys0134-k8s-node1.http: Flags [.], ack 241, win 60, options [nop,nop,TS val 611524136 ecr 1520360], length 0
1.2 TCP三次握手
09:49:18.402678 IP 192.168.7.117.30796 > xiangys0134-k8s-node1.http: Flags [S], seq 1711181517, win 29200, options [mss 1460,sackOK,TS val 611524134 ecr 0,nop,wscale 9], length 0
09:49:18.402757 IP xiangys0134-k8s-node1.http > 192.168.7.117.30796: Flags [S.], seq 3153530998, ack 1711181518, win 28960, options [mss 1460,sackOK,TS val 1520359 ecr 611524134,nop,wscale 10], length 0
09:49:18.402857 IP 192.168.7.117.30796 > xiangys0134-k8s-node1.http: Flags [.], ack 1, win 58, options [nop,nop,TS val 611524135 ecr 1520359], length 
1.3 TCP数据传输
09:49:18.402940 IP 192.168.7.117.30796 > xiangys0134-k8s-node1.http: Flags [P.], seq 1:78, ack 1, win 58, options [nop,nop,TS val 611524135 ecr 1520359], length 77: HTTP: GET / HTTP/1.1
09:49:18.402964 IP xiangys0134-k8s-node1.http > 192.168.7.117.30796: Flags [.], ack 78, win 29, options [nop,nop,TS val 1520359 ecr 611524135], length 0
09:49:18.403272 IP xiangys0134-k8s-node1.http > 192.168.7.117.30796: Flags [P.], seq 1:240, ack 78, win 29, options [nop,nop,TS val 1520360 ecr 611524135], length 239: HTTP: HTTP/1.1 200 OK
09:49:18.403364 IP 192.168.7.117.30796 > xiangys0134-k8s-node1.http: Flags [.], ack 240, win 60, options [nop,nop,TS val 611524135 ecr 1520360], length 0
1.4 TCP四次挥手
09:49:18.403428 IP 192.168.7.117.30796 > xiangys0134-k8s-node1.http: Flags [F.], seq 78, ack 240, win 60, options [nop,nop,TS val 611524135 ecr 1520360], length 0
09:49:18.403485 IP xiangys0134-k8s-node1.http > 192.168.7.117.30796: Flags [F.], seq 240, ack 79, win 29, options [nop,nop,TS val 1520360 ecr 611524135], length 0
09:49:18.403561 IP 192.168.7.117.30796 > xiangys0134-k8s-node1.http: Flags [.], ack 241, win 60, options [nop,nop,TS val 611524136 ecr 1520360], length 0
最后修改日期: 2024年1月6日

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。