본문 바로가기
네트워크/컴퓨터 네트워크 수업

3-4-1. TCP: Principles of reliable data transfer

by dustnn 2024. 10. 21.

 

이제 TCP 프로토콜을 자세히 살펴볼 거다. 그 전에 TCP에게 요구되는 reliable한 data transfer란 무엇인지 알아볼 것이다.

 

이상적인 data transfer은 다음과 같이 application의 message가 transport 계층과 network 계층을 통해 loss가 발생하지 않고 잘 전달되는 것이다.

 

 

 

하지만 현실에서는 당연히 loss가 발생할 수 있다.

그래서 중간에 있는 transport 계층에서 loss가 발생하지 않도록 무언가를 해줘야 한다.

 

 

 

그래서 transport계층에서 요구되는 reliable data transfer에는 다음과 같은 것들이 있다.

 

Mechanism Use, Comments
Checksum bit error을 detect하기 위해 사용
Acknowledgement sender에게 "packet이 잘 도착했다"고 알려주기 위해 사용
Negative
acknowledgement
sender에게 "packet이 제대로 전송되지 않았다"고 알려주기 위해 사용
Sequence number  ack보낸 packet이 다시 온 건지 식별하기 위해 사용
(sender에서 receiver로 보내지는 packet에 번호를 매김)
Timer packet loss 감지하기 위해 사용
(시간을 측정해 일정 시간동안 ack이 오지 않을 경우 packet loss로 간주)
* 너무 짧으면 loss로 잘못 간주돼 재전송
* 너무 길면 loss 발생해도 기다림 => 늦어짐
Pipelining
&
Window
packet 전송하고 ack받는 데 1RTT나 소모하며, ack 받은 다음에야 다음 packet 전송하면 시간 낭비 
=> pipelining을 통해 병렬 작업
window: pipelining을 통해 동시에 보내는 packet 개수

 

Pipelining 하면

=> window 수에 따라 sequence number이 증가

(window 수는 receiver의 능력 혹은 네트워크 혼잡도에 따라 달라짐)