【计算机网络】传输层学习笔记二

三、TCP几个细节知识点

1.连接建立和释放时的sequence number和ack number

TCP是双工通信,一方再给另一方回ack的时候也同时会发信息

连接建立时,双方会初始化一个sequence序号,a clock-based scheme is used

发送的消息对方收到后,回的ack序号是下一个要收的包的序号

2.TCP滑动窗口的几个细节

(1)Nagle’s algorithm

发送方窗口的大小取决于接收方回的窗口号,但如果有的时候接收方一个一个窗口的挤,发送方就不得不连续发小包,但TCP头和IP头加起来起码20+20字节,这时候数据小传输效率低。那么为了避免发小包,就需要这个技术。Nagle’s algorithm就解决了这个问题。

Nagle’s algorithm发第一个包,然后就不发了,那什么时候接着发呢,两种情况,一种是第一个包的ack回来了,另一种是要么buffer里的包达到了窗口的一半,要么是包达到了最大段长度。这里有一个问题,buffer里的包达到了什么窗口的一半,本来不就打算发窗口大小的包,为什么是达到一半的时发?

这个算法有的时候是不适用的,比如玩游戏,这包不能等啊,这高延迟哪能受得了,这时候要么就禁用掉这个算法,要么就让这个包是push包。

(2)Clark’s solution

接收方的buffer如果每次上层只读一个窗口,那么就会空出来一个窗口,然后通知发送方我空出来窗口了,然后发送方就会发送这一个窗口的包,还是造成了低效,Clark’s solution解决了这个问题。

Clark’s solution会等接收方能够空出来一半buffer或能够空出来最大段长度的时候,在向发送方发ack告诉他窗口大小的改变。

Nagle’s algorithm和Clark’s solution配合使用。

(3)Fast Retransmission(快速重传)

TCP通常是等time out后再重传,但是如果接收方连着回了三个同样的ack,那么发送方就会立即重传。

(4)如何确定RTO(重传计时器)的时间——Jacobson算法

传输层的RTO和链路层的有区别,因为链路层通常是固定的,而传输层不是。

 Jacobson算法使用指数加权平均来算环回时间,

SRTT = α х SRTT + (1 – α) х (new sample)

Sample: AckRcvdTime – SendPacketTime, 0<α<1, usually 7/8

 这样可以让环回时间平滑,如下图所示

(5)Karn’s algorithm 

但还有一个问题,那就是重传的环回时间则么算呢

 上面两种算法分别会出现两种问题,Karn’s algorithm是说不算重传的环回时间,如果重传了那就把RTO乘2

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值