TCP连接结束需要四次握手的一种理解

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)