본문 바로가기
IT/네트워크

네트워크 9. L4 전송 계층

by 노오-력 2023. 2. 22.

Transport Layer

OSI 모델의 4계층에 해당하는 전송계층에 대해 알아보자

전송계층은 호스트 간에 데이터를 투명하게 전송하는 역할을 하며

종단 시스템 간의 오류 복구와 흐름 제어를 담당한다.

 

흐름 제어

수신 호스트가 데이터를 모드 처리할 수 있도록

발신자가 보낸 데이터 흐름을 조정하는 과정을 뜻한다.

예를 들어, 발신자의 인터넷 속도가 높아서 너무 빠른 속도로 데이터를 전송하여

수신 호스트가 처리하기 벅찬 양을 보내는 경우

흐름제어를 작동해서 수신 호스트가 발신자에게 속도를 늦추도록 신호한다.

 

Session Multiplexing

전송계층은 세션 다중화를 지원하기도한다.

이것은 호스트가 동시에 여러 세션을 지원하고

단일 링크에서 개별 트래픽 흐름을 관리할 수 있는 과정이다.

왼쪽에 발신자가 있고

오른쪽에 몇몇 수신자들이 있다

발신자가 25번 포트를 사용해서 SMTP 트래픽을 상단의 수신자에게 보내고

80번 포트로 HTTP 웹트래픽을 하단의 수신자에게 보낸다.

동시에 하단의 수신자에게는 25번 포트로 이메일 트리팩도 보낸다.

왼쪽의 발신자에게는 3개의 세션이 있고

오른쪽상단의 수신자는 1개의 세션, 하단의 수신자는 2개의 세션이 있다.

전송계층은 호스트가 가진 다양한 세션을 추적하고 제어한다.

 

위 그림에서 발신자가 오른쪽 하단의 수신자에게 보낸 2개의 세션이 있다.

하나는 웹 트래픽이고, 다른 하나는 이메일 트래픽이다.

그렇다면 수신자가 트래픽을 전송받을 때,

각 트래픽이 어떤 애플리케이션을 사용할지는 어떻게 구분할까?

이런 경우 L4 포트 번호를 사용하면된다.

 

L4 Port Numbers

위 예시에서

HTTP웹 트래픽은 80번 포트를 사용하고

SMTP 메일은 25번 포트를 사용한다.

그리고 발신자는 L4 헤더에 출발지 포트번호를 추가한다.

출발지(SRC) 포트번호와 목적지(DST) 포트번호를 조합하면 세션을 추적할 수 있다.

예를 들어보자.

발신자는 목적지로 80번 포트를 쓴다. HTTP 웹 트래픽의 표준표트이다.

출발지 포트는 1024 이상의 무작위 포트 번호를 쓸것이다.

위 예시에서 사용된 출발지 포트번호는 1500 이다.

수신자가 트래픽을 다시 보내려면 출발지와 목적지 포트를 뒤바꾼다.

그래서 출발지 포트가 80, 목적지 포트번호는 1500이 된다.

 

 

 

TCP

L4의 가장 일반적인 프로토콜은

TCP(Transport Control Protocal) 전송제어 프로토콜과

UDP(the User Datagram Protocol) 유저 데이터그램 프로토콜이다.

 

TCP는 연결 기반 프로토콜이다.

연결 기반인 TCP는 연결이 이루어지면 해당 연결을 기반으로

두 호스트 간 양방향으로 데이터를 전송한다.

TCP는 순서 제어를 수행한다.

트래픽에 순서 번호를 포함해 세그먼트가 옳은 순서대로 누락없이 처리되도록 한다.

트래픽이 수신자에게 도달하면

수신자는 순서 번호를 확인하고

올바른 순서로 트래픽을 조립할 수 있게 된다.

그리고 순서 번호로 세그먼트 누락 여부를 확인할 수 있다.

그렇기 때문에 TCP를 믿을 수 있다.

