可靠传输
1.面向连接
2.确认应答机制-发送数据后要求对方进行确认回复,才能知道对方是否收到了这条数据,通过序号与确认序号实现
3.超时重传机制:发送数据后等待确认响应超时之后,认为数据丢失,则进行重新传输!
4.通过序号/确认序号字段实现数据有序交付
5.通过校验和字段校验数据一致性,不一致则要求对方进行重传!
seq=0 ack=0 SYN=1
seq=0 ack=1 SYN=1 ACK=1
seq=1 ack=1 ACK=1
seq-本条数据的起始序号
ack-对对方上次数据的确认序号,在三次握手中,确认序号是对方发送的起始序号+1,在实际通中确认序号是对方发送的起始序号+数据长度-------用于对本条数据的确认
ack确认序号,在三次握手时:ack=发送数据的seq+1
ack确认序号,在数据通信时:ack=发送数据的seq+len
在数据通信时,ack确认序号的作用就是描述这个确认序号之前的数据接收方都已经收到了!
三次握手时,双方会协商起始序号例子中从0开始,实际中不一定,是一个随机值,三次握手中,虽然数据长度是0,但是确认序号是对方发送的数据起始序号+1
数据通信时,确认序号是对方发送的数据中的起始序号加上数据长度,告诉对方这个确认序号之前的数据都已经收到了
数据连续发送时,第一条数据丢失,接收方直接收到了第二条和第三条,接收方不会对第二条和第三条进行回复----因为确认序号确认的这个序号之前的数据都已经收到了
这么做的目的,防止应为确认回复的丢失而导致的重传
就算因为网络原因,后发的数据先到了,接收方也会根据协商的起始序号,根据每条数据中的起始序号。将数据在接收缓冲区中进行排序!
额外丢包问题的处理:
1.发送方发送数据过快,接收方来不及取出,接收缓冲区满溢,则以后的数据都会被丢弃
2.发送方发送大量数据,但是因为网络状态不好导致大量丢包造成重传
滑动窗口机制:依靠协议中的窗口大小字段实现流量控制!
接收缓冲区 发送缓冲区
接收方通过协议中的窗口大小字段,告诉发送方,最多可以发送多少数据(窗口大小不大于接收方的接收缓冲区剩余空间大小)
MSS:最大数据段大小,表示tcp数据通信时一条数据的大小,通信时,双方进行协商,取双方MSS中较小的一方作为最大数据段大小
滑动窗口在发送方维护发送窗口----窗口通过一个后沿序号/前沿序号实现
发送窗口:所要发送数据的起始序号,后沿的移动取决于是否收到数据确认回复
后沿:所要发送数据的起始序号,后沿的移动取决于是否收到数据的确认回复
前沿:根据接收方窗口大小计算结束序号,取决于接收方响应的窗口大小前沿减去后沿的大小就等于接收方的窗口的大小
接收窗口:表示从哪里开始接收数据,接收到多少序号为止-----不超过剩余空间大小。。。。哪个包应该放在缓冲区的什么位置
后沿:接收数据的起始序号
前沿:根据接收缓冲区剩余空间大小计算得到的接收的数据的结束序号,前沿的移动取决于缓冲区中剩余空间大小!
拥塞控制
因为网络状态不好,导致发送的数据越多丢包越多:拥塞控制
拥塞控制:进行网络探测,以一种慢启动,快增长的传输方式,进行根据网络状态调整发送速度的机制
停等协议:得到一条回复而后才能发送下一条数据
回退n步协议:一条协议丢失了m,则需要发送端将丢失这条数据以后的数据都进行重传
选择重传协议:一条数据丢失了,则仅仅针对丢失的这条数据重传!
提高传输性能的方式
快速重传机制:发送端连续发送多条数据,若接收端接收数据并非是接收后沿数据,则认为有可能后沿数据丢失了,首先不会进行接收到的数据的确认回复,其次向发送端间隔连续发送三次后沿数据的重传请求,要求对方对后沿数据进行重传!
发送方:连续收到三条同一重传请求,则对这条数据进行重传!
为什么是三次:避免因为网络延迟,数据包的延迟到达,三次可以有一个缓冲时间,若在第二次的售后收到了后沿数据报,则不会再发送第三条重传请求,这时候发送端就不用重传了!
快速重传,可以一定程度上避免发送端必须的超时重传!
延迟应答机制:接收方接收到数据后并不会立即进行去进行回复(应为如果立即进行确认回复,因为接受缓冲区剩余空间变小了,窗口就变小了导致传输吞吐量变小了)而是延迟应答,则有可能应答的时候程序在上层已经被取出,保证窗口大小不会变小。
捎带应答机制:接收方接收到数据后,进行确认回复,确认回复就是一个报头中的确认序号进行的,为了减少空报头的响应占据带宽,则使用捎带应答,在即将要发送的数据头部中进行上一条接受道德数据的确认回复、
可靠传输实现:面向连接/确认应答 /超时重传/序号/确认序号/校验和
避免丢包重传:滑动窗口机制/拥塞机制
挽救传输性能:快速重传/捎带应答/延迟应答/延迟发送