udp통신에서 특정 조건에의 패킷 순서 바뀜

보낸 데이터의 사이즈가 특정수준 이하로 내려갈 경우 스위치를 통해서 전달된 패킷의 순서가 바뀌는 현상이 있는데..

도무지 원인을 알수가 없네요..

스위치는 시스코 9300모델인데..

이게 스위치와 연관이 있을수도 있는 문제인가요?

4개의 답변이 있어요!

  • 안녕하세요. 박재화 전문가입니다.

    UDP는 원래 TCP 처럼 순서를 보장하진 않습니다. 그렇기 때문에 패킷 순서가 바뀌는 현상 자체는 발생될 수 있습니다.

    다만 같은 출발지, 목적지, 포트의 단일 흐름이라면 일반적인 스위치 하나를 통과하면서 순서가 뒤집히는 경우는 흔하지는 않을 것으로 생각됩니다. Cisco 9300과 연관이 있다면 포트채널이나 ECMP, QoS 큐잉, 버퍼링, 로드밸런싱 설정 등에 의심을 해볼 수 있습니다.

    먼저 단일 포트 직결 테스트를 해보고 정상이라면, 스위치의 설정이나 경로 문제, 직결에서도 같다면 프로그램이나 장비 쪽의 문제로 보는 것이 맞을 것 같네요.

    채택 보상으로 218베리 받았어요.

    채택된 답변
  • 안녕하세요. 김재훈 전문가입니다.

    시스코 카탈리스트 9300 스위치 환경에서 특정 크기 이하의 소형 UDP 패킷 순서가 뒤바뀌는 현상은 스위치의 로드 밸런싱 해시 알고리즘 설정과 밀접한 연관이 있을 수 있습니다.

    네트워크 경로에 EtherChannel이나 Equal-Cost Multi-Path구간이 존재할 경우 스위치는 보통 패킷의 IP와 L4 포트 번호 등을 조합하여 해싱한 후 전송 경로를 결정하는데 패킷의 크기가 너무 작아지면 특정 장비의 칩셋 특성이나 OS 패딩 처리 과정에서 L4 포트 정보를 제대로 참조하지 못하고 L3나 L2 정보만으로 해싱하는 예외가 발생할 수 있습니다.

    이로 인해 원래는 동일한 포트 번호를 가져서 같은 경로로 가야 할 패킷들이 서로 다른 물리 링크로 분산 배치되면서 먼저 보낸 작은 패킷이 뒤늦게 보낸 패킷보다 늦게 도착하는 순서 뒤바뀜이 발생하게 되므로 스위치에서 port-channel load-balance 설정을 검토하거나 최소 패킷 크기를 더미 데이터로 패딩하여 테스트해 보시는 것을 권장합니다

  • 안녕하세요. 김상엽 전문가입니다.

    Cisco 9300 스위치에서 패킷 크기가 작아지면, 스위치의 ECMP나 ASICs 처리 과정에서 미세한 속도 차이로 순서가 뒤바뀔 수 있습니다. 스위치 내의 패킷 순서 보장 설정을 점검해 보세요.

  • 안녕하세요. 이승호 전문가입니다.

    시스코 카탈리스트 구천삼백 모델을 사용 중이시라면 충분히 스위치 하드웨어 및 설정과 연관이 있을 수 있는 현상입니다. 네트워크 장비에서 특정 크기 이하의 작은 패킷들만 순서가 뒤바뀌는 문제는 엔지니어들이 종종 겪는 까다로운 이슈 중 하나입니다.

    가장 유력한 원인 중 하나는 이더채널이나 포트채널 같은 링크 결합 설정을 사용하고 계실 때 발생합니다. 스위치는 여러 물리 링크로 트래픽을 분산할 때 동일한 흐름의 데이터가 찢어지지 않도록 아이피 주소나 포트 번호를 조합해 해시 값을 계산합니다. 그런데 패킷의 사이즈가 일정 수준 이하로 너무 작아지면 스위치의 내부 처리 칩셋이 동일한 흐름으로 인지하지 못하고 서로 다른 물리 링크로 패킷을 쪼개서 보내버릴 수 있습니다. 이 과정에서 미세한 도달 시간 차이가 생겨 순서가 뒤바뀌게 됩니다.

    또 다른 원인으로는 시스코 스위치의 스택 구조나 내부 버퍼링 메커니즘을 들 수 있습니다. 구천삼백 모델은 여러 대를 묶어 스택으로 사용하는 경우가 많은데, 패킷이 스택 구조 내부의 링을 타고 이동할 때 크기가 작은 데이터들은 대용량 데이터와 다른 고속 처리 파이프라인을 타게 됩니다. 이때 스위치 내부 버퍼에서 일시적인 정체가 있거나 미세한 타이밍 차이가 생기면 나중에 들어온 작은 패킷이 먼저 빠져나가는 현상이 생길 수 있습니다.

    장비 자체의 큐잉 정책이나 큐 관리 알고리즘이 작은 크기의 패킷에만 민감하게 반응하여 내부 우선순위를 순간적으로 변경했거나, 해당 UDP 트래픽이 특정 보안 규칙이나 모니터링 기능에 걸려 하드웨어가 아닌 스위치 내부 CPU로 올라가 처리되면서 병목이 생겼을 가능성도 배제할 수 없습니다.

    우선 이 증상이 스택으로 연결된 서로 다른 스위치 멤버 간의 포트에서 발생하는지, 혹은 포트채널 링크를 타고 갈 때만 발생하는지 구간을 좁혀보시는 것을 추천합니다. 포트채널이 원인이라면 로드밸런싱 해시 알고리즘 설정을 변경해보는 것으로 해결의 실마리를 찾으실 수 있습니다.