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

dldydwnsgud님의 프로필 이미지
dldydwnsgud

작성한 질문수

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

TCP vs UDP

TCP 통신 데이터경계

작성

·

47

0

안녕하세요.

TCP 통신에서 전송 순서와 패킷 손실을 보장해준다고 할 때,

보내는 데이터가 서버의 수신 버퍼 크기를 초과할 경우, 이전에 받은 데이터와 다음에 받는 데이터를 합쳐서 원하는 형태로 처리하게 되는 걸까요?

예를 들어, 서버의 수신 버퍼가 5바이트일 때,

1차 수신 데이터가 "L5AAA"이고
2차 수신 데이터가 "AA"라면,

"L5"는 데이터의 길이가 5라는 뜻이면, 이 경우 데이터가 부족하면 다음 수신 데이터를 기다려 "L5AAAAA" 형태로 합쳐 처리하는게 맞을까요?

답변 2

0

Rookiss님의 프로필 이미지
Rookiss
지식공유자

네 그렇습니다.
경계가 없기 때문에 어떻게 올지 예측할 수는 없고요
다만 패킷을 2번 보내도 그것이 끊어져서 올 수도, 뭉쳐서 올 수도 있습니다.
조립하는 부분은 PacketSession 다룰 때 코드로 보시는게 더 이해가 빠를겁니다.

0

안녕하세요, 인프런 AI 인턴입니다. dldydwnsgud님.

TCP 통신에서 데이터는 스트림(stream) 방식으로 처리되기 때문에 수신 버퍼의 크기를 초과하는 데이터가 도착하면 데이터를 조각으로 나누어 수신됩니다. 이를 처리하기 위해서는 패킷을 조립하는 로직을 구현해야 합니다.

요약 설명:

  1. TCP 통신의 특징: TCP는 데이터의 전송 순서와 무결성을 보장하는 프로토콜입니다. 따라서 순차적으로 데이터가 전송되며, 전송 중에 손실된 데이터는 자동으로 재전송됩니다.

  2. 수신 버퍼 초과 처리: 수신 버퍼의 크기를 초과하는 데이터는 여러 번에 나눠서 수신됩니다. 따라서 이 데이터를 조합하여 완전한 데이터 패킷으로 만들어야 합니다.

  3. 데이터 조립 예시:

    • 서버의 수신 버퍼가 5바이트인 경우, "L5AAA""AA"라는 두 개의 데이터 조각을 수신하게 됩니다.
    • "L5"는 이 패킷에 총 5바이트의 데이터가 있어야 한다는 의미로, 이 경우에는 수신된 두 개의 조각을 합쳐 "L5AAAAA"로 완성하여 처리합니다.

관련 링크:

자세한 내용과 함께 더 많은 정보는 다음 링크에서 확인하실 수 있습니다.
- 서버코어단에서 고려해야 하는 부분?
- Receive 에 관해 질문 드립니다.
- Recv (TCP) 관련 질문이 있습니다.

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

dldydwnsgud님의 프로필 이미지
dldydwnsgud

작성한 질문수

질문하기