Transport layer는 다른 호스트에서 돌아가는 프로세스 간의 논리적인 연결을 제공한다.
보내는 측에서는 메시지를 segment로 나누어서 network layer에 보내고 받는쪽에서는 segement들을 재조립해서 메시지로 만들어서 application layer에게 넘겨준다.
TCP, UDP 등이 있다.
애플리케이션이 필요로 하는 Transport 서비스는 다음과 같은 것들이 있다.
Transport Service
1. 데이터 무결성 (data integrity)
데이터의 믿을 만한 데이터인지, 완전한 데이터인지에 관한 성질이다.
어떤 앱은 반드시 데이터가 완전해야할 수도 있고 어떤 앱은 어느정도 손실이 있어도 동작할 수 있다.
2. 타이밍 (timing)
딜레이에 관한 내용이다. 애플리케이션에 따라 딜레이를 허용하는 정도가 다르다.
3. 처리율 (throughput)
단위 시간당 보낼 수 있는 데이터의 양이다.
4, 보안 (security)
암호화나 무결성에 관한 성질이다.
TCP는 이 중 data integrity를 제공하고 UDP는 이마저도 제공하지 않는다.
다중화/역다중화 (Multiplexing/Demultiplexing)
다중화 (Multiplexing)
transport layer에서 데이터를 segment 단위로 나누어 보낸다고 배웠다.
송신자가 이 segment들을 네트워크로 내려보내는 과정에서 encapsulation이 일어나고 transport header가 붙게 된다.
이 과정을 다중화라고 한다.
역다중화 (Demultiplexing)
역다중화 과정은 수신자가 segment들을 받을 때 일어나는 과정이다.
transport layer에서 segment들을 받으면 transport header의 정보(ex 포트 번호)들을 보고 적절한 소켓으로 전달해주는 과정이 역다중화이다.
역다중화 과정은 두 가지로 나뉜다.
1. Connectionless Demultiplexing
수신자가 UDP segment를 받았을 때의 역다중화 과정이다.
UDP 방식으로 통신을 진행할 때 호스트가 받는 세그먼트들의 포트 번호가 같다면 같은 소켓으로 세그먼트들을 받게 된다.
아래 그림과 같이 송신자가 다르더라도 포트 번호만 같으면 같은 소켓으로 세그먼트들을 받는다.
2. Connection-oriented Demultiplexing
수신자가 TCP segment를 받았을 때의 역다중화 과정이다.
TCP는 reliable한 데이터 전송을 위해서 커넥션을 맺는 과정이 포함된다.
그렇기 때문에 도착 포트가 같더라도 출발 포트가 다르다면 전부 다른 소켓으로 세그먼트를 받게 된다.
UDP segment format
UDP segment의 형식은 다음과 같다.
- source port : 출발 포트
- dest port : 도착 포트
- length : 길이
- checksum : 오류 체크
UDP의 특징을 보면 커넥션이 없기 때문에 빠르다.
간단하고 header의 크기가 작다.
congestion control을 하지 않는다.
UDP는 reliable하지 않지만 그래도 오류를 탐지하는 checksum이 존재한다.
checksum은 보내는 쪽에서 헤더와 payload를 16비트로 더한다.
이 checksum에 one's complement (1의 보수)를 취한 값을 UDP checksum field 안에 넣는 것이다.
만약 checksum과 checksum field의 값을 더하면 모든 비트가 1이 될 것이고 한 비트라도 0이 나오면 에러가 발생했다고 판단하는 것이다.
TCP가 reliable한 이유
reliable한 data transfer는 보내는 데이터가 오류 없이 순서대로 도착하는 것을 의미한다.
데이터가 reliable 하려면 reliable한 채널을 사용하면 된다.
직접 선을 깔아서 연결해서 통신을 한다면 reliable한 채널이기 때문에 reliable 하다.
그런데 현실적으로는 무선으로 데이터를 보내기 때문에 채널이 reliable 하다고 보기는 어렵다.
이렇게 unreliable한 채널으로 데이터를 보낼 때 TCP를 사용하면 reliable하게 되는 것이다.
TCP는 다음과 같은 방식으로 reliability를 보장한다.
먼저 데이터를 보낼 때 비트에서 오류가 날 수 있다.
이럴 경우 checksum을 사용하여 데이터 오류를 판단하고 송신자에게 ACK를 보내서 데이터 오류 여부를 알려주는 것이다.
비트에서 오류 나는 것이 아니라 패킷 자체를 잃어버릴 수도 있다.
이럴 경우 수신자는 패킷 자체를 받지 못하기 때문에 송신자에게 ACK를 줄 수도 없다.
이렇게 패킷을 잃어버린 경우 송신자는 특정 시간을 정해두고 그 시간이 넘도록 ACK를 받지 못하면 패킷을 잃어버린 것이라고 판단하고 다시 패킷을 보내는 것이다.
또한 패킷을 보낼 때 Sequence Number가 존재하기 때문에 순서대로 보낼 수 있고 중복된 패킷이 오더라도 이를 가려낼 수 있다.
'공부 > Network' 카테고리의 다른 글
[Network] pipelined protocol (0) | 2023.04.18 |
---|---|
[Network] 인터넷 프로토콜 스택 (OSI 7계층 ,TCP/IP 5계층) 및 패킷 전송 과정 (0) | 2023.04.12 |
[Network] 소켓 프로그래밍 (TCP/UDP) 개념 및 실습 (0) | 2023.04.07 |
[Network] Video Streaming and CDNs (0) | 2023.04.05 |
[Network] P2P applications (0) | 2023.04.03 |
댓글