Principles of reliable data transfer (rdt)
Transport layer에서는 reliable하게 data를 주고받는다.
하지만, 그 아래 계층에서는 신뢰성이 보장되지 않는다.
application layer에서 데이터를 transport layer로 보내면, transport layer protocol을 지나 Network layer를 통해 데이터가 전송된다. 이 데이터를 receiver 측에서 받고, transpor 계층으로 올려보내고 최종적으로 receiving process가 받는다.
transport layer에서 reliable하게 data를 전송해도, 아래 network layer에서의 data 전송은 unreliable하다.
unreliable하다는건, 중간에 데이터가 loss되거나 out-of-order 될 수 있다는 것을 의미한다.
Network 계층에서는
1. unreliable한 channel
2. sender와 receiver는 서로의 상태(state)를 모른다. 즉 자기가 보낸 메세지를 반대편에서 잘 받았는지 못받았는지 모른다.
=> 이러한 이유로 데이터 전송이 unreliable하다.
따라서 sender와 receiver는 서로의 상태를 알려주는 과정이 필요한데, 이것이 RDT의 핵심 개념이다.
(Network layer를 포함한 그 아래 계층에서도 reliable하게 data를 전송하기 위해서 등장한 개념이 RDT이다.)
그리고 이러한 RDT를 실제로 구현한 프로토콜이 TCP이다.
그래서 TCP는 UDP와 달리 No-loss와 in-order-delivery를 지원한다.
rdt를 한다는 것
=> ACK을 쓴다는 것
=> 잘 받을때까지 주겠다고 하는건, 잘 받았는지 receiver가 알려줘야한다는 뜻
Reliable Data Transfer Mechanism
Acknowledgement
: up to ~까지 잘 받았다
Negative acknowledgement
: 나 뭐 못받았어. 그거만 줘 (TCP는 안쓴다)
Sequence number
: in-order-delivery를 위해 byte 단위로 보냄. 순서를 byte에 매긴다!
timer
: 어느정도까지 기다리겠다는 timeout이 있어야 함. timeout value를 정해야한다.
(timeout이 지났는데 ACK이 안오면 retransmit)
- premature timeout (timeout value가 너무 짧은 경우)
- timeout을 너무 짧게 설정해놔서 다시 보내버린다. (좀만 더 기다리면 되는데)
- unnecessary retransmission을 하게됨 - slow reaction (timeout이 너무 긴 경우)
- end-to-end delay가 늘어남! => 서비스 저하
ACK이 왔다는건 네트워크가 괜찮다는 뜻
Pipelining
: TCP가 ACK을 받지 않고도 그 다음 segment를 연속해서 보내는것을 말한다.
=> loss가 생겼다고 receiver 측에서 판단할 수 있는건 pipelining하기 때문이다
=> order에 맞지 않게 뭔가 도착하면 중간에 오지 않은 애가 loss되었다는걸 판단할 수 있는 근거가 된다.
Window (size)
Window size가 w byte라고 하면, ACK을 받지 않고도 w byte 만큼의 데이터 전송이 가능하다.
예를 들어, segment가 100byte씩 들어가는데, window size가 400 byte라면 동시에 4개의 segment까지 전송될 수 있다.)
Window size는 byte 단위 = the maximum number of bytes that a sender can send without ACK received from a receiver
'네트워크' 카테고리의 다른 글
[네트워크] Chap 3.5 - TCP reliable data transfer (0) | 2024.11.23 |
---|---|
[네트워크] Chap 3.4 - TCP segment structure (0) | 2024.11.22 |
[네트워크] Chap 3.2 - Simple UDP, Internet checksum (TCP & UDP) (0) | 2024.11.20 |
[네트워크] Chap 3.1 - Multiplexing & Demultiplexing (0) | 2024.11.19 |
[네트워크] Chap 2.8 - Socket programming (UDP & TCP) (0) | 2024.11.18 |