TCP 슬라이딩 윈도우 및 혼잡 제어

 

윈도우 프로토콜 (슬라이딩 윈도우 프로토콜) 슬라이딩 TCP 프로토콜의 혼잡을 피하기 위해, 데이터 전송 네트워크의 흐름 제어를위한 애플리케이션에 속한다. 이 프로토콜은 더 많은 데이터 패킷을 전송하기 전에 확인 송신자 정지 대기 할 수있다. 각 송신자는 데이터 전송 프로토콜은 네트워크 처리량을 향상 가속화 될 수 있도록 패킷 응답이 중지 기다려 보낼 수 없기 때문에.

 

TCP 흐름 제어는 슬라이딩 윈도우의 개념에 의해 수행된다. 곧 보내는 마지막에 데이터를 전송의 속도와 수신 측의 경우를 상상하면 속도, 트래픽 제어에 대한 명확한 필요성을 잃고, 양측 사이의 일 통신의 속도를 조정되지 않은 데이터를 보장하기 위해, 매우 느립니다받습니다. 소위 슬라이딩 윈도우 버퍼 크기는 수신 측에서 제공 할 수 있다는 것을 이해해야한다. TCP는 많은 버퍼를 제공 할 수있는 데이터를 전송하기 위해 보낸 사람에게 슬라이딩 윈도우를 사용합니다. 윈도우 (16)가 비트에 의해 정의되기 때문에, TCP는 65535 바이트의 최대 수신 측 버퍼 제공 할 수있다. 따라서, 윈도우 사이즈가 이용 될 수 있으며, 순서 번호 데이터는 수신 된 데이터 시퀀스의 최대 수를 계산. 

 

슬라이딩 윈도우는 기본적으로 데이터는이 데이터에 기초하여 시간을 계산하는 최대 전송하는 TCP 데이터 전송자의 수신자의 데이터 버퍼의 크기에 대한 설명이다. 발신자 수신 창 크기는 TCP 패킷 0의받는 경우, 발신자는 데이터 전송을 중지하고 수신자가 데이터 그램 0의 도착을 창 크기를 전송하지 않을 때까지 기다립니다. 

 

창 닫기 : 오른쪽 왼쪽 창에서 접근하면 데이터가 전송되고 인정 될 때, 이러한 현상이 발생합니다.   
       개방 창 : 창의 오른쪽은 시간을 따라 우측으로 이동하면, 이러한 현상은 데이터를 수신 한 후 프로세스의 끝에서 일어난다.   
        창 축소 : 창의 오른쪽 측면을 따라 왼쪽으로 이동할 때, 현상은 거의 발생하지 않는다.   
        TCP 천천히 올바른 데이터에 왼쪽에서 이동이 창을 사용하는 것입니다, 창 밖으로의 범위로 데이터를 전송 (만 보낼 수 있습니다 창에서 데이터 모두를 전송하지 않습니다.). 이것은 윈도우의 의미입니다. 윈도우의 크기는 4096 최고의 창 크기 아니라, 소켓을 통해 개발 될 수 있으며, 16384 크게 처리량을 증가시킬 수있다.

 

---- ---- B C

 

상술 한 바와 같이, 슬라이딩 윈도우를 달성하기 위해, A와 B 사이에서 TCP 접속을 설정하는 두 가지 기능을 갖는다 : 

 

때문에 대칭성 만은 A 창을 고려하여 단말기 B는 두 가지 기능에 따라 수신 윈도우를 보낸다   

 

(1) 수신 데이터 처리 B 종료 시간 (다른 호스트와 동기 속도 제어), 그 후, 단말 알림창 느린 데이터 전송을 수신함으로써 B.   
2, 어딘가 A와 B 사이의 수신 된 데이터를 처리하기위한 B의 종료 시간은 C로서, AB 나쁨이 경우의 전체 대역폭 성능, 프로세싱 전략 단말 A의 정체 (느린 시작에 따라 증가 서서히 감소되도록 배로 )는 데이터를 전송하기로 결정하는 창을 업데이트합니다.   

 

