Skip to content

Latest commit

 

History

History
70 lines (44 loc) · 6.69 KB

tcp_flag.md

File metadata and controls

70 lines (44 loc) · 6.69 KB

TCP Flag, ECN

ECN 메커니즘을 사용하기 위한 플래그 필드 3bit(NS, CWR, ECE)가 생기기 전에는 Reserved(미래를 위해 미리 예약된 필드)가 6비트 였으며 Flag 필드도 6비트로 URG, ACK, PSH, RST, SYN, FIN이 존재했었습니다.

ECN 메커니즘을 도입하면서 RFC 3168 규약과 함께 기존에 6비트 영역이 확보된 Reserved의 3비트를 Flag 비트로 활용하였으며 Flag필드에 NS, CWR, ECE가 추가되었습니다.


ECN 메커니즘 등장 배경

네트워크가 느린 시절 과도한 트래픽으로 인한 네트워크 붕괴 현상 문제 -> TCP 혼잡 제어 알고리즘 제안/적용 -> 패킷 유실 -> TCP 혼잡 제어 효율을 높이고 패킷 유실을 막기 위해서 라우터 단에서 미리 네트워크 혼잡 상황을 알림.

  • 라우터는 RED(Random Early Detection) 알고리즘을 통해 혼잡 제어를 수행합니다.
  • RED는 통신의 폭주가 발생하기 이전에 이를 감지해 원활한 통신을 가능하게 하는 알고리즘으로 혼잡 검출시 RED는 패킷을 폐기함으로써 버퍼의 오버플로우를 방지합니다. RED 알고리즘 진행 절차는 우선 라우터의 큐가 관리자가 설정한 임계치 값에 근접하면 임의의 특정 플로우를 선택해 패킷을 폐기하여 송신측에서 송신 속도를 늦출 수 있도록 합니다.
  • 중간 지점인 라우터에서 패킷이 유실될 경우 수신측은 일정 시간 대기하다 송신측에게 재전송을 요구합니다.
  • 이러한 과정을 통해 수신측 대기시간과 송신측의 재전송 시간차를 사용해 혼잡이 발생한 라우터 큐의 한계치를 낮춥니다.
  • 그러나 패킷을 폐기하는 방법은 오로지 전송중인 컴퓨터의 속도를 늦추는 데에만 필요하기 때문에 효율적이지 않으며 이런 점을 보완하여 패킷 손실 없이 지연을 감지하고 흐름을 늦추기위해 ECN이 등장했습니다.

임의의 패킷을 폐기하는 RED 알고리즘과 달리 ECN 알고리즘은 지연 감지시 라우터가 임의의 패킷인 IP header의 CE(Congestion Experienced) flag을 세팅하고 수신자에게 전달합니다.


ECN(Explicit Congestion Notification)

ECN의 작동 원리는 다음과 같습니다.

  • 중간 라우터에서 혼잡이 발생할 경우 라우터에서 큐를 모니터링해 패킷이 정체되고 있음을 감지합니다.
  • 혼잡을 겪는 라우터는 해당 라우터를 통과하는 패킷이 혼잡하다는 증거로 표시를 남겨놓고 다음 라우터 또는 수신자에게 패킷을 전달합니다.
  • 최종적으로 패킷을 전달받은 수신자는 패킷에 남겨진 혼잡 표시를 확인하고 송신자에게 자신이 받은 패킷이 전달되는 과정에서 혼잡을 겪었을을 알려줍니다.

ECN 동작원리 "ECN은 기본 지원 기능이 아닌 수신, 송신측 모두가 사용이 가능해야 사용할 수 있다."

ECN 메커니즘은 기본적으로 지원되는 기능이 아니므로 송신자와 수신자 모두 ECN을 사용해야 합니다.

3-way-handshake가 이루어질 때, 송신자가 수신자에게 전송하는 syn 패킷에 ECE 비트를 1로 설정하여 현재 송신자 호스트는 ECN을 사용할 수 있습니다와 같이 알립니다.

