linux 환경에서 UDP 대량 sendto 관련하여 문의드립니다.

imii1992의 이미지

안녕하세요 현재 linux 환경에서 c언어를 사용하여 udp 테스트 툴을 만들고있는중에 이상한 점이 보여 질문 드립니다.

개발중인 udp 테스트 툴에서는 1000개 가량의 메시지를 각각 1000개씩 복제한 후 for문을 사용하여 차례대로 전송 하도록 구현했습니다.

쉽게말해서

char *message = [약 50bytes 텍스트];
for(i=0;i<1000;i++)
{
    for(j=0;j<1000;j++)
    sendto(message,destination)
}

대충 이런식으로 총 1000개의 메시지를 sendto하도록 했습니다.

그런데 dump를 떠서 확인해보니 패킷이 상당부분 빠지는 것을 확인했습니다. 수신측만 그런줄 알았지만 송신측에서 생성한 dump파일도 마찬가지로 패킷이 빠져있었습니다.

어디서부터 확인을 해야할지 감이 잡히지 않아 이렇게 질문 남깁니다.

익명 사용자의 이미지

안녕하세요.

혹시 sendto 함수에서 -1을 리턴하는 경우는 없었나요?

그런 경우가 있었다면 송신부 Send Buffer 크기를 우선 확인해보시는 것을 제안드려봅니다.

imii1992의 이미지

우선 확인해본 결과 sendto 함수에서 -1을 리턴하는 경우는 없는것 같습니다.

그리고 Send buffer크기를 늘린결과 수신은 모두 되었으나 생성된 dump상에는 여전히 패킷이 빠져있습니다.

라스코니의 이미지

대충 백만개를 보내게 되는군요. 백만개 x 50 바이트 = 50 Mbyte
를 그야말로 순식간에 보내게 되므로 잘 전달되지 않을수도 있습니다.

10 ~ 20 kbyte 씩 보낼때마다 500us ~ 1ms 정도씩 딜레이를 주어 보세요. 그리고 sendto의 리턴값도 체크해 보시고요.

imii1992의 이미지

sendto 리턴값은 -1이 리턴되지 않는것은 확인 했습니다.

수신측에서도 수신은 전부 되는것으로 봤을때 dump를 생성하는 wireshark 문제일것 같은데 그럴 수 있나요?

라스코니의 이미지

wireshark의 문제는 아닐겁니다. dump하는 옵션이 올바르게 설정되었는지 확인해 보세요.

익명 사용자의 이미지

오버헤드까지 더하면 거의 100Mbps 정도 나오겠네요

익명 사용자의 이미지

100Mbyte

HI의 이미지

라스코니님 말씀에 덧붙히겠습니다.

우선 전송할 데이터에 sequence number등을 붙여서

들어온 갯수가 진짜 맞는지 확인해보세요. -> count를 잘못 셋을수도 있습니다.

그리고 packet dump를 뜬 packet과 다른지 비교해보시고 다르다면 dump option이 정확한지 확인하세요.

Lipi의 이미지

덤프 종료시 덤프관련 통계정보 표시해 주는데, 이 때 덤프 누락된 패킷이 얼마정도인지 알려줍니다. 와이어샤크도 tcpdump와 같은 라이브러리를 쓰면 대용량 전송시 누락이 발생할 수 있을 것 같습니다.

ktd2004의 이미지

UDP 자체가 패킷 전송을 보장해 주지 않지 않나요???
패킷 전송이 보장되어야 한다면,
TCP를 사용하시거나 아니면 Reliable UDP 같은 것을 사용하셔야 할 것 같은데요.

HI의 이미지

TCP도 아니고 UDP 단방향 전송인데 패킷전송 보장안해주죠
그래서 유실이 있을수도 있는게 UDP 인데

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.