0.0.0.0/1~32 Linux route 동작 질문

hwiorb의 이미지

안녕하세요. 0.0.0.0/1~32가 정확히 Linux에서는 어떻게 동작하는지 알수 없어, 질문드립니다.
RFC5735에 아래와 같이, this network를 의미한다고 되어 있는데요.

   0.0.0.0/8 - Addresses in this block refer to source hosts on "this"
   network.  Address 0.0.0.0/32 may be used as a source address for this
   host on this network; other addresses within 0.0.0.0/8 may be used to
   refer to specified hosts on this network ([RFC1122], Section
   3.2.1.3).

하지만, Linux에는 어떻게 구현되어있고, 사용할 수 있는지 질문 드립니다.
가령, 아래와 같이 0.0.0.0/1로 설정을 하면, 아래와 같이 나오지만, route table에 0.0.0.0/1은 나오지 고, default gateway를 설정할 수 없습니다.(이유는 network id 가 0 이라서, this network 를 의미하기 때문인 것 같은데..)

# ifconfig eth1 10.20.30.40 netmask 128.0.0.0
# route add default gw 10.20.30.41
-> Network is unreachable.

혹시, 참고할 수 있는 Linux manual 이나 문서가 있는지 답변 부탁드립니다.

익명 사용자의 이미지

넷트웍에 대해 좀 안다고 생각하고 있다가도 이런 질문을 받으면 바로 버로우타고 IANA 찾게 되네요
저 RFC 를 인용하셨으니 IANA 의 특수목적 주소 페이지도 보셨을 겁니다.
문제는 저 문구의 해석인데요...

0.0.0.0/8 - Addresses in this block refer to source hosts on "this" network.

이 말은(번역이 아니라 해석을 하겠습니다)
0.0.0.0/8 은 0.0.0.0 부터입니다만 이 중 0.0.0.0 은 또 특별히 정의되어 있으므로
0.0.0.1 ~ 0.255.255.255 까지 해당되는 주소가 출발지 주소로 쓰인 데이타그램이 수신되는 경우 TCP/IP 호환커널의 넷트웍루틴은 이를 같은 넷트웍에 있는 어떤 놈인데 아직 자기 주소를 결정하지 못한 놈이 보낸 것으로 인식하고 처리하라는 뜻입니다.
즉 ifconfig eth0 0.1.1.1 netmask 255.0.0.0
과 같은 방식으로 설정하는 용도가 아니라는 겁니다.설정과 사용은 별개죠. 설정은 유틸리티를 통해 커널내 값을 셋팅한다는 소린데 설정유틸리티 자체가 이런 특수목적주소를 막아놨을 겁니다(이건 리눅스를 안쓰니까 단순 추측) 사용은 아시다시피 데이타그램의 출발지/목적지 헤더는 커널이(응용으로부터 받든가 어쨌든) 적어 넣습니다. 마음대로 적어넣을 수 있죠.
무슨 목적인지는 몰라도 어떤 클라이언트가 출발지주소를 0. 으로 시작하는 데이타그램을 보냈다면 이를 받는 호스트 커널은 위에처럼 해석하라... 이런 뜻입니다.

0.0.0.0/32 may be used as a source address for this host on this network

이건 앞에 범위 안에서 출발지주소에 명백하게 0.0.0.0 으로 표시해서 들어오는 데이타를 커널이 해석하는 방식을 설명하고 있습니다. 같은 넷트웍에 있는 주소를 모르는 어떤 놈 중 자기자신(이 말 참 애매하긴 합니다)

Linux에는 어떻게 구현되어있고, 사용할 수 있는지 질문 드립니다

TCP/IP 호환커널은 저런식으로 해석하라 했으므로 대충 비슷한 구현이 있겠지만 인터넷표준 자체가 그렇게 강제적이지 않고 커널마다 약간씩 변형이나 추가가 있습니다 예를 들어 ARP 관련 루틴을 보면 RFC 정의구현 이외 맥주소변경해킹에 대한 패치루틴이 있어요 .(이는 커널소스로 확인)
앞서 말씀드렸듯이 사용은 다릅니다.
사용이란 게 인터페이스 설정을 의미하는 게 아니고 뭐 예를 들자면 어떤 특수목적의 넷트웍프로그램을 만들었는데 자기주소를 저런식으로 커널헤더에 집어넣는다...그럼 시스템은 보내는 겁니다. 수신된 상대 커널이 이제 이거 좀 수상한 주소를 사용하는 놈이네...골아프겠죠

# ifconfig eth1 10.20.30.40 netmask 128.0.0.0 라는 선언의 의미 중 다음이 중요합니다.
10.0.0.0 ~ 128.255.255.255 까지를 로칼로 판단하겠다....

# route add default gw 10.20.30.41
디폴트게이트웨이주소를 41번으로 하겠다는 명령이죠? 아마?(리눅서가 아니어서 ㅠㅠ) 이상없는 명령입니다.
-> Network is unreachable.
넷트웍도달불가로 ICMP 가 나오는데 이건 정상적으로 하면 시스템이 꺼져 있을 경우 host 도달불가로 나와야 하는데...
아래는 제 추측입니다
10.0.0.0 ~ 10.255.255.255
가 역시 사설로 예약된 특별주소입니다.
그런데 저 위 인터페이스 설정명령에는 이 사설 넷트웍을 일반 주소 안으로 집어넣는 수퍼넷 설정을 해버렸죠
설정유틸이 이를 걸러내지 못하고 커널값을 정상적으로 써 넣었다면 커널 내부 처리루틴에서 님의 의도와는 다르게 10. 사설주소 루틴과 일반 주소루틴 둘 중 하나에서 블럭된 것일 수 있습니다.
커널 매우 똘똘하네요 ㅎㅎ
근데 순전히 추측입니다.

익명 사용자의 이미지

써 놓고 보니
# ifconfig eth1 10.20.30.40 netmask 128.0.0.0
넷마스크가 255가 아니라 128 이네요 허허
그럼10하고 128을 연산하면...골아픈데 1이 나오네요
그럼 이거 뜻이 1.0.0.0 ~ 1.255.255.255.255 까지를 로칼로 한다는 선언이 되는군요(겁나 헷갈리네요)
인터페이스 주소와 아무 상관없는 범위를 로칼로 설정했다....
그럼 디폴트게이트웨이
route add default gw 10.20.30.41 이하고 했을 때
넷트웍도달불가가 맞네요...로칼이면 ARP 보내서 호스트도달불가 나오겠지만 리모트이니 라우팅테이블 없으면 바로 넷트웍도달불가...

근데 255가 아니라 128로 주실 수 있는 분이면 이거 발견하면서 질문하신 분이 저보다 한 수 위인거 같은데 잠시 헷갈렸는가 보다 이런 생각 듭니다

익명 사용자의 이미지

2진수 계산 결국 전자계산기로 해보니 1이 아니라 0 맞네요
이로서
저 RFC 규정에 맞는 넷주소로 바로 10. 에다 128 을 줘서 0을 맞춰보시는 걸로 봐서, 이런 건 보통 PC 에서 사용하지 않는 주소이고 넷트웍을 이론으로 공부해도 이론에 맞는 예를 즉각 적용한다는 건 이미 실무까지 능하다는 반증입니다.
님은 아마 낚시하시려 질문하신 거 아닌가 하는 생각까지 들게 되는군요 ㅎㅎㅎ
0.0.0.0 ~ 0.255.255.255 라는 RFC 규정을 로칼로 선언하는 예를 금방 찾아내신다...역시 세상에 고수는 많군요

댓글 달기

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