이 글은 공부를 하면서 알게 된 내용들을 기록하는 글 입니다. 오류나 고쳐야 할 사항들이 있다면 지적 부탁드립니다!
✅ Layer 4 Transport Protocol
`TCP(Transmission Control Protocol)`과 `UDP(User Datagram Protocol)`은 모두 Transport layer(Layer 4)에서 작동한다.
Transport layer는 Network layer와 Application layer 사이에 있어, 네트워크 구조의 핵심 역할을 수행한다.
End-to-End data 전송을 위한 논리적 통신(logical communication) 역할을 하며, IP 및 port 번호를 통해 식별한다.
내가 이해한대로 설명을 해보자면, 어떤 End에서 출발한 데이터가 Layer 1~3를 거치면서 도착 End의 IP에 해당하는 곳까지 도착을 했을 때, 거기에서 어떤 End(App)에게 이 데이터를 전달할 것인지 결정해주는 역할을 하는 것이 이 Layer이다.
`TCP`는 connection-oriented protocol이고, `UCP`는 unreliable하고 connectionless protocol이다.
Internet Protocol Suite는 인터넷에서 컴퓨터들이 서로 정보를 주고 받는데에 쓰이는 프로토콜(통신 규약)들의 집합인데,
`TCP`와 `UDP` 또한 여기에 속한다.
✅ TCP (Transmission Control Protocol)
TCP(Transmission Control Protocol; 전송 제어 프로토콜)은 `Internet protocol suite`의 대표적인 프로토콜 중 하나이다.
`Application Layer(Layer 5)`와 `Network Layers(Layer4)` 사이에서 작동하며, 안정적으로 데이터를 주고받을 수 있게끔 한다.
`Connection-oriented protocol`은 서로 다른 기기들이 network를 통해 메세지를 주고받는데에 많은 도움이 된다.
컴퓨터 간에 data packet들을 주고 받는데에 사용되는 기술인 IP(Internet Protocol) 또한 TCP와 함께 작동한다.
🔥 TCP의 특징
- `TCP`는 모든 `segment`들에게 번호를 할당하여, 전송(transmitted) 또는 수신(received)되는 `segment`들을 추척할 수 있다.
- `TCP`는 네트워크의 혼잡을 방지하기 위해 자체적으로 `slow start`, `dynamic window sizing`과 같은 `Flow Control`을 수행한다.
일시적으로 delay가 발생할 수 있으나, flow control이 이루어지지 않으면 network가 혼잡해지고 cost가 증가하기 때문에,
전체적인 관점에서는 `Flow control`이 이루어지는 것이 이득이다. - `TCP`는 신뢰성 높은 데이터 전송을 위한 `error control mechanism`을 가지고 있다.
🔥 TCP의 장점
- 전송자(Sender)와 수신자(Receiver) 간의 `connection(연결)`가 유지되는 것을 보장할 수 있다.
- data를 순서에 맞춰서 보내줌을 보장할 수 있다.
- OS에 의존적으로 동작하지 않는다.
- 다양한 `routing protocol`들을 지원한다.
- 수신자(Receiver)의 인터넷 속도에 기반하여 data를 보내는 속도를 조절할 수 있다.
🔥 TCP의 단점
- `UDP`보다 속도가 느리며, `bandwidth`를 더 필요로 한다.
- 파일 전송 시작 시, 속도가 느리다.
- LAN 혹은 PAN 네트워크에는 적절하지 않다.
- multicast, broadcast에는 적절하지 않다.
- 만일 한 페이지에서 `하나의 데이터`만 없어도, 페이지 전체가 보이지 않는다.
✅ UDP (User Datagram Protocol)
`UDP(User Datagram Protocol)`은 `Transport Layer(Layer 4)`의 프로토콜 중 하나이다.
`UDP`는 Internet Protocol Suite 중 하나이며, `UDP/IP suite`라고도 불린다.
`TCP`와는 달리 `unreliable`하고 `connectionless`한 프로토콜이기 때문에, 데이터를 전송하기 이전에 connection을 맺어야 할 필요가 없다. (no need to establish a connection)
`UDP`는 `low-latency`(지연 시간이 적고), `loss-tolerating`(패킷 손실에 관대한) connection에 유용하다.
또한, process-to-process communication에도 사용이 가능하다.
🔥 UDP의 특징
- 데이터의 크기가 작고, `flow control`이나 `error control`이 덜 필요한 간단한 request-response 통신에 주로 사용된다.
- `UDP`는 Packet switching을 지원하기 때문에, multicasting에 적절한 프로토콜이다.
- `RIP(Routing Information Protocol)` 같이 몇몇 routing update protocol에도 사용된다.
- 데이터 수신의 간격(딜레이)가 짧은 것이 중요한 `실시간 어플리케이션(real-time application)`에서 주로 사용된다.
🔥 UDP의 장점
- data를 전송하거나 수신받을 때 connection이 요구되지 않는다.
- `Broadcast`와 `Multicast`가 가능하다.
- 장거리 통신에서도 사용이 가능하다.
- `live`, `real-time` 데이터라는 특징이 있다.
🔥 UDP의 단점
- 데이터 전송이 성공적으로 이루어졌는지 알 수 있는 방법이 없다.
- data의 순서를 추적할 수 있는 방법이 없다.
- `connectionless`하기 때문에, 데이터 전송에 대해 `unreliable`하다.
- `Collision(충돌)`의 경우, `TCP`와 달리 `UDP`는 Router에 의해 Packets이 손실될 수 있다.
- `error`가 감지된 경우, packets이 손실될 수 있다.
✅ 어떤 프로토콜이 더 좋을까: `TCP` or `UDP`?
어떤 작업이냐, 데이터가 어떻게 전송되냐에 따라 유리한 프로토콜이 다르기 때문에 어떤 프로토콜이 더 좋다고 이야기하기 힘들다.
만일 렉이 없어야하는 온라인 게임 환경이라면 `UDP` 환경이 더욱 좋을 것이다.
반면, 사진, 비디오와 같이 데이터를 주고받을 때 정확한 정보들이 담겨 있어야 한다면 `TCP` 환경이 더욱 좋을 것이다.
일반적으로, `TCP`와 `UDP`는 서비스가 요구하는 사항이 무엇이냐에 따라 유용한지 여부가 결정되며,
각각 장점과 단점이 명확하기 때문에 어떤 프로토콜이 더 좋다고 이야기하기 힘들다.
서비스의 요구사항에 따라 요구사항에 맞는 프로토콜을 사용하는 것이 권장된다.
🔥 언제 `TCP`가 사용되나요?
`TCP`는 연결이 안정적일 필요가 있는, 즉, 주고 받는 데이터가 손실 없이 전송/수신 되어야 할 때 주로 사용됩니다.
- 메일을 보낼 때
- 파일을 전송할 때
- 웹 브라우징
🔥 언제 `UDP`가 사용되나요?
`UDP`는 연결이 계속 필요하지 않는, 즉, 주고 받는 데이터가 손실이 일어나도 딜레이가 없는 것이 중요한 서비스일 때 주로 사용됩니다.
- 온라인 게임
- 비디오 스트리밍
- 온라인 비디오 채팅
✅ 참고 자료 & 링크
- 상명대학교 컴퓨터과학과 신경섭 교수님 `컴퓨터 네트워크` 강의 자료