最近又在看TCP三次握手和四次揮手了,真的是每次看都會有新的體會啊。
通訊的動作
TCP三次握手和四次揮手看似復雜,其實想明白了也很好理解。TCP的目的是端對端建立可靠的通訊連接,什么是通訊?通訊就是要建立通訊雙方的信息發(fā)送和接收的渠道。這里可以忽略信息主體這個東西,那么剩下的動作就是發(fā)送和接收。
TCP三次握手
對于雙方建立連接,如何確保可靠的通訊?那就要通訊雙方或者說通訊主體來說,要確保自己的數(shù)據(jù)發(fā)送和接收兩個功能沒有問題。由于TCP連接涉及通訊雙方,所以要確保雙方數(shù)據(jù)收發(fā)都沒有問題。
如下圖所示證明:
- 第一個箭頭處,接收方收到發(fā)送方發(fā)送的syn信號,表明
接收方數(shù)據(jù)接收沒有問題。同時通過第二條線把收到的syn發(fā)送給發(fā)送方。 - 第二個箭頭處,發(fā)送方
收到接收方發(fā)送的syn信號(同時也是自己之前發(fā)送給接收方的syn信號),表明發(fā)送方數(shù)據(jù)接收和發(fā)送都沒有問題。同時將自己收到的ACK信號發(fā)送給接收方。 - 第三個箭頭處,接收方收到之前發(fā)送給發(fā)送方的ack信號,表明
接收方數(shù)據(jù)發(fā)送沒有問題。
綜上,三次握手確保了通訊雙方數(shù)據(jù)發(fā)送和接收都沒有問題。這樣也就保證了雙方建立了連接。
image.png
通過上圖觀察也可以這樣理解,發(fā)送方通過發(fā)送syn和接收自己發(fā)送的syn確保了自己的數(shù)據(jù)發(fā)送和接收功能正常;而接收方也通過發(fā)送ack和接收自己發(fā)送的ack來確保了自己的數(shù)據(jù)發(fā)送和接收功能正常。
同時,握手過程中接收方向發(fā)送方回傳syn和發(fā)送方向接收方回傳ack,也更進一步確保了兩者互相發(fā)送信息都無誤。即通訊的消息主體正確無誤。
TCP四次揮手
同理,通訊雙方要斷開連接,就要確保雙方數(shù)據(jù)發(fā)送和接收都完畢。
舉個例子:A 和 B 打電話,通話即將結束后,A 說“我沒啥要說的了”,B回答“我知道了”,但是 B 可能還會有要說的 話,A 不能要求 B 跟著自己的節(jié)奏結束通話,于是 B 可能又巴拉巴拉說了一通,最后 B 說“我說完了”,A 回答“知道 了”,這樣通話才算結束。

image.png
