利用Wireshark学习tcpip握手和挥手

42次阅读

共计 979 个字符,预计需要花费 3 分钟才能阅读完成。

利用 wireshark 学习 http 之——tcp 三次握手合四次挥手

早上起床后,离上班还有段时间,下载了 Wireshark 玩玩。
随机选取了一个 http,然后右键 follow tcp stream,此时界面上就会被自动筛选为该 http 上下文的报文。

如图所示,
no.130 172.20.10:57019 向 183.192.195.147:80 发送了一个 Syn tcp 包,该包 tcp 头部有额外的 24 字节的 option 信息,其中一个 tcp option 表示了 maximum segment size(MSS)为 1460 bytes,告诉对方我单个 tcp 包最多可传输 1460bytes。
列表上的 length 表示链路层上的数据长度,我们可以算一下
tcp 包内容长度 0 + tcp 头部 20+24 + ip 头部 20 + 链路层头部 14 = 78
后续 no.131 和 no.132 是第二次和第三次握手,网上有很多文章这里就不展开讲了。我们可以看到三次握手之后,172.20.10:57019 发送的数据包的长度都是 1400,满足了 183.192.195.147:80 的要求。

我们选中 no.136,如下图

所以该 http 请求总共用了 4 个 tcp 报文,最后一个的 tcp 报文长度只有 94,总共 4294

再看 no.137-no.140,每一项 ack 都对应了请求的数据,回复“我正常收到了数据”。
No.141 是 no.136 的 http 请求的响应。

最后看挥手,发现了有个 tcp out-of-order 的情况,这个是因为 tcp 的包乱序接收了,所以这里的顺序有问题。我再抓了一个例子

看最后 4 个包
这里的挥手就正常了
B:我这边没有东西发送了
A:好的,我收到你的通知了,我可能还需要给你发送
A:我这边发送完毕了
B:我收到你的关闭通知了

我们发现在关闭该连接之前,49.120 向 32.119 发送了 tcp keep-alive 的保活包,保活包里网络层包总长度是 40(头部 20),在传输层里头部占 20,也就是该 tcp 包没有负载任何内容。

在 wireshark 里,发现了这个,wireshark 帮我们分析了该包是 tcp keep-alive 的包,那么 wireshark 是这么知道的呢?
我们可以看到 No.2320,seq 是 4153,再看 No.1076 的 ack 是 4154,也就是说明了保活包的 seq 是对方 ack – 1。其实就是该包没有任何的负载内容,所以 seq 并没有增加。

正文完
 0