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 

posted on 2015-03-07 21:13  Andy Niu  阅读(1774)  评论(0编辑  收藏  举报