当前位置: 首页 > news >正文

TCP是如何保证包的顺序传输

转自:http://blog.csdn.net/ggxxkkll/article/details/7894112


 大家都知道,TCP提供了最可靠的数据传输,它给发送的每个数据包做顺序化(这看起来非常烦琐),然而,如果TCP没有这样烦琐的操作,那么,可能会造成更多的麻烦。

如造成数据包的重传、顺序的颠倒甚至造成数据包的丢失。

 

那么,TCP具体是通过怎样的方式来保证数据的顺序化传输呢?

 

1. 主机每次发送数据时,TCP就给每个数据包分配一个序列号并且在一个特定的时间内等待接收主机对分配的这个序列号进行确认,

2. 如果发送主机在一个特定时间内没有收到接收主机的确认,则发送主机会重传此数据包。

3. 接收主机利用序列号对接收的数据进行确认,以便检测对方发送的数据是否有丢失或者乱序等,

4. 接收主机一旦收到已经顺序化的数据,它就将这些数据按正确的顺序重组成数据流并传递到高层进行处理。


具体步骤如下:

 

(1)为了保证数据包的可靠传递,发送方必须把已发送的数据包保留在缓冲区; 

(2)并为每个已发送的数据包启动一个超时定时器; 

(3)如在定时器超时之前收到了对方发来的应答信息(可能是对本包的应答,也可以是对本包后续包的应答),则释放该数据包占用的缓冲区; 

(4)否则,重传该数据包,直到收到应答或重传次数超过规定的最大次数为止。

(5)接收方收到数据包后,先进行CRC校验,如果正确则把数据交给上层协议,然后给发送方发送一个累计应答包,表明该数据已收到,如果接收方正好也有数据要发给发送方,应答包也可方在数据包中捎带过去。

相关文章:

  • .Net Remoting常用部署结构
  • 阿里巴巴王坚:数据的价值在于计算
  • mysql 删除单表内多个字段重复的数据
  • linux中分区挂载的解释
  • ubuntu下好用的音乐播放器audacious
  • pip install read time-out
  • 固定资产分类(仅供参考 2005年),
  • 字符串操作练习:星座、凯撒密码、99乘法表、词频统计预处理
  • activiti与spring集成
  • CSS 之怀疑自己的审美 2 (Day50)
  • 哥特式建筑安全系统
  • 未能找到文件“\bin\roslyn\csc.exe”
  • 「hadoop」log4j参考
  • TensorFlow Serving 1.0的技术细节在Google I/O大会上公布
  • C语言经典算法100例
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • 2017 前端面试准备 - 收藏集 - 掘金
  • bootstrap创建登录注册页面
  • Docker入门(二) - Dockerfile
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • nodejs调试方法
  • pdf文件如何在线转换为jpg图片
  • Redux 中间件分析
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • tab.js分享及浏览器兼容性问题汇总
  • ViewService——一种保证客户端与服务端同步的方法
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 从零搭建Koa2 Server
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 前嗅ForeSpider教程:创建模板
  • 数组的操作
  • 一些关于Rust在2019年的思考
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • #pragam once 和 #ifndef 预编译头
  • (C++17) optional的使用
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (十一)手动添加用户和文件的特殊权限
  • (算法)Travel Information Center
  • (未解决)macOS matplotlib 中文是方框
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转)编辑寄语:因为爱心,所以美丽
  • (转载)PyTorch代码规范最佳实践和样式指南
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .NET DataGridView数据绑定说明
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • .net解析传过来的xml_DOM4J解析XML文件
  • .NET框架
  • /usr/bin/python: can't decompress data; zlib not available 的异常处理
  • ?
  • @Transactional 详解
  • [2016.7.Test1] T1 三进制异或