::: 강좌/소스/문서 :::

강좌/소스/문서 성격에 맞지 않는 광고,비방,질문의 글은 즉시 삭제하며
내용을 복사하여 사용할 경우 반드시 이곳(http://www.howto.pe.kr)을 출처로 명시하여 주세요


Category

  김영대(2004-07-16 15:01:13, Hit : 9908, Vote : 1989
 http://www.howto.pe.kr
 [참고] TCP 에서 사용되는 효율향상 알고리즘

1.Sliding Window
  full-duplex로 통신하는 두 주체에는 각각 송/수신 버퍼가 존재한다. 수신측에 n개의 프레임을 수용할 수
  있는 버퍼가 존재할경우 송신측은 ACK를 기다리지 않고, n개의 프레임을 전송함으로서 불필요한 ACK
  대기시간을 줄일 수 있다. 참고로 송/수신측은 흐름제어를 위해 세 개의 포인트를 유지하는데 각각은
  송신하고 수신확인을 받은 프레임의 포인트, 송신하고 아직 수신확인을 받지않은 프레임의 포인트 그리고
  아직 송신하지 않은 프레임의 포인트가 있다.
  
2.Acknowledgement delay
  일명 'piggy-backed' 라 하여 돼지 꼬리처럼 여러개의 플래그가 하나의 세그먼트에 '편승'한다는 뜻이다.
  이것은 이미 4.2BSD에 포함되어있던 오래된 유용한 기법이다.  일반적으로 목적지 TCP는 세그먼트를 수신한
  이후 응답 세그먼트를 즉시 전송하는데 이 응답 세그먼트는 윈도우의 크기를 줄이고 수신한 데이타에 대한
  억놀리지먼트를 담당한다.  수신 프로세스에 의해 데이타가 프로세스로 복사된 후 시스템의 데이타 버퍼는
  재사용을 위해 반납되며 윈도우의 크기를 증가시키기 위한 세그먼트가 전송된다.  프로그램이 데이타를
  처리하고 나면 대부분 잠시후 응답(수신측에서 보낼 data)이 뒤따른다.  따라서 하나의 트랜잭션
  (transaction)은 세개의 세그먼트가 필요하다.
  TELNET에서 처럼 많은 경우에 있어 억놀리지먼트 세그먼트를 10분의 2초정도 지연하는 것이 유익하다는
  것이 알려져왔다.  이 짧은 시간후에 3개의 모든 정보(윈도우 크기, 억놀리지먼트, 응답)가 하나의
  세그먼트에 담겨져 전송될 수 있다.  높은 처리율을 요구하는 데이타 전송의 속도를 늦추지 않기 위해서
  윈도위의 크기가 최소 35%또는 2개의 최대 세그먼트 이상 변화하는 경우 이러한 지연은 생략할 수 있다.
  
3.Silly window syndrome avoidance
  어떤 상황에서는 전송되는 수신 윈도우의 항목이 너무 작아서 네트워크와 컴퓨터가 많은 수의 억놀리지먼트에
  의해 과부하 상태가 될 수 있다.  이것을 방지하기 위해 수신측은 윈도우의 크기가 one-full-sized segment로
  증가할 때나 최소한 세그먼트가 수신 버퍼의 1/2로 증가 할 때 전송해야 한다. 또한 송신측도 one-full-sized
  segment를 전송할 수 있을 때, 수신측에 의해 통보된 maximum sized window의 1/2 이상을 전송할 수 있을 때,
  모든 데이터를 전송할 수 있고 ACK를 기대하지 않을 때, Nagle algorithm이 enable 되어 있는 상태가 아닐 때
  데이터를 전송해야 한다.

4.Nagle algorithm or samll packet avoidance
  개발자인 John Nagle의 이름을 딴 이 알고리즘은 작은 크기의 TCP 세그먼트의 전송을 방지하도록 시도한다.  
  이경우, 응용 프로그램으로부터 작은 크기의 단위로 TCP에 데이타가 전달될 때 어떻게 그 형태대로 전송되는
  것을 막을 것인가가 문제이다.  첫 세그먼트는 즉시 전송되며 그 다음의 데이타는 최대 크기의 세그먼트를
  전송할 수 있게 되거나 첫 세그먼트에 대한 억놀리지먼트가 도착할 때 까지 버퍼에 저장되어진다.  이러한
  알고리즘은 응용 프로그램이 많은 수의 작은 크기의 메세지를 (예를 들어 X 윈도우 시스템) 응답의 수신과
  상관없이 전송하는 경우 문제가 발생한다.  이런 경우에는 연결 의존적인 방법에 의해 Nagle 알고리즘을
  비활성화시킬 수 있다. 응용 프로그램은 socket 인터페이스의 TCP-NODELAY 옵션을 이용하여 비활성화시킨다.
  (setsockopt() 소켓 함수의 TCP_NODELAY 옵션으로 설정)

5.Slow start with congestion avoidance
  때때로 Jacobson 알고리즘이라고도 불리는, 이와 연관된 알고리즘들은 최근에 들어서야 알려지게 되었고
  주로 낮은 속도의 네트워크와 게이트웨이를 가진 네트워크의 기능에 매우 증요한 역할을 한다.  
  최근 몇년 동안 부하가 증가함에 따라 인터넷은 점점 더 낮은 처리량율을 나타내게 되었고 다소 고장이
  증가하게 되었음을 발견하였다.  처리 과정들을 좀 더 자세히 살펴 보면, 네트워크상의 패킷의 반 이상이
  분실된 TCP 세그먼트에 대한 재전송 패킷임이 명확하게 들어났다.  네트워크 상의 경로(여기서 말하는 경로는
  송신자의 데이타 버퍼로부터, 가능한 게이트웨이들 그리고 목저지까지를 말함)는 단지 유한한 양의 데이타를
  전송할 수 있다.  게이트웨이나 호스트가 과부하상태일 때, 세그먼트를 넣어둘 충분한 버퍼 공간이 없을 수
  도 있다.  이런 경우, 게이트웨이에 의해 세그먼트는 무시되고, 패킷의 송신자는 RTO만큼 지연된 후 재전송을
  결정할 것이다.  그러면 결과적으로 전체 네트워크의 부하는 다시 불필요하게 증가하게되는 것이다.  
  slow-start 알고리즘은 주어진 시간동안 얼마나 많은 데이타가 분실없이 목적지까지 전송되는가를 측정하도록
  시도한다.  이것은 측정은 재전송 없이 동일한 데이타의 흐름을 가지는 시점까지 전송하는 데이타의 집합의
  크기를 점차 증가시킴으로써 이루어진다.  앞에서 전송될 데이타의 집합에 의해 크기가 측정되었듯이, 소위
  밀집 윈도우(congestion window)라 불리는 네트워크 경로상의 저장 용량도 측정대상이다.  Congestion window는
  항상 수신 윈도우보다 작거나 같다.  Congetstion window가 일단 일정한 값을 가지게되면 재전송의 발생으로
  네드워크의 부하가 증가되는 경우에만 변경된다.  이 경우 밀집 회피(congestion avoidance)알고리즘이 작업을
  하게된다.  동시에 congestion window의 상수배의 잘 고려된 크기만큼 할당되어질 수 있는 어떠한 자원도
  이용하려는 시도가 이루어진다.  이러한 조심스러운 작업 방식으로 처리율은 30%까지 증가될 수 있으며
  재전송되는 세그먼트는 50%이상 감소될 수 있다.
  이 두 알고리즘과 관련하여 retransmission timeout도 또한 향상되었다.  새로운 알고리즘은 round trip time에
  있어서 더 신속한 변화를 얻을 수 있다.  따라서 추가적인 패킷의 재전송을 막을 수 있다.

주) 윗글의 출처를 찾지 못하여 저자명을 게재하지 못하였습니다





183   [Delphi] [소스] 웹에서 버전 확인하여 파일 다운받기2  김영대 2008/12/22 8776 2107
182   [Delphi] [소스] Indy HTTP를 쓰레드에 넣어 사용하기  김영대 2008/11/21 8738 2243
181   [Delphi] [소스] IOCP 델파이 예제 프로그램  김영대 2005/02/16 12582 1836
180   [Delphi] [소스] 델파이 프로그램 소스파일에서 한글 문장 추출  김영대 2005/02/01 9892 1759
179   [Delphi] [소스] 다국어를 지원하는 응용 프로그램을 위한 콤포넌트  김영대 2005/02/01 7704 1606
178   [Delphi] [소스] 모든 윈도우즈 실행파일이 실행되고 종료되는 시점 알아내기  김영대 2004/11/24 8206 1724
177   [Delphi] [소스] TMSNPopUp v.5.0 수정 콤포넌트  김영대 2004/11/16 10146 1841
176   [Delphi] [소스] 웹에서 버전 확인하여 파일 다운받기1  김영대 2004/11/16 8641 1677
175   [Delphi] [소스] 한글이 들어있는 문자열에서 초성 음소로 검색하기  김영대 2004/10/23 10062 2173
174   [Delphi] [소스] 마우스와 키보드 입력이 몇초동안 없으면 이벤트 발생시키기  김영대 2004/10/15 9092 1872
173   [Delphi] [소스] UNIX tail 과 같은 파일 변경 감시 프로그램  김영대 2004/09/04 8365 1658
172   [Delphi] [소스] Java 로 작성한 프로그램 실행하고 결과 받아오기  김영대 2004/08/21 8642 1783
171   [Delphi] [소스] Windows Management Instrumentation (WMI)  김영대 2004/07/24 9420 1917
170   [Delphi] [소스] 윈도우즈 서비스 목록 구하고 시작/중지 시키기  김영대 2004/07/22 8435 1742
  [네트워크/보안] [참고] TCP 에서 사용되는 효율향상 알고리즘  김영대 2004/07/16 9908 1989
168   [네트워크/보안] [참고] TCP 에서 사용되는 내부 타이머  김영대 2004/07/13 9789 1834
167   [Unix/Linux] [강좌] 인텔 센트리노 무선랜 카드: ndiswrapper  김영대 2004/06/27 11147 2016
166   [Delphi] [소스] 데스크탑의 일부 영역을 고정적으로 차지하는 어플리케이션  김영대 2004/06/19 6921 1607
165   [Delphi] [강좌] ActiveX 테스트 인증서 만들기  김영대 2004/06/18 7990 1702
164   [Delphi] [소스] ActiveX 에서 자바 스크립트의 함수 호출하기  김영대 2004/06/18 8162 1680

1 [2][3][4][5][6][7][8][9][10]
 

Copyright 1999-2018 Zeroboard / skin by zero