网络协议 TCP 数字编号和重传机制


TCP 作为一种可靠的传输协议,在他的背后注定会有一套数据包的安全检查与重发确认,那么如何检查一包数据是否正确的被对方接收,这就需要为每个数据包,做标签,即数据编号,当发现数据包,丢失或者超时就会发起重传机制

1. TCP 的数字编号

作为一种确认机制的根本,编号起到了非常重要的作用。
TCP 数据端以字节为单位对数据段中的“数据”部分进行一一编号,确保每个字节的数据都可以有序传送和接收。

在前边我们介绍了tcp的数据包结构,并且介绍了序号和确认号,序号就是这里所说的数字编号,在数据包头中序号占32位,在tcp发起连接时起始序号是一个随机数,数据端头中的序号是这包数据的第一个字节的编号,假设起始数据数是 100(这里不考虑tcp 握手过程中消耗的编号),发送的数据包长度为100,那么该包的第一个数据字节的编号是101,那么序号就是101,那么最后一个字节的序号就是200.,假如对方成功收到数据,会收到对方的确认包(这里用到了数据段的确认机制,简单讲就是对方收到数据包后,要发送给数据的发送端一包确认数据,告诉发送方,你的数据包我收到了,确认号ack=发送方seq序号+ 数据包长度 即 201) 那么此时收到的的确认号就是201,那么发送下一包数据的序号就是201,而不是101.这就是tcp数字编号的的基本原理,后续的重传,超时重传,粘包,分包,都是依赖它来做操作的。

2. TCP 确认机制的特点

我们将数据包中每个字节进行编号,seq每包的序号就是该包第一个字节的序号,发送一包收据后会收到对方发送回来的ack 确认数据包这就是数据包的确认。

2.1 TCP一次可发送多个数据包

在实际中TCP可以不等接收到对方发送的确认数据段,就可一次连续性的发送多个数据端,这样可大大提高发送的效率,但是一次发送的多少数据段时受到对方返回窗口大小字段值和当前可用发送窗口大小双重限制的,因为发送端还要对没有收到确认的数据包进行缓存,这也会占用窗口大小。假设发送端和接收端窗口大小为2000字节,一包数据假设为100字节,那么,发送端可以一次性连续向发送端发送20包数据,假如这时有两包数据没有收到确认,且接受端返回的窗口大小为2000,那么现在发送端只能发送18包1800字节数据,因为还有两包没有收到确认,占用了200字节的窗口大小。
假设现在现在接收端返回的窗口大小为1000,发送端也收到了所有发送出去数据的确认包,那么发送端窗口大小为2000,这时只能发送1000字节十包数据到接收端,因为对端只有1000字节的窗口大小接收,所以说发送数据包数,是受到两端窗口大小的限制的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值