맥주소 질문.

pjh0347의 이미지

첫 두바이트가 "33-33"으로 시작하면 이더넷 멀티케스트 어드레스라고 알고있습니다.

진짜로 되는지 호기심 발동.

스위칭 허브(집에서사용하는 후진거) 환경하에

컴1에서는 패킷 캡쳐를, 컴2에서는 컴3으로 neighbor solicitation 패킷을 날려(패킷에 이더넷 목적지가 "33-33-..."인 형식) 봤습니다.

그 결과 컴1에서도 그 패킷이 캡쳐되더군요.

멀티케스트면 그룹 멤버만 받아야지 왜 딴넘도 받는걸까요?

제가 생각한 답이 있는데여.
저 이더넷 멀티케스트 어드레스를 저희 집에있는 스위칭 허브가 지원하지 않아서 이다.
가 제 생각입니다.

codebank의 이미지

패킷은 모른 라인을 타고 자신이 원하는 주소를 만날때까지 계속 이곳저곳 LAN카드들을
기웃거리면서 돌아다닙니다.(목적지에 도달하거나 시간이 다될때까지...)

실험하신 컴1에서 패킷이 캡쳐되는것은 전혀 이상한것이 아닙니다.
컴1은 자신의 패킷이 아니니 그냥 무시하니까요.
아무리 똑똑한 패킷이라도 어디에 자신의 목적지가 있는지 알고 찾아가는 것은
아닙니다.
어떻게보면 전송측에서는 받는 주소만 지정해버리고 쏴버리고 그 정보는 Network를
타고 연결된 모든 컴퓨터들을 거쳐서 목적지로 도착을 합니다.
잘되면 바로 찾아가겠지만 최악의 경우에는 세상 모든 Network를 거치고 거쳐서
목적지를 발견하기도 합니다.

좀더 궁금한 사항이 있다면 Network에 대한 문서를 읽어보시기 바랍니다.

http://wiki.kldp.org/wiki.php/%B3%D7%C6%AE%BF%F6%C5%B7#s-1

위 문서중에서 The Network Administrator's Guide에 관련된 내용을 읽어보시면
됩니다. 좀 길긴하지만 필요한 정보를 얻으실 수가 있습니다.
(TCP/IP에 대한 동영상도 있었는데 어디있었는지 기억이 안나네요.)

------------------------------
좋은 하루 되세요.

무한포옹의 이미지

codebank wrote:
패킷은 모른 라인을 타고 자신이 원하는 주소를 만날때까지 계속 이곳저곳 LAN카드들을
기웃거리면서 돌아다닙니다.(목적지에 도달하거나 시간이 다될때까지...)

실험하신 컴1에서 패킷이 캡쳐되는것은 전혀 이상한것이 아닙니다.
컴1은 자신의 패킷이 아니니 그냥 무시하니까요.
아무리 똑똑한 패킷이라도 어디에 자신의 목적지가 있는지 알고 찾아가는 것은
아닙니다.
어떻게보면 전송측에서는 받는 주소만 지정해버리고 쏴버리고 그 정보는 Network를
타고 연결된 모든 컴퓨터들을 거쳐서 목적지로 도착을 합니다.
잘되면 바로 찾아가겠지만 최악의 경우에는 세상 모든 Network를 거치고 거쳐서
목적지를 발견하기도 합니다.

좀더 궁금한 사항이 있다면 Network에 대한 문서를 읽어보시기 바랍니다.

http://wiki.kldp.org/wiki.php/%B3%D7%C6%AE%BF%F6%C5%B7#s-1

위 문서중에서 The Network Administrator's Guide에 관련된 내용을 읽어보시면
됩니다. 좀 길긴하지만 필요한 정보를 얻으실 수가 있습니다.
(TCP/IP에 대한 동영상도 있었는데 어디있었는지 기억이 안나네요.)

이론상 스위치를 사용하면 패킷이 이리저리 돌아다니지 않습니다.

http://www.innet.co.kr/news/readit.asp?pgcnt=353&fstyle=e&num=693&page=&search=&sstring= wrote:

패킷 스니핑

이더넷 환경은 공유된 이더넷(Shared Ethernet)과 스위치화된 이더넷(Switched Ethernet) 두 가지로 크게 구분될 수 있으며,
환경에 따라 스니핑 가능성은 차이가 있다.
패킷 스니핑을 위한 필수적인 요구사항은 네트워크 카드의 프로미스큐어스 모드(promiscuous mode)이다.

일반적으로 인터페이스 카드는 수신한 패킷들이 자신을 목적지로 하는 트래픽이 아닐 경우 폐기하지만,
프로미스큐어스 모드는 패킷 정보를 모두 수용하므로 네트워크 상의 모든 패킷을 수신할 수 있으므로, 사용 목적에 따라 악용될 가능성도 있다.

공유된 이더넷 : 동일한 버스(bus)로 연결된 모든 호스트는 대역폭을 공유하게 된다.
이러한 경우 두 호스트간 데이터를 전송할 때, 해당 호스트뿐만 아니라 연결된
모든 호스트들에게도 데이터가 전송되는 문제점이 있다.

