본문 바로가기
네트워크

[네트워크] Chap 3.3 - Reliable data transfer (rdt)

by 개발 고양이 2024. 11. 21.

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