Tcp状态机
1、为什么建立连接需要三次握手,断开连接需要四次握手?
举例来说,C与S要可靠的沟通,沟通之前要又准备工作,沟通完了,要有清理工作。
沟通之前的准备工作
C:我要跟你说话,你注意听(SYN)
S:好的(ACK),我也要跟你说话,你注意听(SYN)
C:好的(ACK)
........
交流过程中
.......
沟通完了的清理工作
C:我说完了(FIN)
S:我知道了(ACK)
S 再说一些......
S:我说完了(FIN)
C:我知道了(ACK)
tcp是全双工的, 建立连接,ACK的同时可以SYN,而断开连接,往往不满足条件,C说完了,S可能还要再说一会。
2、为什么,TIME_WAIT要经过2个MSL(Maximum Segment Lifetime),才进入CLOSED?
考虑下面的情况,C回了ACK立即进入CLOSED,假如S没有收到ACK,站在S的角度,S认为:C还不知道我已经说完了,我要再说一遍。但是这个时候C已经CLOSED,怎么解决这个问题?
站在C的角度考虑,如果我回了ACK,S没有收到,那么S会重发FIN,从C回ACK,到C再次收到S的FIN,最多需要两个报文段周期。如果在两个报文段周期没有收到FIN,则说明,S肯定收到了我了ACK,进入CLOSED