3.1 트랜스포트 계층 서비스 및 개요
트랜스포트 계층 프로토콜은 각기 다른 호스트에서 동작하는 애플리케이션 프로세스간의 논리적 통신(logical communication)을 제공한다.
- 애플리케이션의 관점에서 보면 프로세스들이 동작하는 호스트들이 직접 연결된 것처럼 보인다.
- 애플리케이션 프로세스는 메시지 운반에 사용되는 물리적 인프라스트럭처의 세부 사항에 상관없이 서로 메시지를 송신하기 위해 트랜스포트 계층에서 제공하는 논리적 통신을 사용한다.
트랜스포트 계층 프로토콜은 네트워크 라우터가 아닌 종단 시스템에서 구현된다.
- 송신 측의 트랜스포트 계층은 송신 애플리케이션 프로세스로부터 수신한 메시지를 트랜스 포트 계층 세그먼트(segment)라고 알려진 트랜스포트 계층 패킷으로 변환한다.
- 애플리케이션 메시지를 세그먼트로 만들기 위해 작은 조각으로 분할하고, 각각의 조각에 트랜스포트 계층 헤더를 추가한다.
- 트랜스포트 계층은 송신 종단 시스템에 있는 네트워크 계층으로 세그먼트를 전달한다.
- 세그먼트는 네트워크 계층 패킷(데이터그램) 안에 캡슐화되어 목적지로 전달된다.
- 네트워크 라우터는 네트워크 계층 필드에 대해서만 동작한다. 즉, 라우터는 데이터그램 안에 캡슐화된 트랜스포트 계층 세그먼트의 필드를 검사하지 않는다.
- 수신 측에서 네트워크 계층은 데이터그램으로부터 트랜스포트 계층 세그먼트를 추출하고 트랜스포트 계층으로 세그먼트를 보낸다.
- 트랜스포트 계층은 수신 애플리케이션에서 세그먼트 내부의 데이터를 이용할 수 있도록 수신된 세그먼트를 처리한다.
3.1.1 트랜스포트 계층과 네트워크 계층 사이의 관계
- 트랜스포트 계층 프로토콜
- 각기 다른 호스트에서 동작하는 프로세스들 사이의 논리적인 통신 제공
- 네트워크 계층 프로토콜
- 호스트들 사이의 논리적 통신을 제공한다.
트랜스포트 계층 프로토콜들은 종단 시스템에 존재한다.
- 종단 시스템 안에서 트랜스포트 프로토콜은 애플리케이션 프로세스에서 네트워크 경계(네트워크 계층)까지 메시지를 운반한다.
- 메시지가 네트워크 계층 내부에서 어떻게 이동하는지는 언급하지 않는다.
트랜스포트 계층이 제공할 수 있는 서비스는 하위 네트워크 계층 프로토콜의 서비스 모델에 의해 제약 받는다.
- 네트워크 계층 프로토콜이 호스트 사이에서 전송되는 트랜스포트 계층 세그먼트에 대한 지연 보장이나 대역폭 보장을 제공할 수 없다면, 트랜스포트 계층 프로토콜은 프로세스끼리 전송하는 메시지에 대한 지연 보장이나 대역폭 보장을 제공할 수 없다.
하위 네트워크 프로토콜이 상응하는 서비스를 제공하지 못할 때도 특정 서비스는 트랜스포트 프로토콜에 의해 제공될 수 있다.
- 하위 네트워크 프로토콜이 비신뢰적이라도, 트랜스포트 계층은 신뢰적인 데이터 전송 서비스를 제공할 수 있다.
3.1.2 인터넷 트랜스포트 계층의 개요
- UDP(User Datagram Protocol)
- 비신뢰적이고 비연결형인 서비스를 요청한 애플리케이션에게 제공한다.
- TCP(Transmission Control Protocol)
- 신뢰적이고 연결지향형 서비스를 요청한 애플리케이션에게 제공한다.
인터넷 프로토콜(Internet Protocol, IP)
- 인터넷의 네트워크 계층 프로토콜
- 호스트들 간에 논리적 통신을 제공하는 최선형 전달 서비스(best-effort delivery service)
- 통신하는 호스트들 간에 세그먼트를 전달하기 위해 최대한 노력을 하지만, 어떠한 보장도 하지 않음
- 세그먼트의 전달을 보장하지 않으며, 순서대로 전달된다는 것도 보장하지 않음
- 세그먼트 내부 데이터의 무결성을 보장하지 않음
- 비신뢰적인 서비스(unreliable service)라고도 불린다.
트랜스포트 계층 다중화(transport-layer multiplexing)와 역다중화(demultiplexing)
- '호스트 대 호스트' 전달을 '프로세스 대 프로세스 전달'로 확장한다.
UDP와 TCP는 헤더에 오류 검출 필드를 포함함으로써 무결성 검사를 제공한다.
3.2 다중화와 역다중화
프로세스는 소켓(socket)을 갖고 있다.
- 네트워크에서 프로세스로 데이터를 전달하고, 또한 프로세스로부터 네트워크로 데이터를 전달하는 출입구 역할을 한다.
- 수신 측 호스트의 트랜스포트 계층은 실제로 데이터를 직접 프로세스로 전달하지 않고, 대신에 중간 매개자인 소켓에게 전달한다.
역다중화(demultiplexing)
- 트랜스포트 계층 세그먼트의 데이터를 올바른 소켓으로 전달하는 작업(수신자의 관점)
다중화(multiplexing)
- 출발지 호스트에서 소켓으로부터 데이터를 모으고, 이에 대한 세그먼트를 생성하기 위해 각 데이터에 헤더 정보(나중에 역다중화에 사용됨)로 캡슐화 하고, 그 세그먼트들을 네트워크 계층으로 전달하는 작업(송신자의 관점)
트랜스포트 계층 다중화에서 요구하는 사항
- 소켓은 유일한 식별자를 갖는다.
- 각 세그먼트는 세그먼트가 전달될 적절한 소켓을 가리키는 특별한 필드를 갖는다.
- 출발지 포트 번호 필드(source port number field)
- 목적지 포트 번호 필드(destination port number field)
역다중화 순서(UDP에서 역다중화 동작 방식)
- 호스트의 각 소켓은 포트 번호를 할당 받는다.
- 세그먼트가 호스트에 도착하면 트랜스포트 계층은 세그먼트 안의 목적지 포트 번호를 검사하고 상응하는 소켓으로 세그먼트를 보낸다.
- 세그먼트의 데이터는 소켓을 통해 해당되는 프로세스로 전달된다.
비연결형 다중화와 역다중화
UDP 소켓은 목적지 IP 주소와 목적지 포트 번호로 구성된 두 요소로 된 집합에 의해 식별된다.
- 2개의 UDP 세그먼트가 출발지 IP 주소와 출발지 포트 번호가 모두 다르거나 출발지 IP 주소와 출발지 포트번호 중 어느 하나가 다를지라도, 같은 목적지 IP 주소와 목적지 포트 번호를 가지면 2개의 세그먼트는 같은 목적지 소켓을 통해 같은 프로세스로 향한다.
출발지 포트 번호는 '회신 주소'의 한 부분으로 사용된다.
A에서 출발지 포트 번호는 9157이다. B에서 회신할 때 출발지 포트번호 9157을 사용한다.
그림에서 C의 dest port는 6428일 것이다.(A와 같은 소켓을 사용함)
연결지향형 다중화와 역다중화
TCP 소켓은 4개 요소의 집합(four-tuple)에 의해 식별된다.
- 출발지 IP 주소
- 출발지 포트 번호
- 목적지 IP 주소
- 목적지 포트번호
UDP와는 다르게 다른 출발지 주소 또는 다른 출발지 포트 번호를 가지고 도착하는 2개의 TCP 세그먼트는(초기 연결 설정을 요청하는 TCP는 제외) 2개의 다른 소켓으로 향하게 된다.
TCP 연결 설정
- TCP 서버 애플리케이션은 '환영 소켓'을 갖고 있다. 이 소켓은 포트 번호 12000을 가진 TCP 클라이언트로부터 연결 설정 요청을 기다린다.
- TCP 클라이언트는 소켓을 생성하고 연결 설정 요청 세그먼트를 보낸다.
- 연결 설정 요청은 목적지 포트번호 12000과 TCP 헤더에 설정된 특별한 연결 설정 비트를 가진 TCP 세그먼트다. 또한 그 세그먼트는 출발지 포트 번호를 포함하는데, 클라이언트가 선택한 포트 번호이다.
- 서버 프로세스로 동작하는 컴퓨터의 호스트 운영체제가 목적지 포트 12000을 포함하는 연결 요청 세그먼트를 수신하면, 이 세그먼트를 포트 번호 12000으로 연결 수락을 기다리는 서버 프로세스로 보낸다.
- 새롭게 생성된 연결 소켓은 4개 요소의 값에 의해 식별될 것이다.
그림에서 보듯이 목적지 IP 주소와 포트번호가 같아도, 출발지의 IP주소와 포트번호가 각각 다르면 각각의 소켓이 생성된다.
웹 서버와 TCP
웹 서버는 각각의 연결에 따라서 새로운 프로세스를 만든다. 이들 프로세스는 각자 연결 소켓을 가지며, 이 연결 소켓을 통해 HTTP 요청을 수신하고 응답을 전송한다.
그러나 연결 소켓과 프로세스 사이에 항상 일대일 대응이 이루어지는 것은 아니다. 오늘날의 많은 고성능 웹 서버는 하나의 프로세스만을 사용한다. 그러면서, 각각의 새로운 클라이언트 연결을 위해 새로운 연결 소켓과 함께 새로운 스레드를 생성한다.
클라이언트와 서버가 지속적인(persistent HTTP)사용
- 지속적인 연결시간 동안 같은 서버 소켓을 통해 HTTP 메시지를 전달한다.
클라이언트와 서버가 비지속적인(non-persistent) HTTP 사용
- 모든 요청/응답마다 새로운 TCP 연결이 생성되고 종료된다. 즉, 매번 새로운 소켓이 생성되고 종료된다.
'네트워크' 카테고리의 다른 글
신뢰적인 데이터 전송의 원리 (0) | 2024.02.01 |
---|---|
UDP (0) | 2024.01.29 |
DNS (1) | 2024.01.22 |
웹과 HTTP (0) | 2024.01.15 |
네트워크 애플리케이션의 원리 (1) | 2024.01.10 |