컴퓨터통신#4
LeeMir, 23 March 2021
3장 - Transport Layer(이어서)
RDT2.0 : Fatal Flaw
- ACK / NAK가 전송 도중 에러가 날 수 있음
- 실제 ACK였는데 NAK인줄 알고 재전송을 하게 되면 수신자가 중복된 데이터를 받을 수 있음
- 이를 해결하기 위해 송신자가 Packet에 순서 번호를 붙여서 보냄
- Stop and Wait 방식
RDT2.1 : Handles Garbled ACK / NAKs
- RDT2.0과 동일하나 송신자가 보낼 때 패킷에 순서 번호를 붙여서 보냄
sndpkt = make_pkt(0, data, checksum)
에서 0이 순서(0 또는 1, 1개의 bit만 사용)
- ACK와 NAK에 대해서도 Error를 Check해줌
- 수신자가 중복된 번호를 수신했을 때에는 송신자에게 ACK를 보내지만 상위 Layer로 data를 전달하지 않고 자체적으로 discard해버림
RDT2.2 : a NAK-Free Protocol
- RDT2.1과 동일하나 ACK만 사용함
- NAK 대신 가장 최근에 보냈던 ACK를 재전송함으로써 뭔가 문제가 있다고 알림
- 송신자는 보내서 ACK를 기다리고 있는 Packet의 번호가 아닌 다른 번호가 오면 재전송
RDT3.0 : Channels With Errors And Loss
- RDT2.2에서는 ACK를 중복 수신하면 데이터를 재전송하였으나, RDT 3.0에는 Timer라는 개념이 도입
- Packet을 보낼 때 Timer가 작동하고, Timeout되면 Packet Loss가 발생했다고 판단해 재전송함
- ACK가 Loss될 경우에도 Timeout이 발생해 재전송
- ACK를 중복 수신했을 경우에는 재전송하지 않고, 아무 행동도 취하지 않음
- 조기 Timeout이나 ACK가 Delay돼 혼잡해져도 중복 수신했을 때 No-Action을 취하므로 잘 정리됨
- Stop and Wait 방식이기 때문에 Propagation Delay가 길수록 효율이 매우 떨어짐
Pipelined Protocols
- 전송했지만 아직 ACK를 받지 못한 Packet들을 여러개를 한번에 묶어서 전송함(Sliding Window)
- Packet 순서 번호에 사용하는 Bits가 2 Bits 이상임
- Stop and Wait 방식에 비해 링크의 효율이 Packet의 수만큼 비례해 증가
- Go-back-N 방식
- ACK 받지 않고 최대 N개까지 전송 가능
- 오류가 난 부분부터 그 이후 부분까지 재전송
- 수신자는 몇 번 Packet까지 잘 수신했다고 ACK를 보냄
- 가장 처음에 보낸(ACK가 아직 오지 않은) Packet에 대해 Timer가 존재함
- Timer가 expire되면 모든 unacked packet을 재전송함
- Selective Repeat 방식
- 오류가 난 부분만 재전송
- 재전송된 부분을 재조립해야하므로 수신자에게 버퍼가 필요함
- 각 Packet 순서 번호에 해당하는 버퍼 공간이 있어서 오류가 난 부분은 비워뒀다가 재전송되면 채워서 조립함
- 수신자는 각 Packet에 대해 개별적으로 ACK를 보냄
- 각 unacked packet에 대해 개별적으로 Timer가 존재함
TCP: Overview
- Point-to-point
- 1대1 방식
- Reliable, In-order Byte Stream
- Message의 Boundaries가 존재하지 않음
- Segment 단위가 아닌 Byte를 단위로 사용함
- Application 층에서 내려온 Byte 단위의 데이터를 임의의 Segment로 나눈 후 Network 층으로 내려보냄
- Pipelined(Sliding Window)
- TCP는 Congest control과 Flow control을 송신 window 크기를 가변적으로 바꿔서 제어함
- Full Duplex(전이중) Data
- 동시에 송신, 수신 가능
- MSS : Segment의 Data에 들어갈 수 있는 최대 바이트 수
- 2계층의 Data Frame의 최대 크기에 영향을 받음
- Data Frame에서 각 Layer의 Header를 빼면 남는 부분이 MSS
- Connection-Oriented
- Handshaking
- 송신자와 수신자가 데이터를 주고 받기 전 Control Msg를 주고 받아서 연결 설정을 함
- 보통 3-way handshake 방식을 사용함
- Handshaking
- Flow Controlled
- 송신자는 송신 윈도우 크기를 조절해서 송신하는 속도를 제어함