강의

멘토링

커뮤니티

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

SIsB님의 프로필 이미지
SIsB

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

TCP vs UDP

TCP 프로토콜에 대해 더 여쭤보고 싶습니다

작성

·

260

0

OnRecvCompleted 콜백으로 오는 시점이 궁금합니다

커널에서 어느시점에 해당 소켓에 이벤트를 넘겨주는건가요?

수신버퍼에 조금이라도 차있고 해당 프로그램의 소켓의 순서가 되었을 때 프로그램에 넘겨주는건가요?

1. TCP 특성상 데이터 경계가 없다고 얘기해주셨는데, 그럼 어느시점에 프로그램에게 Recv 이벤트를 알려주는건지 궁금합니다.

2. MSS(1460byte) 보다 큰 App Payload를 TCP에 넘기면 TCP에서 패킷을 MTU 크기만큼 쪼게 나눠 보내는 걸로 알고 있는데요 이때에 나눠받을 때 일부분도 수신버퍼에 들어가고 Recv로 오게되나요? 아니면 쪼게진 패킷을 모두 받아야 수신버퍼에 넣고 어플리케이션으로 넘겨주고 이때 OnRecvCompleted 콜백이 호출되나요? 40byte 를 보냈으나 40byte를 그대로 받지 않는다는 부분의 경우의 수를 조금 더 알고싶습니다

답변 1

1

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

Recv는 단순하게 커널 수신 버퍼에 데이터가 있으면
그것을 유저 레벨 버퍼로 복사하는 것이고,
1바이트라도 수신 버퍼에 데이터가 있으면 성공적인 Recv로 인지합니다.
TCP라고 우리를 골탕먹이려고 데이터를 일부만 보낸다거나 하진 않습니다.
TCP에서는 상대방이랑 꾸준히 통신하면서 서로의 상황을 공유하는데
상대방 수신 버퍼에 공간이 충분하지 않으면 데이터를 일부만 보내는 것이죠.

TCP 이론에 대해 궁금하시면 별도의 서적을 같이 보시는 것이 도움이 됩니다.
이론 서적 중에 추천 드릴 책은 다음과 같습니다.

이중호의 TCP/IP 실무 특강

SIsB님의 프로필 이미지
SIsB

작성한 질문수

질문하기