文章目录:
前言
TCP协议的连接是面向连接,可靠传输,面向字节流的,而TCP之所以能保持可靠传输是因为三次握手和四次挥手
1. 三次握手
1.1 从数据包名称和连接双方状态分析三次握手
首先我们通过数据包名和连接双方的连接状态来了解三次握手的过程
如下图所示
客户端在发送SYN数据包后客户端的状态变为SYN_SENT,当服务端接收到客户端发送的SYN数据包后,服务端的状态变为SYN_RECV,当客户端接收到服务端的SYN数据包和ACK数据包后,客户端的状态变为ESTABLISHED,当服务端接收到客户端发送的ACK数据包时,服务端的状态变为ESTABLISHED,此时客户端和服务端已完成三次握手,即建立了双向连接。
【问题一】为什么要三次握手,而两次握手不行呢?
三次握手可以保证通信双方都是有连接的,若只进行两次连接服务端回复客户端的应答并发送SYN数据报,客户端不作出回应,并不能确保客户端接收到来自服务端的数据,因此两次握手只能保证客户端到服务端的连接是有效的,并不能保证服务端到客户端的连接有效
1.2 包序管理
1.2.1 抓网络数据包
- 在windows平台下,可以使用wireshark软件来抓取网络数据包
- 在linux平台下,使用 tcpdump 来抓取网络数据,TCP和UDP的包都可以使用此