[Network] Transport Layer, Mux & Demux
개요
TCP Keywords
- reliable data transfer
- flow control
- congestion control
Transport Layer가 하는 일
- 서로 다른 host의 프로세스 간 Logical communication 제공
- 프로토콜은 End System 즉, host에서 돌아간다.
- Network 계층의 라우터들을 거쳐서 데이터들이 전달되지만, Transport 계층은 이 거쳐가는 과정은 보이지 않고 두 엔드 시스템(프로세스) 사이의 Logical Communication에만 집중한다.
- Sender: App Layer의 메시지를 segment 단위로 메시지를 잘라서, Transport Layer의 헤더를 붙이고 Network Layer로 전송
- Receiver: 받은 segment를 합쳐서 메세지를 만들고 App Layer로 전달
⇒ App ↔ Transport가 메시지를 주고 받을 때 자르고/붙이고 함
⇒ Transport Layer의 핵심은 Multiplexing & Demultiplexing
Transport Layer vs. Network Layer
Network: host 간 logical 통신(우편 배달)
Transport: process 간 logical communication(배달이 된 우편들을 정확히 배분 ex. 12명 ↔ 12명 각각의 이름 매칭)
Transport - ① reliable ② unreliable
① reliable & in-order TCP
- 보낸 그대로, 순서대로 전달한다.
- congestion control
- flow control
📖 커넥션을 맺어야 통신이 가능하다.
- connection setup
② unreliable & unordered
중간에 날아갈 수 있고, 순서 상관없이 도달 ⇒ 그저 “전달만”!!
TCP, UDP가 모두 해줄 수 없는 것은
- 언제까지 도달하도록 보장할 순 없다.
- 속도 유지를 보장할 수 없다.
- 예를 들어, 스트리밍 중에 계속 몇 bps로 속도를 유지할 것인지는 보장 X
Multiplex & Demultiplex
멀티플렉스: 프로세스로부터 받은 패킷에 포트 번호를 넣어 헤더를 만들어서, 하나의 통로로 하위 계층에 보냄.
★ 디멀티: 그 반대, Transport 계층으로 오면 전송된 세그먼트의 헤더 정보를 확인해서 적절한 프로세스의 문(목적지)에 도달하게끔 함.
TCP와 UDP의 Demux
디멀티플렉스는 받은 소켓의 헤더 정보를 확인해서 적절한 프로세스와 연결해주는 것.
⇒ TCP와 UDP는 Demux하는 방식이 다르다. 각각 Connection-oriented, Connectionless
① Connectionless Demux
- Datagram 소켓을 생성
- desincation IP, Port로 전송
- 받는 호스트 측에서 UDP Segment를 확인해서, Destination Port가 같다면 OK
⇒ 즉 (src_ip, src_p, dst_ip, dst_pt) 중 dst_pt만 확인해서 같은 소켓으로 보낸다. 보내는 쪽의 주소와 포트 넘버가 달라도 Desination 정보가 같으면 같은 곳으로 보내짐!
② Connection-Oriented Demux
(src_ip, src_p, dst_ip, dst_pt) → 이 네 가지 값을 하나의 튜플로 묶어, 정보로 활용한다.
TCP에서는이 네가지 정보가 담긴 튜플을 활용해서 segment를 적절한 소켓으로 전달한다.
- 웹 서버는 TCP를 사용하는데, 클라이언트와 커넥션을 맺을 때마다 다른 소켓을 사용한다.→ non-persistent HTTP는 요청마다 새 커넥션을 하기 때문에 모두 다른 소켓을 사용한다.
- reliable data transfer
- flow control
- congestion control