TIL 11 | TCP와 UDP

Seon Kang choi·2021년 10월 1일
0

UDP(User Datagram Protocol)

비연결형 프로토콜이다. IP데이터그램을 캡슐화하여 보내는 방법과 연결 설정을 하지 않고 보내는 방법을 제공한다. 연결을 위해 할당되는 논리적인 경로가 없다. 그렇기 때문에 각각의 패킷은 다른 경로로 전송되고, 각각의 패킷은 독립젹인 관계를 지니게 된다. 서로 다른 경로로 독립적으로 처리함에도 패킷에 순서를 부여하여 재조립을 하거나 흐름제어 또는 혼잡제어와 같은 손상된 패킷을 수신에 대한 재전송을 하지 않는다. 사용자 프로세스의 몫이다. 그렇기 때문에 신뢰성보다는 연속성이 중요한 서비스 예를 들어 실시간 서비스에서 자주 사용된다.

이런 점들을 보완하기 위한 몇 가지 장치들이 존재한다. RTP 스트림에서 보내지는 각 패킷보다 하나 높은 번호가 주어진다. 이런 번호 부여 방식은 목적지로 하여금 어느 패킷이 분실됐는지 알 수 있게 한다. 만약 한 패싴이 없다면 이를 획득하기 위해 목적지에서 최상의 동작은 보간(Interpolation)에 의해 손실한 값에 대한 근사치를 얻는 것이다. 재전송은 재전송된 패킷이 유용하기에 너무 늦게 도착하므로 실용적인 옵션이 아니다. 따라서 RTP는 확인 응답이 없고 재전송을 요청하는 매커니즘도 없다.

TCP(Transmission Control Protocol)

일반적으로 TCP와 IP를 함께 사용하는데 IP가 데이터를 처리한다면 TCP는 패킷을 추적 및 관리하게 된다. TCP는 연결형 서비스를 지원하는 프로토콜로 인터넷 환경에서 기본으로 사용된다. TCP는 가상 회선 방식을 제공하는데 발신자와 수신자를 연결하여 패킷을 전송하기 위한 논리적 경로를 배정한다는 말이다. 3-way-handshaking 과정으로 신뢰성을 보장한다. 그리고 데이터의 흐름제어나 혼잡제어와 같은 기능도 합니다. 하지만 이런 기능들 때문에 UDP보다 속도가 느리다. 하지만 이런 기능들이 있기에 연속성보다는 신뢰성있는 전송이 중요할 때 사용하는 프로토콜로 파일전송과 같은 경우에 사용된다.

TCP의 특징은 모든 바이트가 고유의 32비트 순서번호를 갖는다. 송수신 TCP 개체들은 세그먼트의 형태로 데이터를 주고받는다. 한 세그먼트는 고정 2바이트 헤더와 그 뒤를 따르는 0개 이상의 데이터 바이트들로 구성된다. 세그먼트의 크기는 두 가지 제약요소가 있다. 한 가지는 모든 세그먼트들은 TCP 헤더를 포함하여 IP 수용량인 65515바이트를 넘을 수 없다는 것과 모든 네트워크는 정해진 MTU(Maximum transfer Unit)를 갖는데 각 세그먼트는 이 MTU를 넘을 수 없다는 것이다.

TCP 기본 프로토콜은 동적으로 윈도우 크기를 조절하는 슬라이딩 윈도우 프로토콜이다. 송신자는 한 세그먼트를 전송할 때 타이머를 구동시킨다. 세그먼트가 목적지에 도착하면 수신측에서 다음에 받을려고 하는 순서번호와 같은 응답번호를 포함한 세그먼트를 송신측에 보낸다. 보낼때 보낼 데이터가 있다면 같이 보낸다.
만약 구동 타이머가 종료되면 송신자는 세그먼트를 재전송한다. 세그먼트의 순서가 바뀌어 도착할 수 있으며 재선송 경우 올바르게 수신될 수 있게 스트림 내에 각 바이트가 자기 고유의 offset을 확인하여 순서를 확인할 수 있다.

profile
유쾌한 개발 생활~

0개의 댓글