TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。在TCP/IP协议族中,TCP负责在两个网络节点之间建立、管理和终止连接。为了确保数据的正确性和连接的可靠性,TCP使用“三次握手”来建立连接,以及“四次挥手”来终止连接。
三次握手(建立连接)
1. 第一次握手(SYN):
客户端发送一个SYN(同步序列编号)标志的TCP段到服务器,以便开始一个新的连接。
这个段中包含客户端的初始序列号(ISN),用来标识客户端发送的数据包。
2. 第二次握手(SYN-ACK):
服务器接收到客户端的SYN请求后,需要确认客户端的SYN,同时自己也发送一个SYN请求。
服务器将确认应答(ACK)和同步请求(SYN)包含在同一个TCP段中,并将该段发送给客户端。
- 这个段中同样包含服务器的初始序列号。
3. 第三次握手(ACK):
客户端收到服务器的SYN-ACK响应后,发送一个确认包(ACK)作为应答。
这个ACK包的确认序号是服务器的初始序列号加1。
一旦服务器收到这个ACK包,就完成了三次握手,TCP连接建立成功,双方可以开始数据传输。
四次挥手(终止连接)
1. 第一次挥手(FIN):
- 当连接的一端完成数据传输后,它会发送一个FIN(结束)标志的TCP段,表示它已经没有数据要发送了。
- 这个FIN段包含发送端的序列号。
2. **第二次挥手(ACK)**:
另一端接收到FIN请求后,发送一个ACK段作为应答,确认序号为收到序号加1。
接收到FIN意味着这一方向上的数据传输已经完成。
3. 第三次挥手(FIN):
- 接收到第一次FIN的端准备好关闭连接时,也发送一个FIN段给对方。
- 此时,这个方向上的数据传输也完成了。
4. 第四次挥手(ACK):
第一次发送FIN的端收到对方的FIN后,发送一个ACK段作为应答,确认序号为收到序号加1。
这个ACK段发送完毕后,等待足够长的时间(2倍的最大段生命周期MSL),确保对方收到了ACK段,然后关闭连接。
通俗来讲通俗来讲三次握手就像开飞机是,飞行员向管制中心报告情况,飞行员,要先向管制中心呼叫并报出自己的编号,然后确认收到呼叫并请对方回答,然后对方开始回答的一个过程。然后4次断开,就像飞机将要降落,机长向地面说明自己将要降落,然后界面收到对方想要降落的需求,然后准备好停机场,给对方说可以降落,然后飞机降落的一个过程。
通过这样的三次握手和四次挥手过程,TCP协议能够确保网络中数据的可靠传输和连接的有序释放。