전송계층에 해당하는 프로토콜인 TCP는 흐름제어, 오류제어, 혼잡제어를 제공하는데 흐름제어를 하는 방법을 알아보자
💬 Stop - And - Wait
컴퓨터 네트워크 설정에서 재전송을 기반으로 하는 신뢰적인 데이터 전송 프로토콜 중 하나가 ARQ프로토콜이다. 이 StopAndWait가 ARQ의 방식 중 하나이다.
이 방식에서 송신측 A가 B에게 1개의 프레임을 송신하게 되면 B는 해당 프레임의 에러 유무를 판단하여 A에게 ACK 혹은 NAK을 보내게 된다.
장점 과 단점
장점
- 구현 방식이 매우 단순하며 송신 측 내에 최대 프레임 크기를 버퍼 1개만 잡아도 이론적으로는 문제가 없다
- 오류 검출과 복구가 쉽다
단점
- 효율이 낮다
- 송신자가 매번 한개의 프레임만 전송하면 전송 성능이 느리고 채널의 활용도가 매우 낮습니다.
- 응답 신호가 유실되거나 지연되면 송신자는 타임아웃이 발생하여 재전송을 하게 되는데, 이때 중복된 프레임이 발생하게 된다.
개선 방법
전송후 대기 프로토콜을 개선하기 위한 방법으로 Sliding Window 프로토콜이 존재한다. 이 프로토콜은 송신자와 수신자가 각각 윈도우라는 버퍼를 가지고, 윈도우 크기만큼 여러 개의 프레임을 연속적으로 전송하고 응답하는 방식으로 동작한다.
💬 Go - Back - N(Sliding Window)
- 송신자의 확인을 기다리지 않고 여러 패킷을 한번에 전송한다.
- 파이프 라인에서 확인 응답을 받지 못한 패킷의 최대 허용 수 보다 크지 않아야한다.
- 위에 그림처럼 만약 윈도우 사이즈가 7이라면 0~6까지 총 7개의 프레임을 보낸다.
- 보낸 데이터로 인해 답으로 넘어온 ACK이 확인된다면 응답이 확인된 갯수 만큼 더 보낼 수 있다
만약 데이터가 유실된다면?
데이터가 유실되는 경우
- Sender가 보낸 패킷이 timeout이 된 경우
- Receiver가 보낸 ACK이 유실 된 경우
위에 보이는 두가지의 경우 유실된 데이터가 확인된다면 Go-Back-N의 경우 해당 패킷부터 다시 데이터를 전송한다.
예를 들자면
- 0,1,2,3,4의 데이터를 4의 windowsize를 통해 0,1,2,3 의 데이터를 전송한다
- 어떠한 이유로 1의 패킷이 유실되었다. 하지만 2가 잘 보냈더라도 버려버린다.
- 어쨋든 Sender의 입장에서는 ACK을 받지 못했기때문에 1을 다시 보내게 된다
- 하지만 이때 1의 데이터만을 재전송하는 것이 아닌 이전에 전송한 2 또한 다시 보내게 되는 것이다.
단점
이로써 단점이 확연히 나타나게 된다. 위에서 말한 잘 전송된 데이터 또한 다시 보낸다는 것이 가장 큰 단점인데 이는 윈도 크기와 대역폭 지연 결과가 모두 클 때 많은 패킷이 파이프라인에 있을 수 있으며 고로 GBN은 패킷 하나의 오류때문에 많은 패킷들을 재전송하므로 많은 패킷을 불필요하게 전송하게 된다는 것이다.
💬 Selective Repeat(Sliding Window)
Selective Repeat 같은 경우 수신자에게 오류가 발생된 수신 패킷만을 다시 전송하기 때문에 불필요한 재전송을 피하게 된다. 이는 Go-Back-N방식의 단점을 보완한 모습이다. 하지만 여기선 구현해야할 방식이 너무 많아 오히려 Go-Back-N 방식을 더욱 많이 사용한다고 한다.
Selective Repeat은 특이하게 두쪽 모두 WindowSize를 가지고 있다.
송수신측에서는 윈도우 안의 패킷들에 대해 ACK 또는 수신 데이터를 받았는지 확인하는 과정이 필요하고, 송신부에서는 윈도우 안의 각 패킷에 대해 각각의 타이머를 설정하게 된다.
오류시 Selective Repeat이 대처 방법
Selective Repeat의 경우 에도 데이터의 유실이 발생한다. 그땐 해당 데이터만 다시 전송한다는 것을 알수 있었는데 중요한 것은 그 이후이다.
수신측은 데이터를 받았으니 윈도우를 옮기게 되는데 송신측은 타임아웃이 되어 해당 패킷을 다시 보낼 것이다. 송신자와 수신자 윈도우 사이에 동기화가 부족하면 윈도우의 한정된 범위에 도달했을때, 수신자가 재전송된 패킷을 새로운 패킷인지 재전송된것인지 알수가 없는것이다
예를 들어 송신자가 0번 패킷의 ACK만 못받아 재전송을 하였을때 수신자가 1,2,3을 다 받고 윈도우가 다음으로 넘어갔는데 다음 윈도우에 0이 들어있다면 중복된 번호가 되기 때문이다.
이를 해결하기 위해 윈도우 크기는 Selective Repeat에 대한 순서번호 공간 크기의 절반보다 같거나 작아야한다.
'CS > 🖥 네트워크' 카테고리의 다른 글
🖥 TCP 와 UDP의 차이 (0) | 2023.09.16 |
---|---|
🖥 TCP 혼잡 제어(AIMD, Slow Start, Fast Recovery, Fast Retransmit) (1) | 2023.09.16 |
🖥 3-way Handshake / 4-way Handshake (0) | 2023.09.15 |
🖥 RESTful API (0) | 2023.08.03 |
🖥 CORS (0) | 2023.08.02 |