6-1. 트랜스포트 계층 : 안정적인 데이터 전송원리
트랜스포트 계층
- 트랜스포트 프로토콜은 데이터링크 프로토콜과 기능이 유사
- 오류제어, 순서화 등의 기능
- 차이점
- 데이터링크 계층은 하나의 전송매체에 연결되어 있는 노드를 연결
- 트랜스포트 계층은 호스트와 호스트 사이를 연결 (end to end)
인터넷과 OSI의 트랜스포트 프로토콜
- 인터넷 대표적인 프로토콜 : TCP, UDP
- OSI 대표적인 프로토콜 : TP4, TP0
- UDP는 신뢰적인 데이터 전송 보장 불가, 최소의 프로토콜 기능을 가진 데이터그램 전송
- TP4는 상대적으로 TCP와 비슷(신뢰가능), TP0는 UDP와 비슷 (기본기능만 제공)
안정적인 데이터 전송원리
트랜스포트계층은 안정적 데이터 전송 기능을 한다.
하지만 컴퓨터 통신에서의 안정적인 데이터 전송은 꼭 특정 계층에만 국한되는 것이 아니라
데이터 링크 계층, 트랜스포트 계층, 심지어 응용계층에서도 다루어야 할 주제
- TCP는 신뢰적인 데이터 전송이 보장
- IP는 비신뢰적이어서 오류 가능성이 존재하기에, 상위계층인 TCP가 오류 해결하는 기능 있음
트랜스포트 계층의 주요 기능
- 오류 제어 (Error control)
- 오류 검출과 교정 : 수신측에서 오류검출되면 송신측에 알림, 송신측은 프로토콜에 따라 다양하게 대처
- ARQ(Automatic Repeat Request) : 데이터의 재전송을 요구하는 형태의 오류 제어기법, TCP도 사용
- 흐름 제어 (Flow control)
- 교통 흐름제어와 유사
- 송신측은 정해진 패킷수만큼 전송 할 수 있게 하는 ACK수신해야 함
- ACK(acknowledgment) : 컴퓨팅에서 응답을 보내기 위한 신호
- 3가지 안정적인 데이터 전송기법
- stop-and-wait 프로토콜
- Go-Back-N 프로토콜
- Selective Repeat 프로토콜
Stop and Wait 프로토콜
- 송신측이 계속 패킷을 전송하는 대신에, 하나의 패킷을 전송하고 ACK를 대기하는 작업을 반복
- 간단하지만 한 번에 한 개의 패킷만을 전송하므로 매우 비효율적 -> 현재는 사용안함
- Stop and Wait 방식의 네 가지 경우
- 중복수신 문제 해결은 패킷의 헤더에 0과 1을 가질 수 있는 순서번호를 부여
Sliding Window 프로토콜
- go-back-N 프로토콜 / Selective Repeat 프로토콜
- 송신자가 ACK 기다리지 않고 여러 패킷을 전송할 수 있는 프로토콜 -> 현재 사용
- 윈도우 크기(Window Size = N)사용 : 한 번에 전송할 수 있는 패킷 수가 N을 넘을 수 없도록 제한
go-back-N 프로토콜
- 수신측은 패킷을 제대로 받았다고 하더라도 순서에 맞지 않으면 수신된 모든 패킷 폐기
- 따라서 송신측은 패킷을 보냈는데 ACK를 수신하지 못한 패킷과 그 다음의 모든 패킷을 재전송해야함
*수신측은 패킷 0과 1을 정상적으로 수신 받고 패킷 2를 기다린다는 ACK2를 보냄
*송신측에서 패킷 2를 보내는 과정에 오류발생, 패킷2 전송 안 됨.
*송신측은 패킷이 손실되었거나 없어졌다는 사실 모른 채 타이머 종료될 때까지 8까지 송신
-> 하지만 수신측에선 2번패킷부터 수신하지 못했기 때문에 3번부터 8번 패킷 모두 폐기, 송신측은 재전송
- 장점 : 수신측이 전송된 패킷을 저장하거나 재전송된 패킷을 재배열 시킬 필요가 없음
- 단점 : 재전송하는 패킷의 비율이 더 높게 되므로 네트워크의 대역폭에 있어서는 손실
지원방식
- 누적 ACK방식(Cumulative ACK) 사용
예 ) 송신측이 패킷 0,1,2,3을 전송한 경우 수신측에서 ACK2가 전송되어오면 송신측은 패킷 0과 1을 잘 수신했고 2번 패킷을 기다린다고 간주
- 수신측에서 패킷 오류를 발견했을 때, NAK(Negatice ACK)를 송신측에 보냄
- NAK를 받은 송신측은 패킷 전송이 잘못 되었다는 것을 알게되고, 잘못 전달된 패킷부터 이후에 전송된 패킷들을 재전송
- 예시 (위도우 크기가 4인 경우 )
*패킷 0부터 3까지 ack를 받지않고 한번에 송신
*수신측으로부터 ack1을 받은 경우(0은 잘 수신) 그다음 패킷 4송신 가능
*패킷2는 손실, 패킷3 정상 송신
*패킷 3을 수신한 시점에 오류가 발생했다는 것을 알기 때문에 송신측에게 NAK2를 전송
-> 패킷3,4,5는 폐기되고 송신측은 패킷2부터 순서대로 재전송
Selective reapeat 프로토콜
ack를 수신하지 못한 패킷만 재전송
go-back-N보다 재전송 비율 적어 효율 높음
송신측에선 재전송을 위해 이미 전송된 패킷을 계속 저장해야하는 부담
수신측에선 재전송도니 패킷을 재배열 : 재배열 알고리즘 요구, 프로세서 오버헤드 유발
지원방식 - 누적ack방식 이용, NAK
시나리오)
받은 패킷을 일단 버퍼에 저장
손실남 패킷만 다시 받음
재정렬 해야한다는 부담
재정렬 후에 상위계층으로 전달
STOP-AND-WAIT와 슬라이딩 윈도우 방식 비교
L : 패킷 크기
R : 전송음
L/R = 네트워크를 따라 패킷이 전송되는 시간
RTT = 2X전파지연시간
전파지연시간
마지막 패킷 비트가 수신측에 도착한 시간
처리시간
ACK보내는 시간
전체시간 = L/R + RTT
이용률 = (L/R) / (L/R + RTT)
SLIDING WINDOW방식에서 이용률
N=3이라면
이용률 = (L/R * 3) / (L/R + RTT)