【TCP:可靠数据传输,快速重传,流量控制,TCP流量控制】
文章目录
- 可靠数据传输
- TCP:可靠数据传输
- TCP发送方事件
- 快速重传
- 流量控制
- TCP流量控制
可靠数据传输
TCP:可靠数据传输
- TCP在IP不可靠服务的基础上建立了rdt
- 管道化的报文段
- GBN or SR
- 累计确认(像GBN)
- 单个重传定时器(像GBN)
- 是否可以接受乱序的,可以缓存,也可以丢弃
- 通过以下事件触发重传
- 超时(只重发那个最早的未确认段:SR)
- 重复的确认
- 例子:收到了ACK50,之后又收到3个ACK50
- 首先考虑简化的TCP发送方:
- 考虑重复的确认
- 忽略流量控制和拥塞控制
NextSeqNum = NextSeqNum + length(data):
发送窗口前沿向前移动。
SendBase = y
/* SendBase–1: last cumulatively ACKed byte */
if (there are currently not-yet-acked segments) start timer else stop timer:
发送窗口后沿向前移动,没有已发送未确认的字节,关掉定时器。
TCP发送方事件
从应用层接收数据:
- 用nextseq创建报文段
- 序号nextseq为报文段首字节的字节流编号
- 如果还没有运行,启动定时器
- 定时器与最早未确认的报文段关联
- 过期间隔:TimeOutInterval
超时:
- 重传后沿最老的报文段
- 重新启动定时器
收到确认:
- 如果是对尚未确认的报文段确认
- 更新已被确认的报文序号
- 如果当前还有未被确认的报文段,重新启动定时器
解释:这里发送方传送的序号从92开始的,8个字节,接收方收到给一个ACK100的确认,但是这个确认丢失,发送方又传了100开始,20个字节。这个时候就要重发92,8。
这里有几种情况:
①隐忍不发,等多个报文在一起时候再一起发。
②延时等待,下一个报文在延时时间发了的话,就一起发送。没发的话,就只发送一个ACK。
③在发送重复的ACK,指明下一个期待的字节序号。
④若报文中间有gap间隔,完全补齐的话,就发送所有的ACK,部分补齐的话,就发送补齐部分。
快速重传
- 管道化的报文段
- TCP在IP不可靠服务的基础上建立了rdt
相关阅读:
1、由于一个完整的购物商城代码非常庞大,涵盖了前端、后端、数据库等多个方面,我无法在这里为你生成一个完整的示例。但我可以为你提供一些简化版本的伪代码或者特定功能的示例代码。
2、由于一个完整的App涉及多个部分(如前端、后端、数据库等),并且不同的平台(如iOS、Android、Web)使用不同的技术和工具,这里我将为你提供一个简化的示例,展示如何在几种不同的编程语言中创建A
3、生成一个完整的游戏商城代码是一个相对复杂的任务,因为它涉及到前端、后端、数据库等多个方面的开发。不过,我可以为您提供一个简单的概念性示例,用几种不同的编程语言来描述这个商城的基本结构和功能。
还没有评论,来说两句吧...