🎯 UDP
UDP에 대해 설명해주세요. (TCP와 비교해서 UDP의 특성을 설명)
- UDP : 비연결형, 신뢰성 낮음, 빠른 속도
UDP 는 TCP 와 함께 OSI 표준모델과 TCP/IP 모델의 전송계층에서 사용되는 프로토콜입니다.
UDP는 비연결 지향적 프로토콜로 데이터를 주고받을 때 연결 절차를 거치지 않고 발신자가 일방적으로 데이터를 발신하는 방식을 의미합니다. 연결과정이 없기 때문에 TCP 보다 빠른 전송을 할 수 있지만 데이터 전달의 신뢰성은 떨어집니다. (신뢰성이 떨어지는 이유 : 먼저 보낸 패킷이 느린 선로를 통해 전송될 경우 나중에 보낸 패킷보다 늦게 도착할 수 있으며 최악의 경우 잘못된 선로로 전송되어 유실될 수도 있습니다. 이럴 경우 TCP와는 다르게 UDP는 중간에 패킷이 유실이나 변조가 되어도 재전송을 하지 않습니다.)
UDP 체크섬에 대해 설명해주세요.(UDP 오류 검출의 목적으로 사용되는 체크섬에 대해 설명)
체크섬이란 네트워크를 통해 전송된 데이터 값이 변경되었는지를 검사하는 값으로 오류검출 목적으로 사용됩니다.
전송하려는 세그먼트의 값들을 이용해 체크섬을 만들어서 세그먼트에 담아 전송합니다. 세그먼트를 받은 상대는 세그먼트의 값들을 이용해 다시 체크섬을 계산하고 세그먼트에 저장된 체크섬 값과 비교합니다. 세그먼트의 값들 중 하나라도 변경되면 체크섬 값이 바뀌기 때문에 이 두 값이 다르다면 전송 중 세그먼트의 내용이 변형되었음을 의미합니다.
🎯 신뢰적 데이터 전송의 원리
패킷 손실
패킷 손실은 전송된 데이터 패킷이 대상에 도착하지 못해 네트워크 성능 문제가 발생할 때 발생합니다. 패킷 손실은 대상에서의 낮은 신호 강도, 과도한 시스템 사용률, 네트워크 정체 및 네트워크 경로 구성 오류로 인해 발생합니다.
전송후 대기(Stop and wait) 프로토콜이 뭘까요? (패킷 송수신 측면에서 설명해보기. 전송 속도에 대해 설명해보기.)
전송 후 대기 프로토콜은 하나의 패킷을 전송 후 정지 대기하는 프로토콜을 말합니다. 송신 측에서 1개의 패킷을 송신하고 수신 측에서 수신된 패킷의 에러 유무를 판단하며 송신 측에 ack 또는 nak 를 보냅니다. 송신 측은 수신측에게 ack를 받았을 경우에만 다음 패킷을 전송합니다. nak를 받았거나 일정시간 까지 ack 또는 nak 를 받지 못하면 에러 발생으로 간주하고 해당 패킷을 재전송합니다.
구현 방식이 단순하지만 수신측이 ack 혹은 nak를 받을 때까지 다음 프레임을 받을 수 없으므로 전송 효율이 떨어지는 단점이 있습니다.
파이프라인 프로토콜이 뭘까요? (패킷 송수신 측면에서 설명해보기. 전송 속도에 대해 설명해보기.)
신뢰적인 데이터 전송은 stop and wait 방식, 데이터를 전송한뒤 수신자로부터 데이터 전송에 대한 결과를 피드백 받은 후 다음 데이터를 전송하는 방식으로 이루어집니다. 데이터를 전송할 때 데이터 패킷을 보내면 송신 측은 해당 패킷이 도착하고 ack가 돌아올 때까지 아무 일도 하지 않습니다. 그래서 속도가 느리다는 단점이 있는데, 파이프라인 프로토콜은 패킷을 1개만 보내지 않고 한 번 보낼 때 여러개를 보내는 것입니다.
송신측에서 한 번에 패킷을 여러개 보내고 이후 패킷을 보낸 처음 데이터가 ACK을 송신 측에게 보내면 두번째 패킷을 한 번에 보내게 됩니다. 이런 과정을 반복합니다. 이 과정에서 전송된 패킷에 대해 피드백을 받지 않고도 다음 패킷들을 전송하도록 허용하여 링크 이용률을 높이기 때문에 속도가 훨씬 더 빨라집니다.
이 파이프라인 프로토콜을 구축하기 위한 방법에는 대표적으로 Go-Back-N과 Selective-repeat이 있습니다.
슬라이딩 윈도우가 뭘까요? (패킷 전송을 언급하며 설명)
슬라이딩 윈도우 프로토콜은 패킷을 전송할 때 수신자로부터 승인을 받기 전에 송신자가 전송할 수 있는 데이터의 양을 규제하는 흐름 제어 메커니즘입니다. 이 때 파이프라인 프로토콜을 구현하기 위해 슬라이딩 윈도우 프로토콜을 사용합니다.
Go Back N에 대해 설명해주세요. (송신자 수신자 응답 흐름 설명해보기)
Go-Back-N 방식은 수신자 측에서 순서대로 받지 못한 패킷이 있다면 해당 패킷부터 다시 재전송 하는 방식입니다.
송신자는 패킷 수신에 대한 확인 응답을 받지 않고 최대 N개 만큼 패킷을 전송할 수 있습니다.
이 N이란 범위를 윈도우 표현합니다. 패킷이 올바르게 수신되면 이 윈도우를 앞으로 이동시켜서 다음 패킷을 전송합니다.
이를 슬라이딩 윈도우라고 합니다. 송신측에서는 전송했지만 아직 확인 응답을 받지 못한 패킷에 대해 타이머를 작동 시킵니다.
만약 패킷이 손실되어 타임아웃이 발생하면 해당 패킷부터 N개의 패킷들을 재전송 합니다.
수신측에서는 올바르게 수신한 패킷에 대해 누적 확인 응답을 보내어 해당 패킷까지 올바르게 수신되었음을 송신자에게 알립니다.
만약 순서가 올바르지 않은 패킷을 수신하면 이전에 올바르게 수신했던 패킷에 대한 ACK를 다시 보내서 올바르게 수신하지 못한 패킷부터 송신자가 재전송 하도록 합니다.
Selective Repeat에 대해 설명해주세요. (송신자 수신자 응답 흐름 설명해보기)
Selective Repeat 방식은 Go Back N의 비효율성을 해결하기 위한 방식으로, 패킷을 받지 못했을 때 재전송을 해주되, 받지 못한 패킷에 대해 선택적으로 재전송하는 방식입니다.
즉, 송신자는 패킷 수신에 대한 확인 응답을 받지 않고 최대 N개 만큼 패킷을 전송할 수 있습니다.
이 N이란 범위를 윈도우 표현합니다. 패킷이 올바르게 수신되면 이 윈도우를 앞으로 이동시켜서 다음 패킷을 전송합니다. 이를 슬라이딩 윈도우라고 합니다.
송신측에서는 전송한 패킷에 대한 확인 응답을 받지 못하면, 해당 패킷만 재전송 합니다
Go back N과 달리 패킷마다 논리적 타이머가 존재하기 때문에 선택적인 재전송이 이루어 집니다.
수신측은 윈도우 범위내의 순서번호를 가지는 패킷을 수신하면 순서 번호가 올바르지 않더라도 버퍼링 합니다.
만약, 수신한 패킷의 번호가 수신 윈도우의 베이스와 일치하면 해당 패킷부터 연속된 패킷을 상위 계층으로 보내고 윈도우를 이동시킵니다.그리고 해당 패킷에 대한 ACK를 송신측으로 보내서 송신 윈도우 이동이 되도록 합니다.
🎯 어려웠던 점
이번에는 질문 자체는 적었지만 오히려 이해해야 할 것이 많아 개념에 대해 가장 많이 찾아봤던 회차였다.
특히 Go Back N과 SR이 봐도봐도 이해하기가 힘들었다!
이번 회차 개념은 알고는 있어도 외우지 않는다면 입밖으로 설명하는 것이 굉장히 어려울 것 같다
참고 자료
https://dev-nicitis.tistory.com/28
https://ddongwon.tistory.com/81