syn 패킷을 전달받은 수신자 호스트는 이를 확인하고 ECE가 지원된다면 송신자 호스트에게 syn ack 패킷을 전송할 때 ECE bit를 1로 설정하여 수신자 호스트도 ECN을 사용할 수 있음을 알립니다.

이렇게 송신자 및 수신자 호스트 모두 ECN을 지원한다면 상호 통신간에 ECN 메커니즘에 의해서 혼잡을 경험할 경우 혼잡을 알리거나 수신하게 됩니다.

ECN 메커니즘에서 사용하는 필드는 tcp 헤더 뿐만 아니라 ip 헤더에도 존재합니다. TCP에 경우에는 NS, CWR, ECE 세 가지 필드를 사용해 ECN 메커니즘 연결을 확립하고 IP 헤더에 경우에는 Type Of Service 필드 안에 마지막 2개의 비트를 사용하여 이는 곧 2의 2승인 4가지 표현이 가능하며 뒤에서 설명하겠습니다.

이전에 ECN 메커니즘을 3-way-handsahke로 ESTABLISHED시에 사용하는 필드에 ECE 필드입니다.

세부적인 동작

  1. 먼저 호납을 겪은 중간 라우터에서 다음 라우터로 패킷을 전달할 때 IP 헤더 내 ECN-CE 비트를 설정합니다.
  2. 여기서 ECN-CE 비트는 IP header 내 Type Of Service 필드 마지막 2비트를 나타내며 11로 표시되어 전달됩니다.
  3. 다음으로 패킷을 전달받은 수신자 호스트는 IP 헤더 내에서 ECE-CE 비트에 11로 표시되었다는 것을 확인합니다. (11일 경우 혼잡 발생)
  4. 수신자 호스트는 패킷을 전달받는 과정에서 혼잡이 발생했다는 것을 호스트에 알리기 위해 송신자 호스트에게 ACK 패킷을 전송시에 TCP 헤더 내에 ECE 비트를 설정하여 혼잡을 알립니다.
  5. 이를 전달받은 송신자는 패킷 전송 속도를 조절하기 위해 윈도우 사이즈를 감소시킵니다.
  6. 이후 송신자가 수신자에게 사용하는 세그먼트에는 CWR 비트가 설정되어 전달됩니다. 여기서 CWR은 혼바을 수신했다는 의미로 사용합니다.
  • NS : Nonce Sum으로 악의적인 ECN flag 세팅을 막고 잘못된 CE flag 설정을 변경하기 위해 존재
  • CWR: Congestion Windo Reduced로 tcp 송신자가 혼잡 제어 알고리즘으로 전송 속도 감소를 알림
  • ECE: ECE Echo로 TCP 수신자가 송신자에게 혼잡 알림

그 외의 Flag

  • URG: 이 포인터가 가리키는 긴급한 데이터는 우선순위가 높게 처리되어 우선적으로 처리된다.(요즘엔 많이 사용 안함)
  • PSH: 수신측에게 이 데이터를 최대한 빠르게 응용 프로그램에게 전달해달라는 플래그로 이 플래그가 0이라면 버퍼가 다 채워질 때까지 기다린다. 이 플래그가 1이면 이 세그먼트 이후에 더 연결된 세그먼트는 없다는 것을 뜻한다.
  • RST: 이미 연결이 확립된(ESTABLISHED) 상태인 상대방에게 연결을 강제로 리셋해달라는 의미
  • ACK: Acknowledgement(승인 번호), 필드에 값이 채워져있음을 알리는 플래그로, 이 플래그가 0이라면 승인 번호 필드 자체가 무시된다.
  • SYN: Synchronize, 상대방과 연결을 생성할 때, 시퀀스 번호의 동기화를 맞추기 위한 세그먼트
  • FIN: Finish, 상대방과의 연결을 종료하고 싶다는 요청인 세그먼트