스위치 환경 이더넷 : 허브 대신 스위치로 구성되어 있으므로 스위치 환경 이더넷이라 불린다.
스위치는 연결된 호스트들의 MAC 주소 정보와 해당 MAC 주소가 어떤 물리적인 포트에 위치하고 있는지 파악하고 있다.
이러한 스위치의 지능적인 기능으로 호스트간 통신을 할 때, 공유 이더넷 방식과는 달리 스위치가 목적지의 MAC 주소 정보를 검색해
물리적으로 연결된 포트로만 데이터를 전송하므로, 연결된 모든 호스트들에게 데이터를 전송하지 않는다.


또한 이더넷 패킷은 세계의 네트웍을 이리저리 돌아다니도록 설계되어있지 않습니다. routing 되지 않으니까요.

-------------------------------
== warning 대부분 틀린 얘기입니다 warning ===

pool007의 이미지

무한포옹 wrote:

이론상 스위치를 사용하면 패킷이 이리저리 돌아다니지 않습니다.
http://www.innet.co.kr/news/readit.asp?pgcnt=353&fstyle=e&num=693&page=&search=&sstring= wrote:

패킷 스니핑

이더넷 환경은 공유된 이더넷(Shared Ethernet)과 스위치화된 이더넷(Switched Ethernet) 두 가지로 크게 구분될 수 있으며,
환경에 따라 스니핑 가능성은 차이가 있다.
패킷 스니핑을 위한 필수적인 요구사항은 네트워크 카드의 프로미스큐어스 모드(promiscuous mode)이다.

일반적으로 인터페이스 카드는 수신한 패킷들이 자신을 목적지로 하는 트래픽이 아닐 경우 폐기하지만,
프로미스큐어스 모드는 패킷 정보를 모두 수용하므로 네트워크 상의 모든 패킷을 수신할 수 있으므로, 사용 목적에 따라 악용될 가능성도 있다.

공유된 이더넷 : 동일한 버스(bus)로 연결된 모든 호스트는 대역폭을 공유하게 된다.
이러한 경우 두 호스트간 데이터를 전송할 때, 해당 호스트뿐만 아니라 연결된
모든 호스트들에게도 데이터가 전송되는 문제점이 있다.

스위치 환경 이더넷 : 허브 대신 스위치로 구성되어 있으므로 스위치 환경 이더넷이라 불린다.
스위치는 연결된 호스트들의 MAC 주소 정보와 해당 MAC 주소가 어떤 물리적인 포트에 위치하고 있는지 파악하고 있다.
이러한 스위치의 지능적인 기능으로 호스트간 통신을 할 때, 공유 이더넷 방식과는 달리 스위치가 목적지의 MAC 주소 정보를 검색해
물리적으로 연결된 포트로만 데이터를 전송하므로, 연결된 모든 호스트들에게 데이터를 전송하지 않는다.


또한 이더넷 패킷은 세계의 네트웍을 이리저리 돌아다니도록 설계되어있지 않습니다. routing 되지 않으니까요.

말씀하신대로 '이론상' 스위치를 사용하면 이리저리 돌아다니지 않게 됩니다.. 이미 알고 계시겠지만 적극적인 스니퍼링에서 사용되는 '일부러 이리저리 돌아다니게 하는' 방법이 있는 것도 사실...

--
Passion is like genius; a miracle.

pjh0347의 이미지

말씀하신대로 '이론상' 스위치를 사용하면 이리저리 돌아다니지 않게 됩니다.. 이미 알고 계시겠지만 적극적인 스니퍼링에서 사용되는 '일부러 이리저리 돌아다니게 하는' 방법이 있는 것도 사실...

이거 맥주소 버퍼 플루딩 말하시는건가요?

전 tcpdump 사용했고, 정상적인 네트워크 환경에서 테스트하는거라서
플루딩이 일어나지는 않았을겁니다.

좀더 제 질문의 핵심을 덧붙이자면요

이더넷 프레임의 목적지 주소가 "33-33" 으로 시작하는경우 이더넷 멀티케스트 어드레스이므로 스위치 허브가 이를 처리하여 적절한 랜선 포트로만 전송해야 되지 않느냐 입니다.

리눅스 커널 소스를 보면, 첫바이트의 맨오른쪽 비트가 "1"이고 브로드케스트 주소가 아닌 경우에 멀티케스트 주소라고 판단하는데여. "33-33"으로 시작하는경우 멀티케스트 주소이기 때문에 적절한 포트로만 전달할 것이라고 생각했습니다.

    if(*eth->h_dest&1)
    {
        if(memcmp(eth->h_dest,dev->broadcast, ETH_ALEN)==0)
            skb->pkt_type=PACKET_BROADCAST;
        else
            skb->pkt_type=PACKET_MULTICAST;
    }

제가 가지고있는 스위치 허브의 현재 증상은 멀티케스트 주소도 브로드케스팅해버리고있습니다. 그래서 "제가 가진 허브는 지원을 않한다" 라는 가설입니다.

많은 의견 부탁드립니다. ^^

댓글 달기

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