[게임 서버] 3.5 수신 버퍼가 가득 차면 발생하는 현상

게시:     수정

카테고리:

태그:

📦 3. 소켓 프로그래밍

👉🏻 항목 5: 수신 버퍼가 가득 차면 발생하는 현상

📥 TCP에서의 수신 버퍼 동작

recv() 함수의 특징:

  • recv()는 1바이트라도 수신할 수 있다면 즉시 리턴, 이 외는 블로킹

수신 속도가 느린 경우:

  • TCP에서 수신 함수가 수신 버퍼에서 꺼내는 속도가 운영체제가 수신 버퍼의 데이터를 채우는 속도보다 느린 경우:
    1. 수신 측: 수신 버퍼가 꽉 참
    2. 송신 측: 송신 함수 send()가 블로킹
  • 위의 상태가 유지된다

📮 UDP에서의 수신 버퍼 동작

recvfrom() 함수의 특징:

  • 데이터그램이 최소 1개 도착했다면 즉시 리턴, 이 외는 블로킹

수신 속도가 느린 경우:

  • UDP에서 수신 함수가 수신 버퍼에서 꺼내는 속도가 운영체제가 수신 버퍼의 데이터를 채우는 속도보다 느린 경우:
    1. 수신 측: 수신 버퍼가 꽉 참
    2. 송신 측: 송신 함수 send()는 멈추지 않음. 즉, 보내진 데이터는 버려짐

🌐 라우터에서의 패킷 처리

라우터의 역할:

  • 여러 곳에서 도착하는 패킷 처리

처리 능력 초과 시:

  • 초당 처리 패킷량을 넘어서면 패킷을 늦게 처리하거나 버림

⚖️ TCP vs UDP 송신 특성 비교

TCP의 흐름 제어:

  • TCP에서 송신자는 수신자의 수신 성능에 맞춰 조정함

UDP의 송신 방식:

  • UDP에서 송신자는 수신자의 수신 성능을 고려하지 않고 마구잡이로 보냄

혼잡 현상:

  • → UDP가 마구잡이로 보내는 경우, TCP는 네트워크 경쟁에서 밀림
  • 이를 혼잡 현상이라고 함

🧐 정리

항목 TCP UDP
수신 조건 1바이트라도 있으면 리턴 데이터그램 1개라도 있으면 리턴
버퍼 가득 시 송신 측 send() 블로킹 send() 계속 실행 (데이터 버려짐)
흐름 제어 수신자 성능에 맞춰 조정 수신자 성능 고려 안 함
네트워크 혼잡 대응 속도 조절 속도 조절 없음
  • TCP는 흐름 제어를 통해 수신자의 수신 능력을 고려하여 안정적인 데이터 전송을 보장한다
  • UDP는 흐름 제어가 없어 빠르지만 데이터 손실이 발생할 수 있다
  • UDP의 무분별한 전송은 네트워크 혼잡을 야기하여 TCP 통신에 영향을 줄 수 있다

GameServer 카테고리 내 다른 글 보러가기

댓글남기기