TCP flag 중 ECN(Explicit Congestion Notification) flag와 CWR(Congestion Window Reduced) flag의 기능과 역할이 궁금해 알아보았다. 아래의 기사에 ECN의 문제점과 탄생 배경 등이 잘 나와있으니 참고 바란다.
ECN의 개발 배경 : http://www.zdnet.co.kr/news/news_view.asp?artice_id=00000010040336
통신의 과부하(혼잡, 지연)으로 인해 라우터 메모리의 수용 가능 패킷양을 초과하게 되는 경우가 발생한다. 이를 위해 라우터는 AQM(Active Queue Management) 알고리즘의 하나인 RED(Random Early Detection) 알고리즘을 통해 혼잡 제어를 수행한다.
RED는 통신의 폭주가 발생하기 전 이를 감지하여 원활한 통신을 가능케하는하는 알고리즘이다. 혼잡 검출 시 RED 알고리즘은 패킷을 폐기 함으로써 버퍼의 overflow를 방지한다.
RED 알고리즘 진행 절차는 우선 라우터의 큐가 관리자가 설정한 임계치 값에 근접하면 임의의 특정 flow를 선택해 해당 패킷을 폐기하여 송신측에서 송신 속도를 늦출 수 있게한다. (중간 지점인 라우터에서 패킷이 유실되면 수신측은 일정시간 대기하다 송신측에게 재전송을 요구한다. 수신측 대기 시간 + 송신측의 재전송 시간차를 이용하여 그동안 큐의 한계치를 낮추는 원리인듯 하다.)
그러나 이러한 패킷을 폐기하는 방법은 오로지 전송중인 컴퓨터의 속도를 늦추는 데에만 필요하기 때문에 소용없다고 한다. ECN의 장점은 패킷의 손실 없이 지연을 감지하고 흐름을 늦추는데 있다.
RED 알고리즘 참고 : http://blog.naver.com/zersum?Redirect=Log&logNo=100086158750
이렇게 임의의 패킷을 폐기하는 RED알고리즘 과는 달리 ECN 알고리즘은 지연 감지시에 라우터가 임의의 패킷의 IP header의 CE(Congestion Experienced) flag를 세팅하고 수신자에게 전달한다.
ECN field에는 '00'부터 '01'까지 설정이 가능한데 '00'은 ECN을 사용하지 않는 일반적인 상황이며 '01' 또는 '10' 은 ECT(ECN-Capable Transport)를 나타낸다. 라우터는 두개를 동일하게 취급한다. 따라서 송신자는 둘중 어느것으로 보내도 상관이 없다. 그러면 라우터는 '01' 또는 '10'의 ECT에 1을 세팅하여 완전한 CE flag를 완성한다.
+-----+-----+
| ECN FIELD |
+-----+-----+
ECT CE [Obsolete] RFC 2481 names for the ECN bits.
0 0 Not-ECT
0 1 ECT(1)
1 0 ECT(0)
1 1 CE
* ECN 매커니즘은 ToS에 존재하는 여분의 2bit를 사용하여 구현되었다.
[그림 1] ToS field의 ECN과 CE bit
라우터로부터 해당 패킷을 전달받은 수신자는 ECE(ECN-Echo) flag를 세팅해 송신자에게 전송한다. (이때, 수신자는 송신자로부터 CWR flag 패킷을 받기 전까지 동일 flow(identification)의 패킷에 지속적으로 ECE flag 세팅하여 전송한다.) ECE flag를 받은 송신자는 통신과정에 혼잡이 감지되었음을 알고 window size를 줄이는 등의 행동을 한 후 CWR flag를 송신한다.
* window size는 송수신 측의 통신 중 계속적으로 정보를 교환하면서 혼잡(지연)이 발생하기 전까지 계속 증가(또는 감소)한다
[그림 2] Flag of ECN
* NS flag는 악의적인 ECN flag 세팅을 막고 잘못된 CE flag설정을 변겅하기 위해 존재한다.
ECE flag에는 두가지 경우가 있다.
SYN flag is set, the peer is ECN capable
(ECN이 가능하다는데 정확히 무슨 의미인지,, 송신자가 ECT 패킷을 송신한 경우에 SYN flag가 설정되는 건가?)
SYN flag is not set, a packet with Congestion Experienced CE flag in IP header set was received during normal transmission
이러한 ECN을 이용하여 패킷 손실이 발생하기 전에 혼잡을 감지하면 TCP 피어 간의 전체 처리량이 증가한다고 한다. 특히, 실시간 스트리밍 서비스와 인터렉티브 전송분야에 유용히 사용 될것이라고 한다. 하지만! ECN은 기본적으로 사용되지 않는다.
ECN RFC : http://www.ietf.org/rfc/rfc3168.txt
* 관련 논문
TCP의 ECN 기능을 이용한 Differentiated Services의 Assurd Service에서의 Fairness 향상에 관한 연구 .pdf
예전부터 궁금했던 내용이었고 책 읽다 해당 내용이 나와서 공부할겸 알아보았다. 하지만, 송신자가 ECT 패킷을 보내는 경우는 어떤 경우인지 모르겠다.... RFC에서 해당 내용을 본 것 같은데 이해가 안된다. 다른 내용인가? 아무튼, 어떤 경우에 송신자가 ECT field를 세팅해서 전송하는지 아시는분은 알려주세요! 또 틀린 부분, 잘못 이해하고 있는 부분이 있다면 코멘트 부탁드립니다.
'old > Network' 카테고리의 다른 글
[정리] scapy tutorial (0) | 2013.12.23 |
---|---|
[정리] 스캔방식에 따른 응답 차이 (2) | 2013.12.22 |
[정리] ARP의 기능과 패킷 구조 (0) | 2013.12.18 |
[정리] How to Analysis Packet? - 초보자의 관점에서 (0) | 2013.11.29 |
[자료] TCP retransmission을 이용한 과금 해킹 (2) | 2013.11.28 |