TCP数据的编号与确认
来源:互联网 发布:交响乐 知乎 编辑:程序博客网 时间:2024/05/23 00:08
转载自
TCP所传输的数据的编号不是以报文段来进行编号的,而是将整个传输数据分成单个的字节流,并将每个字节流进行编号。一个TCP数据包中包括多个字节流的数据,而且每个TCP数据报中的数据大小并不一样。在建立TCP连接的三次握手过程中,通信双方各自已确定了初始的序号x和y,TCP每次传送的报文段中的序号字段值表示所要传送本报文中的第一个字节的序号。
TCP的确认是对接收到的数据的最高序号的确认,并向发送端返回一个下次期望收到的第一个数据字节的序号。例如,主机A发送的当前数据序号是400,数据长度是100,则接收端收到后会返回一个确认号是501的确认号给主机A。TCP提供的确认机制,可以在通信过程中可以不对每一个TCP数据包发出单独的确认包,而是在传送数据时,顺便把确认信息传出,这样可以大大提高网络的利用率和传输效率。同时,TCP的确认机制,也可以一次确认多个数据报,例如,接收方收到了201,301,401的数据报,则只需要对401的数据包进行确认即可,对401的数据包的确认也意味着401之前的所有数据包都已经确认,这样也可以提高系统的效率。
若发送方在规定时间内没有收到接收方的确认信息,就要将未被确认的数据包重新发送。接收方如果收到一个有差错的报文,则丢弃此报文,并不向发送方发送确认信息。因此,TCP报文的重传机制是由设置的超时定时器来决定的,在定时的时间内没有收到确认信息,则进行重传。这个定时的时间值的设定比较重要,太大会使包重传的延时比较大,太小则可能没有来得及收到对方的确认包发送方就再次重传,会使网络陷入无休止的重传过程中。
接收方如果收到了重复的报文,将会丢弃重复的报文,但是必须发回确认信息,否则对方会再次发送。
TCP协议应当保证数据报按序到达接收方。如果接收方收到的数据报文没有错误,只是未按序号,这种现象如何处理呢?TCP协议本身没有规定,而是由TCP协议的实现者自己去确定。有两种方法进行处理:一是对没有按序号到达的报文直接丢弃,二是将未按序号到达的数据包先放于缓冲区内,等待它前面的序号包到达后,再将它交给应用进程。后一种方法将会提高系统的效率。例如,发送方连续发送了每个报文中100个字节的TCP数据报,其序号分别是1,101,201,…,701。假如其它7个数据报都收到了,而201这个数据报没有收到,则接收端应当对1和101这两个数据报进行确认,并将数据递交给相关的应用进程,301至701这5个数据报则应当放于缓冲区,等到201这个数据报到达后,然后按序将201至701这些数据报递交给相关应用进程,并对701数据报进行确认,确保了应用进程级的TCP数据的按序到达。
0 0
- TCP数据的编号与确认
- TCP的序列号与确认号实例
- Linux下的TCP延迟确认机制与TCP_NODELAY TCP_CORK
- TCP传输中序号与确认序号的交互
- TCP重传与确认机制
- TCP的ACK确认系列 — 快速确认
- TCP的ACK确认系列 — 延迟确认
- TCP的ACK确认系列 — 延迟确认
- TCP的ACK确认系列 — 快速确认
- TCP的ACK确认系列 — 快速确认
- TCP的ACK确认系列 — 延迟确认
- TCP的SACK选择确认选项
- TCP零窗口更新与超时重传联合优化的packetdrill确认
- TCP协议滑动窗口与确认重传机制?
- 20060703个人日志(sister的毕业证编号与学位证编号)
- asp.net 确认对话框与数据验证控件的冲突问题
- TCP延迟确认
- TCP延迟确认定时器
- MySql权限
- 弹出可以拖动的框
- Ubuntu进入根用户命令
- Robotium 进阶
- achieve aop through xml
- TCP数据的编号与确认
- 字符串-01. 在字符串中查找指定字符(15)
- 函数指针做参数
- 多线程socket编程--聊天程序
- 数据结构与算法[LeetCode]4Sum
- Linux下共享库的隐式和显式链接
- 神奇的C语言二十二:善用格式串format进行字符串处理
- _tmain()和main()的区别
- 黑马程序员-数组,ArrayList,List的区别