Loopback接口-tcp滑动窗口-tcp拥塞窗口

来源:互联网 发布:书包推荐 知乎 编辑:程序博客网 时间:2024/05/20 22:37
 

三个网络概念引出的问题(Loopback接口,TCP滑动窗口,TCP拥塞窗口)


以下文字大部分来自《TCP/IP协议详解》一书,这里记录下,好今后做参考。

1.Loopback接口

      大多数系统把IP地址127.0.0.1分配给这个接口,并命名为localhost。一个传给环回接口的IP数据报不能在任何网络上出现,

只能用于本机进程间通信。

      我曾经错误地以为:一旦传输层检测到目的端地址是环回地址时,应该可以省略部分传输层和所有网络层的逻辑操作。

但是大多数的产品还是照样完成传输层和网络层的所有过程,只是当IP数据报离开网络层时把它返回给自己。

 

 

图中需要指出的关键点是:
1)
传给环回地址的任何数据均作为IP输入。
2)
传给广播地址或多播地址的数据报复制一份传给环回接口,然后送到以太网上。这是因为广播传送和多播传送的

定义包含主机本身。
3)
任何传给该主机IP地址的数据均送到环回接口。

      看上去用传输层和IP层的方法来处理环回数据似乎效率不高,但它简化了设计,因为环回接口可以被看作

网络层下面的另一个链路层。网络层把一份数据报传送给环回接口,就像传给其他链路层一样,只不过环回接口把

它返回到IP的输入队列中。

2.滑动窗口

     这个术语我读书的时候没弄懂,看了《TCP/IP协议详解》才懂。
      滑动窗口协议是传输层进行流控的一种措施,接收方通过通告发送方自己的窗口大小,从而控制发送方的发送速度,

从而达到防止发送方发送速度过快而导致自己被淹没的目的。

      ACK的认识,是指接收端已经收到ACK(此处指ACK这个数字)以前的所有桢。如ACK=1025,说明接收端已经收到1-1024

 

 

 

      1)在这个图中,我们将字节从111进行标号。

      2)接收方通告的窗口称为通告窗口(Offered window),它覆盖了从第4字节到第9字节的区域,表明接收方已经确认了

包括第3字节在内的数据,且通告窗口大小为6

     3)我们知道窗口大小是与确认序号(ACK)相对应的。发送方计算它的可用窗口,该窗口表明多少数据可以立即被发送。

当接收方确认数据后,这个滑动窗口不时地向右移动。

     4)窗口两个边沿的相对运动增加或减少了窗口的大小。我们使用三个术语来描述窗口左右边沿的运动:

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

       当窗口右边沿向右移动时将允许发送更多的数据,我们称之为窗口张开。这种现象发生在另一端的接收进程读

取已经确认的数据并释放了TCP的接收缓存时。 
        
当右边缘向左移动时,称之为窗口收缩。

3.拥塞窗口

      TCP支持一种被称为慢启动(slow start)”的算法。该算法通过观察到新分组进入网络的速率应该与另一端返回确认

的速率相同而进行工作。

      慢启动为发送方的TCP增加了另一个窗口:拥塞窗口(congestion window),记为cwnd。当与另一个网络的主机建

TCP连接时,拥塞窗口被初始化为1个报文段(即另一端通告的报文段大小)。每收到一个ACK,拥塞窗口就增加一个

报文段(cwnd以字节为单位,但是慢启动以报文段大小为单位进行增加)。发送方取拥塞窗口通告窗口中的最小值

作为发送上限。拥塞窗口是发送方使用的流量控制,而通告窗口则是接收方使用的流量控制。

      发送方开始时发送一个报文段,然后等待ACK。当收到该ACK时,拥塞窗口从1增加为2,即可以发送两个报文段。

当收到这两个报文段的ACK时,拥塞窗口就增加为4。这是一种指数增加的关系。

4.LinuxTCP/IP参数调优

     就是这样的参数,害的我当时面试sohu的时候被鄙视,面得是一个网管员职位,主要是管理web server,规模特大。

     在这方面积累不够,今后也不打算深入,毕竟更喜欢开发。

     /proc/sys/net/ipv4/目录下,包含的是和tcp/ip协议相关的各种参数。

     其中:

     tcp_window_scaling INTEGER
     
缺省值为1
     
该文件表示设置tcp/ip会话的滑动窗口大小是否可变。参数值为布尔值,为1时表示可变,为0时表示不可变。

tcp/ip通常使用的窗口最大可达到 65535 字节,对于高速网络,该值可能太小,这时候如果启用了该功能,

可以使tcp/ip滑动窗口大小增大数个数量级,从而提高数据传输的能力(RFC 1323)

(对普通地百M网络而言,关闭会降低开销,所以如果不是高速网络,可以考虑设置为0

4.问题:Loopback接口下的通告窗口与拥塞窗口

  我记得有天公司老板问我们,你们的程序用loopback来进行进程间通信,是否因为窗口同时被clientserver占用,

要考虑扩大窗口?现在看来不用,因为对linuxtcp_window_scaling默认是打开的。

 

分享到: 

原创粉丝点击