前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TCP协议三次握手和四次挥手抓包分析

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

作者头像
胡齐
发布2019-10-31 16:51:03
1.5K0
发布2019-10-31 16:51:03
举报
文章被收录于专栏:运维猫运维猫

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
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-10-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维猫 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、TCP数据段格式
  • 2、三次握手连接
  • 3、断开tcp连接时的4次挥手整体过程
  • 4、使用tcpdump抓包查看tcp三次握手过程
    • 4.1建立连接
      • 4.2查看数据包
      • 5、使用tcpdum抓取4次挥手数据包
      相关产品与服务
      容器服务
      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档