이제 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의 능력 혹은 네트워크 혼잡도에 따라 달라짐)
'네트워크 > 컴퓨터 네트워크 수업' 카테고리의 다른 글
3-4-2. TCP : Connection-oriented transport(2) (0) | 2024.10.21 |
---|---|
3-4-2. TCP : Connection-oriented transport(1) (0) | 2024.10.21 |
3-3. Connectionless Transport: UDP (0) | 2024.10.21 |
3-2. Multiplexing/Demultiplexing (0) | 2024.10.21 |
3-1. Transport-Layer Services (0) | 2024.10.16 |