TCP为什么三次握手又为什么四次挥手

结论

为了实现可靠的数据传输,TCP协议的通信双方,都必须维护一个序列号,以标识发送出去数据包,有哪些已经被对方收到。三次握手的过程就是双方相互告知序列号的起始值,并确认对方已经收到起始值的必经步骤。
如果只有两次,至多只有连接发起方的起始序列号能被确认,另一方的序列号起始值不能被确认。

为什么TCP需要握手

  • 为什么TCP需要握手,能不能不握手?

对比UDP和TCP通信流程,可以发现,在UCP协议中,是没有握手这个操作的。这就引起TCP和UDP的一个基本区别。

  • TCP是可靠通信协议:接收方收到的数据是完整、有序、无差错的。
  • UDP不可靠传输:接收方收到的数据可能存在丢失,顺序也不一定能保证。
    为什么TCP能实现可靠传输,UDP不能?
    TCP为了实现可靠传输,通信双方需要判断自己已经发送的数据包能否被接收方收到,如果没有收到,就需要重发。为了实现这个需求,很自然的引出序号(SYN)建立连接确认号ACK
    TCP数据包结构图

为什么是三次握手

为了实现可靠传输,发送方和接收方始终需要同步SYN序号,注意的是, 序号并不是从 0 开始的, 而是由发送方随机选择的初始序列号 ( Initial Sequence Number, ISN )开始 , 由于 TCP 是一个双向通信协议, 通信双方都有能力发送信息, 并接收响应。 因此, 通信双方都需要随机产生一个初始的序列号, 并且把这个起始值告诉对方
在这里插入图片描述

为什么是四次挥手?

因为TCP通信是全双工通信。
要实现可靠的连接关闭
A发请求断开,发送结束报文FIN
B确认A的断开。但是此时A还可以接收数据,B还可以发送数据。B此时不会立即关闭socket,先回复一个ack告诉A我接收到了FIN,等到全部报文发送完了,我再发送FINB请求断开。
A确认B断开。真正的断开连接。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章