안녕하세요!

FE 개발자 유진주입니다.

CS/네트워크

[컴퓨터네트워크] Chapter3.3 비연결형 트랜스포트: UDP, 검사합(checksum)

ypearl 2023. 11. 30. 21:50

Chapter3.3  UDP와 Checksum

  • UDP 서비스
  • UDP 데이터그램 구조
  • 검사합(checksum)

 

UDP 서비스

- 포트번호 기반의 다중화 서비스

  • 서버: Well-known Port 
    • 예) HTTP- 80, SMTP- 25 등
  • 클라이언트: Ephemeral Port (임시 포트 번호 - 필요할 때 만들어서 생성)

*서버와 클라이언트의 포트번호 할당 방식이 다름.

 

- 비연결형(connectionless) 전송 서비스

  • 통신 소켓 간의  연결 설정(Handshaking) 없음: 연결 설정 지연시간 회피

*UDP는 TCP에 비해 하는 일이 없다!
(그만큼 고속으로 데이터를 전송하고, 수신할 수 있음) 

 

 

- 데이터그램 실시간 전송 서비스

  • 응용 프로세스로부터 데이터가 송신 소켓에 전달되면,
  • 송신 UDP는 해당 데이터를 포함하는 UDP 데이터그램(Datagram) 생성
  • 각 데이터그램은 IP를 통해 독립적으로 목적지 UDP 소켓에 전송

 

ㄴ 응용

  • 인터넷 전화 등 실시간 응용에 적하
  • DNS(Domain Name System) 등 작은 데이터, 빠른 응답 지연시간이 요구되는 응용에 적합

 

- 1:N, N:1 데이터그램 통신 서비스

  • 목적지 IP 주소에 멀티캐스트 주소를 사용하여 다수의 목적지 소캣으로 데이터그램 전송 가능
  • 여러 개의 소켓으로부터 데이터그램 수신 가능
  • 응용 프로세스는 송신할 때마다 UDP에게 수신 소켓주소 지정
  • UDP가 응용 프로세스에게 데이터를 전달할 떄마다 송신 소켓주소 표시

 

ㄴ 응용

  • 인터넷 TV 등 멀티캐스트 응용 효과적 지원(★IPTV)

 

- 간단한 데이터그램 포맷

  • 처리 시간 단축

*Header 내용: 출발지 포트번호+목적지 포트번호+전체 길이+ 첵섬

 

검사합(checksum)

- 송신자

1) 송신하는 메시지를 정해진 길이의 데이터 단위로 나눔

2) 모든 데이터 단위를 1의 보수(1's complement) 연산으로 더하여 합(sum)

3) 합의 1의 보수를 검사합(checksum)으로 생성하고, 검사합을 추가하여 메시지 전송

 

- 수신자

1) 수신된 메시지를 정해진 길이의 데이터 단위로 나눔(검사합 포함)

2) 모든 데이터 단위를 1의 보수(1's complement) 연산으로 더하여 합(sum)을 구함

3) 합이 0이면 성공적인 수신, 아니면 오류 발생

 

- 1의 보수 연산

  • 이진수의 1의 보수: 각 비트 값 0과 1을 서로 바꾼 값(원래 비트 값과 더하여 1이 되는 값)
  • +0: 모든 비트가 0, -0: 모든 비트가 1

- m비트 이진수의 1의 보수 덧셈

  • m비트 결과값 생성
  • 최종 비트 올림(carry)이 생길 경우, 캐리값을 m비트 결과에 더하여 최종 m비트 결과값 생성

 [예제] 8비트에 최종적으로 생긴 값을 더해서, 최종적인 8비트 값을 만듦

 

검사합을 추가하여, 총 4바이트를 수신자에게 전송
검사합까지 포함해서 합 계산

 

- 장점

  • 높은 오류 검출 능력
  • 단순함
  • 소프트웨어 구현에 적합

- 단점

  • 각 데이터 단위에서 발생하는 오류의 합이 0이 되는 오류 검출 불가
  • 첵섬을 변경하지 않는 오류 검출 불가