- Published on
Transport Layer : 네트워크-11
- Authors
- Name
- Overview
- Name
- Process to Process
- Name
- Port Number
- Name
- Multiplexing
- Name
- TCP/UDP
Tags
Previous Article
Next Article
Overview
TCP/UDP는 transport layer 계층에 속한 프로토콜로서 IP와 함께 Internet(Global Network)의 구성에서 핵심 역할을 수행하는데요.
이번엔 Transport Layer의 역할과 목표를 좀 더 자세히 살펴보도록 하겠습니다.
Process to Process
네트워크의 통신은 여러 계층으로 추상화되어있습니다.
이것을 OSI 7계층이라 부르는데요.
우선 하나의 물리적 연결 관계에서 노드와 노드(Node-to-Node) 간의 통신을 달성하고(Data Link Layer),
다음으론 서로 다른 네트워크에 속한 호스트와 호스트(Host-to-Host) 간 통신(Network Layer),
마지막으로 이것을 호스트 안에 속한 어플리케이션(Process-to-Process) 간의 통신으로 추상화시킵니다.
그리고 이번 계층이 바로 Transport Layer가 됩니다.
아래 그림을 보면 좀 더 잘 이해가 되실 겁니다.

따라서 진정한 의미의 end-to-end 통신은 transport layer부터 시작이라 볼 수 있습니다.

Port Number
이전의 2계층에선 각각 자신의 계층에서 사용할 주소(MAC, IP)들을 사용했는데요.
Transport 계층에서도 이전에 다루지 않았던 Process를 식별할 필요성이 있기 때문에 새로운 주소를 도입합니다.
이것을 Port number라고 부르며 서로 다른 호스트가 프로세스를 일관되게 식별할 수 있도록 도와줍니다.

port number는 16 bit 값으로 ~까지의 값을 가질 수 있습니다.
포트는 크게 두 가지로 분류할 수 있는데요.
0~1023번은 well-known 포트라 하여 특정한 목적(상위 계층 Protocol)을 위해 예약된 포트입니다. 물론 사용하려면 사용할 수 있으나, 컴퓨터 보통 root 권한을 통해서만 사용할 수 있습니다.
1024~65535번은 ephemeral(short-lived) 포트로 사용자가 임의의 목적을 위해 사용할 수 있습니다.
여기서 1024~49151번과 나머지 포트를 다시 Registered 포트와 Dynamic 포트로 사용하는데, 전자는 특정 목적(mysql, oracle, redis 등)을 위해 IANA에 번호를 등록할 수 있고, 후자가 진정한 의미의 임시 포트 번호에 속합니다.
그러나 1024~ 번 포트들은 모두 특별한 제한(권한) 없이 사용할 수 있기 때문에 그냥 묶어서 ephemeral 포트로 부르기도 하는 겁니다.
Multiplexing
기본적으로 하나의 호스트(컴퓨터)에는 여러 프로세스가 존재합니다.
따라서 송신 측에서는 여러 개의 프로세스 중 하나를 골라(Multiplex) 패킷을 생성하고,
수신 측에선 들어온 패킷을 적절한 패킷으로 다시 분배해주어야 합니다.

TCP/UDP
이러한 전송 프로토콜은 크게 두가지가 있는데요.
UDP(User Datagram Protocol)
TCP(Transmission Control Protocol)
두 가지입니다.
TCP | UDP |
---|---|
Connection-oriented | Connectionless |
reliable | unreliable |
in-order delivery | unordered delivery |
TCP는 UDP보다 훨씬 더 많은 기능을 수행해줍니다.
연결을 통한 신뢰성있는 데이터 전송, Error, Flow, Congestion Control, 순서 보장 등 엄청난 기능들을 갖추고 있는데요.
특히 초창기 인터넷에선 기존의 인프라에서 네트워크를 구현해야 하고, 요즘같이 하드웨어 성능이 좋지도 않았으며, 트래픽도 많지 않았기 때문에 네트워크의 신뢰성을 확보하는 것에 중점을 두어 TCP가 디자인되었습니다.
다만 근래에는 UDP도 많이 주목을 받고 있는데요.
네트워크 환경이 많이 발전하며 이전처럼 각 계층마다 에러체크를 한다거나, 신뢰성에 과도한 신경을 쓰지 않아도 충분히 안정성을 확보할 수 있게 되었기 때문입니다.
두 프로토콜 모두 Delay와 Bandwidth에 대한 보장을 해주진 못합니다.