본문 바로가기

[네트워크] 06. 정확한 데이터 전송을 위한 TCP 오류 제어

Notice

이 글은 다음 강의를 수강한 후 학습한 내용을 정리한 글입니다.

- 강의: [K-MOOC] 안양대학교 최선완 교수님의 '인터넷 프로토콜'

06. 정확한 데이터 전송을 위한 TCP 오류 제어

웹 클라이언트, 웹 서버는 직접 데이터 전송을 하는 것이 아니라 TCP를 이용해서 데이터를 전송한다.

TCP가 데이터를 정확하게 전달하고 정확하게 받는 역할을 수행해서,  GET이라는 HTTP 패킷을 메시지를 웹 서버에게 올바르게 전달을 한다. 그러면 웹 서버는 클라이언트 서버에게 홈페이지 내용이 담긴 HTTP 메시지를 웹 브라우저에게 전달한다. 

 

정확한 데이터 전송이란? 오류가 없는 것이다. 우리가 인터넷에서 보낸 데이터, 인터넷 서버에서 받는 데이터, 채팅을 할 때 주고받는 데이터에 문제가 생기는 경우는 3가지다.

1. 분실 lost

2. 손상 corruption

3. 순서 바뀜 out of ourder

- 데이터는 올바르게 갔으나 순서가 바뀐 것. 순서를 다시 바꾸어 줘야 한다.

 

오류 제어란? Error control

오류를 감지 detection해서 오류 원인을 파악하고 오류를 복구 recovery하는 것이다.

tcp가 정확한 데이터 전송이 목적이라면 이를 위해 오류 제어 기능을 수행한다.

오류 감지 error detection

1. 분실 확인

(1) 송신 측은 데이터를 전송할 때 데이터를 포함하고 있는 패킷에 순서 번호 sequence number를 붙인다.

순서 번호는 헤더에 들어간다. 수신 측에서 이 번호를 바탕으로 분실을 파악한다.

 

(2) 송신 측은 패킷을 전송할 때 재전송 타이머 retransmission timer를 작동한다.

데이터를 보내는 순간 알람을 작동시킨다. 데이터가 가는 시간이 4시간 걸리고, 응답이 오는 시간이 4시간이라면 8시간짜리 시계를 돌리는 것이다. 8시간이 됐는데도 잘 받았다는 응답이 오지 않는다면 분실됐다고 판단을 하는 것이다. 이것을 왕복 여행 시간 Round Trip Time이라고 한다.

- 알람 시계를 너무 짧게 설정하면 응답이 올바로 와도 분실됐다고 오판단을 할 수가 있다.

- 알람 시계를 너무 길게 설정하면 그 다음 데이터를 보내지 못한다는 문제가 있다.

*RTT 계산은 최근 RTT를 반영하지만 급격하게 반영하지 않는다.

2. 손상

송신 측은 손상 여부를 판단할 수 있는 체크섬 checksum 정보를 패킷에 함께 보낸다.

일반적으로 16비트에 2진수를 가지고 계산한다.

체크섬 알고리즘에 의해서 헤더와 데이터를 가지고 계산한다. 계산한 값을 내 패킷에 같이 실어서 보낸다.

수신 측에서도 똑같이 계산을 한다. 보낸 측의 체크섬 정보와 헤더의 체크섬 정보가 일치하는지 확인한다.

3. 순서 바뀜

sequence number로 알 수 있다.

 

오류 복구 Error Recovery

1. 분실 -> 재전송 retranmission

2. 손실 -> 재전송

3. 순서바뀜 -> 재배치 reordering

 

재전송의 방법

Go-Back-N 재전송

 

네 개의 패킷을 보냈다고 했을 때 5000~6999까지 500개씩.

1번 패킷을 못 받았다면 수신 측에서는 2,3,4 받을 때마다 5000번 보내라고 응답한다. ACK 5000

1번뿐만 아니라 수신에 성공한 2,3,4 패킷도 재전송한다.

*TCP는 응답할 때 다음에 받을 번호를 응답한다. 인터넷 표준으로 정해져있다.

*국제표준화기구는 1번 패킷을 보내면 잘 받았다고 ACK 1이라고 응답한다. 

 

1, 2, 3, 4는 잘 가고 5, 6, 7,8은 못 갔다면 5, 6, 7, 8만 다시 보내면 된다.

 

선택적 재전송 Selective Retransmission

 

1, 3, 5, 7번은 제대로 가고 2, 4, 6,8은 전송에 실패했을 때를 살펴보자. 선택적 재전송에서는 못 받은 정보를 응답한 다음에 잘 받은 정보도 말한다. 그 다음에 못 받은 정보만 재전송한다.

*Left Edge: 시작 번호

*Right Edge: 끝 번호 +1