[서버] UDP 패킷 손실에 대하여

2015. 9. 12. 23:29프로그래밍/서버

728x90
728x90

참고

http://stackoverflow.com/questions/10355626/udp-packet-size-and-packet-losses


서론

패킷 손실이 언제 일어나는지에 대해 알아보았다.

패킷이 손실되는 이유는 대부분 검색 결과에선 송신측에서는

패킷을 보내기만 하는데 수신측 버퍼가 해당 패킷을 받을 준비가 되지 않았을 때라고 한다.


큰 사이즈 패킷을 UDP로 보낼 때 문제점

TCP는 해당 패킷을 전송할때 스트림 형태로 해당 패킷에

시퀀스를 붙여 보내 오지 않은 패킷은 재요청하고 패킷을 조립한다.


하지만 UDP는 이러한 동작이 없다,

그리고 이더넷단에서 MTU가 있기때문에 63K의 UDP 패킷을 보내도

1500byte의 사이즈로 47+ 개 정도로 분할되어 전송이 된다.

그렇기 때문에 해당 조각 중에 하나라도 받지 못하면 패킷은 받지 못한 것이된다.

그러므로 큰 사이즈 패킷은 위험하다. 손실률이 높다.


RUDP(Reliable UDP)

TCP의 Reliable한 특성은 세 가지.

- 데이터의 변형이 없다.

- 데이터의 손실이 없다.

- 데이터가 순차적으로 도착한다.


패킷 구성

- 전송타입

: UDP 고유의 방식, 전송을 보장하지만 순서를 상관없는 타입, 전송을 보장하고, 보낸 순서대로 받는 타입

- 패킷 고유 넘버

: 패킷의 고유 번호를 가지고 있으며 패킷이 도착했는지 확인하는 ack 신호를 사용한다.

- 에러 검출코드

: 패킷의 CRC나 Checksum 코드를 삽입해 처리한다.

- 데이터

: 실 데이터만 있으면 되지만 크기가 아주 작은 데이터를 한꺼번에 많이 보내는 경우 네이글 알고리즘을 적용한다.

728x90
반응형

'프로그래밍 > 서버' 카테고리의 다른 글

[참고] cgcii 홈페이지. 열심히 읽어보자!  (0) 2015.10.26
[서버] 홀펀칭  (4) 2015.09.13
[서버] nagle 알고리즘  (0) 2015.09.13
[서버] TTL  (0) 2015.09.12
TCP Max Packet  (0) 2015.09.11
리눅스 vim cheat sheet  (2) 2015.09.05
TCP vs UDP  (1) 2015.08.18