BOBO's Note

Transport Layer (1) 본문

Network

Transport Layer (1)

bobo_hee 2020. 7. 22. 23:34

Transport Layer

전송 계층에서는 프로세스 간의 논리적 통신 기능을 제공한다. 네트워크 계층에서 호스트 간의 논리적인 전송을 담당한다면, 전송 계층에서는 호스트 내의 프로세스 간의 통신을 담당한다.

 

응용 계층에서 받은 메시지를 segment로 쪼개어 네트워크 계층에 전송하고, 반대로 네트워크 계층에서 받은 segment를 합쳐서 메시지를 만들어 응용 계층으로 올려 보낸다.

 

대표적인 프로토콜로 TCP와 UDP가 있다.

 

Multiplexing / Demultiplexing

멀티플렉싱이란, 여러 소켓에서 전송하려는 데이터에 전송 계층의 헤더를 붙여 이 segment를 네트워크 계층으로 전달하는 작업이다. 멀티플렉싱을 통해 sender는 하나의 physical link만 있어도 여러 sending process를 관리할 수 있다.

Segment Format

반대로 디멀티플렉싱은 네트워크 계층으로부터 전달받은 segment의 헤더를 보고 올바른 소켓에 데이터를 전달하는 작업이다. 디멀티플렉싱 또한 receiver가 하나의 physical link를 가져도 여러 receiving process를 처리해줄 수 있다. TCP는 헤더에 적힌 IP 주소와 port 번호를 보고 목적지 소켓을 찾는다. UDP는 헤더에 적인 port 번호만 보고 목적지 소켓을 찾는다(connectionless이기 때문에).

 

TCP vs UDP

TCP는 Transmission Control Protocol의 약자로, 신뢰성 있는 데이터 전송을 보장하는 연결형 프로토콜이다.

 

UDP는 User Datagram Protocol의 약자로, 비연결형 프로토콜이며 신뢰성보다는 속도를 중요시하는 네트워크에 사용된다. TCP에 비해 단순한 헤더 구조를 갖고, 오버헤드가 적다.

  TCP UDP
Connection Setup O X
Packet Reordering O X
Reliable Transmission O X
Congestion/Flow Control O X
Multicasting / Broadcasting X
(Point-to-Point 통신이므로)
O
적용 분야 패킷 손실이 허용되지 않는 서비스 실시간 스트리밍 서비스
오버헤드가 적은 애플리케이션
예시 HTTP, FTP 등 DNS, DHCP, IPTV, VoIP, RIP 등

 

Checksum

체크섬은 segment 내의 에러를 감지하기 위한 필드이다. TCP와 UDP 모두 체크섬을 사용하여 비트 오류를 검사한다. 

 

sender는 segment를 16비트 데이터로 쪼개어 다 더한 후, 이 합을 1's complement를 취해서 체크섬으로 지정한다. receiver에서는 checksum을 포함한 segment의 모든 16비트 데이터들을 합하여 11...1이 나왔는지 확인한다. 만약 11...1이라면 오류가 발생하지 않았고, 그렇지 않은 경우 전송 도중 오류가 발생했음을 감지할 수 있다.

Checksum 예제

위의 예제를 보면, 16비트 데이터를 더하는데, 만약 오버플로우가 발생했으면 맨 하위 비트에 1을 더해주는 식으로 합을 구해나간다. 이후, receiver에서는 다음과 같이 16비트 데이터의 합과 체크섬을 합하여 11...1인지 확인한다.

 

     1011101110111100

  + 0100010001000011 (checksum)

------------------------------

     1111111111111111 (OK)

 

만약 전송된 데이터에 비트 오류가 발생하였다면 16비트 데이터의 합이 달라지게 될 것이고, 체크섬과 합하였을 때 11...1이 나올 수 없게 된다.

 

     1011101010111100

  + 0100010001000011 (checksum)

------------------------------

     1111111011111111 (ERROR!!!)

'Network' 카테고리의 다른 글

Network Layer (1) - DHCP, NAT  (0) 2020.07.23
Transport Layer (2) - Reliable Data Transfer  (0) 2020.07.23
Application Layer (4) - P2P  (0) 2020.07.20
Application Layer (3) - Web Cache, DNS, CDN  (0) 2020.07.20
Application Layer (2) - HTTP  (0) 2020.07.20
Comments