제이제이
article thumbnail

 

👉🏻 실뢰적인 데이터 전달 프로토콜의 구축


🤔 신뢰성 있는 데이터 전송을 위해 어떤 것들이 필요할까?

 

 

🤔신뢰성 있는 전송의 역할은 무엇일까?

→ 수신하는 프로세스(Receiver Process)가 받는 데이터가 정상적인 것인지 신뢰감을 주어야 함

 

 

🤔수신하는 프로세스(Receiver Process)에게 믿음을 주려면 어떻게 해야 할까?

  • 실제 하위 레이어에서 일어나는 에러들을 체크를 해서 해결한 후 응용 계층에 전달
  • 에러 발생시 재전송을 요구함

→수신하는 프로세스 (Receiver Process)에게 믿음을 줌

 

🔎인터넷에서 발생할 수 있는 에러의 형태

 

 

💊해결책

 

 

 

🤔 패킷을 재전송하면, 받는쪽(수신 프로세스)에서는 어떻게 이전의 내용의 재전송인지 어떻게 알지?

  • 패킷마다 일련번호(Sequence Number)라는 것을 두어 구별함

→ 도착한 세그먼트의 순서들을 알 수 있음

→ 데이터의 중복을 방지할 수 있음

 

🔎에러 발생 시 재전송 (전송 계층)

  • 아래와 같은 그림의 패킷을 재전송을 ARQ(Automatic Repeat reQuest의 약자)라고 부름

 

 

🔎Stop-And-Wait방식 1

 

 

🔎Stop-And-Wait방식 2

 

 

⚠️ 주의해야 할점 - 타임아웃 시간을 어떻게 잡을까?

 

 

👨🏻‍🏫정리

  • 타임 아웃 시간을 잡을 때는 Sender와 Recevier간의 왕복시간, Round Trip Time을 잘 고려해서 잡아야 함

 

🥏파이프라인된 신뢰적 데이터 전송 프로토콜


  • 파이프 라이닝(pipelining): 하나의 처리과정이 끝나고 다음 처리과정이 수행되는 것이 아닌, 여러 단계를 병렬적으로 수행하여 처리속도를 높이는 기술

 

🔎Stop-And -Wait 방식의 성능

 

 

🔎전체 링크 대역폭 대비 송신자가 패킷을 보내고 오는데 걸리는 자원의 백분율

 

 

👨🏻‍🏫정리

  • 1Gbps 링크를 설치해 놓고 Stop-And-Wait 방식의 프로토콜 때문에 물리자원이 낭비됨

 

🔎시간축으로 보는 Stop-And -Wait 방식

 

 

⚠️ 문제점

  • 30.008ms 중 실제 데이터가 전달되는 시간은  8 μs 밖에 안됨

 

🔎Pipelined 프로토콜

 

 

🙆🏻‍♂️Pipelined 프로토콜의 구분

  • go-back-N 방식, selective repeat 방식으로 구분됨

 

 

👨🏻‍🏫정리

  • Pipeline방식을 사용해서 연달아 데이터를 보내서 전체 utilization을 높일 수 있음

 

🔎Pipelined 프로토콜의 구분

  • Pipelined 프로토콜은 Go-Back-N방식, Selective방식으로 구분할 수 있음

 

 

👨🏻‍🏫차이

  • Go-Back-N방식은 Receiver가 받은 패킷을 판단해보니, 해당 패킷 이후 부터 잘못 되었다고 하면 Sender는 해당 패킷 이후부터 모두 재전송을 해야 함
  • Selective방식 Receiver가 받은 패킷을 판단해보니, 해당 패킷이 잘못되었다고 판단하면 잘못된 부분만 재전송함

 

👨🏻‍🦱N부터 반복(Go-Back-N, GBN)


 

 

  • 초록색 부분 = 패킷을 전송해서 ACK를 받은 상태
  • 노란색 부분 = 연달아 데이터를 전송한 부분(아직 ACK를 받지 못한 부분)
  • 파란색 부분 = Window사이즈가 N이며, 아직 해당 부분을 더 보낼 수 있다는 부분(ACK가 도달하지 않아도, 이부분까지는 더 보낼 수 있음을 의미함)
  • Cumulative ACK를 쓰기 때문에, 마지막 패킷에 대해서 ACK가 왔다는 뜻 = 앞의 7개의 데이터도 잘 도착했다는 뜻임

 

🔎GBN방식의 패킷이 주고 받는 과정

 

 

🌐선택적 반복(Selective Repeat, SR)


 

 

🔎SR방식의 패킷이 주고 받는 과정

 

profile

제이제이

@아사비치즈스틱

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!