Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2377|回复: 2
打印 上一主题 下一主题

TCP/IP 建立连接的过程?(3-way shake)

[复制链接]

1329

主题

2151

帖子

8437

积分

认证用户组

Rank: 5Rank: 5

积分
8437
跳转到指定楼层
楼主
发表于 2019-4-4 08:13:16 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
  第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状
态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个
SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
  第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1)
,此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

回复

使用道具 举报

1329

主题

2151

帖子

8437

积分

认证用户组

Rank: 5Rank: 5

积分
8437
沙发
 楼主| 发表于 5 天前 | 只看该作者


用这个分析一下三次握手过程


我看了你提供的抓包截图,这几条数据包其实不是典型的 TCP 三次握手过程,而是已经建立连接后的数据传输过程。
原因如下:
  • 1. 三次握手的包特征是:
    • • 第 1 步:客户端 → 服务端 SYN
    • • 第 2 步:服务端 → 客户端 SYN, ACK
    • • 第 3 步:客户端 → 服务端 ACK
  • 2. 你截图里的 TCP 报文标志位都是 [PSH, ACK] 或 [ACK],并没有单独的 SYN 或 SYN, ACK。
  • 3. 而且你的 HTTP 请求/响应(比如 HTTP/1.1 304、POST /subscribeV2)都说明 TCP 连接已经建立,处于数据传输阶段。
所以,这张图里显示的不是三次握手,而是:
  • HTTP 304 响应
  • • TCP 数据分段传输([PSH, ACK])
  • • 以及 HTTP POST 请求的发送
如果你想分析三次握手,需要在 Wireshark 里:
  • • 用 tcp.flags.syn == 1 and tcp.flags.ack == 0 过滤第 1 步
  • • 用 tcp.flags.syn == 1 and tcp.flags.ack == 1 过滤第 2 步
  • • 用 tcp.flags.ack == 1 and tcp.len == 0 过滤第 3 步
我可以帮你画出你的抓包文件中可能的三次握手时序图,但前提是你得给我包含建立连接的那些包的截屏或 pcap 文件。
你是要我帮你在这个抓包里找出三次握手的包吗?这样我可以直接帮你标出来。


回复 支持 反对

使用道具 举报

1329

主题

2151

帖子

8437

积分

认证用户组

Rank: 5Rank: 5

积分
8437
板凳
 楼主| 发表于 5 天前 | 只看该作者
本帖最后由 Qter 于 2025-8-10 23:57 编辑


好的,我先帮你画一个标准的 TCP 三次握手时序图,这样你可以对照 Wireshark 里抓到的包理解它的过程。

TCP 三次握手时序图
客户端 (192.168.2.209)                     服务端 (160.19.208.28)
        |                                           |
1. SYN  | -------------------- SYN ----------------> |  Seq = x
        |                                           |
2. SYN+ACK
        | <--------------- SYN + ACK --------------- |  Seq = y, Ack = x+1
        |                                           |
3. ACK  | -------------------- ACK ----------------> |  Seq = x+1, Ack = y+1
        |                                           |
   TCP 连接建立(进入数据传输阶段)


说明
  • 第一步(SYN):客户端发起连接请求,发送 SYN 标志位,告诉服务端要建立连接,并发送初始序列号 Seq = x。
  • 第二步(SYN + ACK):服务端同意连接,返回一个 SYN 和 ACK 标志位的包,Ack = x+1 表示收到了客户端的 SYN。
  • 第三步(ACK):客户端收到服务端的 SYN 后,再回一个 ACK 包,Ack = y+1 表示收到了服务端的 SYN。
  • • 完成三次握手后,TCP 连接就建立了,可以开始 HTTP 等应用层数据传输。

如果你愿意,我可以帮你把你这个抓包里的 IP 地址和端口替换进这个时序图,做成你这次连接的专属版本,这样更直观。
你要我直接画成你的 IP/端口版本吗?这样就能跟截图完全对应。

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|firemail ( 粤ICP备15085507号-1 )

GMT+8, 2025-8-15 18:26 , Processed in 0.098817 second(s), 21 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表