Difference between r1.58 and the current
@@ -20,6 +20,7 @@
* [wiki:ICMP ICMP] : Internet Control Message Protocol
=== IP (Internet Protocol) header ===
* IP datagram은 다음과 같은 형식을 가진다.
|||||||| 4bit Version |||||||| 4bit Header length / 4 |||||||||||||||| 8bit Type of service (TOS) |||||||||||||||||||||||||||||||| 16bit Total length (in bytes) ||<|5><bgcolor="yellow"> ↑↓20 bytes ||<|6><bgcolor="yellow"> ↑↓20~60 bytes ||
|||||||||||||||||||||||||||||||| 16-bit Identification |||||| 3-bit Flags |||||||||||||||||||||||||| 13bit Fragment offset ||
=== IP (Internet Protocol) header ===
* IP datagram은 다음과 같은 형식을 가진다.
[[attachment:IPv4-Header-20240226-0.png IPv4 Header]]
|IP datagram|<bgcolor="gray"> '''0''' ||<bgcolor="gray"> '''1''' ||<bgcolor="gray"> '''2''' ||<bgcolor="gray"> '''3''' ||<bgcolor="gray"> '''4''' ||<bgcolor="gray"> '''5''' ||<bgcolor="gray"> '''6''' ||<bgcolor="gray"> '''7''' ||<bgcolor="gray"> '''8''' ||<bgcolor="gray"> '''9''' ||<bgcolor="gray"> '''10''' ||<bgcolor="gray"> '''11''' ||<bgcolor="gray"> '''12''' ||<bgcolor="gray"> '''13''' ||<bgcolor="gray"> '''14''' ||<bgcolor="gray"> '''15''' ||<bgcolor="gray"> '''16''' ||<bgcolor="gray"> '''17''' ||<bgcolor="gray"> '''18''' ||<bgcolor="gray"> '''19''' ||<bgcolor="gray"> '''20''' ||<bgcolor="gray"> '''21''' ||<bgcolor="gray"> '''22''' ||<bgcolor="gray"> '''23''' ||<bgcolor="gray"> '''24''' ||<bgcolor="gray"> '''25''' ||<bgcolor="gray"> '''26''' ||<bgcolor="gray"> '''27''' ||<bgcolor="gray"> '''28''' ||<bgcolor="gray"> '''29''' ||<bgcolor="gray"> '''30''' ||<bgcolor="gray"> '''31''' ||||<bgcolor="orange"> '''Description''' |||||||||| 4bit Version |||||||| 4bit Header length / 4 |||||||||||||||| 8bit Type of service (TOS) |||||||||||||||||||||||||||||||| 16bit Total length (in bytes) ||<|5><bgcolor="yellow"> ↑↓20 bytes ||<|6><bgcolor="yellow"> ↑↓20~60 bytes ||
|||||||||||||||||||||||||||||||| 16-bit Identification |||||| 3-bit Flags |||||||||||||||||||||||||| 13bit Fragment offset ||
@@ -1034,5 +1035,4 @@
* [^https://pseonghoon.github.io/post/linux-parameters-for-l4-dsr/ L4 DSR 에서 arp_ignore, arp_announce 설정 정확히 이해하기]
* 책 "Understanding LINUX Network Internals"
* [[ISBN(9780596002558,K,noimg)]]
* 책 "Understanding LINUX Network Internals"
* [[ISBN(9780596002558,K,noimg)]]
IPv4
- 작성자
- 고친과정
2008년 6월 24일 : 처음씀
2008년 9월 1일 : IP header
2010년 8월 18일 : 사설IP관련 내용 추가
2018년 10월 12일 : ARP 관련 내용 추가
1.1. 역사
IPv4 protocol 은 1981년에 RFC791 - INTERNET PROTOCOL에 의해서 정의되었다.
1.3. IP (Internet Protocol) header
- IP datagram은 다음과 같은 형식을 가진다.
[PNG image (75.37 KB)]
IP datagram 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Description 4bit Version 4bit Header length / 4 8bit Type of service (TOS) 16bit Total length (in bytes) ↑↓20 bytes ↑↓20~60 bytes 16-bit Identification 3-bit Flags 13bit Fragment offset 8bit Time to live (TTL) 8bit Protocol 16bit Header checksum 32bit 출발지 IP 주소 32bit 목적지 IP 주소 Options (if any) ↑↓0~40 bytes Data ↑↓ Total length - Header length - 4-bit Header length는 4의 배수로 해석한다. 즉, 1이 4바이트를 뜻한다. 최대 4-bit로 15까지 값을 지정할수 있으므로 15x4=60 bytes가 최대값이고 이것은 "Options (if any)" 가 60-20=40 bytes를 넘지 못한다는 의미이기도 하다.
- 3-bit Flags 항목은 다음과 같은 flags 로 표시된다.
- 첫번째 bit : 항상 0 (미사용)
- 두번째 bit : Don't flagment bit
- 0 (May Fragment) : 라우터에서 Fragmentation이 가능함을 의미
- 1 (Don't Fragment) : 중간에 라우터로 하여금 Fragmentation을 하지 말라는 요청임의 의미
- 목적지 호스트가 Fragmentation을 모을 능력이 없는 경우
- Path MTU discovery 동작을 위한 경우
- 세번째 bit : More flagment bit
- 0 (Last Fragment) : 현재의 패킷이 단편화의 마지막인 경우를 의미
- 1 (More Fragments) : 현재의 패킷이 단편화의 마지막이 아닌 경우를 의미 (뒤에 남은 단편화가 있을 것임을 의미)
- 16-bit Identification 는 Fragmentation 된 단위 패킷의 경우 동일한 값을 가지며 그 외에는 0으로 채울 수 있습니다. (즉, Fragmentation 된 단위 패킷을 구분하기 위한 목적으로 사용합니다.) (참고: RFC791 Section-3.1 Identification)
- 8-bit Protocol 항목에는 다음의 값들을 사용할수 있다. (참고: http://www.iana.org/assignments/protocol-numbers)
- More
- Options 항목은 32bit로 정렬되어야 한다.
- Type of service (TOS) : 각 응용의 종류에 따라 권장되는 값은 아래와 같다.
- More
1.4. Class 구분
- A class (0.0.0.0 ~ 127.255.255.255)
128개의 네트웍으로 구성되며 각 네트웍은 16,777,216개의 주소를 갖는다.
A class 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 0 NetID HostID
- B class (128.0.0.0 ~ 191.255.255.255)
16,384개의 네트웍으로 구성되며 각 네트웍은 65,536개의 주소를 갖는다.
B class 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 1 0 NetID HostID
- C class (192.0.0.0 ~ 223.255.255.255)
2,097,152개의 네트웍으로 구성되며 각 네트웍은 256개의 주소를 갖는다.
C class 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 1 1 0 NetID HostID
- D class (224.0.0.0 ~ 239.255.255.255)
Multicast를 위한 주소로 사용된다.
D class 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 1 1 1 0 Multicast group ID
- E class (240.0.0.0 ~ 247.255.255.255)
미래를 위하여 사용을 보류한 영역이다.
E class 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 1 1 1 1 0 Reserved for future use
- CIDR(Classless Inter-Domain Routing, 사이더)에 따른 Network 규모 정리 표 (참고: RFC1519 - Classless Inter-Domain Routing (CIDR): an Address Assignment and Aggregation Strategy, 서브넷 마스크 테이블, Subnet Mask Table)
CIDR(Classless Inter-Domain Routing, 사이더)에 따른 Network 규모 정리 표 CIDR Class Hosts Usable hosts netmask /0 16,777,216 C, 65,536 B, 256 A 4,294,967,296 (any or default) 0.0.0.0 /1 8,388,608 C, 32,768 B, 128 A 2,147,483,648 2,147,483,646 128.0.0.0 /2 4,194,304 C, 16,384 B, 64 A 1,073,741,824 1,073,741,822 192.0.0.0 /3 2,097,152 C, 8,192 B, 32 A 536,870,912 536,870,910 224.0.0.0 /4 1,048,576 C, 4,096 B, 16 A 268,435,456 268,435,454 240.0.0.0 /5 524,288 C, 2,048 B, 8 A 134,217,728 134,217,726 248.0.0.0 /6 262,144 C, 1,024 B, 4 A 67,108,864 67,108,862 252.0.0.0 /7 131,072 C, 512 B, 2 A 33,554,432 33,554,430 254.0.0.0 /8 65,536 C, 256 B, 1 A (Class A network) 16,777,216 16,777,214 255.0.0.0 /9 32,768 C, 128 B 8,388,608 8,388,606 255.128.0.0 /10 16,384 C, 64 B 4,194,304 4,194,302 255.192.0.0 /11 8,192 C, 32 B 2,097,152 2,097,150 255.224.0.0 /12 4,096 C, 16 B 1,048,576 1,048,574 255.240.0.0 /13 2,048 C, 8 B 524,288 524,286 255.248.0.0 /14 1,024 C, 4 B 262,144 262,142 255.252.0.0 /15 512 C, 2 B 131,072 131,070 255.254.0.0 /16 256 C, 1 B (Class B network) 65,536 65,534 255.255.0.0 /17 128 C 32,768 32,766 255.255.128.0 /18 64 C 16,384 16,382 255.255.192.0 /19 32 C 8,192 8,190 255.255.224.0 /20 16 C 4,096 4,094 255.255.240.0 /21 8 C 2,048 2,046 255.255.248.0 /22 4 C 1,024 1,022 255.255.252.0 /23 2 C 512 510 255.255.254.0 /24 1 C (Class C network) 256 254 255.255.255.0 /25 1/2 C 128 126 255.255.255.128 /26 1/4 C 64 62 255.255.255.192 /27 1/8 C 32 30 255.255.255.224 /28 1/16 C 16 14 255.255.255.240 /29 1/32 C 8 6 255.255.255.248 /30 1/64 C 4 2 255.255.255.252 /31 1/128 C Point-to-Point links only (RFC3021) 255.255.255.254 /32 1/256 C (Single IP address, host route) 1 1 255.255.255.255
- RFC6890 - Special-Purpose IP Address Registries
- "0.0.0.0/8" : This host on this network (https://tools.ietf.org/html/rfc1122#section-3.2.1.3)
- "10.0.0.0/8" : Private-Use
- "100.64.0.0/10" : Shared Address Space
- "127.0.0.0/8" : Loopback
- "169.254.0.0/16" : Link Local
- "172.16.0.0/12" : Private-Use
- "192.0.0.0/24" : IETF Protocol Assignments (Not usable unless by virtue of a more specific reservation)
- "192.0.0.0/29" : DS-Lite
- "192.0.0.170/31" : NAT64/DNS64 (The Record for IPv4 Address Allocation for IPv4 Special Purpose Address Registry)
- "192.0.2.0/24" : Documentation (TEST-NET-1)
- "192.88.99.0/24" : 6to4 Relay Anycast
- "192.168.0.0/16" : Private-Use
- "198.18.0.0/15" : Benchmarking
- "198.51.100.0/24" : Documentation (TEST-NET-2)
- "203.0.113.0/24" : Documentation (TEST-NET-3)
- "240.0.0.0/4" : Reserved
- "255.255.255.255/32" : Limited Broadcast (Broadcast IP Addressing - Proposed Standards)
- "::1/128" : Loopback Address
- "::/128" : Unspecified Address
- "64:ff9b::/96" : IPv4-IPv6 Translat.
- "::ffff:0:0/96" : IPv4-mapped Address
- "100::/64" : Discard-Only Address Block
- "2001::/23" : IETF Protocol Assignments (Unless allowed by a more specific allocation)
- "2001::/32" : TEREDO
- "2001:2::/48" : Benchmarking
- "2001:db8::/32" : Documentation
- "2001:10::/28" : ORCHID
- "2002::/16" : 6to4 (RFC3056 - Connection of IPv6 Domains via IPv4 Clouds)
- "fc00::/7" : Unique-Local
- "fe80::/10" : Linked-Scoped Unicast
1.5. 사설 IP (Private IP) 대역
IANA(Internet Assigned Numbers Authority, 국제 주소관리 기구)는 다음과 같은 사설 IP주소(Private IP)를 예약해 두었으며, 이의 사용을 강력히 권고하고 있습니다.
Private-to-public IP주소 변환을 위해서는 NATs(Network Address Translators)와 같은 Gateway System(주로 방화벽제품에서 사용)을 사용하여야 합니다. 즉, 내부적으로 private address를 사용하도록 설정되어 있는 전산기가 외부 인터넷상의 전산기와 통신하려 할때는, 이 gateway 시스템에서 private IP주소를 public IP주소로 변환해 줍니다. 이때 gateway 시스템은 적정 수량의 필요한 public IP주소 pool을 유지하고 있어야 하므로, 이에 필요한 public IP주소는 인터넷주소할당조직(Internet Registry)으로부터 할당받아야 합니다.
이 private 주소 사용에 있어서의 장점은 KRNIC, ISP등 누구에게도 주소공간 할당 신청을 하지 않음으로서, 까다로운 심사절차 를 거치지 않아도 됩니다. 즉, 기업내부의 모든 host수를 조사하고, CIDR/VLSM을 적용한 세밀한 networking plan을 세우고, 상대적으로 다루기 어려운 OSPF같은 프로토콜을 사용하여야 하는 등의 불편이 따르지 않게 됩니다.
조직내부 IP주소공간 관리 편의를 위해, 필요이상으로 충분히 넉넉한 주소공간을 자유롭게 사용할 수 있습니다. 즉, 5개의 host가 필요한 subnet에 대해서도 미래를 대비하여 /24를 할당할 수 있습니다. 수시로 변하는 조직변동, 전산기들의 이동, 재배치 등등에 대해서도 별로 걱정할 필요로 없습니다. Private IP주소를 사용하게 되고, 주로 NATs 시스템이 방화벽기능을 포함하고 있으므로, 상대적으로 보안성이 강화됩니다.
그러나, 전세계 인터넷도메인이름 시스템과 연결되는 external용과 기업 내부용의 internal Domain Name server를 운영해야 할 것이며, 외부 공개용으로 반드시 public IP주소가 필요한 시스템과 그렇지 않은 시스템으로 구분하여, 외부 공개용 시스템에는 public IP 주소를 static하게 지정하여야 할 것입니다. 최근 private IP주소를 활용하는 라우터, 시스템 등이 많이 출시되고 있는 추세이므로, 이의 사용을 적극 권장한다. 보다 자세한 내용은 RFC1597 - Address Allocation for Private Internets을 참조할수 있습니다.
- Class A 규모 : 10/8(10.0.0.0∼10.255.255.255)
- Class B 규모 : 172.16/12(172.16.0.0∼172.31.255.255)
- Class C 규모 : 192.168/16(192.168.0.0∼192.168.255.255)
Private-to-public IP주소 변환을 위해서는 NATs(Network Address Translators)와 같은 Gateway System(주로 방화벽제품에서 사용)을 사용하여야 합니다. 즉, 내부적으로 private address를 사용하도록 설정되어 있는 전산기가 외부 인터넷상의 전산기와 통신하려 할때는, 이 gateway 시스템에서 private IP주소를 public IP주소로 변환해 줍니다. 이때 gateway 시스템은 적정 수량의 필요한 public IP주소 pool을 유지하고 있어야 하므로, 이에 필요한 public IP주소는 인터넷주소할당조직(Internet Registry)으로부터 할당받아야 합니다.
이 private 주소 사용에 있어서의 장점은 KRNIC, ISP등 누구에게도 주소공간 할당 신청을 하지 않음으로서, 까다로운 심사절차 를 거치지 않아도 됩니다. 즉, 기업내부의 모든 host수를 조사하고, CIDR/VLSM을 적용한 세밀한 networking plan을 세우고, 상대적으로 다루기 어려운 OSPF같은 프로토콜을 사용하여야 하는 등의 불편이 따르지 않게 됩니다.
조직내부 IP주소공간 관리 편의를 위해, 필요이상으로 충분히 넉넉한 주소공간을 자유롭게 사용할 수 있습니다. 즉, 5개의 host가 필요한 subnet에 대해서도 미래를 대비하여 /24를 할당할 수 있습니다. 수시로 변하는 조직변동, 전산기들의 이동, 재배치 등등에 대해서도 별로 걱정할 필요로 없습니다. Private IP주소를 사용하게 되고, 주로 NATs 시스템이 방화벽기능을 포함하고 있으므로, 상대적으로 보안성이 강화됩니다.
그러나, 전세계 인터넷도메인이름 시스템과 연결되는 external용과 기업 내부용의 internal Domain Name server를 운영해야 할 것이며, 외부 공개용으로 반드시 public IP주소가 필요한 시스템과 그렇지 않은 시스템으로 구분하여, 외부 공개용 시스템에는 public IP 주소를 static하게 지정하여야 할 것입니다. 최근 private IP주소를 활용하는 라우터, 시스템 등이 많이 출시되고 있는 추세이므로, 이의 사용을 적극 권장한다. 보다 자세한 내용은 RFC1597 - Address Allocation for Private Internets을 참조할수 있습니다.
1.6. ARP
- ARP 상태의 일반적인 천이
- NONE => INCOMPLTE => REACHABLE => STALE => DELAY => PROBE => REACHABLE 또는 FAIL => 엔트리 제거
- ARP는 인접계층간 맵핑을 위해서 사용
- 예) L3와 L2를 맵핑
- 간청 요청 (인접 간청, arp_solicit)
- L3주소와 연관된 L2주소를 아는지에 대해 모든 호스트에게 요청하는 패킷 전송
- 간청 응답 (인접 광고)
- 일반적으로는 간청 요청에 대한 응답 패킷을 의미
- 독립적으로 생성될 수도 있음 (GARP 참고)
- 대상 호스트가 아닌 다른 호스트가 대상 호스트에 대한 간청에 응답할 수도 있음 (인접 프로토콜 프록싱)
- 주로 유니캐스트로 전송되지만 특별한 경우 브로드캐스트로 가능
- L4에서의 증거 상황
- TCP SYN 을 인접에 전송하고 SYN+ACK를 받는 경우 인접도달 가능성이 있다고 판단
- 도달 가능성
- 양방향 도달 가능성이 있을 때를 말함
1.6.1. "/proc/net/arp"에서 제공하는 내용에 대한 설명
# cat /proc/net/arp IP address HW type Flags HW address Mask Device 10.100.100.2 0x1 0x2 00:90:0b:66:20:26 * br0 10.100.100.1 0x1 0x2 00:90:0b:66:20:0e * br0 172.17.1.111 0x1 0x2 4c:cc:6a:9b:0e:2d * eth0 172.17.1.254 0x1 0x2 00:90:0b:40:89:5d * eth0
- ARP Flags 값의 종류
"./uapi/linux/neighbour.h" #define NUD_INCOMPLETE 0x01 #define NUD_REACHABLE 0x02 #define NUD_STALE 0x04 #define NUD_DELAY 0x08 #define NUD_PROBE 0x10 #define NUD_FAILED 0x20 #define NUD_NOARP 0x40 #define NUD_PERMANENT 0x80 #define NUD_NONE 0x00 "./net/neighbour.h" #define NUD_IN_TIMER (NUD_INCOMPLETE|NUD_REACHABLE|NUD_DELAY|NUD_PROBE) #define NUD_VALID (NUD_PERMANENT|NUD_NOARP|NUD_REACHABLE|NUD_PROBE|NUD_STALE|NUD_DELAY) #define NUD_CONNECTED (NUD_PERMANENT|NUD_NOARP|NUD_REACHABLE)
- NONE : 엔트리를 생성한 직후의 상태이며 곧 INCOMPLETE로 천이
- PERMANENT : 엔트리를 영구적인 상태로 생성
- 이 경우 더이상의 상태 천이가 일어나지 않음
- NOARP : 매핑이 필요없는 상태 (즉, L2 header를 채울 필요가 없는 상태)
- 멀티캐스트 (Multicast)
- 브로드캐스트 (Broadcast)
- 루프백 장치 (Loopback device)
- 포인트투포인트 장치 (Point to Point device)
- 매핑이 필요없는 장치 (No Mapping device)
- INCOMPLETE : 간청이 전송됐지만 아직 응답이 오지 않은 상태 (확증단계 진행 중)
- REACHABLE : 간청요청에 대한 응답이 왔고 이에 대한 캐시확보되어 접근 가능하다는 확증이 된 상태
- 해당 주소로 접근 가능하다는 확실한 증거가 있다는 의미
- STALE : REACHABLE 상태에서 일정시간(reachable_time) 승인되지 않은 상태가 되었을 때
- 도달 가능성을 재 확인해야 함을 표시하는 상태
- 캐시는 인접주소를 포함하고 있음
- 만약 첫 REACHABLE 상태이후 경과된 시간이 gc_staletime을 경과되면 더이상 이 엔트리는 사용되지 않고 파기합니다.
- "/proc/sys/net/ipv4/neigh/<interface-name>/base_reachable_time"
- "/proc/sys/net/ipv4/neigh/<interface-name>/gc_staletime"
- DELAY : STALE 상태에서 PROBE 상태로 가기 위한 중간 보류상태
- 지연시간(delay_probe_timer)만료될 때까지 도달가능성을 간주할 수 있는 수신(간청응답 또는 L4 확인)이 있는 경우 REACHABLE 상태로 천이됨
- "/proc/sys/net/ipv4/neigh/<interface-name>/proxy_delay"
- "/proc/sys/net/ipv4/neigh/<interface-name>/anycast_delay"
- 지연시간(delay_probe_timer)만료될 때까지 도달가능성을 간주할 수 있는 수신(간청응답 또는 L4 확인)이 있는 경우 REACHABLE 상태로 천이됨
- PROBE : 간청요청 단계이며 도달가능성을 간주할 수 있는 수신이 있는 경우 REACHABLE 상태로 천이되며 그렇지 않은 경우 FAILED 상태로 천이
- "/proc/sys/net/ipv4/neigh/<interface-name>/delay_first_probe_time"
- "/proc/sys/net/ipv4/neigh/<interface-name>/retrans_time"
- FAILED : 이 엔트리는 유효하지 않으므로 곧 파기될 것이라는 상태 (곧 파기됨)
- 결국 mapping 실패인 상태
- IN_TIMER (파생상태) : INCOMPLETE 또는 REACHABLE 또는 DELAY 또는 PROBE
- Timer 계류중인 상태를 의미
- VALID (파생상태) : PERMANENT 또는 NOARP 또는 REACHABLE 또는 PROBE 또는 STALE 또는 DELAY
- 인접 도달 승인(가능한) 상태
- CONNECTED (파생상태) : PERMANENT 또는 NOARP 또는 REACHABLE
- 인접 도달 확신 상태
1.6.2. ARP 응답 및 동작 특성을 결정짖는 sysctl 설정값
ARP의 응답여부, ARP 응답시 real-mac vs virtual-mac 응답 여부, ... 등을 결정짖는 것은 주로 sysctl 의 설정에 의해서 좌우됩니다.
net.ipv4.conf.<interface>.arp_accept net.ipv4.conf.<interface>.arp_announce net.ipv4.conf.<interface>.arp_filter net.ipv4.conf.<interface>.arp_ignore net.ipv4.conf.<interface>.arp_notify net.ipv4.conf.<interface>.proxy_arp net.ipv4.conf.<interface>.proxy_arp_pvlan net.ipv4.conf.<interface>.rp_filter net.ipv4.conf.<interface>.accept_local net.ipv4.neigh.<interface>.anycast_delay = 100 net.ipv4.neigh.<interface>.app_solicit = 0 net.ipv4.neigh.<interface>.base_reachable_time = 30 net.ipv4.neigh.<interface>.base_reachable_time_ms = 30000 net.ipv4.neigh.<interface>.delay_first_probe_time = 5 net.ipv4.neigh.<interface>.gc_stale_time = 60 net.ipv4.neigh.<interface>.locktime = 100 net.ipv4.neigh.<interface>.mcast_solicit = 3 net.ipv4.neigh.<interface>.proxy_delay = 80 net.ipv4.neigh.<interface>.proxy_qlen = 64 net.ipv4.neigh.<interface>.retrans_time = 100 net.ipv4.neigh.<interface>.retrans_time_ms = 1000 net.ipv4.neigh.<interface>.ucast_solicit = 3 net.ipv4.neigh.<interface>.unres_qlen = 28 net.ipv4.neigh.<interface>.unres_qlen_bytes = 65536 net.ipv6.neigh.<interface>.anycast_delay = 100 net.ipv6.neigh.<interface>.app_solicit = 0 net.ipv6.neigh.<interface>.base_reachable_time = 30 net.ipv6.neigh.<interface>.base_reachable_time_ms = 30000 net.ipv6.neigh.<interface>.delay_first_probe_time = 5 net.ipv6.neigh.<interface>.gc_stale_time = 60 net.ipv6.neigh.<interface>.locktime = 0 net.ipv6.neigh.<interface>.mcast_solicit = 3 net.ipv6.neigh.<interface>.proxy_delay = 80 net.ipv6.neigh.<interface>.proxy_qlen = 64 net.ipv6.neigh.<interface>.retrans_time = 1000 net.ipv6.neigh.<interface>.retrans_time_ms = 1000 net.ipv6.neigh.<interface>.ucast_solicit = 3 net.ipv6.neigh.<interface>.unres_qlen = 28 net.ipv6.neigh.<interface>.unres_qlen_bytes = 65536
- arp_ignore : 이 값은 기본 0이며 1로 하는 경우 자신의 로컬 인터페이스 주소를 검사하여 주소가 없는 경우 응답을 무시합니다. (일반적으로 인터페이스가 1개뿐인 장비는 0이 유익함. 인터페이스가 2개 이상인 Forward 장비의 경우 1로 설정하는 것을 고려할 필요가 있음)
- 0 (default) : ARP request가 도착했을 때, 조회 대상 IP가 이 시스템의 어떤 interface이건 (loopback 포함) 있기만 하면 응답
- 1 (RT_SCOPE_HOST): Reply only if tip is configured on the incoming interface - arp_ignore가 1로 설정된 interface를 통해 ARP request가 도착하면 조회 대상 IP가 이 interface에 직접 설정되어 있을 때만 응답
- 2 (RT_SCOPE_HOST) : Reply only if tip is configured on the incoming interface and is in same subnet as sip
- 3 (RT_SCOPE_LINK) : Do not reply for scope host addresses
- 4 ~ 7 : Reserved
- 8 : Do not reply
- arp_filter : 이 값은 기본 0이며 1로 하는 경우 Output 라우팅을 확인하여 인입 인터페이스와 목적지 라우팅 인터페이스가 일치하지 않으면 응답을 무시합니다.
- 일반적으로 물리인터페이스는 1로 설정하는게 유익. 단, single prefix IPv4 (prefix 32) 를 운영하는 가상인터페이스(macvlan등)는 0으로 설정이 필요
- rp_filter : 이 값은 기본 0이며 1로 하는 경우 spoofing 방어동작을 합니다. (Forward 목적의 장비는 0으로 유지하거나 이에 상응하는 대응 구현이 필요합니다.)
- arp_announce : 이 값은 기본 0이며 0으로 유지
- 0 (default) : sender IP 주소로 시스템에 설정된 어떤 IP든 사용할 수 있음
- 2 : sender IP 주소로 가능하면 ARP request를 실제 전송하는 interface에 설정된 IP를 사용. 실제 기준은 좀 더 복잡.
- accept_local : 이 값은 기본 0이며 vrrp interface 에 대하여 1로 사용
위 주요 ARP 응답에 관여하는 sysctl 값은 크게 3가지로 나뉩니다. - "net.ipv4.conf.all.*" : boolean과 value 속성의 값으로 나뉘는데 0보다 큰 경우 개별 인터페이스의 sysctl에 영향을 미칩니다.
- boolean 인 경우 all이 0이상의 값을 갖는 경우 모든 개별 인터페이스의 sysctrl 값도 TRUE로 간주하여 개별 인터페이스별 sysctrl 설정이 무력화 됩니다.
- value 인 경우 all와 개별 인터페이스의 sysctrl 값 중에서 큰 값을 개별 인터페이스별 sysctl 값으로 반영합니다. 즉, 작은 값은 무력화 됩니다.
- "net.ipv4.conf.default.*"
- 신규 생성되는 인터페이스에 대한 개별 인터페이스의 sysctl 기본 값을 의미합니다.
- "net.ipv4.conf.<인터페이스명>.*"
- 개별 인터페이스 별 설정으로 all이 0인 경우 유효하며 all이 0이 아닌 값인 경우 위 조건에 따라서 무효화 될 수 있습니다.
1.7. 2008년 9월 1일 현재 IANA protocol-numbers
- IANA protocol-numbers 를 보시려면 여기를 클릭해주세요.
1.8. 참고자료
- OSI 7 계층모델
- IPv6
- Computing the Internet Checksum (RFC1071)
- TCP(Transmission Control Protocol)
- 이더넷 (Ethernet)
- ICMP(Internet Control Message Protocol)
- NAT(Network Address Translation)
- ASCII 표
- Ethernet frame
- https://en.wikipedia.org/wiki/Address_Resolution_Protocol
- https://en.wikipedia.org/wiki/Reverse_Address_Resolution_Protocol
- RFC791 - INTERNET PROTOCOL / DARPA INTERNET PROGRAM / PROTOCOL SPECIFICATION
- RFC826 - An Ethernet Address Resolution Protocol or Converting Network Protocol Addresses to 48.bit Ethernet Address for Transmission on Ethernet Hardware
- RFC903 - A Reverse Address Resolution Protocol
- RFC919 - BROADCASTING INTERNET DATAGRAMS
- RFC1112 - Host Extensions for IP Multicasting
- RFC1466 - Guidelines for Management of IP Address Space
- RFC1518 - An Architecture for IP Address Allocation with CIDR
- RFC1519 - Classless Inter-Domain Routing (CIDR): an Address Assignment and Aggregation Strategy
- RFC1597 - Address Allocation for Private Internets
- RFC1770 - ASSIGNED NUMBERS
- RFC2365 - Administratively Scoped IP Multicast
- RFC2390 - Inverse Address Resolution Protocol
- RFC3021 - Using 31-Bit Prefixes on IPv4 Point-to-Point Links
- RFC3056 - Connection of IPv6 Domains via IPv4 Clouds
- RFC3927 - Dynamic Configuration of IPv4 Link-Local Addresses
- RFC3344 - IP Mobility Support for IPv4
- RFC4632 - Classless Inter-domain Routing (CIDR): The Internet Address Assignment and Aggregation Plan
- RFC5227 - IPv4 Address Conflict Detection
- RFC6890 - Special-Purpose IP Address Registries
- Classless Inter-Domain Routing
- IANA IPv4 Address Space Registry
- Internet Protocol Version 6 Address Space
- IANA IPv4 Special-Purpose Address Registry
- IANA IPv6 Special-Purpose Address Registry
- IPv6 Global Unicast Address Assignments * Subnet Mask Cheat Sheet
- https://mikrotik-routeros.com/2014/04/enabling-dscp-tos-display-column-in-wireshark/
- Service Name and Transport Protocol Port Number Registry
- https://docs.oracle.com/cd/E38901_01/html/E38894/ipplan-5.html
- https://support.hpe.com/hpsc/doc/public/display?docId=emr_na-c01418125
- L4 DSR 에서 arp_ignore, arp_announce 설정 정확히 이해하기
- 책 "Understanding LINUX Network Internals"