建立连接后,两台主机就可以相互传输数据了。如下图所示:


图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数据的传输过程相关推荐

  1. 高中计算机教师资格证面试怎么准备什么,高中信息技术教师资格证面试真题:数据的传输过程...

    高中信息技术教师资格面试的题型和其他学科有些许区别,对专业知识的把控比较严格.学霸君准备了高中信息技术教师资格面试真题:数据的传输过程,希望考生在学习中成长.进步. 此题目为2019下半年高中信息技术 ...

  2. 计算机内部信号表现形式,信号是数据在传输过程中的什么的表现形式

    信号是数据在传输过程中的电信号的表现形式.如电信号可以通过幅度.频率.相位的变化来表示不同的消息.这种电信号有模拟信号和数字信号两类.信号是运载消息的工具,是消息的载体. 从广义上讲,它包含光信号.声 ...

  3. wireshark抓包分析TCP数据包

    1.直接从TCP的三次握手开始说起 三次握手就是客户与服务器建立连接的过程 客户向服务器发送SYN(SEQ=x)报文,然后就会进入SYN_SEND状态 服务器收到SYN报文之后,回应一个SYN(SEQ ...

  4. 网络TCp数据的传输设计(黏包处理)

    //1.该片为引用别人的文章:http://www.cnblogs.com/alon/archive/2009/04/16/1437599.html 解决TCP网络传输"粘包"问题 ...

  5. 如何保证数据在传输过程中的安全

    数据加密被公认为是保护数据传输安全惟一实用的方法和保护存储数据安全的有效方法,它是数据保护在技术上最重要的防线. 数据加密技术是最基本的安全技术,被誉为信息安全的核心,最初主要用于保证数据在存储和传输 ...

  6. Wireshark捕获分析TCP数据包三次握手

    微信公众号: 1.操作步骤 (1)打开wireshark,开始捕获界面 (2)打开一个网址(如:csdn) (3)对捕获的数据包进行分析 第一个包的作用是第一握手,发送连接请求:第二个包的作用是第二次 ...

  7. wireshark分析TCP数据包

    TCP/IP协议不清楚请回看TCP/IP协议理论 在虚拟机运行ubuntu,通过windows下的cuteftp连接ubuntu,利用wireshark进行抓包分析.出现如下数据帧(注意wiresha ...

  8. OSI七层模型及TCP/IP四层模型详细分析

    在计算机网络中有OSI七层模型及TCP/IP四层模型的说法,而且也是计算机很重要的知识.下面我们就来分析一下它们: OSI七层模型及TCP/IP四层模型的对比: 从上面两张图我们知道,每层之间是相互独 ...

  9. MOSFET导通、关断过程详细分析、损耗分析、米勒效应、datasheet解释

    一,MOSFET导通.关断过程详细分析(转)详见下 MOSFET导通.关断过程详细分析(转) - 知乎 二,弄懂mosfet的导通过程和损耗分析  详见下 弄懂MOS管的导通过程和损耗分析 三.MOS ...

最新文章

  1. emWin GUIBuilder V5.40a 无法保存文件问题解决方案
  2. 2017程序员该为自己制定的12个小目标
  3. ie 报错 vuex requires a Promise polyfill in this browser
  4. 魔术笔反选_魔术二传手反图案
  5. web前端模块化开发_真正的模块化Web应用程序:为什么没有开发标准?
  6. 币氪共识指数排行榜0910
  7. Kafka集群安装Version1.0.1(自带Zookeeper)
  8. python五子棋代码tkinter_python使用tkinter开发一款五子棋游戏
  9. 在java编程中会使用汉字字符_在java程序中将中文字符写入文件中或者是将文件中的中文字符读入程序时会出现乱码或者一串“?”,求...
  10. spring cloud微服务分布式云架构-整合企业架构的技术点
  11. webservice 参数为xml_CXF-web service之集大成者,想要学好web service,必须会
  12. scrollLeft/scrollTop,offsetLeft/offsetTop,clientLeft/clientTop
  13. wps计算机打印双面输出,WPS轻松办公—-文档双面打印的两种方法
  14. 关于一百天计划的设想(信任的速度读后感)
  15. PHP使用FPDF的多字体解决
  16. django项目启动加载训练的模型报错OSError: Unable to open file (unable to open file: name = ‘model/model_weigh完美解决
  17. 基于单片机的CO2温湿度电路设计(#0217)
  18. python吃显卡还是内存不足_解决Pytorch 训练与测试时爆显存(out of memory)的问题
  19. (1)Terminal 终端终结者——安装和使用快捷键
  20. 自动投票系统【四】C# 清除Cookies

热门文章

  1. thinkphp memcache mysql_thinkphp中memcache的用法实例
  2. python怎么反转单链表_单链表反转python实现代码示例
  3. EJS学习(三)之语法规则中
  4. laravel框架图片上传
  5. Exynos4412裸机开发 —— 看门狗定时器
  6. Python 3.x 格式化输出字符串 % format 笔记
  7. 微信扫码支付官方配置(一)
  8. C. Present(二分 + 扫描线)
  9. domino导出数据至Excel
  10. head rush ajax chapter1 Ajax