zoukankan      html  css  js  c++  java
  • TCP的成块数据流

    1:一般的数据流

    解释:比如说报文段4,当报文段4到达bsdi的时候,bsdi就开启一个定时器,200ms的经受时延的ACK,但是当200ms的定时器到达之前,又来了一个报文段,因此此时就应该发送一个应答报文,这个报文就是7,。在比如说报文段11,12的确认ACK就是14,报文段13,15的确认ACK就是16,这些都是和上面一样的道理!!但是报文段8,就是一个开启了经受时延定时器,并且在定时器时间到达之前,并没有到来的报文,而使定时器溢出,溢出了就应该发送一个ACK!!这是常用的隔一个报文段发送ACK的成块数据TCP协议

    2:当一方发送过快的时候

    要注意ACK有累计确认的功能,当收到多个报文的时候,即之发送最后的一份ACK!!!

    在上图中,我们发现,在报文段8中,窗口变为了0,此时通告发送方不能在发送数据,在报文段9中,因为接收方已经消耗了接受队列中的数据,因此发送一个应答报文,告知窗口已经打开~~

    3:滑动窗口


    1) 称窗口左边沿向右边沿靠近为窗口合拢。这种现象发生在数据被发送和确认时。

    2) 当窗口右边沿向右移动时将允许发送更多的数据,我们称之为窗口张开。这种现象发

    生在另一端的接收进程读取已经确认的数据并释放了 T C P的接收缓存时。

    3) 当右边沿向左移动时,我们称之为窗口收缩。 Host Requirements RFC强烈建议不要使

    用这种方式。但 T C P必须能够在某一端产生这种情况时进行处理。第 2 2 . 3节给出了这样的一个

    例子,一端希望向左移动右边沿来收缩窗口,但没能够这样做。

    对照的报文如下(因为窗口属性是属于接收方的,所以信息应该从应答方来观看

    3.PUSH标志

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

    (1)发送方将发送缓冲区的数据立即发送给接收方。
    (2)接收方将接收缓冲区的数据立即提交给接收进程。

    如果待发送数据会清空发送缓冲区,该包将自动设置PUSH标志。

    举一个列子


    这里为什么4,5,6,7报文有PSH标志,因为在这里,是来一条发一条,告诉发送方要立即发送数据,二在报文段8的时候,窗口变成了0,此时应该进行等待,所以此时10,11,12,发送的报文都先应该如队列,在进行最后的PSH一次性发送

    4:慢启动

    如果发送方和接收方之间存在多个路由器和速率较慢的链路时,一些中间的路由器必须缓存分组,并有可能耗尽存储器的空间,这种连接方式会严重降低了TCP连接的吞吐量。

    拥塞窗口(cwnd)原理:

    1)发送方开始发送一个报文,然后等待ACK。

    2)当收到该ACK时,拥塞窗口从1增加到2,即可以发送2个报文段。

    2)发送方再发送2个报文段,然后等待ACK,当收到这两个报文段的ACK时,拥塞窗口就增加为4。这是一种指数增加的关系。

    如此循环.....

    在某些点上可能达到了互联网的容量,于是中间路由器开始丢弃分组,这就通知发送方它的拥塞窗口开得过大。

    慢启动算法用于保证新分组进入网络的速率与另一端返回确定的速率相等。
    拥塞窗口是发送使用的流量控制,通告窗口是接收方使用的流量控制。






  • 相关阅读:
    清除大文本中的html标签
    页面中富文本的使用
    artDialog的几种基本使用
    SQL基础-->层次化查询(START BY ... CONNECT BY PRIOR)[转]
    Struts2
    js中window.location的用法
    keycode键盘 按键
    jQuery升级踩坑之路
    生成唯一随机码的方法及优缺点分析
    百度API的经历,怎样为多个点添加带检索功能的信息窗口
  • 原文地址:https://www.cnblogs.com/SmileLion/p/5863557.html
Copyright © 2011-2022 走看看