TCP三次握手过程分析

TCP 三次握手过程分析

传输控制协议 (TCP) 旨在用作分组交换计算机通信网络中,以及这些网络的互连系统中的主机之间的高度可靠的主机到主机协议。

建立 TCP 连接

最简单的三次握手如下所示:

      TCP A                                                TCP B

  0.  CLOSED                                               LISTEN

  1.  SYN-SENT    --> <SEQ=100><CTL=SYN>               --> SYN-RECEIVED

  2.  ESTABLISHED <-- <SEQ=300><ACK=101><CTL=SYN,ACK>  <-- SYN-RECEIVED

  3.  ESTABLISHED --> <SEQ=101><ACK=301><CTL=ACK>       --> ESTABLISHED

  4.  ESTABLISHED --> <SEQ=101><ACK=301><CTL=ACK><DATA> --> ESTABLISHED

在 TCP/IP 协议中,TCP 协议提供可靠的连接服务,采用三次握手建立一个连接。

  • 初始状态: 主机 A(客户端) 处于 CLOSED 状态,主机 B(服务器) 处于 LISTEN 状态。
  • 第一次握手:发起连接请求,客户端发送 SYN 包 (SYN = X) 到服务器,并进入 SYN_SEND 状态,等待服务器确认;服务器收到 SYN 包并进入 SYN_RECV 状态。
  • 第二次握手:服务器需要确认客户的 SYN(ACK = X + 1),同时自己也发送一个 SYN 包 (SYN = Y),组合后即 SYN + ACK 包;客户端收到 SYN + ACK 包并进入 ESTABLISHED 状态。
  • 第三次握手:客户端向服务器发送确认包 ACK(ACK = Y + 1);服务器收到 ACK 包并进入 ESTABLISHED 状态,完成三次握手。
  • 完成三次握手后,客户端与服务器开始传送数据。

实例:

No.  Time       Source         Destination    Info
1    0.000000   192.192.4.29   192.192.4.28   580796633 [SYN] Seq=0 Win=5840 Len=0 MSS=1460 SACK_PERM=1 WS=64

2    0.000219   192.192.4.28   192.192.4.29   663358079 [SYN, ACK] Seq=0 Ack=1 Win=28960 Len=0 MSS=1460 SACK_PERM=1 WS=128

3    0.001705   192.192.4.29   192.192.4.28   580796633 [ACK] Seq=1 Ack=1 Win=5888 Len=0

注:其中 SYN, ACK 为 wireshark 解析的相对值。

第一次握手:192.192.4.29 发送标志位 SYN 为 1,随机产生的 Seq=0(相对值 1) 的数据包到 192.192.4.28,192.192.4.28 由标志位 SYN=1 知道 192.192.4.29 要求建立连接。标志位详情:

Flags: 0x002 (SYN)
    000. .... .... = Reserved: Not set
    ...0 .... .... = Nonce: Not set
    .... 0... .... = Congestion Window Reduced (CWR): Not set
    .... .0.. .... = ECN-Echo: Not set
    .... ..0. .... = Urgent: Not set
    .... ...0 .... = Acknowledgment: Not set
    .... .... 0... = Push: Not set
    .... .... .0.. = Reset: Not set
    .... .... ..1. = Syn: Set
    .... .... ...0 = Fin: Not set

标志位里面只同步位置位,也就是在做请求(SYN)。

第二次握手:192.192.4.28 收到请求后要确认连接信息,向 192.192.4.29 发送 Ack 号 =1(相对值 1), 标志位 SYN=1, 标志位 ACK=1 随机产生的 Seq=0(相对值 2) 的包。标志位详情:

Flags: 0x012 (SYN, ACK)
    000. .... .... = Reserved: Not set
    ...0 .... .... = Nonce: Not set
    .... 0... .... = Congestion Window Reduced (CWR): Not set
    .... .0.. .... = ECN-Echo: Not set
    .... ..0. .... = Urgent: Not set
    .... ...1 .... = Acknowledgment: Set
    .... .... 0... = Push: Not set
    .... .... .0.. = Reset: Not set
    .... .... ..1. = Syn: Set
    .... .... ...0 = Fin: Not set

标志位里面有确认位和同步位置位,也就是在做应答(SYN + ACK)。

第三次握手:192.192.4.29 收到应答后检查 ack number 是否正确,以及标志位 ACK 是否为 1,若正确,192.192.4.29 会再发送 Ack 号 =1(相对值 2), 标志位 ACK=1,192.192.4.28 收到后检查 ack number 是否正确,标志位 ACK=1 则连接建立成功。标志位详情:

Flags: 0x010 (ACK)
    000. .... .... = Reserved: Not set
    ...0 .... .... = Nonce: Not set
    .... 0... .... = Congestion Window Reduced (CWR): Not set
    .... .0.. .... = ECN-Echo: Not set
    .... ..0. .... = Urgent: Not set
    .... ...1 .... = Acknowledgment: Set
    .... .... 0... = Push: Not set
    .... .... .0.. = Reset: Not set
    .... .... ..0. = Syn: Not set
    .... .... ...0 = Fin: Not set

标志位里面只有确认位置位,也就是在做再次确认(ACK)。

一个完整的三次握手过程就是请求–>应答–>再次确认

连接过程状态图:
这里写图片描述

参考

TRANSMISSION CONTROL PROTOCOL

《TCP/IP 详解 卷1:协议》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值