<tcp의 특징>
1.connection-oriented
2.reliability
1) packet ordering
2) no packet loss
3) no packet error
4) no packet duplication
3.flow control, congestion control
4.mesage 경계 보존 하지 않음
해결방법1) 고정된 패킷 길이 사용 - 대역폭 낭비의 단점
해결방법2) delimiter 사용 - 패킷의 각 byte를 모두 검사해야 한다는 단점
해결방법3) packet size를 메세지의 맨 앞에 명시 - 구현이 다소 복잡하다는 단점??
5.효율적 multicast 불가
<udp의 특징>
1.stateless ( not connection-oriented )
2. not reliable ( tcp가 보장해주는 것을 전혀 보장해주지 않음)
3. no flow control, no congestion control
4. message 경계 보존 함
5.효율적 multicast 가능
http://stackoverflow.com/questions/47903/udp-vs-tcp-how-much-faster-is-it
http://www.laynetworks.com/comparative%20analysis_tcp%20vs%20udp.htm
tcp는 각 패킷마다 일일히 ack을 보내고 udp는 ack을 보내지 않기 때문에 udp가 latency가 더 좋다고 할 수 있다.
그러나 작은 패킷을 많이 보내는 경우 buffering을 하는 tcp가 throughput이 더 좋다.
tcp header가 udp header보다 크기는 하지만 buffering으로 인한 이점이 훨씬 크기 때문이다.
이 경우 udp가 network 자원을 더 쓰기 때문에 latency도 tcp가 좋을것 같은데.. 아닌가? -_-
tcp는 congestion control을 하기 때문에 모두에게 fairness를 제공하는데 이것이 이점이 될 수 있을 것 같다.
starvation이 발생하지 않기 때문에..
udp를 tcp 스럽게 쓰기 위해 tcp알고리즘을 application level에서 직접 구현할수도 있는데
어렵기도 하고 커널이 직접 해주는 tcp 보다 오버헤드가 훨씬 크다.
파일전송의 경우 udp가 tcp보다 좋다고 한다. (이건 큰 패킷을 보내는거라서?)
아무튼 그래서 나의 결론은 udp는 정말 udp가 아니면 안될것 같다 하는 곳에만 쓰고 그 외에는 tcp를 쓰는게 좋다는 것..
udp를 꼭 써야만 할 곳이란.. 일정 시간 간격으로 온도 정보를 서버로 전송하는 온도 센서(loss, duplication, ordering, error 등에서 자유로움)
동영상 서비스 제공 서버 ( loss,error 약간 있어도 깍두기 약간 보이고 땡임. duplication,ordering은 처리해야할것 같은데.. 그리고 multicast 유리)
파일전송( tcp window size는 max가 64K라고 함. 64K마다 ack 보내면 너무 느리지 않겠니. )
'네트워크' 카테고리의 다른 글
통신보안 (0) | 2012.03.16 |
---|---|
로그인 패킷 보호 알고리즘 (0) | 2012.03.16 |