3장 트랜스포트 계층
3.1 트랜스포트 계층 서비스 및 개요
논리적 통신 : 애플리케이션의 관점에서 보면 프로세스들이 동작하는 호스트들이 직접 연결된 것처럼 보인다는 것을 의미
세그먼트(segment) : 트랜스포트 계층 패킷
트랜스포트 계층 프로토콜은 네트워크 라우터가 아닌 종단 시스템에서 구현
3.1.1 트랜스포트 계층과 네트워크 계층 사이의 관계
트랜스포트 계층 프로토콜 : 프로세스들 사이의 논리적 통신 제공
네트워크 계층 프로토콜 : 호스트들 사이의 논리적 통신 제공
- 트랜스포트 계층 프로토콜들은 종단 시스템에 존재
- 트랜스포트 계층이 제공할 수 있는 서비스는 하위 네트워크 계층 프로토콜의 서비스 모델에 의해서 제약받는다.
- 그럼에도 불구하고 하위 네트워크 프로토콜이 상응하는 서비스를 제공하지 못할 때에도, 특정 서비스는 트랜스포트 프로토콜에 의해서 제공될 있다.
ex) 신뢰적인 데이터 전송 서비스, 암호화 3.1.2 인터넷 트랜스포트 계층의 개요
UDP : 비신뢰적, 비연결형 서비스 (user datagram protocol)
- 하나의 프로세스에 의해서 전송된 데이터가 손상되지 않고 목적지 프로세스에 도착한다는 것을 보장하지 않는다.
TCP : 신뢰적, 연결지향형 서비스 (transmission control protocol)
- 신뢰적인 데이터 전달 제공
- 혼잡제어(congestion control) 사용
3.2 다중화와 역다중화
역다중화(demultiplexing) : 트랜스포트 계층 세그먼트의 데이터를 올바른 소켓으로 전달하는 작업, 패킷을 수신하는 쪽에서 일어남.
다중화(multiplexing) : 출발지 호스트에서 소켓으로부터 데이터를 모으고, 이에 대한 세그먼트를 생성하기 위해서 각 데이터에 헤더 정보(나중에 역다중화에 사용된다)로 캡슐화하고, 그 세그먼트들을 네트워크 계층으로 전달하는 작업, 패킷을 전단하는 쪽에서 일어남.
트랜스포트 계층 다중화 요구사항
1. 소켓은 유일한 식별자(포트)를 가진다.
2. 각 세그먼트는 세그먼트가 전달된 적절한 소켓을 가리키는 특별한 필드를 가진다.
=> 특별한 필드 : 출발지 포트 번호 필드(source port number field), 목적지 포트 번호 필드(destination port number field)
비연결형(UDP) 다중화와 역다중화
- 목적지 포트 번호와 목적지 IP주소를 통해서 목적지 프로세스를 특정
- 출발지 포트 번호는 "복귀 주소"의 한 부분으로 사용
- UDP 소켓은 'IP주소'와 '목적지 포트 번호'로 구성된 두 요소로 된 집합에 의해서 식별
=> 목적지 IP와 포트 번호가 같으면 같은 소켓으로 취급
연결지향형(TCP) 다중화와 역다중화
- TCP 소켓은 4개 요소들의 집합(출발지 IP주소, 출발지 포트 번호, 목적지 IP주소, 목적지 포트 번호)에 의해서 식별
- 서버 호스트는 동시에 존재하는 많은 TCP 소켓을 지원할 수 있다.
=> 목적지IP와 포트 번호가 같아도 다른 요소(출발지 IP주소, 출발지 포트번호)가 다르다면 다른 소켓으로 취급
3.3 비연결형 트랜스포트 : UDP
UDP는 트랜스포트 계층 프로토콜이 할 수 있는 최소 기능으로 동작한다.
비연결형 : 송신, 수신 계층 개체들 사이에 핸드셰이크를 사용하지 않음
UDP 장점
- 무슨 데이터를 언제 보낼지에 대해 애플리케이션 레벨에서 더 정교한 제어 ex) 실시간 애플리케이션
- 연결 설정이 없다.
- 연결 상태가 없다.
- 작은 사이즈의 패킷, 필요한 헤더가 적어 오버헤드가 적다.
3.3.1 UDP 세그먼트 구조
source port : 출발지 포트 번호
Destination port : 목적지 포트 번호
length : application data(message)길이(바이트 단위)
checksum(체크섬) : 세그먼트에 오류가 발생했는지를 검사하기 위해 수신 호스트에 의해서 사용
3.3.2 UDP 체크섬
UDP 세그먼트의 도착 IP주소, 송신 포트번호, 입력 포트번호, 데이터 길이, 그리고 UDP 데이터들을 16비트단위로 쪼개서 전부 더한다. 그리고 오버플로 돼서 캐리된 값들을 다시 더하고 1의 보수를 취한다. 이렇게 해서 나온 값을 체크섬 값으로 사용한다.
체크섬 필드는 체크섬 계산할 때는 0으로 가정한다. 또 네트워크 레이어의 IP관련 필드들도 계산에 이용한다.
종단 간의 원리 (end-end-principle) : 주어진 링크 간의 신뢰성과 메모리의 오류 검사가 보장되지 않기 때문에, 종단 간의 데이터 전송 서비스가 오류 검사를 제공한다면, UDP는 종단 간의 트랜스포트 계층에서 오류 검사를 제공해야만 한다.
3.4 신뢰성 있는 데이터 전송의 원리
3.4.1 신뢰적인 데이터 전달 프로토콜의 구축
완벽하게 신뢰적인 채널 상에서의 신뢰적인 데이터 전송: rdt1.0
그림 설명
- 송신자는 데이터 전송요청이 있으면 다중화한 패킷을 전달한다.
- 수신자는 패킷이 네트워크를 통해 들어오면 역다중화하여 프로세스에 전달한다.
- 이 과정에서 양쪽이 신뢰적이기 때문에 서로 어떠한 응답도 하지 않는다. 그저 주고 받는 역할만을 한다.
하위 채널이 완전히 신뢰적인 가장 간단한 경우
- 오류가 생길 수 없음
- 수신 측이 송신 측에게 어떤 피드백도 제공할 필요가 없다.
- 수신자는 송신자가 데이터를 송신하자마자 데이터를 수신할 수 있다고 가정했으므로 수신자가 송신자에게 "천천히"라는 것을 요청할 필요가 없다.
비트 오류가 있는 채널 상에서의 신뢰적 데이터 전송 : rdt2.x
그림 설명
- 버전 1에서 송신자가 패킷이 잘 전송되었다는 것을 확인해야 다음 패킷을 전송하도록 기능을 추가한 버전이다.
패킷 안의 비트들이 하위 채널에서 손상되는 모델
자동 재전송 요구(automatic repeat request, ARQ) 프로토콜
전송-후-대기 (stop-and-wait) 프로토콜
서비스 요구사항
- 오류 검출 : checksum field
- 수신자 피드백 : 긍정 확인 응답(ACK)과 부정 확인 응답(NAK), 순서 번호(sequence number) 삽입
- 재전송
rdt.2.0 결점
ACK나 NAK 패킷의 변형 가능성에 대해서는 고려하지 않음
rdt2.1 : rdt2.0에서 sequence number기능을 추가한 모델
rdt2.2 : rdt2.1에서 NAK를 사용하지 않고 (NAK-free) ACK만 사용한 모델
비트 오류와 손실 있는 채널 상에서의 신뢰적 데이터 전송: rdt3.0
패킷 손실을 어떻게 검출할 것인가? 패킷 손실 시에 어떻게 행동할 것인가?
그림 설명
- 버전 2에서 패킷이 손실될 경우 재전송하는 기능을 추가한 버전, 알려진 tcp 프로토콜이러고 생각하면 쉽다.
1. 매 패킷(첫 번째 또는 재전송 패킷)이 송신된 시간에 타이머를 시작함
2. 타이머 인터럽트에 반응함(적당한 행동을 취함)
3. 타이머를 멈춤
3.4.2 파이프라인된 신뢰적 데이터 전송 프로토콜
프로토콜 rdt3.0의 이용률
광속 왕복 전파 지연(RTT) : 30 msec
전송률 : 1 Gbps
패킷 크기 : 8000bit
이용률은 0.00027로써 267 kbps의 유효 처리량을 지님 ->> 심각한 성능 저하
파이프라이닝을 사용하여 전송
확인 응답을 기다리지 않고 여러 패킷을 전송하도록 허용하는 것
파이프라이닝 방식은 신뢰적인 데이터 전송 프로토콜에서 다음과 같은 중요성을 가지고 있다.\
1. 순서 번호의 범위가 커져야 한다. 각각의 전송 중인 패킷(재전송은 고려하지 않음)은 유일한 순서 번호를 가져야 하고 거기에 전송 중이고 확인 응답이 안 된 여러 패킷이 있을지도 모르기 때문이다.
2. 프로토콜의 송신 측과 수신 측은 한 패킷 이상을 버퍼링 해야 한다. 최소한 송신자는 전송되었으나 확인 응답되지 않은 패킷을 버퍼링 해야 한다. 정확하게 수신된 패킷의 버퍼링은 다음에 설명한 것처럼 수신자에도 필요하다.
+버퍼링이란????
'버퍼에 저장되는 작업을 하고 있다'라는 것을 의미한다.
3. 필요한 순서 번호의 범위와 버퍼링 조건은 데이터 전송 프로토콜이 손실 패킷과 손상 패킷 그리고 상당히 지연된 패킷들에 대해 응답하는 방법에 의존한다. 파이프라인 오류 회복의 두 가지 기본적인 접근방법으로 N부터 반복(Go-Back-N, GBN)과 선택적 반복(Selective Repeat, SR) 등이 있다.
3.4.3 N부터 반복(Go-Back-N, GBN)
GBN은 잘못된 패킷부터 N개의 크기만큼 다시 재전송한다는 뜻이다. 재전송할 패킷의 개수를 N으로 제한하기 때문에 N을 윈도우 크기라고 부르며, GBN을 슬라이딩 윈도우 프로토콜(sliding-window protocol)이라 부른다.
하지만 GBN 역시 단점이 존재한다. 왜냐하면 GBN은 N개의 패킷 중 일부분만 손실되었어도 N개의 패킷 모두를 재전송하기 때문이다.
또한, 수신 측에서 재전송이 필요한 경우는 패킷 손상(분실) 이외에도 NAK 패킷을 받았을 경우, 지정한 타임아웃 내의 ACK 패킷 손실 등이 있다. 이러한 경우에도 GBN은 N개의 패킷을 재전송해야 하기 때문에 이는 상당히 비효율적이다.
3.4.4 선택적 반복 (Selective Repeat, SR)
수신자에서 오류(손실되거나 변조된)가 발생한 패킷을 수신했다고 의심되는 패킷만을 송신자가 다시 전송하므로 불필요한 재전송을 피한다.
-->>> 개별적인 확인응답을 요구
송신자 이벤트와 행동
1. 상위로부터 데이터 받음 : 상위에서 데이터가 수신될 때, SR 송신자는 패킷의 다음 순서번호를 검사한다. 순서번호가 송신자 윈도우 내에 있으면, 데이터는 패킷으로 송신된다. 그렇지 않으면 GBN처럼 버퍼에 저장되거나 또는 나중에 전송하기 위햇 상위 곛층으로 되돌려진다.
2. 타임 아웃 : 타이머는 손실된 패킷을 보호하기 위해 다시 사용된다. 그러나 오직 한 패킷만이 타임아웃에 전송되기 때문에, 각 패킷은 자신의 논리 타이머를 가져야 한다.
3. ACK 수신 : ACK가 수신되었을 때, SR 송신자는 그 ACK가 윈도우에 있다면 그 패킷을 수신된 것으로 표기한다. 만약 패킷 순서번호가 send_base와 같다면, 윈도우 베이스는 가장 작은 순서번호를 가진 아직 확인 응답되지 않은 패킷으로 옮겨진다. 만약 윈도우가 이동하고 윈도우 내의 순서번호를 가진 미전송 패킷이 있다면, 이 패킷들은 전송된다.
수신자 이벤트와 행동
1. 윈도우 범위 내의 순서번호를 가진 패킷이 손상 없이 수신된다 : 선택적인 ACK 패킷이 송신자에게 되돌려진다. 윈도우 내의 첫번째 패킷이 수신되면 이 패킷과 이전에 버퍼에 저장되어 연속적으로 번호가 붙은 패킷들은 상위계층으로 전달되며 윈도우의 범위를 변경한다. 윈도우 내의 첫번째 패킷이 아니라면 버퍼에 저장된다.
2. 윈도우 범위보다 앞선 순서번호를 가진 패킷이 수신된다 : 이 경우에는 이 패킷이 수신자가 이전에 확인응답한 것이라도, ACK가 생성되어야한다.
3. 이 외의 경우 : 패킷을 무시한다.
+ SR 프로토콜에서 송신자와 수신자의 윈도우가 항상 같지는 않다
=> 송신자와 수신자의 윈도우 사이의 동기화 부족은 순서번호의 한정된 범위에 직면 했을 때 오류가 발생한다.
==> 이를 위해서 윈도우 크기는 SR프로토콜에 대한 순서번호 공간 크기의 절반보다 작거나 같아야 한다.
* 신뢰적인 데이터 전송을 위해 제공되는 다수의 매커니즘
체크섬 : 전송된 패킷 안의 비트 오류를 발견하는데 사용
타이머 : 체널 안에서 패킷이 손실되었기 때문에 발생되는 패킷의 타임아웃/재전송에 사용
순서번호 : 송신자에서 수신자로 가는 데이터 패킷의 순서번호를 붙이기 위해서 사용
확인응답 : 패킷 또는 집합이 정확히 수신되었다는 응답을 송신자에게 하기위해 수신자에 의해 사용
부정 확인응답 : 패킷이 정확히 수신되지 않았다는 응답을 송신자에게 하기위해 수신자에 의해서 사용
윈도우, 파이프라이닝 : 전송-후-대기 모드의 동작보다 데이터의 전송을 원할하게 하기 위해서 사용(이용률 증가)
'network' 카테고리의 다른 글
[컴퓨터 네트워킹]3장 트랜스포트 계층 - 3 (0) | 2021.09.24 |
---|---|
[컴퓨터 네트워킹]3장 트랜스포트 계층 - 2 (0) | 2021.09.22 |
[컴퓨터 네트워킹]2장 애플리케이션 정리 - 2 (0) | 2021.09.15 |
[컴퓨터 네트워킹]2장 애플리케이션 정리 - 1 (0) | 2021.09.12 |
[컴퓨터 네트워킹]1장 컴퓨터 네트워크와 인터넷 정리 (0) | 2021.09.10 |