前言
最近有粉丝私信说,计算机网络中的三次握手和四次挥手好难,怎么都搞不懂,面试频率还很高。真的有这么难吗?小A也是查漏补缺,今天带大家一起来盘一下这个神奇的TCP连接。
TCP连接和断开
TCP传输控制协议是面向连接的可靠的传输层协议,在进行数据传输之前,需要在传输数据的两端(客户端和服务器端)创建一个连接,这个连接由一对插口地址唯一标识,即是在IP报文首部的源IP地址、目的IP地址,以及TCP数据报首部的源端口地址和目的端口地址。TCP首部结构如下
通常情况下,一个正常的TCP连接,都会有三个阶段:
-
TCP三次握手;
-
数据传送;
-
TCP四次挥手
其中在TCP连接和断开连接过程中的关键部分如下:
-
源端口号:即发送方的端口号,在TCP连接过程中,对于客户端,端口号往往由内核分配,无需进程指定;
-
目的端口号:即发送目的的端口号;
-
序号:即为发送的数据段首个字节的序号;
-
确认号:在收到对方发来的数据报,发送确认时期待对方下一次发送的数据序号;
-
SYN:同步序列编号,Synchronize Sequence Numbers;
-
ACK:确认编号,Acknowledgement Number;
-
FIN:结束标志,FINish
抓包分析
- 打开tcpdump
sudo tcpdump -n -S -i en0 host www.baidu.com
- 另起一个终端
curl http://www.baidu.com
- 输出如下
### 三次握手开始
18:43:14.096580 IP 192.168.1.102.54637 > 39.156.66.18.80: Flags [S], seq 2648989976, win 65535, options [mss 146