초기 부팅시 ARP 프로토콜 전송에 대한 질문

mc99의 이미지

먼저 저는 컨트롤러의 펌웨어 개발자 입니다.

궁금한 점은
1. 컨트롤러의 MAC 어드레스를 사용하고 있다가 변경하는 경우에 발생하는
것입니다.

2. 게이트웨이 에서는 이전의 MAC 어드레스를 ARP 테이블에 가지고 있습니다.

3. 일반 PC의 OS나 uC OS-ll 같은 경우는 초기에 부팅할때 자신의 IP에 대한
ARP 패킷을 전송하여 게이트웨이의 ARP 테이블에 대한 이전 정보를 갱신
할 수 있게 하고 있습니다.

4. 이것이 표준 규격인지 권고 사항인지 아직 자료는 찾지 못했습니다.

이것에 대한 자료나 내용을 아시면 답변을 부탁드립니다.

coco의 이미지

이책을 참조해 보시면 될 것같습니다.
정확한 ARP protocol의 상태 흐름도는 ITU-T 문서나 RFC 문서를 참고 하시면 될거 같구요.

책은 링크로 걸어 놓겠습니다.
http://www.kyobobook.co.kr/is-bin/INTERSHOP.enfinity/eCS/Store/en/-/USD/PL_BookInfo-Start;?Click=Ev&barcode=9788989132042

그리고 ARP의 흐름을 파악해보실려면 ethereal 프로그램을 사용하여 보시면 실질적으로 돌아가는 흐름을 파악하실수 있을 듯 합니다.
(윈도우나 유닉스에서 arp -a, -g 옵션을 살펴 보세요. )

제가 알고 있기로는 님의 말씀대로 업데이트 하는것이 표준규격으로 알고 있습니다.

Jesus is Love

daybreak의 이미지

RFC826 ARP 의 일부분을 발췌합니다.
중간 쯤에 말씀하신 update에 대한 부분이 있습니다.

Packet Reception:
-----------------

When an address resolution packet is received, the receiving
Ethernet module gives the packet to the Address Resolution module
which goes through an algorithm similar to the following.
Negative conditionals indicate an end of processing and a
discarding of the packet.

?Do I have the hardware type in ar$hrd?
Yes: (almost definitely)
  [optionally check the hardware length ar$hln]
  ?Do I speak the protocol in ar$pro?
  Yes:
    [optionally check the protocol length ar$pln]
    Merge_flag := false
    If the pair <protocol type, sender protocol address> is
        already in my translation table, update the sender
	hardware address field of the entry with the new
	information in the packet and set Merge_flag to true. 
    ?Am I the target protocol address?
    Yes:
      If Merge_flag is false, add the triplet <protocol type,
          sender protocol address, sender hardware address> to
	  the translation table.
      ?Is the opcode ares_op$REQUEST?  (NOW look at the opcode!!)
      Yes:
	Swap hardware and protocol fields, putting the local
	    hardware and protocol addresses in the sender fields.
	Set the ar$op field to ares_op$REPLY
	Send the packet to the (new) target hardware address on
	    the same hardware on which the request was received.
cychong의 이미지

일단 LAN에서 사용하는 IP:MAC pair 정보는 서버뿐만 아니라 같은 LAN sgement내에 있는 모든 노드가 정보를 가지고 있습니다. 단 그 노드와 통신을 한 경우에만. 이것은 ARP가 왜 필요한지, subnet routing이 어떤 의미인지를 생각하면 금방 답이 나옵니다.

말씀하신 것처럼 이미 다른 노드가 알고 있는 나의 MAC address 정보를 바꿀대는 역시 ARP를 사용합니다. 그런데 이때 사용하는 ARP의 목적은 상대방이 가지고 있는 정보를 바꾸는 것이 목적이지 ARP request/ARP reply의 원래 목적과는 다릅니다. 그래서 gratuitous ARP라고 부릅니다.

흔히 사용하는 경우가 HA(High Availability)혹은 redundancy를 제공할 때 사용합니다. A라는 노드와 B라는 노드가 IP C를 가지고 서비스를 하도록 설정을 한 경우 처음에는 A가 IP C를 가지고 있습니다. 그러면 서버나 다른 노드들은 IP C : MAC A라고 알고 있습니다. 후에 A 노드에 장애가 발생해서 B 노드가 서비스를 이어가튼 경우에는 이 정보들을 IP C : MAC B로 바꿔야 합니다.
이때 노드 B는 GARP를 사용해서 다른 노드가 가지고 있는 그 IP C : MAC A 정보를 바꿔줍니다. 그리고 이 기법은 RFC에도 나와있는 표준입니다.

GARP가 특별한 별도의 포맷을 갖는 것은 아닙니다. ARP request나 reply를 전송할때 IP C, MAC B정보를 담아서 보내면 알아서 이 ARP를 수신한 노드들은 자신의 정보를 업데이트합니다.

Life with fun...

댓글 달기

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