- Error Control
- TCP는 checksum, acknowledgement, time-out 세 가지 도구를 이용해 Error Control을 함으로써 안정성을 보장한다.
- ACK에 대한 ACK은 없다.
- TCP는 패킷 순서가 바뀌지 않도록 보장한다. 받는 쪽은 고민할 필요X
- Normal Operation (Ack을 보내는 normal operation)
- Rule: Ack 수를 줄이려는 룰
- Rule1: sending 버퍼에 보낼 데이터가 있으면, Ack과 함께 보낸다.
- Rule2: 함께 보낼 데이터가 없으면 일정 시간 기다림, 기다려도 데이터가 없으면 Ack을 보냄
- Rule3: 기다리는 중에 패킷이 하나 더 오면 그냥 바로 Ack을 보냄. (패킷 두개당 Ack 하나는 보내자)
- Lost Segment
- Rule4: 일부 패킷이 사라진 채로 왔을 경우 Ack을 바로 보냄 (다시 보내라고) ex)701
- Rule5: 잃어버렸던 패킷이 도착하면 바로 Ack을 보냄 (가진 것 이후 번호로) ex)901
- 보내는 패킷마다 출발 시간을 가지는데, time-out될 때까지 해당 Ack이 도착하지 않으면 재전송
- Fast retransmission
- time-out 전에, 세 개의 중복 Ack이 들어오면(Third duplicate) 해당 패킷이 제대로 전송되지 않았다고 간주하고 재전송
- Lost acknowledgement
- Ack이 돌아오지 않은 상태에서도 window 사이즈만큼 일단 패킷을 보내는데, 시간 안에 ack이 돌아오지 않으면 재전송한다.
- 만약 상대가 보낸 Ack이 중간에 사라져도, 해당 시간 안에 보낸 다른 패킷들에 대한 Ack이 돌아온다면 이전 데이터가 무사히 도착했음을 확인할 수 있다.
- Cumulative ack일 때 가능하다. Ack이 하나 없어져도 큰 문제가 되지 않고, 그냥 그 다음 Ack을 보내면 된다.
- Cumulative ack의 장점
- Ack의 개수를 줄일 수 있다.
- fast retransmission 구현이 쉽다.
- Lost acknowledgement corrected by resending a segment
- Rule6: 보낸 패킷에 대한 Ack이 분실되고, time-out 되어 재전송하게 되면 데이터를 받는 쪽은 중복된 패킷을 받게 되는데, 그때도 해당 패킷에 대해 Ack을 바로 보낸다.
- Lost acknowlegment가 잘 처리되지 않으면 Deadlock이 발생할 수 있다.
- 송신측에서 데이터를 보내고 수신 측에서 Ack rwnd=0를 보낸 이후에 수신 버퍼에 자리가 생기면 rwnd=k를 보내게 되는데, 이 Ack이 사라지면 수신측은 데이터가 오기를, 송신측은 rwnd가 0이 아닌 값이 오기를 무한히 기다리는 deadlock이 발생한다.
- 해결 방법: Persistance timer(영속 타이머) - 타이머가 만료되면, rwnd=0이 아닌 ack을 받아야 하는 쪽에서 probe segment(작은 사이즈의 데이터)를 보낸다. (찔러보기)
'네트워크 > 컴퓨터네트워크' 카테고리의 다른 글
TCP options (0) | 2021.06.28 |
---|---|
TCP (0) | 2021.06.28 |
Silly Window Syndrome / SYN Flooding (0) | 2021.04.06 |
TCP 확인응답 (0) | 2021.03.23 |
TCP (0) | 2021.03.23 |
댓글