-
What is UDP ?
이전 포스팅에서 언급했던 것처럼, 멀티플렉싱된 데이터를 전달 받았을 때 "목적지 포트 번호" 만을 이용해 어플리케이션에게 데이터를 넘겨주는 역할을 수행합니다.
이러한 UDP 세그먼트는 아래와 같은 특징을 가집니다.
- 내용이 전송 중에 손실될 수 있다.
- 전송되는 세그먼트의 순서가 바뀔 수 있다.
- Connectionless: 연결 상태를 만들지 않는다.
- 오버해드가 적다: 세그먼트에 추가되는 헤더가 적다.
- 빠르다: UDP가 자체적으로 쓰루풋을 줄이지 않고, 세그먼트를 원하는 만큼 보낼 수 있다.
위와 같은 특징을 바탕으로 주로 "스트리밍" 사이트에서 사용되는 방식입니다.
UDP CheckSum
CheckSum은 데이터가 변형이 되지 않았는지 확인하는 값입니다.
전송 속도를 최적화 하기 위해서, 도착이 잘 되었는지를 수신측에서 확인 하지는 않지만! 그럼에도 불구하고 데이터의 최소한의 품질을 보장 하기 위해 도입 되었습니다.
전송하려는 측은 세그먼트에 체크섬을 담아서 전송하고, 세그먼트를 받은 상대는 주어진 값들을 이용해 자체적으로 체크섬을 계산하고 전달된 체크섬과 같은지 확인합니다.
CheckSum 계산 방법 :D
그렇다면 어떻게 체크섬을 계산할 수 있을까요? 방법은 생각보다 간단합니다.
UDP 세그먼트에 담겨있는 [ 도착 IP 주소 / 송/수신 포트 번호 / UDP 데이터 ] 모두를 16비트로 전환한 뒤, 더해줍니다.
하나의 값이라도 바뀐다면 체크섬의 값 또한 변경이 되기 때문에, 주어진 값과 수신 측에서 계산한 값이 다르면 값이 변형 되었음을 인식할 수 있습니다.
UDP Realiable Data Transfer
CheckSum을 이용하면 데이터가 변형 되지 않았음을 검증할 수 있지만, 중간에 사라진 값이 있거나 순서가 변경되서 왔음을 확인 할 수 없습니다.
그래서 응용계층에서는 이를 개선 하기 위해서는 몇 가지 기법들을 적용하는데요. 이에 대해서 자세히 살펴보겠습니다.
- Stop and Wait ARQ ( = Automatic Repeat request )
전송 중 세그먼트가 손실되면 자동으로 세그먼트를 재 전송해서 손실을 최소화하는 방법입니다.
보내던 도중에 문제가 발생하면 즉각적으로 다시 보내기 때문에 순서가 바뀌는 경우도 존재하지 않습니다.
송신자는 전송할 때, Sequence Number를 부여하여 전송을 합니다.
수신자가 세그먼트를 받을 경우는 ACK, 받지 못했을 때는 NCK(Not Acknowledged) 와 해당 세그먼트의 Seq 을 보내서 재전송을 요청합니다.
Stop and Wait라는 이름처럼 ACK이 오지 않으면 다음 세그먼트를 전송 하지 않습니다.
- Go Back N ARQ
한번에 여러 세그먼트를 전송하고, 대기하는 방식입니다.
ACK을 받지 않아도 여러 세그먼트를 전송하고 ACK을 받을 때마다 이후의 세그먼트를 전송하는 방식이고, 슬라이딩 윈도우 방식을 생각 해주시면 좋을 것 같습니다 :ㅇ
만약 에러가 특정 세그먼트에서 났다면, 그 부분부터 다시 전송을 시작합니다. (=> 그래서 Go back 이라는 용어가 붙은 것 같음니당^^7 )
- Selective ARQ
선택적 ARQ는 GNB의 문제점을 극복하기 위해 나온 방법입니다.
모든 세그먼트에 타이머를 달고, ACK를 받지 못하는 경우에 대해서만 해결을 합니다.
수신자는 순서를 벗어난 세그먼트도 윈도우 범위 내에 있다면, 저장하고 받은 세그먼트에 해당하는 ACK만을 반환합니다.
출처
'CS > Computer Network' 카테고리의 다른 글
[Network] Multiplex & Demultiplex ( with Transport Layer ) (0) 2021.09.17 [ Network ] Application Layer ( 응용 계층 ) (0) 2021.07.16 [ Network ] 라우팅 프로토콜 (0) 2021.07.06 [ Network ] 라우팅 알고리즘 ( Link State 편 ) (0) 2021.07.06 [ Network ] 라우팅 알고리즘 ( 라우터 & Distance Vertor 편 ) (0) 2021.07.06 댓글