네트워크 프로그래밍 - UDP

chance·2020년 6월 16일
0

UDP

  • transport layer
    헤더가 짧다
    요즘에는 streaming에도 tcp를 사용한다. udp를 사용하는 경우도 있음

tcp의 장점: reliable transfer
udp의 장점: header가 간단하다
udp 단점: unreliable transfer을 해결하기 위해 application layer에서 reliable한지 검사하기도 한다.
udp의 용도: dns

UDP HEADER

source port, destination port, length of data and UDP header(payload(data)와 header를 포함한 전체 길이), checksum

한 줄이 32bit = 1 byte => 2줄이므로 8byte

Datagram Size

  • maximum data length: 65507 byte만 담을 수 있음(ip header에 의하여 datagram maximum amount가 정의된다)
  • IP HEADER: datagram length(2 byte) 담음: 최대 65535 byte까지 포함, header length 부분을 제외하면 payload는 65507 byte
  • 많은 플랫폼이 8192 바이트로 제한(8k)
  • 구현에 따라서 576 바이트 이상은 받지 않아도 되서 데이터가 짤림
  • 512 byte로 안전하게 데이터그램 사이즈 제한

Example

0: 포트 번호를 OS가 임의로 선택하게 만든다.
UDP Socket을 만든다.
DatagramSocket
timeout: 10초

  • datagrampacket을 만든다: new DatagramPacket(new byte[1], 1, host, PORT);

  • DatagramPacket 두번째 인자: byte array에서 몇 바이트를 데이터그램 패킷으로 만들 것이냐?

  • tcp는 socket open할 때 inetaddress나 socketaddress 객체를 적어준다.

  • udp는 DatagramPacket에 host address와 port number를 적는다.

  • receive할 때도 DatagramPacket에 response가 들어온다.

Multi-threading and UDP

  • UDP는 multithreading을 거의 하지 않는다.
  • datagram을 잘 받았는지 acknowlegement를 보내지 않기 때문이다.
  • udp에서는 그냥 보내면 끝
  • reponse를 기다릴 필요가 없다

DatagramPacket

  • datagrampacket은 payload과 header의 representation이다.
  • 목적에 따라서 request나 reponse의 용도로 사용 가능하다.

receiving data

  • DatagramPacket
  • 버퍼와 길이 => 0부터 시작해서 길이 -1 만큼 읽음
  • 버퍼와 오프셋과 길이 => 오프셋에서 시작해서 길이-1만큼 채우려고 노력함
  • request와 같음.
  • length <= buffer.length - offset
  • if not => exception thrown

sending data

  • 바이트 배열, 길이, inetaddress destination, int port
  • 보낸 패킷이 바이트 배열 길이만큼 채워짐
  • 보내기 전에 데이터가 바뀐다 => 변화가 반영되서 보내짐

Getters

  • 데이터그램을 받기 위한 6개의 다른 매소드 제공
  • getAddress
  • 데이터그램 패킷을 받고 전송할 때 어디로 전송해야 할지 정할 때 사용
  • getPort 있음
  • getData: 데이터그램으로부터 데이터를 포함하는 바이트 array를 가져옴
  • getData, getOffset, getLength
  • datainputstream 활용하여 받아옴

Setters

  • datagram을 수정하는 방법을 제공

  • data

  • remote address,

  • remote port

  • setData

    • 데이터그램 패킷을 전송할 때 데이터만 바꿔서 여러개 전송
    • offset을줘서 여러번 전송 가능
  • setAddress

    • broadcasting:remote host에서 setPort로 broadcasting 가능
  • setLength

    • 데이터 버퍼의 길이 조정

질문

스택오버플로우 답변 참고
IP Header에서 udp datagram의 길이를 명시하고 있는데 왜 UDP header에도 datagram 길이를 똑같이 명시하는가?

  • IP 프로토콜 위가 아닌 다른 프로토콜 위에서 동작할 경우 udp length를 알 수 없기 때문이다.
profile
프론트엔드와 알고리즘을 주로 다룹니다.

0개의 댓글