네트워크에서 흔히 발생할 수 있는 장애 종류 다섯 가지를 소개하고자 한다.
💡 개념
TCP 연결에서 발생하는 현상으로, 수신측의 버퍼가 가득 차서 더 이상 데이터를 받을 수 없을 때 발생하는 장애 현상이다. 제로 윈도우 발생 시 송신측은 수신측에 해당 상황을 알리기 위해 TCP 헤더에 있는 윈도우 크기 필드를 통해 이 정보를 전달하며, 윈도우 크기가 0이 되면 송신측은 데이터 전송을 중지한다. 이 상태에서 수신측은 처리할 수 있는 여유가 생기면 윈도우 업데이트 패킷을 송신측에게 보내어 데이터 전송을 재개하도록 한다.
🛍 상황 예시
한 온라인 쇼핑몰에서 대규모 세일 이벤트가 진행할 수천 명의 사용자들이 거의 동시에 해당 웹사이트에 접속하여 구매를 시도할 때, 요청의 양이 너무 많아 서버의 버퍼가 급격히 차기 시작한다.
서버의 버퍼가 가득 차게 되면, 서버는 클라이언트에게 윈도우 크기가 0인, 즉 '제로 윈도우' 상태를 알리는 TCP 패킷을 보내고, 이 상태가 되면 클라이언트는 데이터 전송을 중단하고, 서버가 처리할 수 있는 여유가 생길 때까지 기다린다.
예를 들어, 사용자 A가 상품 구매를 위해 결제 정보를 입력하고 '구매' 버튼을 클릭했지만, 서버가 제로 윈도우 상태에 도달하여 사용자 A의 요청을 즉시 처리하지 못하는 상황이 발생할 수 있다. 사용자 A는 결제가 완료될 때까지 페이지에서 대기해야 하고, 이 때 서버는 버퍼가 가용 상태가 되면 클라이언트에게 윈도우 크기를 업데이트하여 데이터 전송을 재개할 수 있음을 알리게 된다.
💡 개념
Out Of Order 는 TCP 네트워크 통신에서 발생하는 현상으로, 패킷이 송신된 순서와 다른 순서로 수신되는 것을 말한다. 이는 네트워크의 지연, 경로 변경, 혼잡 등으로 인해 발생할 수 있다. TCP는 순서 번호를 사용하여 각 패킷의 순서를 추적하며, 수신된 패킷이 올바른 순서가 아닐 경우 재정렬하여 데이터를 올바르게 재조립한다.
🏞 상황 예시
예를 들어, 사용자가 웹사이트에 접속하여 큰 이미지 파일을 다운로드하는 상황에서 이 파일은 여러 개의 TCP 패킷으로 나누어져 전송된다. 네트워크 상의 지연이나 혼잡으로 인해, 이 패킷들이 전송된 순서와 다른 순서로 사용자에게 도착할 수 있다. 즉, 파일의 마지막 부분이 먼저 도착하고 그 다음에 첫 번째 부분이 도착하는 것과 같은 상황이 발생할 수 있다.
이 경우 TCP 프로토콜은 순서 번호를 기반으로 패킷을 올바른 순서대로 재정렬한다. 만약 어떤 패킷이 누락되었다면, TCP는 해당 패킷을 재전송 요청을 하여 파일이 올바르게 조립되도록 한다.
💡 개념
패킷 손실은 네트워크에서 데이터 패킷이 목적지에 도달하지 못하고 중간에 사라지는 현상을 말한다. 이는 네트워크 혼잡, 부적절한 라우팅, 하드웨어 장애, 신호 감쇠 등 여러 이유로 인해 발생할 수 있다. 패킷 손실이 발생하면 데이터 전송의 완전성과 효율성이 저하되며 이는 네트워크 성능 저하로 이어질 수 있다.
🎥 상황 예시
회사의 화상 회의 시스템 중 회사의 네트워크가 혼잡하거나 회의 시스템을 호스팅하는 서버에 문제가 있을 경우, 화상 회의 중에 패킷이 손실될 수 있다. 이로 인해 참가자들은 화면이 멈추거나 소리가 끊기는 등의 현상을 접할 수 있다.
해결책
재전송 타임아웃 (Retransmission Timeout, RTO)
TCP는 각 패킷에 대해 타임아웃을 설정한다. 만약 설정된 시간 내에 해당 패킷에 대한 ACK(수신 확인 응답)이 도착하지 않으면, TCP는 해당 패킷을 손실된 것으로 간주하고 재전송한다. RTO는 네트워크의 지연 시간과 변동성을 고려하여 동적으로 조정된다.
순차 번호 및 확인 응답
TCP는 모든 패킷에 순차 번호를 부여한다. 수신자는 받은 패킷의 순차 번호에 따라 ACK를 송신자에게 보내어 어떤 패킷을 받았는지 알린다. 만약 송신자가 예상하는 순차 번호의 ACK를 받지 못하면, 해당 패킷을 재전송한다.
빠른 재전송 (Fast Retransmit)
송신자가 동일한 순차 번호의 ACK를 연속적으로 여러 번 받으면, 이는 네트워크상에서 패킷 손실이 발생했음을 나타낸다. 예를 들어, 네 개의 패킷을 받아야 하는 client측에서 두 개까지의 패킷만 받은 경우, 마지막으로 받은 패킷의 번호 ACK를 반복 전송하여 세 번째 패킷이 도착하지 않음을 알리는 것이다. 이런 경우, TCP는 타임아웃을 기다리지 않고 즉시 해당 패킷을 재전송한다.
이러한 메커니즘을 통해 TCP는 네트워크에서 패킷 손실이 발생할 경우 이를 효과적으로 처리하고, 데이터 전송의 신뢰성을 유지한다.
💡 개념
네트워크 지연은 데이터가 소스에서 목적지까지 이동하는 데 걸리는 시간이 지연되는 것을 의미한다. 이는 네트워크의 혼잡, 라우팅 경로, 서버의 처리 속도, 데이터의 양 등 여러 요인에 의해 발생할 수 있다. 네트워크 지연은 일반적으로 다음 네 가지 주요 요인으로 구분된다.
전파 지연 (Propagation Delay): 신호가 물리적 매체를 통해 이동하는 데 걸리는 시간.
전송 지연 (Transmission Delay): 데이터를 네트워크 매체로 전송하는 데 걸리는 시간.
처리 지연 (Processing Delay): 라우터나 스위치 등 네트워크 장비에서 데이터를 처리하는 데 걸리는 시간.
대기 지연 (Queuing Delay): 네트워크 장비의 대기열에서 데이터 패킷이 처리를 기다리는 데 걸리는 시간.
🎥 상황 예시
국제적인 화상 컨퍼런스를 진행하는 상황에서 참가자들이 전 세계에 퍼져 있을 경우, 데이터 패킷이 여러 국가의 네트워크 노드를 거치면서 전파 지연이 발생할 수 있다. 또한, 네트워크의 트래픽이 많은 시간대에는 라우터의 대기열이 길어져 대기 지연이 발생할 수 있다. 이로 인해 비디오나 오디오 신호에 지연이 생겨 참가자들이 실시간으로 원활하게 소통하는 데 어려움을 겪을 수 있다.
해결책
네트워크 최적화: 네트워크의 대역폭을 증가시키고, 라우팅 경로를 최적화하여 전송 지연을 줄일 수 있다.
캐싱: 자주 접근하는 데이터를 지리적으로 가까운 위치에 캐싱하여 전파 지연을 줄일 수 있다.
💡 개념
네트워크 통신 과정에서 동일한 데이터 패킷이 여러 번 수신되는 현상을 말한다. 이는 네트워크의 지연, 패킷 손실 후 재전송 과정, 또는 오류 있는 네트워크 장비의 동작으로 인해 발생할 수 있다. TCP 프로토콜은 패킷의 순차 번호를 사용하여 중복된 데이터를 식별하고, 필요하지 않은 중복 패킷을 제거함으로써 데이터 전송의 정확성을 보장한다.
✉️ 상황 예시
이메일 서버와 클라이언트 간의 통신에서 중복 데이터가 발생하는 상황을 가정해 보자. 클라이언트가 서버에게 이메일을 요청하고, 서버는 이메일 데이터를 패킷으로 나누어 클라이언트에게 전송한다. 이 때 만약 네트워크 상의 일시적인 문제로 인해 클라이언트가 특정 패킷에 대한 ACK를 서버에게 제대로 전송하지 못한다면, 서버는 해당 패킷이 손실되었다고 판단하고 재전송할 수 있다.
이 과정에서 원래의 패킷이 실제로는 정상적으로 도착했으나 ACK만 지연되어 도착했다면, 클라이언트는 같은 내용의 패킷을 두 번 받게 된다. 이 경우, TCP의 순차 번호를 통해 클라이언트는 이러한 중복된 패킷을 식별하고 처리하여, 최종 사용자에게 중복 없는 정확한 이메일 내용을 전달할 수 있다.