IT/기초 지식

[네트워크] TCP/IP와 TCP/UDP

개발자 두더지 2020. 10. 28. 00:55
728x90

TCP/IP란


 TCP/IP란 레이어 3의 IP와 레이어 4의 TCP/UDP를 합쳐 통신을 하는 프로토콜으로, 현재 인터넷 통신의 일반적인 통신 모델이다. 더욱이 상위 레이어(http, dns, ftp, ntp등)의 프로토콜은 이러한 TCP/IP통신으로 캡슐화되어 상대처에 정보가 보내진다. 또한, 하위 레이어(물리 케이블/Ethernet등)은 전송 미디어에 따라 다르지만, TCP/IP통신을 캡슐화한다.

 

TCP/UDP란


 TCP와 UDP는 함께 클라이언트와 서버 간의 통신 채널의 제공, 통신을 관리하며, 레이어4의 프로토콜이다. 통신 채널이란 말하자면 "포트"라는 것으로 1번부터 65535번까지의 번호가 사용된다. 동일한 IP 주소라도 TCP나 UDP의 포트가 다르면 제공되는 서비스가 달라진다. 참고로 포트 번호는 3개의 타입으로 분류할 수 있다.

포트번호의 타입 포트번호의 범위 설명
잘 알려진(well-known)포트번호 0~1023 IANA에서 관리. 서버의 어플리케이션에 할당된 포트 번호.
등록완료된 포트 번호 1024~49151 IANA에서 관리. 독자적으로 작성된 어플리케이션에 할당되는 포트 번호.
다이나믹 포트 번호 49152~65535 클라이언트쪽의 어플리케이션에 자동적으로 할당되는 포트 번호

 하나의 예를 들어 설명하도록 하겠다. 아래의 그림에서 클라이언트 PC가 Web 페이지를 열려고하면 클라이언트 PC가 대상 포트 번호를 "80"으로 지정하여 접근한다. Web 브라우저와 Web서버의 데이터 송수신은 HTTP 프로토콜(포트번호80)을 사용한다. 그리고 서버로부터 Web페이지 정보를 얻기 위해서는 클라이언트 PC쪽도 포트번호가 필요하다. 이 포트 번호는 어플리케이션이 랜덤・동적으로 할당한다. 이번의 예의 경우, Web 브라우저가 자신의 포트 번호를 54321로 할당하였으므로 그 자체의 포트 번호(송신원 포트번호)로써 송출한다. Web 서버가 클라이언트PC로부터의 버켓을 송신하면, 송신원의 IP 주소와 대상 포트번호의 정보를 알 수 있으므로 이 송신원의 정보를 대상의 정보로 하여 데이터를 반송하여 쌍방향 통신이 성립된다.

 또한, 클라이언트 PC가 복수의 Web브라우저를 열고 있는 경우, 그 Web 브라우저마다 올바른 Web 페이지를 표시되도록 하기 위해 Web브라우저마다 다른 포트 번호를 랜덤으로 할당한다. 그러한 이미지는 아래와 같다.

 결국 간단히 말하자면, TCP나 UDP를 사용하는 것으로 어떤 1대의 서버의 1개의 IP 주소로 복수의 서비스(http/dns/SMTP 등)을 제공하도록 할 수 있다. 서비스의 경우에 따라 TCP밖에 사용할 수 없는 것과  UDP만 사용할 수 있는 것이 있지만, TCP와 UDP 어느쪽이든 사용할 수 있는 것도 있다. 예를 들어 DNS는 어느쪽이든 사용가능하다. 

 

TCP와 UDP의 상세설명 및 비교


TCP와 UDP

 TCP(Transmission Control Ptotocol)은 IP주소와 같이 인터넷에 있어서 표준으로 이용되는 프로콜이다. TCP는 IP 사위 프로토콜로 트랜스포트층에 동작하는 프로토콜이다. 네트워크층의 IP와 섹션층 이상의 프로토콜(예: HTTP, FTC, Telnet)의 다리 역할로 동작한다. TCP는 신뢰성이 높은 통신을 표현하기 위해 사용되는 프로토콜에 반해 TCP와 같이 IP상위 프로토콜인 UDP(User Datagram Protocol)는 신뢰성이 높지는 않으나 빠른 통신에 사용되는 프로콜이다. UDP에 대해 조금 더 자세히 살펴보자.

 UDP의 헤더 포멧