슬라이딩 윈도우 프로토콜 고정 크기와 비교는 TCP 슬라이딩 윈도우 프로토콜은 더 나은 성능을 달성하기 위해 가변적 인 크기를 사용한다.   

 

광역 네트워크 프로토콜은 TCP이고, WAN 환경에서 라우터, 호스트, 성능 저하를 야기 할 수있는 고정 윈도우 사이즈를 이용하여 슬라이딩 윈도우 프로토콜이 경우, 성능 및 처리 능력에 대해 다른 요건을 갖는다. TCP 창 크기는 느린 시작 및 혼잡 회피 알고리즘과 다른 메커니즘을 취함으로써 최고의 성능과 대역폭을 달성하기 위해 통지의 수신자에 의해 지정됩니다.

 

1. "윈도우"는 연속적인 범위 "윈도우"라고 전송 될 수있는 송신기의 기간에 대응하는 일련의 바이트이다;

 

2. "슬라이딩"하는 방법을 순서에, 공정 변화에 따라 송신이 "허용 범위 전송"을 의미한다 "슬라이딩."

 

    1. A와 B는 별도의 전송로 유지 의한 확대 (A 지방 B 상호성에, 각각의 버퍼를 수신해야하므로 TCP 프로토콜은 전이중 프로토콜 이후, 각각 전송자 A와 수신자 B 단부 A와 B의 송신을 수신), 우리는 B에서 수신 예를 보낼 경우;

    2.         창은 송신 버퍼의 일부인 전송은 TCP 프로토콜의 일부는 사실상 모든 데이터 송신기의 송신 버퍼에 배치되어있는 애플리케이션 계층 전송 될 필요가 전송 될 수있다;

    3.       투과 창 네 관련 개념을 갖는다 : 수신 확인이 송신 데이터 (송신 버퍼 영역 내에없는 투과 창)를 수신하지만, (송신 윈도우 내에있는) 수신 된 데이터의 확인 응답을 전송하는 전송되지 않은 한 그러나, 송신 데이터 버퍼 및 외부 전송 윈도우의 데이터를 일시적으로 보낼 수없는 전송되지

    4.        각각의 성공적인 데이터 전송 후, 송신 윈도우는 새로운 데이터를 포함하는 윈도우에 전송할 준비가되어, 송신 버퍼에 순차적으로 이동한다;

 

전송 창의 31-50 바이트 : 초기 TCP 연결 설정은 B A는 '20'로, 자신의 수신 창 크기를 말할 것.

 

 

분석 윈도우 값 B, A 자체 창 구조

 

보내는 변하지 창 위치를 송신 후의 11 바이트, B 데이터 패킷이 순서가 수신 :

 

 

만들어진 11 바이트 데이터

 

최초 패킷에 대한 연속적인 데이터 패킷을 피하기 위해 아래 순서가 수신 될 때 B가 확정되고 성공적으로 송신 된 데이터, 즉 확인 된 송신 데이터 B는, 슬라이딩 윈도우가 떨어진 송신 데이터에서 이동할 때 후에야 반복 전송 네트워크 :

 

 

새로운 확인 번호는 창을 앞으로 슬라이드 수신

 

 

전송 창에서 번호가 전송하지만, 확인되지 않은되었습니다 속한

 

소위 흐름 제어는 주 정보는, 발신자가 수신자에게 전송된다 너무 빠른 데이터 전송 제어 종료되도록. 크기 및 데이터 전송 보낸 사람의 사용을 제어하기 위해, 자신의 수신 창 크기를 포함 ACK를 백업하는 주요 방법 :

 

 

