一、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
留言