-
[네트워크] 8. Transport Layer, multiplexing, UDPCS/네트워크 2023. 4. 3. 00:58
1. Transport services
Application Layer 아래 계층인 Transport Layer에 대해서 알아보도록 하겠습니다.
Transport service는 application layer 사이 통신이 logical communication 이라는 신뢰성을 주는 역할을 합니다.
보내는 쪽에서는 segment라고 하는 작은 단위로 쪼개서 보내게 되고,
받는 쪽에서는 그 쪼개진 segment를 모아 조합해서 application layer로 보내줍니다.
(참고로 UDP는 Transport Layer에서는 나누지 않고, Network Layer에서 억지로 나누게 됩니다.)
1.1 Transport vs network layer
Transport layer는 network layer의 api 를 호출합니다.
- network layer : 호스트 간에 logical communication을 담당합니다.
- transport layer : process 와 process 사이 통신을 담당합니다.
1.2 Internet Transport Layer Protocols
Transport Layer Protocol의 종류는 두 가지가 있습니다.
- TCP : 데이터가 정확하고, 순서가 맞는 in-order 형식입니다.
- UDP : 데이터를 완벽히 믿지는 못하고, 순서가 맞지 않습니다. (Best Effort : 최선을 다하지만 정확하지는 않습니다.)
Transport Service는 아래 4가지 중 data integrity만 지원합니다.(UDP는 이것 조차 지원하지 않습니다.)
- data integrity : 100% 무결성 데이터
- timing : delay가 없어야 효과적으로 사용 가능
- throughput : 최소한의 처리율을 요구
- security : 암호화 등
2. Multiplexing, Demultiplexing
2.1 Data encapsulation / Decapsulation
네트워크 계층을 내려갈수록, 데이터에 헤더가 붙으며 encapsulation이 됩니다.
그 반대를 Decapsulation이라고 합니다.
PDU (Protocol Data Unit) : 프로토콜 별 명칭
아래는 각 계층에서 프로토콜 데이터 유닛을 부르는 명칭입니다.
Segment = Data Chunk + Port
Datagram = Segment + IP Addr
Frame = Datagram + HW Addr(MAC 주소)
2.2 Multiplexing / Demultiplexing
아래와 같이 서버에 서로 다른 process가 돌 때 상황을 가정해 보겠습니다.
프로세스마다 소켓이 하나씩 있으며, 서버에서 데이터를 보낼 때, transport header를 붙여서 보내게 됩니다. 이것이 multiplexing 이며,
이후 클라이언트에서 서버로 데이터가 올 때, 하나의 파이프로 합쳐져서 오게 되는데, 각각에 맞는 소켓으로 보내기 위해 header 정보를 보고 판단합니다. 이것이 demultiplexing 입니다.
Demultiplexing이 작동하는 방식은 다음과 같습니다.
host는 IP datagrams를 받게 되고, 각 datagram은 source IP와 destination IP를 가지고 있습니다.
각 datagram은 하나의 segment를 갖고 있으며, host는 IP주소와 port 번호로 어떤 소켓으로 segment를 보낼 지 판단합니다.
2.3 Connectionless demultiplexing
UDP와 같이 연결을 하지 않는 통신일 경우, host가 UDP segment를 보았을 때, destination port만 살펴보게 됩니다.
서로 다른 segment인데도, 같은 dest-port를 가진다면, 하나의 소켓으로 demultiplexed되게 됩니다.
2.4 Connection-oriented Demultiplexing
TCP와 같이 연결을 하고 통신하는 경우, connection마다 소켓이 존재해야 합니다.
connection마다 다른 소켓으로 보내야 하기 때문에, TCP는 4가지 정보로 connection을 만듭니다
- source IP 주소
- source port number
- dest IP 주소
- dest port number
UDP와는 다르게, 보낸 주소인 source를 보고 특정 소켓으로 찾아갈 수 있게 됩니다.
3. UDP
User Datagram Protocol 이란 뜻의 UDP는, connectionless하고 unreliable합니다.
하지만 속도가 빠르기 때문에 실시간 작업이 필요한 app에서 사용됩니다.
실시간으로 속도를 빠르게 하기 위해, connection을 맺지 않습니다.
3.1 UDP Checksum
UDP는 unreliable하기 때문에, 얼마나 틀렸는지 정도는 제공해 줄 필요가 있습니다.
이를 error bit로 표현하여 checksum을 통해 알아낼 수 잇습니다.
Checksum을 통해 error을 알아내는 과정은 다음과 같습니다.
- UDP를 보내는 쪽에서 모든 16bit 데이터의 합을 구합니다. 합을 구하는 과정에서 carry가 발생하면 wraparound로 1을 더해줍니다.
- 이렇게 구한 sum을 반전시켜 checksum을 구합니다.
- UDP를 받는 측에서 데이터의 합과 checksum을 더하게 될 경우, 에러가 없다면 모든 bit가 1로 나오게 됩니다. 에러가 생기면 1이 아닌 bit가 생깁니다.
' 본 글은 Computer networking : a top-down approach 라는 책을 통해 작성되었습니다.
'CS > 네트워크' 카테고리의 다른 글
[네트워크] 10. Pipelined protocol (Go-back-N, selective repeat) (0) 2023.04.10 [네트워크] 9. Principles of Reliable data transfer (0) 2023.04.04 [네트워크] 7. P2P와 Video Streaming (0) 2023.03.25 [네트워크] 6. DNS (0) 2023.03.21 [네트워크] 5. FTP와 Electronic Mail(SMTP, POP3, IMAP) (0) 2023.03.16