TCP连接结束需要四次握手的一种理解
简单理解就是,TCP连接是双向的,一个连接的关闭可以理解为两个单向连接的关闭。
那么一个A到B的单向连接的关闭需要几次来回呢?
典型做法是三次。
1.A发FIN到B(告知B自己话说完了)
2.B回ACK到A(告知A自己收到了)
3.A发ACK到B(告知B收到2了)
另一个办法是用超时代替第三次通信:通过前两步,已经说明AB间双向通畅,第二步B发送信息后,B等待一段时间,若未收到A的信息,就认为A收到了(没有绝对的可靠,只是通过1认为A->B的通路是ok的),这里就需要和A约定好,如果A在1MSL后没有收到,则告知B没收到,这样B等待2MSL就够了。
进一步的,关闭一个双向连接需要几次呢?
我们看一下图,STEP1/2容易理解,完成A->B的单向传输关闭,STEP3是试图关闭B->A的单向传输,STEP4是A确认收到并等待一段时间避免B未收到。这里的判断机制是,B完成STEP3后,一段时间内未收到STEP4中A的反馈,则会重发STEP3
实质是关闭两个单向连接,每次关闭需要三次,但是第三次可以用超时来做。此外,
STEP1.A->B: A request close TRANS(A->B)
STEP2.B->A: B acknowledge A's request and comfirm close TRANS(A->B)
STEP3.B->A: B request close TRANS(B->A)
STEP3.A->B: A acknowledge B's request and confirm close TRANS(B->A)