수신 호스트는 발신자에게 수취 통보를 보내고

순서 번호를 통해, 수신자는 트래픽 전체가 들어왔는지 확인하고

전송 중 누락된 트래픽이 있다면

누락된 트래픽에 대해서는 수취통보를 하지않아

누락되었다고 발신자에게 알릴 수 있다.

발신자가 트래픽 누락을 인지하면 해당 트래픽을 다시 전송한다.

 

그리고 TCP는 흐름 제어도 수행할 수 있다.

발신자의 전송률이 너무 높아서 수신자가 처리할 수 없는 경우에

수신자는 발신자에게 속도를 늦추라는 신호를 보낼 수 있다.

이렇게, TCP는 연결 기반의 믿을만한 프로토콜이다.

두 개의 호스트 사이에 위와 같은 연결 방법을

TCP Three-Way Handshake 라고한다.

 

왼쪽에 있는 발신자가 연결을 시작해서

1. 오른쪽 수신자를 향해 SYN, 동기화된 메시지를 보낸다.

2. 그걸 받은 수신자는 SYN-ACK, 동기화 수취 통보를 전송하고

3. 마지막으로 연결을 완성짓기 위해 발신자가 ACK, 수취통보를 한다.

이제 두 개의 호스트가 연결되었으니 트래픽을 전송할 수 있다.

 

 

TCP 헤더

헤더의 구조는 위와 같다.

출발지(SRC), 도착지(DST) 포트,

순서번호, 응답번호가 있다.

그리고 헤더 길이, 예약정보를 위한 예약필드, 코드비트,

흐름 제어를 위한 Window

전송 중 트래픽 오류 여부를 확인하기 위한 Checksum

그리고 Urgent가 있다.

다른 옵션을 추가할 수도 있고

마지막에는 Data가 있다.

 

UDP

UDP는 사용자 데이터그램 프로토콜로

best effort 방식을 사용한다.

발신자가 패킷을 구성해서 수신자에게 전송하며

전송이 성공적이기를 바란다.

따라서 UDP는 연결 기반이 아니며,

호스트 간 아무 연결 설정이 없기 때문에 순차제어를 수행하지도 않는다.

세그먼트가 순서대로 누락없이 처리될지 확인하지 않으니 신뢰할 수 없다.

그리고 흐름 제어도 하지않는다.

 

이런 트래픽의 오류를 발견하고 복구하는 방법이 있는데

이 경우에는 상위계층인 응용계층에서 이루어진다.

UDP가 제공하는 기능은 아니다.

 

UDP 헤더

UDP 헤더에는

오직 출발지와 목적지포트, 길이, 체크섬, 그리고 데이터 뿐이다.

 

이렇게 UDP헤더와 TCP헤더를 비교하면 UDP의 간접 비용이 훨씬 적게 들어간다.

TCP와 UDP를 각기 어떤 상황에 사용하면 좋을지 알아보자.

어떤걸 사용할지는 애플리케이션을 설계하는 애플리케이션 디자이너가 결정을 내린다.

일반적으로 TCP는 신뢰성이 필요한 트래픽에 사용된다.

그러나 실시간 애플리케이션인 음성과 영상 등의 애플리케이션은

TCP의 과도한 간접비용을 감당할 수 없어 UDP를 사용한다.

음성과 영상은 응답지연시간에 매우 민감하기 때문이다.

 

정리하면

지연에 민감한 실시간 트래픽에는 보통 UDP를 사용하고

나머지는 TCP를 사용한다.

음성,영상 외에 수많은 애플리케이션이 있기 때문에

가장 널리 사용되는 L4 전송 방식은 TCP이다.

 

아래는 자주 사용하는 포트번호들이다.

TCP

- FTP 21

- SSH 22

- Telnet 23

- HTTP 80

- HTTPS 443

 

UDP

- TFTP 69

- SNMP 161

 

TCP and UDP

- DNS 53