전송 계층 서비스
전송 계층은 애플리케이션 계층에서 온 메세지를 세그먼트 단위로 쪼개고 이를 네트워크 계층으로 전달하는 역할을 한다. 논리적 연결을 통한 end-to-end 연결이라 할 수 있다. 송신자는 애플리케이션 메세지를 세그먼트로 쪼개고, 수신자는 세그먼트를 메세지로 조합해서 애플리케이션으로 전송한다. 이러한 일을 가능하게 하는 것이 TCP, UDP 프로토콜이다. 애플리케이션에서 요구하는 서비스 형태에 맞춰서 TCP 통신을 할 것인지, UDP 통신을 할 것인지를 결정한다. 네트워크 계층은 host와 연결한다면, 전송 계층은 process 간의 연결을 제공한다.
전송 계층의 역할
- 송신자 : 애플리케이션 메세지를 받고 세그먼트로 분해한다. 거기에 protocol control 정보를 담은 헤더를 붙여서 IP 계층으로 내보낸다.
- 수신자 : IP로부터 받은 세그먼트의 헤더를 확인하고 애플리케이션 메세지로 만든다. 소켓을 통해서 메세지를 Demultiplexing한다.
전송 계층 프로토콜
앞서 언급한 것처럼, 전송 계층은 TCP와 UDP로 통신한다.
먼저 TCP(Transmission Control Protocol)는 신뢰성 있고 순서를 기반으로 한 전달을 제공한다. 혼잡제어, 흐름제어, 연결 설정 과정도 모두 포함되어 있다. 반면 UDP(User Datagram Protocol)은 신뢰성이 없고 순서가 없으며 TCP에서 제공하는 혼잡제어, 흐름제어, 연결 설정 또한 없다. 두 가지 프로토콜에서 제공하지 않는 서비스는 지연과 대역폭에 대한 보장이다.
Multiplexing and Demultiplexing
multiplexing은 여러가지 소켓에서 온 데이터를 관리하고 transport 헤더를 붙여 전송하는 과정이다. Demultiplexing은 세그먼트에서 온 데이터의 헤더를 읽는 과정이다. 한 컴퓨터에서 여러 프로세스가 동작할 수 있기 때문에 서로 다른 Connection인지를 구분해줘야 한다. 그래서 TCP에서는 프로토콜 정보, client 포트 번호, client IP 주소, server 포트 번호, server IP 주소를 헤더에 붙여 보낸다.
Demultiplexing 과정
호스트는 ip 데이터 그램을 받는다. 각 데이터 그램은 source IP 주소와 destination IP 주소, 포트번호를 가지고 있다. 이것을 기반으로 소켓에 서비스를 제공하는 것이다.
Connectionless Demultiplexing
소켓을 생성할 때 항상 host의 포트 번호를 명시해줘야 한다. 만약에 서로 다른 IP 주소를 갖지만 같은 포트 번호라면 같은 소켓으로 전달된다.
Connection-oriented Demultiplexing
TCP 소켓은 송신측 IP주소와 포트번호, 수신측 IP 주소와 포트번호로 구성된다. 수신자는 이 네 가지 구성요소를 수신받고 적절한 소켓으로 전달한다.
Connectionless transport : UDP
UDP : User Datagram Protocol
connectionless이기 때문에 UDP 에서는 연결 설정 과정(handshaking)이 없고, 각각의 UDP 세그먼트들은 독립된 것으로 관리된다. 왜 TCP를 사용하지 않고 UDP를 사용하는 것일까? UDP는 연결 설정 과정이 없기 때문에 추가적인 RTT가 필요없고 간단하다. TCP에 비해 헤더 크기가 작고 혼잡 제어를 할 필요가 없다. 그 이유는 데이터가 수신되는 대로 최대한 빠르게 전송하는 서비스이기 때문이다.
- 송신자 : 애플리케이션 계층 메세지가 오면, UDP 세그먼트 헤더값을 결정하고 UDP 세그먼트를 만들어 IP 계층으로 보낸다
- 수신자 : IP 계층으로부터 받아온 세그먼트를 Checksum을 통해 헤더 필드를 검사한 후에 애플리케이션 메세지로 바꾸어 내보낸다.
UDP Segment Header Field
UDP Checksum
udp에서는 헤더 정보의 오류를 탐지하는 일을 한다. 수신측에서 받은 정보와 송신측에서 전송한 정보가 일치하는지 확인한다.
위 그림과 같이, 32비트 헤더 정보를 반으로 나눠 16비트 둘을 더한다. 1의 보수를 취해서 checksum을 계산한다. 그러나, checksum을 계산할 때, 아래 그림처럼 같은 자리에서 1->0, 0->1로 바뀌면 결론적으로 checksum에는 아무런 영향이 없다. 따라서 오류를 제대로 확인할 수 없고, 오류를 정정할 수도 없다.
정리해보면, UDP는 "no-frills" 프로토콜로, loss가 발생할 수 있고 out-of-order 서비스를 제공한다. best effort 서비스를 제공하기 때문에 연결 과정이 없이 빠르고 간단하며 checksum을 통해 데이터의 오류를 확인한다. 애플리케이션 계층의 필요에 따라서 더 추가적인 기능을 추가할 수 있다.
'CS > 네트워크' 카테고리의 다른 글
[컴퓨터망] 4. Network Layer(Internet Protocol) (0) | 2024.06.08 |
---|---|
[컴퓨터망] 4. Network Layer - Data Plane(개요, 라우터) (0) | 2024.05.30 |
[데이터통신] 3. Data Link Layer(DLC 프로토콜) (0) | 2024.04.17 |
[데이터통신] 3. Data Link Layer(데이터링크 계층, DLC functions) (0) | 2024.04.17 |
[컴퓨터망] 2. Application Layer(P2P, CDN, DASH, Socket Programming) (1) | 2024.04.13 |