Transport Services and Protocols
transport 계층에서 만드는 data unit의 이름 - segment
서로 다른 host에서 실행되는 app process 간 logical communication을 제공
- send 측 :
- 앱에서 내려보낸 메시지를 부숴 network layer로 보냄
- 받는 측:
- 메시지를 다시 모아서 app layer로 보냄
Transport vs Network layer
network layer
- host 간 logical communication을 제공
transport layer
- network layer 기능에 의존하여
- process 간 logical communication을 제공
앤의 집에 12명이 빌의 집의 12명에게 편지를 보낸다면,
- host = 집
- process = 거주민
- app message = 편지
- transport protocol = 앤 과 빌
- 앤은 편지를 받아서 빌의 우체통에 넣는 역할
- 빌은 우체통을 열어서 수신자에게 전달하는 역할
- network-layer protocol = postal service
- 앤의 우체통으로부터 빌의 우체통까지 전달하는 역할
Internet transport-layer protocols
TCP
- reliable , in-order delivery
- congestion control : 네트워크의 혼잡이 발생하지 않도록 sending rate 조절
- flow control : receiving buffer가 넘치지 않도록 sending rate 조절
- connection setup
UDP
- unordered delivery
- host to host delivery를 하는 network layer의 IP가 최선을 다하여, ㅠ
- packet loss나 packet 순서 꼬임 방지를 최대한 덜하도록
둘 다,
- delay와 대역폭을 보장해주진 않음
TCP에서는 서버가 먼저, UDP에서는 클라이언트가 먼저 실행되어야 하는 이유
TCP application에서 client이 실행되자마자 서버와 TCP connection을 맺으려 함
만약 TCP server가 운영 중이지 않았다면 connection을 맺을 수 없기에 그럼
UDP application에서는 client가 실행 즉시 connection을 초기화하지 않음
Multiplexing(sender) and Demultiplexing(receiver)
multiplexing : 여러 socket에서 온 data를 관리하고 transport header를 붙임
- transport protocol의 가장 기본적인 기능 가운데
- 클라이언트 측에서 여러 application이
- 내려보내는 application message들을
- 모두 하나의 transport 계층에서 받는 기능
demultiplexing : deliver segment to correct socket
- transport 계층의 가장 기본적인 기능 중 하나로,
- server측 transport 계층에서 network 계층으로부터
- deliver된 data를
- receiving end point인 application process를 찾아
- deliver해 주는 기능
두 개의 client host는
하나의 server host와 통신 중
server host에서의 transport layer를 보면,
- 각 client와 통신하는 socket 두 개로부터 옴
- 보내는 입장에서는 여러 개의 socket으로부터 데이터를 받아서
- transport 헤더를 붙여둠
- 올바른 socket으로 보낼 때 헤더를 demultiplexing해야 함
- 또 이후에 data가 클라이언트로 전송되었을때
- 클라이언트가 demultiplexing 할 때 필요한 정보가 담김.
How demultiplexing works
<host receives IP datagrams>
header
- source IP와 Destination IP
payload
- TCP/UDP segment format
-
- 이 안에 header = source port , dest port
- payload = application data
-
볼드체 두 개로 demultiplexing을 함
Connectionless Demultiplexing - UDP
UDP의 경우는 source IP와 port와는 관계 없이
destination IP & port number만으로
demultiplexing을 수행
socket이 생성될 때 유일한 포트번호가 짝지어짐
- 클라이언트의 경우 OS가 자동 할당. 서버에서는 개발자가 지정
- DatagramSocket mySocket1 = new DatagramSocket(12534);
UDP socket에 보낼 datagram에는 목적지의 IP주소와 포트번호도 함께 주어야 함
host가 UDP segment를 받으면
- UDP segment 속 destination 포트번호를 확인하여 해당 socket으로 보냄
connectionless demux에 있어서는
보내는 측의 IP 주소와 포트번호는 상관없고
목적지의 IP주소와 포트번호로 목적지 socket을 결정
저마다 socket을 생성하고 각기 다른 포트 번호가 할당됨
Connection-oriented Demux - TCP
아래 4가지 정보를 이용하여 TCP socket을 식별함
- source IP 주소
- source 포트 번호
- dest IP 주소
- dest 포트 번호
이 정보들을 demux하여 적절한 소켓을 찾음
서버 host는 welcome 용 TCP 소켓을 별도로 생성
- 또한 각 클라이언트마다 connectionSocket도 생성
하나의 서버에도 이렇게나 많은 소켓 중 어느 것인지 알기 위해
- source IP와 포트번호가 필요할 수 밖에 없군! (TCP라면)
- 각 소켓은 4개의 튜플로 식별됨
하나의 client가
Non-persistent HTTP로 온다면 각 요청마다 소켓 생성 ㄷㄷ
각 소켓별로 process가 별도로 있음
- 소켓 프로그래밍이 파이썬을 이용하면 괜찮지만
- c언어로 하게 되면,
- 서버 프로세스가 하나의 웰컴 소켓을 열어두고 클라이언트의 요청을 받았을 때
- 그 클라이언트를 위한 소켓을 만들고
- 프로세스도 그 클라이언트를 위해 생성
- 각 프로세스 별로 리소스도 할당되어야하고 관리하는데 overload 발생
그래서 threaded server를 이용하기도
이는 process 하나에 소켓 여러 개 할당한 것
Suppose Client A initiates a Telnet session with Server S. At about the same time, Client B also initiates a Telnet session with Server S. Provide possible source and destination port number for
a. The segment sent from A to S
b. The segment sent from B to S
c. The segment sent from S to A
d. The segment sent from S to B
'CS > Network' 카테고리의 다른 글
Reliable data transfer - TCP (0) | 2021.10.16 |
---|---|
Connectionless Transport : UDP (checksum) (0) | 2021.10.16 |
[Summary] Application Layer (0) | 2021.10.16 |
Socket programming with UDP, TCP (0) | 2021.10.16 |
Video Streaming and CDNs (Content Distribution Networks) (0) | 2021.10.16 |