인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

otteu1m님의 프로필 이미지
otteu1m

작성한 질문수

Windows 소켓 프로그래밍 입문에서 고성능 서버까지!

대표적인 TCP 장애 유형과 연결에 대한 정의

대표적인 TCP 장애 유현

해결된 질문

작성

·

23

·

수정됨

0

 안녕하세요 개발자님 강의 너무 잘 들고 있습니다.

 

자세한 답변 부탁드립니다.

와이어 샤크를 톨해 대표적인 TCP 장애 유형 을 다 캡처하는 작업 까지 진행 했습니다.

 

여기서 의문인 것은, Packet Loss, TCP Out of order, Retransmission , Dup ACK 를 통해

세그먼트된 데이터의 유실 이나 순서를 OS가 최대한 보장 하기 위한 노력이다라고 생각하고,

 

  1. (의문점) 첫번째, 세그먼트 조각 모음 하는 장소

그 다음 전송된 세그먼트들을 조각 모음 하는 장소가 TCP Buffer(Window Size) 이며, 여기서 유실된 세그먼트 및 순서 및 중복을 검증 하고, 그 응답(대표적인 TCP 장애유형)을 송신측으로 전송 한다. ( O , X )

 

2. (의문점) 두번째, Socket 으로 전송 시점
TCP Buffe r를 통해 완성된 데이터(세그먼트의 조각이 다도착해서 순서를 마춘 상태, 중복은 버리고) 가 잘 만들어 졌다고 가정한 상태에서, 완성된 데이터를 Socket 에 Copy 하는지 ? ,
아니면 TCP buffer 에 세그먼트가 도착 하자마자(세그먼트 조각 모음 하지 않고), 즉시 Socket에 Copy 가 이루어 지는지가 궁금 합니다. !!!!!

세그먼트 조각 모음을 하지 않으면, 대표적인 TCP 장애 유형을 검증 하는 것이 힘들거 같고, 방식이 궁금 하여 문의 드립니다.

답변 2

0

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

  1. TCP 버퍼에 쌓이는 것은 OS 수준에서 수신이 완료된 데이터 입니다. 그러므로 세그먼트 중복이나 유실을 확인하는 위치는 이 TCP 버퍼라 할 수는 없겠습니다. 다만 성능을 생각했을 때 굳이 다른 버퍼에서 조립할 이유는 없겠습니다. 이러한 디테일은 TCP 표준이 정의하는 것이 아니므로 구현하는 쪽에서 알아서 할 일입니다. 그러므로 맞다고도 틀렸다고도 할 수 ㅇ벗습니다.

  2. 이 역시 반은 맞고 반은 틀립니다. 일반적인 경우라면 OS수준에서 받은 데이터들을 소켓 입력 버퍼로 복사할 것입니다. 그러나 Windows OS환경의 IOCP같은 구조에서는 불필요한 메모리 복사를 줄이도록 하기 위해 응용 프로그램의 데이터 수신 버퍼를 OS가 직접 활용합니다. 쉽게 말해 소켓 입력 버퍼가 없을 수도 있습니다. 즉, OS에서 바로 응용 프로그램으로 넘어갑니다.
    여기에 한 술 더 떠서 NIC에서 바로 복사하는 구조도 있습니다. 소위 Zero-copy 기술입니다. 내용이 너무 길어지므로 관심이 있다면 한 번 찾아보시기 바랍니다.

TCP라는 규약을 코드로 구체화 하는 것에 관해서는 표준이라 할 수 있는 것이 없습니다. 기본 규칙만 맞으면 될 뿐입니다. 참고하시기 바랍니다. 😄

0

안녕하세요, 인프런 AI 인턴입니다. otteu1m님이 질문하신 TCP 장애와 관련된 부분에 대해서 설명드리겠습니다.

1. 세그먼트 조각 모음 장소

TCP 프로토콜은 세그먼트 조립 및 검증 과정을 OS의 TCP 스택 내에서 처리합니다. TCP 버퍼(Window Size) 는 수신자가 얼마나 많은 데이터를 수용할 수 있는지를 나타내며, 이 버퍼 내에서 세그먼트가 조립됩니다. OS는 수신된 세그먼트의 순서와 중복을 확인하여 필요한 경우 재전송을 요청하거나 적절한 순서대로 데이터를 재조립합니다. 이 모든 과정은 TCP 프로토콜 수준에서 자동으로 처리됩니다.

  • (O) 세그먼트들은 OS의 TCP 스택 내에서 조립 및 검증되며, TCP 버퍼는 이 과정의 일부로 사용됩니다. 응답은 송신측으로 전송되어, 필요한 경우 오류 수정 등을 가능하게 합니다.

2. 소켓으로 전송 시점

일반적으로 TCP 프로토콜은 수신된 세그먼트들이 올바른 순서로 조립된 후, 완료된 데이터는 소켓 버퍼로 복사됩니다. TCP는 패킷이 제대로 수신되지 않았을 경우, 순서가 맞춰질 때까지 내부적으로 문제 해결을 시도합니다. 따라서, 데이터가 소켓에 복사되기 전에 반드시 올바르게 조립되어야 하며, 이는 TCP가 데이터의 순서와 무결성을 보장하기 위함입니다.

  • 데이터를 소켓에 전달하기 전에, TCP 스택에서 조립 과정이 완료됩니다. 그렇지 않으면 데이터의 순서와 무결성이 훼손될 수 있습니다.

추가 설명

와이어샤크를 통해 장애 유형을 분석하셨다면, 이러한 과정에서 발생하는 재전송 요청(Retransmission)이나 중복 ACK(Dup ACK) 등을 통해 TCP가 문제를 어떻게 해결하는지를 직접 관찰할 수 있었을 것입니다. 이러한 메커니즘들은 TCP가 안정적이고 신뢰할 수 있는 통신을 제공하기 위한 핵심 기능입니다.

관련된 질문과 심화된 답변은 다음에서 확인하실 수 있습니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

otteu1m님의 프로필 이미지
otteu1m

작성한 질문수

질문하기