首先了解下TCP协议所在网络分层体系的位置
以TCP/IP参考模型为例,可以看到TCP是作用在传输层的
TCP的特点
(1)TCP提供的是面向连接、可靠的数据流服务,数据传输完毕会释放连接
(2)TCP提供的是端到端的通信,不支持多播和广播
(3)通过超时重传、滑动窗口等机制保证字节流数据传输的稳定性和正确性
TCP的“三次握手”
“三次握手”详细过程
(1)服务端的TCP进程开启,保持监听状态,等待TCP请求
(2)客户端发送TCP连接请求报文,报文的内容有SYN和序列号seq
(3)服务端接收到客户端的请求,返回一个请求确认报文,报文内容有SYN、ACK、seq、ack
(4)客户端接收到服务端的请求确认,知道服务端愿意接受连接,再发送一个确认报文,报文内容有ACK、seq、ack
(5)服务端收到客户端确认报文,成功建立连接通道。
“三次握手”为什么不能两次握手
考虑一种场景:
如果某次客户端的tcp请求在某个节点延迟了,触发了超时重传机制,当重传的请求与服务端成功建立了连接,那么当这个延迟的请求到达服务端时,服务端就会建立连接状态,但客户端却没有数据要发送了。所以第三次握手是必要的。
使用wireshark抓包分析三次握手
- 打开Wireshark,选择过滤器,并开始捕获
- 点开浏览器输入www.baidu.com,然后关闭捕获
- 输入条件过滤下不要的数据包
tcp and ip.addr==180.101.49.13
可以通过cmd查看百度域名
可以看到最上面这三个数据包分别是三次握手
点进第一个数据包可以看到报文的详细内容