YBFACC / blog

仅记录个人学习使用
3 stars 0 forks source link

tcp的学习 #41

Open YBFACC opened 3 years ago

YBFACC commented 3 years ago

tcp的学习

在本地或者服务器上使用node创建http服务器,在本地发起请求并使用wireshark来进行抓包分析。

tcp报文首部格式

以下两幅中、英文图对比观看,对抓到的数据可以轻松理解。

1

2

以下是使用wireshark抓包一次连接。

12-11-1

Seq、Ack这些值不是从0开始,实际上是由算法产生的。只是软件为了更加直观帮我们从0算起。

Flags

全部的Flags标示:

这些标示是由8个位来控制的。Flags代表这个tcp包的作用。

4

3次握手

5

客户端第1次发送请求时,seq根据自身算法得到。SYN表示请求连接

服务端第1次发送请求时,seq根据自身算法得到,ack=客户端seq+1。SYN表示接受请求,ACK表示确认号有效。

客户端第2次发送请求时,seq=服务端ack,ack=服务端seq+1。ACK表示确认号有效。

PS:虽然2个seq都显示为0,但是其真实值并不相同。

5-1

5-2

4次挥手🙋‍♂️

6

a端第1次,传输结束,要求释放连接。ACK表示确认号有效。FIN表示数据传送完毕,要求释放连接。

b端第1次,数据进行传输。ACK表示确认号有效。

b第2次,传输结束,已准备断开。ACK表示确认号有效。FIN数据传送完毕,要求释放连接。

a第2次,确认断开。ACK表示确认号有效。

7

PS:抓包时发现:首先发送FIN的不一定是客户端,服务端也可以。

3次挥手

10

假设客户端发起FIN。服务端也没有数据需要传输,服务端可以直接返回FIN,将2次回复变成1次。

参考

实战!我用 Wireshark 让你“看见“ TCP

wireshark分析TCP连接和关闭

图1、5、6 来自《第5 版计算机网络原理》课件

图2 https://www.cnblogs.com/lshs/p/6038458.html