몇 시간 동안 기다린 후, 잉여 버퍼 B의 출현은, 다음은 나에게 rwnd를 알려주는 메시지를 전송, 이는 B가 자신의 버퍼가 가득 말씀하신 경우, 다음 데이터를 보내는 정지, 상황에 관련 크기는 400이지만, 불행하게도 메시지가 손실됩니다, 그래서 교착 상태가 데이터를 전송하기 위해 대기 ||의 B의 알림 B를 기다리고 있었다. 이 문제를 해결하기 위해, TCP가 연속 타이머 A는 제로 윈도우 알림의 다른 쪽을 수신한다 (잔류 타이머)를 도입, 타이머는 상대방 것이다가 1 바이트 프로브 패킷을 송신 할 시간, 활성화 결과가 0이 아닌 경우 이때, 수신 윈도우 크기에 대한 응답은, 연속적으로 리셋 타이머는 계속 기다린다.

 


 

 

 

传递效率
     一个显而易见的问题是:单个发送字节单个确认,和窗口有一个空余即通知发送方发送一个字节,无疑增加了网络中的许多不必要的报文(请想想为了一个字节数据而添加的40字节头部吧!),所以我们的原则是尽可能一次多发送几个字节,或者窗口空余较多的时候通知发送方一次发送多个字节。对于前者我们广泛使用Nagle算法,即:
*1. 若发送应用进程要把发送的数据逐个字节地送到TCP的发送缓存,则发送方就把第一个数据字节先发送出去,把后面的字节先缓存起来;
*2. 当发送方收到第一个字节的确认后(也得到了网络情况和对方的接收窗口大小),再把缓冲区的剩余字节组成合适大小的报文发送出去;
*3. 当到达的数据已达到发送窗口大小的一半或以达到报文段的最大长度时,就立即发送一个报文段;
     对于后者我们往往的做法是让接收方等待一段时间,或者接收方获得足够的空间容纳一个报文段或者等到接受缓存有一半空闲的时候,再通知发送方发送数据。

 

拥塞控制
     网络中的链路容量和交换结点中的缓存和处理机都有着工作的极限,当网络的需求超过它们的工作极限时,就出现了拥塞。拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。常用的方法就是:
1. 慢开始、拥塞控制
2. 快重传、快恢复
     一切的基础还是慢开始,这种方法的思路是这样的:
-1. 发送方维持一个叫做“拥塞窗口”的变量,该变量和接收端口共同决定了发送者的发送窗口;
-2. 当主机开始发送数据时,避免一下子将大量字节注入到网络,造成或者增加拥塞,选择发送一个1字节的试探报文;
-3. 当收到第一个字节的数据的确认后,就发送2个字节的报文;
-4. 若再次收到2个字节的确认,则发送4个字节,依次递增2的指数级;
-5. 最后会达到一个提前预设的“慢开始门限”,比如24,即一次发送了24个分组,此时遵循下面的条件判定:
*1. cwnd < ssthresh, 继续使用慢开始算法;
*2. cwnd > ssthresh,停止使用慢开始算法,改用拥塞避免算法;
*3. cwnd = ssthresh,既可以使用慢开始算法,也可以使用拥塞避免算法;
-6. 所谓拥塞避免算法就是:每经过一个往返时间RTT就把发送方的拥塞窗口+1,即让拥塞窗口缓慢地增大,按照线性规律增长;
-7. 当出现网络拥塞,比如丢包时,将慢开始门限设为原先的一半,然后将cwnd设为1,执行慢开始算法(较低的起点,指数级增长);

 

 

上述方法的目的是在拥塞发生时循序减少主机发送到网络中的分组数,使得发生拥塞的路由器有足够的时间把队列中积压的分组处理完毕。慢开始和拥塞控制算法常常作为一个整体使用,而快重传和快恢复则是为了减少因为拥塞导致的数据包丢失带来的重传时间,从而避免传递无用的数据到网络。快重传的机制是:
-1. 接收方建立这样的机制,如果一个包丢失,则对后续的包继续发送针对该包的重传请求;
-2. 一旦发送方接收到三个一样的确认,就知道该包之后出现了错误,立刻重传该包;
-3. 此时发送方开始执行“快恢复”算法:
*1. 慢开始门限减半;
*2. cwnd设为慢开始门限减半后的数值;
*3. 执行拥塞避免算法(高起点,线性增长);

 

 

추천

출처www.cnblogs.com/liangyc/p/11628757.html