UDP로 전송할수있는 데이터크기는?

tt의 이미지

UDP로 전송할 수있는 최대 데이터의 크기는 얼마나 되는지요?
즉, buf의 크기가 어떻게 되는지요

sendto(sockfd,buf,bufsize,0,(struct sockaddr*)&peer_addr,sizeof(struct sockaddr))

제 시스템(redhat9.0)에서 테스트한결과 16kb정도가 되던데,
16kb이상의 데이터를 보내면 아예 sendto가 에러를 리턴합니다.
같은방식으로 TCP는 100kb이상까지 보낼수있던데...UDP는 그렇지 못합니다.

UDP로 꼭보내야 하는 상황인데 16kb이상의 데이터를 전송하는 방법은 어떻게 되는지요???

익명 사용자의 이미지

IP+UDP+DATA 까지 해서 65535 바이트까지 전송 가능합니다.

tt의 이미지

만약 65kb 이상의 데이터를 보내려면,
사용자가 65k 크기이하로 잘라서 보내줘야 하나요?
그렇게되면 신경써줘야할게 한두가지가 아닐텐데...일일이 구현해야 하나요?

TCP같은경우는 send()함수로 100kb 데이터를 한번에 처리했던거 같은데...

UDP와 TCP의 전송방식의 차이인지, send()와 sendto()버퍼 크기차이 인지 궁금해지내요...

kslee80의 이미지

TCP 와 UDP 의 특성 차이 때문이죠.

TCP 의 경우에는 send() 로 데이터를 보낸다고 이야기 하지만,
실제로 send() 콜이 성공해서 리턴된 이후라도
실제로 패킷이 보내지지 않은 경우가 대부분입니다.
send() 콜은 단지 사용자가 보내려는 데이타를 OS 의 TCP 버퍼에 복사하는
역할에 지나지 않거든요.
그 버퍼에 채워져 있는 데이타를 언제 어떤 크기의 패킷으로 보낼지는
OS 마음입니다 ;;
게다가 이 버퍼에는 boundary 비슷한 개념도 없어서...
사용자가 100 byte 씩 두번 send() 콜을 해도
그 두번의 데이타가 붙어서 한 패킷으로 전송될수도 있습니다.
(한 패킷으로 전송되는 경우가 꽤나 많습니다.)
반대로 1k byte 를 send() 콜을 하더라도
두개의 패킷으로 전송되기도 하죠.
자세한것은 TCP 의 fragmentation 에 대해서 알아보시면 됩니다.

반면에 UDP 는 sendto() 를 콜 하면
해당 데이타가 실제로 그 시점에서 보내집니다.
데이타를 여러개의 패킷으로 나누는 과정도 없이 그냥 패킷 생성해서
보내기 때문에, IP 에서 허용하는 최대 크기를 넘어서는 데이타는
한번의 sendto() 콜로 보낼 수 없습니다.

ttolttol2 wrote:

만약 65kb 이상의 데이터를 보내려면,
사용자가 65k 크기이하로 잘라서 보내줘야 하나요?
그렇게되면 신경써줘야할게 한두가지가 아닐텐데...일일이 구현해야 하나요?

네. 게다가 UDP 는 패킷들이 보낸 순서대로 destination 에 도착한다는
보장도 없기 때문에 순서도 맞춰줘야 하구요...
성공적으로 보내더라도 destination 에 도착하기 전에 사라질수도 있습니다.
이런걸 다 직접 처리해 줘야 합니다.
(TCP 는 이런 것들을 직접 TCP 레이어에서 처리해주죠)
tt의 이미지

그렇군요...확신이 없었는데...답변감사드립니다.
TCP전송방식으로 전향해야 할것같네요... :lol:

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.