Transport Layer(전송 계층)
- 서로 다른 호스트에서 실행되는 애플리케이션 프로세스 간의 논리적인 연결을 담당한다.
- 전송 프로토콜(Transport protocol)은 end system에서 실행된다. 그래서 전송 계층을 논리적인 종단 간 전송 시스템(logical end-end transport system)라고 하기도 한다.
- 송신 측: 애플리케이션 메시지를 세그먼트 형태로 만들어 네트워크 계층으로 보낸다.
- 수신 측: 세그먼트를 메시지 형태로 만들어 애플리케이션 계층으로 보낸다.
- 네트워크 계층과 전송 계층의 차이점
- 네트워크 계층은 호스트 간의 논리적인 연결을 담당한다.
- 전송 계층은 프로세스 간의 논리적인 연결을 담당한다.
전송 계층에서 주로 다루는 것
- TCP(connection oriented transport): reliable, in-order delivery
- UDP(connectionless transport): unreliable, unordered delivery
- multiplexing/demultiplexing
2. Multiplexing/Demultiplexing(demux)
- Multiplexing: 여러 소켓에서 데이터를 처리하고, 나중에 디멀티플렉싱에 사용될 전송 헤더를 추가한다.
- Demultiplexing: 헤더 정보를 사용하여 수신된 세그먼트를 올바른 소켓으로 전달한다.
TCP 소켓은 src IP addr, src port #, dst IP addr, dst port #의 4-tuple로 식별된다. 그리고 demux는 적절한 소켓으로 보내기위해 이 네개의 값을 모두 사용한다.
3. Socket
<Socket>
소켓은 애플리케이션과 네트워크 사이의 인터페이스다. 애플리케이션이 소켓을 생성하고, 소켓의 타입이 통신 스타일을 결정한다.
일단 구성되면 애플리케이션은 네트워크 전송을 위해 소켓에 데이터를 전달할 수 있고, 다른 호스트가 네트워크를 통해 전송한 데이터를 소켓을 통해 받을 수 있다.
<SOCK_STREAM a.k.a. TCP, SOCK_DGRAM a.k.a. UDP>
<TCP three-way handshake, four-way handshake>
Three-way handshake는 TCP 프로토콜을 사용해서 통신을 하는 애플리케이션들이 데이터를 주고 받기 전에 서로 연결이 잘 되어있는지 확인을 하는 과정이다.
Four-way handshake는 three-way handshake로 확인한 연결을 끊기위해 필요한 과정이다.
<API>
- socket: 소켓을 생성한다.
- bind: 소켓을 로컬 IP 주소와 포트 번호로 바인딩한다.
- listen: 소켓을 수동 상태로 전환(연결 시작 대신 연결 대기)한다.
- accept: 연결을 받아들인다.
4. UDP(User Datagram Protocol)
- Handshaking을 하지 않는다 → unreliable(연결이 잘 되었는지 확인하지 않음)
- 최선을 다해도 최선의 결과가 나오지 않을 수 있는 전형적인 예시
- 멀티미디어 스트리밍 애플리케이션, NDS, SNMP 등에 사용한다
- UDP에서 안정적인(reliable) 전송을 하는 방법? → 애플리케이션 레이어에 reliability를 추가한다
5. TCP(Transmission Control Protocol)
<RDT: Reliable Data Transper>
- RDA 1.0 → Bit error X, Packet loss X
- RDT 2.0 →Bit error O, Packet loss X
- checksum이 bit error를 감지한다. → Error Detection
- RDT 2.1 → ACKs, NAKs와 같은 feedback message가 손상되면 receiver측에서 어떤 일이 일어났는지 알 수 없으므로 sender는 패킷을 다시 보낸다. Sender는 패킷에 sequence number를 추가하므로, receiver는 중복을 무시할 수 있다(seq# 0: 처음 전송, seq#1: 재전송).
- RDT 2.2 → NAK 없이 구현하는 대신, receiver가 ACK 응답을 보낼 때 Seq#을 함께 보낸다. 예를들어 PCK 1을 전송하면 ACK 1을 받고록 설계하고, ACK가 1일 경우(제대로 데이터를 받은 경우) 다음 PCK을 전송하고 0이면 현재 PCK을 재전송한다.
- RDT 3.0 → Bit error O, Packet loss O
- Bit error는 RDT 2.x 버전에서 모두 해결했다.
- Packet loss는 time out으로 해결한다.
- Pipelined protocols: 한번에 여러개의 패킷을 보내는 것을 허용함
- 대표적인 파이프라인 프로토콜의 형태에는 go-Back-N, selective Repeat이 있음
<TCP>
TCP의 핵심 기능에는 reliable data transfer, flow control, congestion control이 있다.
(1) TCP의 특징
- point-to-point: one sender-one receiver
- reliable, in-order byte stream
- pipelined: TCP congestion and flow control set window size
- full duplex data: 각 소켓은 sender/receiver의 역할을 모두 할 수 있다.
- MSS: maximum segment size
- connection-oriented: 데이터 교환 전에 handshaking은 sender, receiver의 상태를 초기화해준다.
- flow controlled: sender는 애플리케이션에서 내려오는 메시지를 receiver의 속도에 맞춰서 보낸다.
(2) TCP timeout 값 설정
- timeout은 데이터를 전송할 때 packet loss를 해결하는 용도로 쓰인다.
- RTT(round trip time)보다는 길게 설정해야 한다
- timeout 값이 너무 짧으면, packet loss가 아닌데도 과도하게 재전송을 하게 된다. → 불필요한 재전송
- timeout 값이 너무 길면, loss에 대한 반응이 너무 느려지게 된다.
<Congestion control>
- congestion: 네트워크가 처리할 수 없는 양의 데이터가 너무 빠르게 전송되는 것
- TCP congestion control
- 기본적으로 ACK가 network connection이 어떤지 알 수 있는 이유일한 방법이다.
- 접근: sender의 전송 속도(창 크기)를 높이고, 손실이 발생할 때까지 사용 가능한 대역폭을 찾는다.
- additive increase
- multiplicative decrease
'DevOps > Network' 카테고리의 다른 글
[네트워크]네트워크 레이어/NAT/DHCP (0) | 2021.04.25 |
---|---|
[네트워크]패킷 교환 네트워크에서 지연과 손실 (0) | 2021.04.22 |
[네트워크]네트워크 기초와 OSI 7계층 (0) | 2021.04.22 |