TCP协议三次握手和四次挥手抓包分析

1、TCP数据段格式


ACK TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1

SYN(SYNchronization) :在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文。对方若同意建立连接,则应在响应报文中使SYN=1和ACK=1. 因此,  SYN置1就表示这是一个连接请求或连接接受报文。

synchronization  [ˌsɪŋkrənaɪ'zeɪʃn]  同步

FIN (finis)即完,终结的意思,用来释放一个连接。当 FIN = 1 时,表明此报文段的发送方的数据已经发送完毕,并要求释放连接。

finis   ['faɪnɪs]  终结

2、三次握手连接


1.连接开始时,连接建立方(Client)发送SYN包,并包含了自己的初始序号x;

2.连接接受方(Server)收到SYN包以后会回复一个SYN包,其中包含了对上一个x包

的回应信息ACK,回应的序号为下一个希望收到包的序号,即x+1,然后还包含

了自己的初始序号y;

3.连接建立方(Client)收到回应的SYN包以后,回复一个ACK包做响应,其中包含了下一个希望收到包的序号即y+1。

3、断开tcp连接时的4次挥手整体过程

1.当客户A没有东西要发送时就要释放A这边的连接,A会发送一个报文(没有数据),其中FIN设置为1, seq=u。

2.服务器B收到后会给应用程序一个信,这时A那边的连接已经关闭,即A不再发送信息(但仍可接收信息)。B会发送收一个报文,其中FIN设置为1,  ack=u+1;A收到B的确认包后,进入等待状态,等待B请求释放连接。

3.服务器B向客户A发送断开连接请求,包中FIN=1,seq=w,ack = u+1。

4.A收到后回复一个确认信息,发送包,ack=w+1,并进入TIME_WAIT状态。

4、使用tcpdump抓包查看tcp三次握手过程

4.1建立连接

 [root@docker-01 ~]# yum install tcpdump
 [root@docker-01 ~]# ssh root@172.17.2.25
 The authenticity of host '172.17.2.25 (172.17.2.25)'can't be established.
 RSA key fingerprint is SHA256:TL1e8gsDl+uD+crlcfs29HkPbdQih4zzse6/Z0k3lFg.
 RSA key fingerprint is MD5:5a:05:f9:bb:02:3d:05:55:cd:9a:14:0d:07:33:47:39.
 Are you sure you want to continue connecting (yes/no)? ###到这里就不用执行了,tcp已经建议连接

4.2查看数据包

 [root@docker-01 ~]# tcpdump -i eth0 -vn -t tcp port 22
 tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144bytes
 IP (tos 0x12,ECT(0), ttl 64, id 4546, offset 0, flags [DF], proto TCP (6), length 164)
    172.17.120.50.ssh > 192.168.255.27.49589: Flags [P.], cksum 0xe49e (incorrect -> 0x05ea), seq 1290388542:1290388666, ack 1470871262, win 77, length 124
 IP (tos 0x12,ECT(0), ttl 64, id 4547, offset 0, flags [DF], proto TCP (6), length 324)
 ##如果需要看绝对序号,可以在tcpdump命令中加-S
 [root@docker-01 ~]# tcpdump port 22 -c 3 -n -S
 tcpdump: verbose output suppressed, use -vor -vvforfull protocol decode
 listening on eth0, link-type EN10MB (Ethernet), capture size 262144bytes
 07:17:20.781294 IP 172.17.120.50.ssh > 192.168.255.27.49589: Flags [P.], seq 1290663038:1290663226, ack 1470872398, win 77, length 188
 07:17:20.781489 IP 172.17.120.50.ssh > 192.168.255.27.49589: Flags [P.], seq 1290663226:1290663398, ack 1470872398, win 77, length 172
 07:17:20.781565 IP 172.17.120.50.ssh > 192.168.255.27.49589: Flags [P.], seq 1290663398:1290663570, ack 1470872398, win 77, length 172
 3packets captured
 3packets received by filter
 0packets dropped by kernel

5、使用tcpdum抓取4次挥手数据包

 [root@docker-02 ~]# tcpdump port 22 -n -S
 ##只看最后4个包就可以了
 17:29:31.709503 IP 172.17.120.51.57533 > 192.168.255.27.ssh: Flags [F.], seq 2176876951, ack 247624733, win 164, options [nop,nop,TS val 10421058ecr 9186853], length 0
 17:29:31.710515 IP 172.17.120.51.ssh > 192.168.255.27.57533: Flags [.], ack 2176876952, win 175, options [nop,nop,TS val 9186854ecr 10421058], length 0
 17:29:31.743381 IP 172.17.120.51.ssh > 192.168.255.27.57533: Flags [F.], seq 247624733, ack 2176876952, win 175, options [nop,nop,TS val 9186858ecr 10421058], length 0
 17:29:31.743433 IP 172.17.120.51.57533 > 192.168.255.27.ssh: Flags [.], ack 247624734, win 164, options [nop,nop,TS val 10421092ecr 9186858], length 0

关于运维学习、分享、交流,笔者开通了微信公众号【运维猫】,感兴趣的朋友可以关注下,欢迎加入,建立属于我们自己的小圈子,一起学运维知识。

有需要技术交流的小伙伴可以加我微信,期待与大家共同成长,本人微信:

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值