TCP数据的传输过程

原创 2016年06月02日 08:01:14
建立连接后,两台主机就可以相互传输数据了。如下图所示:

图1:TCP 套接字的数据交换过程

上图给出了主机A分2次(分2个数据包)向主机B传递200字节的过程。首先,主机A通过1个数据包发送100个字节的数据,数据包的 Seq 号设置为 1200。主机B为了确认这一点,向主机A发送 ACK 包,并将 Ack 号设置为 1301。
为了保证数据准确到达,目标机器在收到数据包(包括SYN包、FIN包、普通数据包等)包后必须立即回传ACK包,这样发送方才能确认数据传输成功。
此时 Ack 号为 1301 而不是 1201,原因在于 Ack 号的增量为传输的数据字节数。假设每次 Ack 号不加传输的字节数,这样虽然可以确认数据包的传输,但无法明确100字节全部正确传递还是丢失了一部分,比如只传递了80字节。因此按如下的公式确认 Ack 号:

Ack号 = Seq号 + 传递的字节数 + 1

与三次握手协议相同,最后加 1 是为了告诉对方要传递的 Seq 号。

下面分析传输过程中数据包丢失的情况,如下图所示:

图2:TCP套接字数据传输过程中发生错误

上图表示通过 Seq 1301 数据包向主机B传递100字节的数据,但中间发生了错误,主机B未收到。经过一段时间后,主机A仍未收到对于 Seq 1301 的ACK确认,因此尝试重传数据。

为了完成数据包的重传,TCP套接字每次发送数据包时都会启动定时器,如果在一定时间内没有收到目标机器传回的 ACK 包,那么定时器超时,数据包会重传。
上图演示的是数据包丢失的情况,也会有 ACK 包丢失的情况,一样会重传。

重传超时时间(RTO, Retransmission Time Out)

这个值太大了会导致不必要的等待,太小会导致不必要的重传,理论上最好是网络 RTT 时间,但又受制于网络距离与瞬态时延变化,所以实际上使用自适应的动态算法(例如 Jacobson 算法和 Karn 算法等)来确定超时时间。
往返时间(RTT,Round-Trip Time)表示从发送端发送数据开始,到发送端收到来自接收端的 ACK 确认包(接收端收到数据后便立即确认),总共经历的时延。

重传次数

TCP数据包重传次数根据系统设置的不同而有所区别。有些系统,一个数据包只会被重传3次,如果重传3次后还未收到该数据包的 ACK 确认,就不再尝试重传。但有些要求很高的业务系统,会不断地重传丢失的数据包,以尽最大可能保证业务数据的正常交互。

最后需要说明的是,发送端只有在收到对方的 ACK 确认包后,才会清空输出缓冲区中的数据。
版权声明:本文为芝麻软件工作室原创文章,未经芝麻软件工作室允许不得转载。

相关文章推荐

TCP建立连接、传输数据、关闭连接的流程

TCP建立连接传输数据关闭连接的流程 TCP连接的建立 TCP数据的传输 TCP连接的关闭 举个例子TCP建立连接、传输数据、关闭连接的流程 TCP协议工作在OSI的传输层,是一种可靠的面向连接的数据...
  • lan_cyl
  • lan_cyl
  • 2016年04月18日 22:21
  • 2609

传输层学习之三(TCP数据传输)

TCP提供了可靠的传输服务,这是通过下列方式提供的: 应用数据被分割成TCP认为最适合发送的数据块。由TCP传递给IP的信息单位称为报文段或段(segment)当TCP发出一个段后,它启动一个定时器...

访问Web,tcp传输全过程(三次握手、请求、数据传输、四次挥手)

从输入域名到最后呈现经历的过程: 域名解析 --> 发起TCP的3次握手 --> 建立TCP连接后发起http请求 --> 服务器响应http请求,浏览器得到html代码 --> 浏览器解析html...

tcp传送数据包过程学习笔记

例如,pc1向pc2发送数据,该数据为5000字节,该数据到达传输层,使用tcp传输会给每个字节加一个序列号,序列号是从0~2的32次方之间随机产生的。比如该报文的第一个字节的序列号为x,第二个字节的...

tcp简单传输过程分析

简单的做一下tcp传输的过程分析(linux下),以加深自己的记忆,如有不足之处,希望各位道友能够指出,谢谢!...

高速抓包平台过滤功能分析

1.通过分析PF_RING源代码分析bpf filter过滤的实现 2.引用hyperscan正则表达式分析引擎.int pfring_set_bpf_filter(pfring *ring, ch...

网络设备开军火发库(libnet,libpcap,pfring,dpdk)

1缘起 实际工作中开发网络设备时,常用到的一些开源网络库,做一些底层的包的捕获、发送、修改等。下面简单介绍一下有哪些开源工具,以及相应的简单用法。 有一些特殊的数据包要做特殊处理,如vlan环境下...

利用TCP/IP参考模型分析数据传输过程

本文转自:http://blog.sina.com.cn/s/blog_5ec353710101i892.html TCP/IP参考模型是一个非常基础,而且也非常重要的基础框架,要想...

Socket TCP/IP协议数据传输过程中的粘包和分包问题

1.通过图解法来描述一下分包和粘包,这样客户更清晰直观的了解: 下面对上面的图进行解释: 1.正常情况:如果Socket Client 发送的数据包,在Socket Server端也是一个一个...

关于TCP/UDP数据传输过程

关于TCP输出:      每个TCP套接口有一个发送缓冲区,当应用程序调用write时,内核将应用程序的缓冲区的数据拷贝到TCP的发送缓冲区,(如果write成功返回,仅仅表示应用程序的缓冲区已经...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:TCP数据的传输过程
举报原因:
原因补充:

(最多只允许输入30个字)