sequenceDiagram
participant C as Client
participant S as Server
C->>S: relative_seq=0, raw_seq=n1
S->>C: relative_seq=0, raw_seq=n2, relative_ack=1, raw_ack=n1+1
C->>S: relative_seq=1, raw_seq=raw_ack, relative_ack=1, raw_ack=n2+1
在浏览器内发起网址请求,不考虑网络层通信细节,只对于 TCP 进行三次握手建立链接的过程,抓包具体分析如下
seq与ack均分为relative和raw,即相对值与实际值。
第一次握手
1 | Transmission Control Protocol, Src Port: 55879, Dst Port: 80, Seq: 0, Len: 0 |
客户端请求,相对seq值为 0,实际为 3271402248。ack 值为 0
Flags中设置 Syn。
第二次握手
1 | Transmission Control Protocol, Src Port: 80, Dst Port: 55879, Seq: 0, Ack: 1, Len: 0 |
服务端应答,ack值为上一步的seq值+1,所以相对ack值为 0+1=1,ack值为3271402248+1=3271402249。相对seq值为 0,实际seq值为 2899824743。
Flags中设置 Syn和Acknowledgment。
第三次握手
1 | Transmission Control Protocol, Src Port: 55879, Dst Port: 80, Seq: 1, Ack: 1, Len: 0 |
客户端应答,相对seq值为 1,实际seq值为上一步服务端响应的实际ack值,相对ack值为 1,实际ack值为上一步服务端响应的实际seq值+1。
Flags中设置 Syn和Acknowledgment。
至此,TCP链接建立完毕。