一个完整的TCP通讯流程(转)

这次,我们在实验环境中,通过一个完整的TCP从三次握手建立连接,互相各发送一个数据报,然后通过四次握手断开连接的流程,来看看一般的TCP网络通讯 是怎么一个样子的。我们还是在172.16.48.13(以下简称13)上建立一个TCP客户端进程,连接172.16.48.1(以下简称1)的 5002端口。然后向1发送一个数据报,1收到后,向13也发送一个数据,然后13发送FIN主动断开连接。1也随后发送它的FIN,完成断开连接,这整 个过程,总共有11个数据报,其中三次握手3个,数据通讯4个,断开连接4个。下面我们列出这11个数据报的主要内容,为简洁起见,略去如源和目的端口等 一些非关键信息。
                    序号            确认序号            标志            数据
三次握手建立连接:
13发送SYN:          0x000007bc(0)   0x00000000(0)       SYN             无
1发送ACK,
并同时发送SYN:      0xab2b9dc7(0)   0x000007bd(1)       SYN ACK         无
13发送ACK:         0x000007bd(1)   0xab2b9dc8(1)       ACK             无
数据收发:
13发送数据报:      0x000007bd(1)   0xab2b9dc8(1)       PSH ACK         21字节负载数据
1发送ACK:          0xab2b9dc8(1)   0x000007d2(22)      ACK             无
1发送数据报:       0xab2b9dc8(1)   0x000007d2(22)      PSH ACK         34字节负载数据
13发送ACK:         0x000007d2(22)  0xab2b9dea(35)      ACK             无
四次握手断开连接:
13发送FIN:         0x000007d2(22)  0xab2b9dea(35)      FIN ACK         无
1发送ACK:          0xab2b9dea(35)  0x000007d3(23)      ACK             无
1发送FIN:          0xab2b9dea(35)  0x000007d3(23)      FIN ACK         无
13发送ACK:         0x000007d3(23)  0xab2b9deb(36)      ACK             无
    表中序号后面的括号中是十进制的相对序号,从零开始。三次握手完成,两端因为各发送一个SYN而各占用一个序号,数据收发阶段,13发送一个21字节的数 据报,占用21个序号,1发送一个34字节的数据报而占用34个序号,断开连接阶段,两端因为各发送一个FIN而各占用一个序号。所以,最后,13共占用 1+21+1=23个序号(0-22),而1共占用1+34+1=36个序号(0-35)。
    从表中可以看到,如果一端发送一个数据报后,不需要对端回应,紧接着发送第二个数据报,则这两个数据报实际上会ACK对端的同一个数据报,表中,13的第 一个ACK和(PSH ACK),都应答了1的(ACK,SYN)。在数据通讯阶段,TCP协议对收到的每一个数据报都要进行ACK确认,否则对方会超时重传。

posted @ 2009-06-09 11:25  alex_lin  阅读(972)  评论(0编辑  收藏  举报