[질문] UDP 패킷의 경로?

hados의 이미지

현재 난감한 상황에 봉착하여 있습니다. -_-;;;

임베디드 기기에서 UDP 데이터를 받아서 저장해야 하는데요

그게 안됩니다 -_-;;;

일단 다른 이더넷 네트워크 인터페이스(eth0)를 통해서는

UDP 로 데이터를 받아서 저장하는게 잘 되는데요

제가 필요로 하는 네트워크 인터페이스(X라고 하죠)를 통해서는

파일 저장이 안됩니다.

X를 통해서 데이터가 아예 안 오는건 아니구요

tcpdump -i X... 해 본 결과 tcpdump 까지는 잘 찍힙니다.

그런데 어플리케이션에서 recvfrom() 함수를 호출하면

데이터를 받지 못하고 있습니다.

추가) nc 를 돌려본 결과 nc 또한 데이터를 받지 못하는군요...

tcpdump 와 nc 사이에 무언가가 있어 데이터를 discard

시키는 게 아닐까 합니다만...-_-;;;;;

물론 이 어플리케이션은 다른 곳에서 돌리면 데이터를

아주 잘 받고 있습니다.

지금 짐작하는 것은

1. 커널 쪽에서 IP layer까지 들어온 데이터를 UDP 쪽으로 보내지 않고 discard 시킬 것이다.

2. UDP 쪽에 buffer 문제일 것이다
->하지만 eth0를 통해서는 UDP로 데이터를 잘 받았습니다.

정도인데요, 어찌 손 쓸 방법이 없네요

이런 경우 어떤 걸 의심해 봐야 할까요?

고수님들의 조언 기다리겠습니다 :)

urmajest의 이미지

1. Make sure that each UDP packet incoming to X has the mac address of X in its destionation address field of the Ethernet frame.

2. Likewise, check a couple of fields which can make the frame being dropped by kernel.

- port number
- checksum (usually not used by UDP)
- TTL ...

Note that tcpdump runs in promiscuous mode.

I think this is the first step you can do to solve the problem.

hados의 이미지

조언 감사합니다.

그런데 1번에서 MAC address가 영향을 미치나요?

그리고 저도 2번이 제일 의심스럽습니다만

eth0 를 이용해서 다른 서버와 같은 port 번호로 통신도 잘 했고,

tcpdump를 보니 데이터를 보내주는 쪽(S)에서 UDP checksum을

계산하지 않고 보내줘서 [no cksum] 이 뜨더라구요

하지만 다른 서버(리눅스 2.6.9)에서 S의 데이터를 받았을 때는

[no cksum]이어도 데이터를 잘 받았으니 헤깔리네요...

TTL 도 별 문제 없어 보이고...

음 괴롭네요... :(

urmajest wrote:
1. Make sure that each UDP packet incoming to X has the mac address of X in its destionation address field of the Ethernet frame.

2. Likewise, check a couple of fields which can make the frame being dropped by kernel.

- port number
- checksum (usually not used by UDP)
- TTL ...

Note that tcpdump runs in promiscuous mode.

I think this is the first step you can do to solve the problem.

urmajest의 이미지

네.

TCPDUMP에서는 interface의 mac address와 상관없이

모든 프레임을 보여주지만(promiscuous mode에서 말이죠),

실제로 network stack에 넘겨지는 건 dst addr가 interface의

mac addr와 일치하는 프레임들뿐입니다..

아니면 보내는 쪽에서 arp cache로 확인해봐도 되겠군요.

hados의 이미지

interface의 IP 주소가 아니라 mac address란 말인가요?

음...찾아봐야 겠네요.

답변 감사합니다 :)

urmajest wrote:
네.

TCPDUMP에서는 interface의 mac address와 상관없이

모든 프레임을 보여주지만(promiscuous mode에서 말이죠),

실제로 network stack에 넘겨지는 건 dst addr가 interface의

mac addr와 일치하는 프레임들뿐입니다..

아니면 보내는 쪽에서 arp cache로 확인해봐도 되겠군요.

lovemyin의 이미지

실제 같은 LAN 안에서 패킷을 전송하는 경우 IP가 아닌 MAC을 이용하여 해당 호스트에 패킷을 전송합니다. IP는 현재 내 네트웍 외부에 있는 호스트를 찾아갈때 쓰이죠...

/***************************************************
* 가장 심플한 것이 가장 아름다운 것이다.
***************************************************/

댓글 달기

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