首页 > PHP资讯 > PHP培训技术 > 协助你了解TCP发送窗口

协助你了解TCP发送窗口

PHP培训技术
  介绍

  TCP是当时Internet上最为盛行的传输操控协议,即使你是搞存储的,我觉得多少也得晓得点儿,由于在File-Level storage渐渐变成主角的今日,SMB、NFS、FTP等要害协议都依赖于TCP,就连block-level的iSCSI协议也是如此。

  窗口是TCP中一个极为重要的概念,它直接联系到TCP的一个要害功用- 流量操控。今日我简略介绍下TCP发送窗口,从较为微观的视点去了解TCP是怎样约束发送端可发送的数据量的。

  更多信息

  咱们晓得TCP header中有一个Window Size字段,它本来是指接纳端的窗口,即接纳窗口,用来奉告发送端自个所能接纳的数据量,然后抵达一有些流控的意图。假定你如今有10MB的数据要经过TCP发送,或许你点个按钮就开端发送了,然后就以为TCP仅仅是简略的把数据从一端挪到另一端(微观上确实如此)。本来TCP在悉数发送进程中,也在衡量当时的网络状况,意图是为了保持一个健康安稳的发送进程。因而,这10MB数据是在某些机制的操控下进行传输的,其间一种重要机制即是窗口机制。发送端的发送窗口是依据接纳端的接纳窗口来核算的,咱们能够把这10MB数据分为如下四类来看(见图):

  1 已发送且已应对(Sent/Acked)

  2 已发送但没有应对(Send/UnAcked)

  3 未发送,但坐落当时发送窗口以内(Unsent/Inside)

  4 未发送,但坐落当时发送窗口以外(Unsent/Outside)

  已发送且已应对(Sent/Acked)

  Sent/Acked数据的第一个字节是ISN+1,ISN是指在TCP树立衔接时由SYN分段所挑选的第一个编号。SYN Flag被当作是一个字节的数据,特别会被应对一次。因而,TCP衔接上发送的数据的第一个字节编号即是ISN+1,被应对的数据的终究一个字节编号为【ACK编号-1】。例如,A发送1000个字节给B,假定ISN=1,则所要发送数据的第一个字节的编号为2,悉数发送到B今后,B会应对1002,意思是说前1001(包含ISN)个字节我都收到了,请给我第1002个字节。所以,被应对的数据的终究一个字节的编号为1001。

  已发送但没有应对(Send/UnAcked)

  Send/UnAcked数据的状况或许是正在传输的进程中,或是被网络丢掉了,或是已抵达接纳端但应对没有被发送(由于Delayed-Ack),又或是应对正在传输进程中。

  为了区别Sent/UnAcked数据和Unsent/Inside数据,TCP保护一个叫做SND.NEXT的变量,它是下一个行将被发送的字节的编号。所以SND.NEXT的值将是下一个行将被发送的TCP分段的Sequence Number字段的值。Send/UnAcked数据的第一个字节是接纳端上一次承受的应对分段的Acknowledge Number字段的值。

  未发送,但坐落当时发送窗口以内(Unsent/Inside)

  Unsent/Inside数据是接纳端答应发送端发送的数据,发送端能够发送窗口内的悉数数据,无需等候应对以及窗口更新。换句话说,假定发送端中止发送并等候应对,那就阐明现已没有Unsent/Inside的数据了。

  可是,假定遇到拥塞,发送端的流控机制,即slow start和congestion avoidance会阻挠发送端发送悉数坐落接纳窗口内的数据。在这种状况下,这些机制会操纵等候应对之前的可发送数据量。

  未发送,但坐落当时发送窗口以外(Unsent/Outside)

  Unsent/Outside数据是坐落当时发送窗口意外的数据,代表将来要发送的数据,但依据当时的接纳窗口它们是不答应被发送的。接纳端会丢掉无法保留在接纳缓存区中的数据,并用当时的应对编号来应对发送端。

  发送窗口的移动

  发送窗口有一个左边边际和一个右边边际。当收到一个带有更高Ack number的应对时,发送窗口的左边边际就会向右移动(close)。当收到的应对的Ack number + Window > 之前的Ack number + Window时,发送窗口的右侧边际会向右移动(open)。

  别的,发送窗口仅close但不open也是有或许的。比方发送端收到一个应对,它的Ack number添加了,可是窗口变小了,终究Ack number + Window并没有改动。这种状况发作在接纳端收到了数据,但还没有把数据给运用层,因而Ack number会添加,可是窗口巨细会削减相同多的值。

  (文章转自:EMC中文支撑论坛 https://community.emc.com/go/chinese)

  TCP传输操控协议发送窗口

本文由欣才IT学院整理发布,未经许可,禁止转载。