Transport Layer Actions
왼쪽이 data를 받는 Receiverdls client이고, 오른쪽이 data를 보내는 Sender인 server이다.
Transport Layer의 sender는 application으로부터 msg를 받아서 헤더 T_h를 붙인다.
이 헤더에는 양쪽에 있는 processor, 즉 양쪽의 socket을 찾기 위한 정보가 들어가 있다.
자신의 port number를 source field에 넣고, client의 port number를 destination field에 넣는다.
이렇게 헤더를 붙인 segment를 바로 밑 계층인 network layer로 보낸다.
헤더 T_h는 앞서 설명했듯이 sender가 만든 것이다.
Transport 계층의 receiver는 segment를 받아서 헤더를 본다. 즉 이 app.msg가 어떤 socket에 있는건지 찾기 위해서 destination field를 본다.
Transport services and protocols
process 간의 logical한 communication을 제공한다.
Muxing
sending할때!
processor를 찾아갈 수 있도록 나의 주소를 source에 넣고, receiver의 주소를 destination에 넣는것을 말한다.
Demuxing
receive할때!
destination 주소를 보고 socket을 찾는 것을 말한다.
TCP Segmentation (L4) vs IP Fragmentation (L3)
TCP Segmentation at layer 4
: TCP breaks a message down into MSS sizes to perform reliable data delivery without being affected by IP fragmentation (MSS <= MTU)
: 서로 다른 msg인데 같은 segment에 실려감. TCP는 byte 단위로 보낸다.
: TCP segment 하나에 2개의 msg가 실려갈 수 있다. (단 persistent TCP를 쓰는 경우에만 가능)
// MSS (Maximum Segment Size) : 4계층 TCP 용어로, TCP connection set-up시 세팅된다.
IP Fragmentation at layer 3
: necessary in order to deliver a (relatively large) message through a link with (relatively small) MTU
//MTU (Maximum Transfer Unit) : NIC와 관련. 2계층 용어로, MTU는 L2에 dependent (ex. Ethernet의 MTU는 1500byte)
Multiplexing / Demultiplexing
client-server와 무관. Mux는 sender, Demux는 receiver!
Primary role of a transport layer = Muxing at a sender / demuxing at a receiver
Muxing when sending
: sender가 (multiple) socket으로부터 들어온 데이터에 transport header를 붙여 network layer로 전송하도록 하는 과정
: processor를 찾아가게 내 주소를 source에 넣고 receiver의 주소를 destination에 넣음.
application 계층의 프로세스 B가 A (IP_A, port_A라고 하자)에게 메세지를 보낼 때 발생
application로부터 msg를 받은 transport layer 프로토콜이 자신의 헤더에 destination port # (port_A) in a transport layer header를 보내고, IP 프로토콜에게 a dest. IP address (IP_A)를 알려준다.
=> 이 동작을 해야 A를 찾기위해 demuxing을 할 수 있다.
Demuxing when receiving
: header를 이용하여 segment를 알맞는 socket으로 보내는 과정
: 받을 때, destination 주소를 보고 socket을 찾는것을 말한다.
destination port number (port_A)를 확인하고 a right socket(process)를 찾는 작업
socket 함수를 콜해서 B가 보낸 L5 msg를 A에게 전달한다
source에는 항상 내꺼 / destination에는 상대방꺼를 넣음!
Connectionless (UDP) demux
UDP를 사용하므로 connection set-up 과정이 필요 없음 → 속도가 빠르지만 flow control & congestion control 제공X
destination port의 socket을 찾기 위해 dst IP address와 dst port number만 사용됨.
즉, 어떤 src IP주소, src port를 갖고 있던간에 dst IP address와 dst port number만 같다면 same socket으로 보냄
port number가 다른데 굳이 왜 IP address까지 넣어서 보낼까?
=> IP주소는 소프트웨어로 세팅한다. 하나의 port number인데 IP주소가 서로 다른 경우가 있을 수 있기 때문
Connection-oriented (TCP) demux
1개의 server는 여러개의 TCP socket을 가질 수 있다.
각각의 socket은 다른 connection client와 연결된다. (point-to-point, unicast)
4개의 튜플 (src IP address, src port#, dst IP address, dst port#) 로 식별
= (보낸곳 IP, 보낸 곳 port number, 목적지 IP, 목적지 port number)로 식별
UDP vs TCP 비교
header size는 UDP가 TCP보다 작다!
'네트워크' 카테고리의 다른 글
[네트워크] Chap 3.3 - Reliable data transfer (rdt) (0) | 2024.11.21 |
---|---|
[네트워크] Chap 3.2 - Simple UDP, Internet checksum (TCP & UDP) (0) | 2024.11.20 |
[네트워크] Chap 2.8 - Socket programming (UDP & TCP) (0) | 2024.11.18 |
[네트워크] Chap 2.7 - Video streaming (DASH & CDN) (2) | 2024.11.17 |
[네트워크] Chap 2.6 - P2P vs Client-Server (1) | 2024.11.16 |