네트워크 분야를 공부하다보면 마주하는 TCP, IP, UDP,, 수많은 ~~P들...이것들은 대체 뭐고, 차이점은 무엇일까?
일단 3가지 모두 P로 끝나는 것을 보아하니, Protocol 의 종류인 것 같은데, Protocol은 뭐지?
✍️0. 프로토콜(Protocol)이란?
통신 프로토콜 또는 통신 규약은 컴퓨터나 원거리 통신 장비 사이에서 메시지를 주고 받는 양식과 규칙의 체계이다. 통신 프로토콜은 신호 체계, 인증, 그리고 오류 감지 및 수정 기능을 포함할 수 있다. -wikipedia
- 프로토콜은 간단하게 말해 컴퓨터와 여러 전자기기들 간의 통신을 할 때 지키기로 한 일종의 약속이다.
인터넷은 수많은 노드들로 이루어져 있고, 이 노드들에 아무런 체계 없이 메세지를 던진다면 메세지가 이리 튀고, 저리 튈 것이다. 그래서 만든 것이 Protocol이다.
프로토콜의 종류
- 네트워크 계층 프로토콜
- IP(Internet Protocol): 인터넷에서 데이터를 패킷 단위로 전송하는 데 사용되는 프로토콜
- ICMP(Internet Control Message Protocol): 네트워크 오류 메시지 및 상태 정보를 전달하는 프로토콜
- 전송 계층 프로토콜
- TCP(Transmission Control Protocol): 신뢰성 있는 데이터 전송을 보장하는 연결 지향 프로토콜
- UDP(User Datagram Protocol): 빠른 데이터 전송을 위해 신뢰성을 포기한 비연결형 프로토콜
- 응용 계층 프로토콜
- HTTP(Hypertext Transfer Protocol): 웹 페이지와 같은 문서를 주고받는 프로토콜
- FTP(File Transfer Protocol): 파일을 송수신하는 프로토콜
- SMTP(Simple Mail Transfer Protocol): 이메일을 전송하는 프로토콜
✍️1. IP(Internet Protocol) : 인터넷 프로토콜
-인터넷에서 데이터를 패킷 단위로 전송하는 데 사용되는 프로토콜이다.
=지정한 IP주소에 패킷 단위로 데이터를 담아 전달하기 위한 규칙
패킷?
Package+Bucket 의 합성어로, 데이터를 나눈 조각이다.
패킷에는 출발지의 IP주소, 목적지의 IP주소 그리고 여러 데이터가 담겨있다.
음..? 그럼 IP로 규칙 만들었으면 된 거 아니야? 내 주소 알고, 상대 주소 알면 데이터 보내는 데 문제 없는 거 아닌가?
하지만, IP에는 여러 단점이 있다.
(1) 비연결성
말 그대로, 연결이 되었는지 안되었는지 확인하지 않고 패킷을 막 보낸다.
고난이가 코난에게 메세지를 보내려고 한다고 하자. IP 규격으로만 메세지를 보낸다면, 코난의 컴퓨터가 꺼져있어도 메세지를 보내게 된다.
(2) 비신뢰성
말 그대로, 신뢰할 수 없다. 메세지가 중간에 누락되어도 알 수 없으며, 순서가 뒤바뀔 수도 있다.
고난이가 코난에게 메세지를 보냈는데 누락될 수 있으며,
Hello , world를 순서대로 보냈는데 world, Hello 순으로 올 수도 있다.
(3) 구분
고난이의 IP주소가 같은데, 게임을 위해 요청한 데이터와 영상을 보기 위한 데이터가 같을 때, 서버에서는 어떤 데이터를 보내야할 지 구분이 될 수 없다.
그래서, IP의 여러 단점들을 보완할 수 있는 프로토콜이 바로 "TCP"이다.
✍️2. TCP( Transmission Control Protocol ) : 전송 제어 프로토콜
(1) 3 Way Handshake (연결 지향)
1. 클라이언트가 접속 요청을 보낸다.
2. 서버가 요청을 수락하고, 마찬가지로 접속 요청을 클라이언트로 보낸다.
3. 클라이언트가 서버의 요청을 수락하며 연결이 된다 (이 단계에서 메세지를 함께 보낼 수 있다.)
(2) 데이터 전달 보증
위에서 IP는 상대가 데이터를 받았는지 어쨌는지 알 수 없었지만, TCP는 데이터를 전달하면 잘 받았음을 다시 보내주기 때문에 전달이 보증된다.
(3) 순서 보장
마찬가지로 IP만으로는 순서가 보장되지 않았지만, TCP는 순서가 잘못되었을 때 서버측에서 잘못된 순서부터 다시 보내라고 요청해온다.
✍️3. UDP( User Datagram Protocol ) : 사용자 데이터 그램 프로토콜
UDP는 하얀 도화지에 비유한다.
TCP처럼 여러가지 IP의 단점을 보완하는 규약이 있지는 않아서, 단순하고 빠르다. TCP와 달리 커스텀하여 최적화하기도 좋다.
IP + PORT +Checksum 등이 포함된다.
(1) 비연결성
IP와 거의 비슷하다고 했다. 따라서 TCP와 달리 연결이 보장되지 않는다. 하지만 그래서, 빠르다
(2) 비신뢰성
UDP는 패킷이 중간에 손실되어도 복구하지 않는다. 충분히 손실 우려가 있다. 따라서 데이터를 정확히 보낸다는 보장이 없다.
✍️4. TCP/IP
그렇다면 TCP/IP는 무엇인가?
하나의 프로토콜인가? 그런 의미보다는, IP가 목적지까지 데이터를 보내고, TCP가 이를 신뢰성 있게 관리하는 역할을 한다고 생각하면 된다. TCP/IP는 신뢰성 있게 목적지까지 데이터를 전달하는 규약이라고 보면 된다.
물론 UDP/IP도 있다. 마찬가지로 빠르게 목적지까지 데이터를 전달하는 규약이라고 할 수 있다. 하지만 전 세계적으로 TCP/IP가 많이 쓰이기 때문에, 우리에게 아무래도 더 익숙하다.
✍️5. TCP vs UDP
이제 감이 왔을 것이다. IP는 목적지까지 데이터를 보낸다는 전제 조건이고,
TCP, UDP는 데이터를 보내는 전달 방식이다.
💡TCP
연결 보장, 순서 보장, 신뢰성 보장 , 비교적 느림, HTTP, SMTP, FTP
💡 UDP
연결 보장 X, 순서 보장 X, 신뢰성 보장 X, 비교적 빠름, 스트리밍, 비디오 게임, VoIP
TCP는 신뢰성 있는 데이터, 인터넷 통신이 원활해야 할 때, 등등의 데이터를 보낼 때 사용한다면,
UDP는 조금 손실되더라도 빠른 통신이 중요한 영상, 비디오 게임 등에 사용된다.
이 포스팅은 <모든 개발자를 위한 HTTP 웹 기본 지식>을 바탕으로, 필자가 여러 정보를 추가하여 정리하였습니다.