TCPIP建立和数据传输过程

这次,我们在实验环境中,通过一个完整的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确认,否则对方会超时重传。

经验分享 程序员 微信小程序 职场和发展