读《TCP/IP详解》第19、20章:TCP的数据流

TCP的交互数据流

经受时延的确认

TCP在接收到数据时,并不立即向发送端发送ACK确认报文,而是推迟一段时间再与其他要发住该发送端的数据一起发送ACK确认。这样可减少网络中报文的传送,提高传输效率,节省资源。时延必须小于500ms,一般等待200ms,当超过该时延,即使没有发往该发送端的数据,也会发送ACK确认报文。

Nagle算法

广域网上会经常出现一些小分组,这些小分组增加了传输次数,占用网络资源,增加拥塞的可能,使用Nagle算法可有效避免,该算法要求一个TCP连接上最多只能有一个未被确认的未完成小分组,在该分组的确认到达之前不能发送其他小分组,TCP更会收集这些小分组,并在确认到来时以一个大分组的形式发送出去。该算法的优点在于它是自适应的(确认到达的越快,数据发送得也越快)

如果要关闭Nagle算法,在Socket API中可使用TCP_NODELAY选项

TCP的成块数据流

滑动窗口

滑动窗口用作流量控制,由接收方告诉发送方在某一时刻能发送多少数据。基本原理就是在任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口;同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口。发送窗口和接收窗口的序号的上下界不一定要一样,甚至大小也可以不同。不同的滑动窗口协议窗口大小一般不同。发送方窗口内的序列号代表了那些已经被发送,但是还没有被确认的帧,或者是那些可以被发送的帧。

  1. 称窗口左边沿向右边沿靠近为窗口合拢。这种现象发生在数据被发送和确认时,若窗口左边沿到达右边沿,则称其为一个零窗口,此时发送方不能够发送任何数据。
  2. 当窗口右边沿向右移动时,将允许发送更多的数据,称之为窗口张开。这种现象发生在另一端接收进程读取已经确认的数据并释放TCP的接收缓存时
  3. 当右边沿向左移动时,称之为窗口收缩

    滑动窗口

从上图中可以总结出几点:

  1. 发送方不必发送一个全窗口大小的数据
  2. 来自接收方的一个报文段确认数据并把窗口向右边滑动。
  3. 窗口的大小可以减小,但是窗口的右边沿却不能够向左移动
  4. 接收方在发送一个ACK前不必等待窗口被填满

PUSH标志

发送方使用该标志通知接收方将所收到的数据全部提交给接收进程。这里的数据包括与PUSH标志一起传送的数据以及接收方TCP已经为接收进程收到的其他数据。

慢启动算法

慢启动算法通过观察到新分组进入网络的速率应该与另一端返回确认的速率相同而进行工作。它为发送方的TCP增加了一个拥塞窗口,记为cwnd,当与另一个网络的主机建立TCP连接时,拥塞窗口被初始化为1个报文段(另一端通告的报文段大小),每收到一个ACK,拥塞窗口就增加一个,发送方取拥塞窗口与通告窗口中的最小值作为发送上限。拥塞窗口是发送方使用的流量控制,而通告窗口则是接收方使用的流量控制。

紧急数据

紧急方式,使一端可以告诉另一端有一些具有某种方式的紧急数据已放置在普通的数据流中。另一端被通知这个数据已被放置在普通数据流中,由接收方决定如何处理。可通过设置TCP首部中的两个字段来使用这种方式:

  1. 设置TCP首部中的URG为1
  2. 设置一个16bit的紧急指针为一个正的偏移量,该偏移量必须与TCP首部中的序号字段相加,以便得出紧急数据的最后一字节的序号。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值