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 确认包后,才会清空输出缓冲区中的数据。
版权声明:本文为芝麻软件工作室原创文章,未经芝麻软件工作室允许不得转载。

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

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

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

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

TCP发送数据流程详解

B/S通信简述 整个计算机网络的实现体现为协议的实现,TCP/IP协议是Internet的核心协议,HTTP协议是比TCP更高层次的应用层协议。 HTTP(HyperText Transfer Pro...
  • yusiguyuan
  • yusiguyuan
  • 2013年12月31日 10:18
  • 7548

tcp简单传输过程分析

简单的做一下tcp传输的过程分析(linux下),以加深自己的记忆,如有不足之处,希望各位道友能够指出,谢谢!...
  • u014627661
  • u014627661
  • 2016年03月14日 20:29
  • 853

IP数据包的传输全过程详解—数据是如何在tcp/ip各层封

我们知道现在的互联网中使用的TCP/IP协议是基于,OSI(开放系统互联)的七层参考模型的,(虽然不是完全符合)从上到下分别为 应用层 表示层 会话层 传输层 网络层 数据链路层和物理层。其中数据链路...
  • davidwma
  • davidwma
  • 2017年05月07日 23:18
  • 3208

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

本文转自:http://blog.sina.com.cn/s/blog_5ec353710101i892.html TCP/IP参考模型是一个非常基础,而且也非常重要的基础框架,要想...
  • langjian2012
  • langjian2012
  • 2015年04月09日 09:07
  • 1365

详解TCP和UDP数据包以及连接过程

TCP和UDP都输入TCP/IP协议族,是我们常用的两个协议,它们工作在网络层。下面我们来分别来详细讲解TCP和UDP这两个协议。TCP协议TCP是面向连接的,可靠的进程到进程通信的协议。TCP提供全...
  • u012953265
  • u012953265
  • 2014年07月30日 08:37
  • 911

Linux 系统应用编程——网络编程(利用TCP/IP 模型分析数据传输过程)

(转载自:http://blog.sina.com.cn/s/blog_5ec353710101i892.html)    TCP/IP参考模型是一个非常基础,而且也非常重要的基础框架,要想入...
  • zqixiao_09
  • zqixiao_09
  • 2016年01月16日 10:20
  • 1172

TCP/IP数据传输过程

当你把要传送的数据传递给TCP后,TCP把这些信息分成很多个数据包(这种数据包称为TCP分组),每一个分组都包含有一个序号。接着TCP分组被传递给IP层,IP层把这个TCP分组放在一个IP数据包的数据...
  • THISISPAN
  • THISISPAN
  • 2012年05月20日 16:32
  • 9585

数据传输过程详解

具体参见http://wenku.baidu.com/view/847cc0c689eb172ded63b752.html 一、FTP客户端发送数据到FTP服务器端,详述其工作过程。两台机器的连...
  • huxiaokang1234
  • huxiaokang1234
  • 2016年06月16日 18:50
  • 277
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:TCP数据的传输过程
举报原因:
原因补充:

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