필드 비트수 필드의 설명
송신원 포트 번호(送信元ポート番号) 16bit 송신원의 포트번호의 값
대상 포트 번호(宛先ポート番号) 16bit 대상의 포트 번호의 값
패킷 길이(パケット長) 16bit "UDP 헤어"의 길이와 "UDP데이터"의 길이를 합한 사이즈의 값
체크섬(チェックサム) 16bit UDP 헤드와 데이터 부분의 에러 체크를 위해 사용하는 값.

UDP의 특징

 UDP는 커넥션리스형의 프로토콜로 TCP와 비교하여 신뢰성이 없지만 고속통신이 가능하다. 또한 UDP 헤더 사이즈(8byte)가 작아 그 만큼 어플리케이션의 데이터를 많이 송수신하는 것이 가능하다. 그러나 패킷이 도달한다고 보장할 수 없기 때문에 패킷 손실의 경우 어플리케이션쪽에서 재전송 처리를 하여 통신을 성립시키거나, 패킷 손실이 용인되는 응용 프로그램이 필요하다. 

UDP의 용도

① 음성이나 영상등의 리얼타임(real-time)의 데이터를 송신하는 경우

 음성의 데이터를 전송하는 경우, TCP와 같이 데이터를 송신할 때마다 확인응답을 하도록 한다면 음성 통화가 끊어지거나, 잘 안들리는 등의 문제가 발생한다. 이러한 리얼타임으로 데이터를 통신할 때는 신뢰성보다는 빠르게 데이터를 송신하는 편이 요구된다. 따라서, 음성통화에서는 UDP의 쪽이 품질이 높다.

② 복수의 상대에 같은 데이터를 동시에 전송하는 경우

 TCP통신에서는 통신상대와 1대1로 연결이 성립될 필요성이 있으므로, 유니 캐시트 통신을 할 수 없다. 1개의 패킷을 복수의 대상으로 보내는 것과 같은 멀티 캐스트통신이나 브로드캐스트 통신에서는 TCP를 사용하는 것이 불가능하다. 따라서 1대N의 통신을 실시하기 위해 연결이 성립될 필요가 없는 UDP가 적당하다.

③ 신뢰성이 필요없는 소량의 데이터를 전송하고 싶은 경우

 예를 들어 DNS 서버 어떠한 클라이언트PC의 데이터 통신은 클라이언트 PC로부터 한 번의질문과 그에 대한 DNS서버로부터의 응답 한 번의 데이터 전송하는 것으로 통신이 완료된다. 이러한 통신을 3way handshake로 3회 실시한다면 효율이 나쁘다. 그러므로 소량의 데이터 전송의 경우 UDP가 적당하다. 

TCP와 UDP의 비교

프로토콜 TCP UDP
통신방식 커넥션형 커넥션리스형
신뢰성 높다 낮다
전송 속도 저속 고속
상위 프로토콜 HTTP, Telnet, FTP, POP.... DNS, NTP, DHCP, SNMP ...
주된 용도 web 페이지, 메일의 송수신, 파일 전송, 공유 음성통화, Video스트리밍, 멀티캐스트통신, 브로드캐스트 통신, 소량의 데이터 통신
주된 특징 1. 포트번호를 이용한 상위 프로토콜로의 데이터 전달
2. 커넥션의 확립, 유지, 절단
3. 순서 제어, 재송신 제어, 윈도우 제어, 흐름(flow)제어
1. 포트번호를 이용한 상위 프로토콜로의 데이터 전달
2. 오버헤드가 적음(헤드가 8byte)
3. 신뢰성이 없음(패킷 손실이 되어도 재송신하지 않는 등)

참고자료

www.infraexpert.com/study/tcpip7.html

milestone-of-se.nesuke.com/nw-basic/tcp-udp/tcp-udp-summary/

www.infraexpert.com/study/tcpip12.html

728x90