一个完整的TCP通讯流程
2017-12-26 12:37
246 查看
通常一个完整的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确认,否则对方会超时重传。
4000
下面以在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确认,否则对方会超时重传。
4000
相关文章推荐
- 一个完整的TCP通讯流程(转)
- tcp通讯_一个服务器可以给多个客户端发送图片
- 公司一个完整的android项目流程大致如下
- ORALCE一个事物的完整分析流程
- Verilog学习笔记11:一个完整的工作流程
- TCP协议通讯流程
- [置顶] 【R语言可视化ggplot2入门教程1】一个完整的绘图流程
- 最近做个JSP网上订餐网站的一个完整流程以及总结
- oracle一个事务的完整流程分析
- 一个完整的软件研发流程是怎样的
- 一个oracle事务的完整执行流程
- 终于完整的走完了一个流程
- 设计一个完整程序的流程
- libgdx一个完整的处理流程
- 自定义一个TopBar(完整流程)
- BAT面试题精选 | 一个完整机器学习项目的流程(视频)
- 一个完整的交互设计流程是这样的
- 怎样写一个获取数据函数:用TCP/IP通讯,向服务端发送命令,并从服务端获得返回数据.
- 一个oracle事务的完整执行流程
- 一个完整的软件项目开发流程