Computer Science/Network

Chapter 11. ICMP: Internet Control Message Protocol

hilily 2022. 2. 20. 01:49
๋ฐ˜์‘ํ˜•

11.1 introduction


ICMP๋ž€?

๐Ÿ‘‰๐Ÿป TCP/IP์—์„œ IP ํŒจํ‚ท์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ๋ฐœ์ƒ๋˜๋Š” ๋ฌธ์ œ๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ํ”„๋กœํ† ์ฝœ์ด๋‹ค.

 

๊ฐ ์—ด์˜ ๋‚ด์šฉ

PRC_  Net/3์—์„œ ์ฒ˜๋ฆฌํ•œ ICMP ๋ฉ”์‹œ์ง€์™€ ํ”„๋กœํ† ์ฝœ ๋…๋ฆฝ ์˜ค๋ฅ˜ ์ฝ”๋“œ ๊ฐ„์˜ ๋งคํ•‘์„ ๋ณด์—ฌ์ค€๋‹ค.
icmp_imput ๊ฐ ICMP ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•ด icmp_input์— ์˜ํ•ด ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.
UDP UDP ์†Œ์ผ“์— ๋Œ€ํ•œ ICMP ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.
TCP TCP ์†Œ์ผ“์— ๋Œ€ํ•œ ICMP ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.
errno ์ด ์—ด์ด ๋น„์–ด์žˆ์œผ๋ฉด ์ปค๋„์€ ICMP ๋ฉ”์‹œ์ง€๋ฅผ ํ”„๋กœ์„ธ์Šค์— ๋ณด๊ณ ํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

ICMP message type

 

8๋ฒˆ echo request ๋ฉ”์‹œ์ง€ ์š”์ฒญ
0๋ฒˆ echo reply ๋ฉ”์‹œ์ง€ ์‘๋‹ต

 

3๋ฒˆ destination unreachable ๋„๋‹ฌ ๋ถˆ๊ฐ€ ์—๋Ÿฌ
11๋ฒˆ time exceeded TTL์ด ์ดˆ๊ณผ๋œ ๊ฒฝ์šฐ

 

 

๊ทธ๋ฆผ 11.3์€ ์œ„ ํ‘œ(๊ทธ๋ฆผ 11.1, 11.2)์—์„œ ๋ถ‰์€์ƒ‰ ๋ฐ•์Šค๋กœ ํ‘œ์‹œ๋œ ๋ถ€๋ถ„์˜ ๋‚ด์šฉ์„ ์˜๋ฏธํ•œ๋‹ค.

 

๊ทธ๋ฆผ 11.4๋Š” ๋“ค์–ด์˜ค๋Š” ICMP ์š”์ฒญ์— ์ ์ ˆํ•œ ICMP ์‘๋‹ต์œผ๋กœ ์‘๋‹ตํ•จ์„ ์˜๋ฏธํ•œ๋‹ค.

 

11.2 Code Introduction


๊ทธ๋ฆผ 11.5๋Š” ICMP ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ, ํ†ต๊ณ„ ๋ฐ ์ฒ˜๋ฆฌ ๊ตฌ์กฐ๋ฅผ ํฌํ•จํ•˜๋Š” ํŒŒ์ผ์ด๋‹ค.

Global Variables

 

๊ทธ๋ฆผ 11.6์€ ์ด ์žฅ์—์„œ ์„ค๋ช…ํ•˜๋Š” ์ „์—ญ๋ณ€์ˆ˜์ด๋‹ค.

statistics

๊ทธ๋ฆผ 11.7์€ ๊ทธ๋ฆผ 11.6์˜ icmpstat ๊ตฌ์กฐ์ฒด ๋ณ€์ˆ˜์˜ ๋‚ด์šฉ์ด๋‹ค.

 

๊ทธ๋ฆผ 11.8์€ netstat -s๋ฅผ ์ž…๋ ฅํ–ˆ์„ ๋•Œ ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒฐ๊ณผ์ด๋‹ค.

 

SNMP Variables

๊ทธ๋ฆผ 11.9๋Š” SNMP variable๊ณผ icmpstat member ์‚ฌ์ด์˜ ๊ด€๊ณ„๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.

 

11.3 icmp Structure


 

์ฒซ ๋ฒˆ์งธ ๋ฐ•์Šค [42-45]

  • icmp_type์€ ํŠน์ • ๋ฉ”์‹œ์ง€๋ฅผ ์‹๋ณ„ํ•œ๋‹ค.
  • icmp_code๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ถ”๊ฐ€๋กœ ์ง€์ •ํ•œ๋‹ค.
  • icmp_cksum์€ IPํ—ค๋” ์ฒดํฌ์„ฌ๊ณผ ๋™์ผํ•˜๋‹ค.

๋‘ ๋ฒˆ์งธ, ์„ธ ๋ฒˆ์งธ ๋ฐ•์Šค [46-59], [67-79]

  • ๋‘ union์€ ๋‹ค์–‘ํ•œ ICMP์— accessํ•œ๋‹ค.
  • ICMP ๋ฉ”์‹œ์ง€๋Š” icmp_type๊ณผ icmp_code๋ฅผ ๋”ฐ๋ฅธ๋‹ค.
  • ๋ชจ๋“  ICMP ๋ฉ”์‹œ์ง€๋Š” icmp_hun์„ ์ด์šฉํ•˜๊ณ , ์ผ๋ถ€๋Š” icmp_dun์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ•„๋“œ๋Š” 0์œผ๋กœ ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค.

 

๊ทธ๋ฆผ 11.11์€ ICMP ๋ฉ”์‹œ์ง€์˜ ๊ตฌ์ฒด์ ์ธ ๊ตฌ์กฐ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.

 

11.4 ICMP protosw structure


๊ทธ๋ฆผ 11.12๋Š” inetsw[4]์˜ protosw ๊ตฌ์กฐ์ด๋‹ค.

icmp_input : ์ปค๋„๋กœ ๋“ค์–ด์˜จ ICMP ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค. (IP๊ณ„์ธต → ์ปค๋„)
rip_output : ํ”„๋กœ์„ธ์Šค์—์„œ ๋งŒ๋“ค์–ด์ ธ ๋‚˜๊ฐ€๋Š” ICMP ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค. (ํ”„๋กœ์„ธ์Šค → IP๊ณ„์ธต)

 

11.5 Input Processing: icmp_input Function


ip_p : ์ƒ์œ„ ๋ ˆ๋ฒจ ํ”„๋กœํ† ์ฝœ์— ๋Œ€ํ•ด ๋‚˜ํƒ€๋ƒ„ (ICMP : 1)

 

 

 

ip_p๊ฐ€ 1์ด๋ฉด ip_protox[] ๊ตฌ์กฐ์— ๋”ฐ๋ผ *inetsw[4]*๊ฐ€ ์„ ํƒ๋œ๋‹ค.

*inetsw[4]*์˜ pr_input์„ ํ†ตํ•ด icmp_input์„ ํ˜ธ์ถœํ•œ๋‹ค.

 

 

๊ทธ๋ฆผ 11.14๋Š” ICMP input์˜ ์ „๋ฐ˜์ ์ธ ๊ณผ์ •์„ ๋ณด์—ฌ์ค€๋‹ค.

 

  1. ์ˆ˜์‹ ๋œ ๋ฉ”์‹œ์ง€ ํ™•์ธ
  2. ICMP error ๋ฉ”์‹œ์ง€
  3. ICMP request ๋ฉ”์‹œ์ง€
  4. ICMP redirect ๋ฉ”์‹œ์ง€
  5. ICMP reply ๋ฉ”์‹œ์ง€

 

 

Static structures

์ฒซ ๋ฒˆ์งธ ๋ฐ•์Šค [131-134]

  • 4๊ฐœ์˜ ๊ตฌ์กฐ๋Š” icmp_input์ด ํ˜ธ์ถœ๋  ๋•Œ๋งˆ๋‹ค 1) ๋™์ ํ• ๋‹น์˜ ์ง€์—ฐ์„ ํ”ผํ•˜๊ณ  2) ์Šคํƒ์˜ ํฌ๊ธฐ๋ฅผ ์ตœ์†Œํ™” ํ•˜๊ธฐ ์œ„ํ•ด ์ •์ ์œผ๋กœ ํ• ๋‹นํ•œ๋‹ค.

 

Validate message

๋‘ ๋ฒˆ์งธ ๋ฐ•์Šค [135-139]

  • icmp_input์€ ์ˆ˜์‹ ๋œ ICMP ๋ฉ”์‹œ์ง€์™€ ๋ฐ์ดํ„ฐ๊ทธ๋žจ์˜ IP ํ—ค๋”๊ธธ์ด๋ฅผ ํฌํ•จํ•œ๋‹ค.
  • ๊ทธ๋ฆผ 11.16์€ ๋ฉ”์‹œ์ง€์˜ ์œ ํšจ์„ฑ์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ICMP์—์„œ ์ฐธ์กฐํ•˜๋Š” ์ƒ์ˆ˜ ๋ฐ ๋งคํฌ๋กœ์ด๋‹ค

์„ธ ๋ฒˆ์งธ ๋ฐ•์Šค [140-160]

  • icmplen์— ๋ฉ”์‹œ์ง€ ํฌ๊ธฐ๋ฅผ ์ €์žฅํ•œ๋‹ค.
  • ๋ฉ”์‹œ์ง€๊ฐ€ ๋„ˆ๋ฌด ์งง์•„์„œ ์œ ํšจํ•œ ICMP ๋ฉ”์‹œ์ง€๊ฐ€ ๋  ์ˆ˜ ์—†์œผ๋ฉด icps_tooshort๋ฅผ ์ฆ๊ฐ€์‹œ์ผœ ๋ฉ”์‹œ์ง€๋ฅผ ์‚ญ์ œํ•œ๋‹ค.

 

 

Verify checksum

๋„ค ๋ฒˆ์งธ ๋ฐ•์Šค [161-170]

  • icmp_input์€ in_chsum์„ ์‚ฌ์šฉํ•˜์—ฌ ICMP ์ฒดํฌ์„ฌ์„ ํ™•์ธํ•œ๋‹ค.
  • ๋ฉ”์‹œ์ง€๊ฐ€ ์†์ƒ๋˜๋ฉด icps_checksum์ด ์ฆ๊ฐ€ํ•˜์—ฌ ๋ฉ”์‹œ์ง€๊ฐ€ ์‚ญ์ œ๋œ๋‹ค.

 

 

Verify type

๋‹ค์„ฏ ๋ฒˆ์งธ ๋ฐ•์Šค [171-175]

  • ์ธ์‹๊ฐ€๋Šฅํ•œ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋ฉด goto raw์œผ๋กœ ์ด๋™
  • ์ธ์‹๊ฐ€๋Šฅํ•œ ๋ฒ”์œ„์— ์žˆ์œผ๋ฉด icmp_code๋ฅผ ๋ณต์ œํ•˜๊ณ  icmp_type์— ๋”ฐ๋ผ ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌ

 

 

Raw ICMP input

์—ฌ์„ฏ ๋ฒˆ์งธ ๋ฐ•์Šค [317-325]

  • raw : ๋‹ค์„ฏ ๋ฒˆ์งธ ๋ฐ•์Šค goto๋ฌธ
  • freeit : ์„ธ ๋ฒˆ์งธ ๋ฐ•์Šค goto๋ฌธ

 

 

11.6 Error Processing


ํ˜ธ์ŠคํŠธ๊ฐ€ ๋ณด๋‚ธ ๋ฐ์ดํ„ฐ๊ทธ๋žจ์„ ๋ชฉ์ ์ง€ ํ˜ธ์ŠคํŠธ๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ, ๋Œ€์ƒ ํ˜ธ์ŠคํŠธ ๋˜๋Š” ์ค‘๊ฐ„ ๋ผ์šฐํ„ฐ๋Š” ์ด๋Ÿฌํ•œ ํŒจํ‚ท์„ ์ƒ์„ฑํ•˜์—ฌ ์›๋ž˜ ์‹œ์Šคํ…œ์œผ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

 

๊ทธ๋ฆผ 11.17์€ ICMP ์˜ค๋ฅ˜๋ฉ”์‹œ์ง€ ํ˜•์‹์ด๋‹ค.

 

์ฒซ ๋ฒˆ์งธ ๋ฐ•์Šค [176-216]

  • ์œ ํ˜•๊ณผ ์ฝ”๋“œ๊ฐ€ ์ธ์‹๋˜๋ฉด deliver๋กœ ์ด๋™
  • ์œ ํ˜•๊ณผ ์ฝ”๋“œ๊ฐ€ ์ธ์‹๋˜์ง€ ์•Š์œผ๋ฉด badcode๋กœ ์ด๋™

 

๋‘ ๋ฒˆ์งธ ๋ฐ•์Šค [217-225]

  • ๋ฉ”์‹œ์ง€ ๊ธธ์ด๊ฐ€ ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์œผ๋ฉด icps_badlen์„ ์ฆ๊ฐ€์‹œ์ผœ ๋ฉ”์‹œ์ง€๋ฅผ ์‚ญ์ œํ•œ๋‹ค.
  • ์ด๋ฅผ ํ†ตํ•ด ๋‘ ๊ฐœ์˜ ์ž˜๋ชป๋œ ๊ตฌํ˜„ ์‚ฌ์ด์— ๋ฌดํ•œ ์‹œํ€€์Šค์˜ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ํ˜•์„ฑ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์„ธ ๋ฒˆ์งธ ๋ฐ•์Šค [226-231]

  • pr_clinput์€ 1) code(์˜ค๋ฅ˜์ฝ”๋“œ), 2) icmpsrc(์›๋ณธ IP ๋ฐ์ดํ„ฐ๊ทธ๋žจ์˜ ๋Œ€์ƒ), 3) icmp_ip(์ž˜๋ชป๋œ ๋ฐ์ดํ„ฐ๊ทธ๋žจ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ)๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.

๋„ค ๋ฒˆ์งธ ๋ฐ•์Šค [232-234]

  • icps_badcode๊ฐ€ ์ฆ๊ฐ€ํ•ด ์Šค์œ„์น˜๋ฌธ์—์„œ ์ œ์–ด๊ฐ€ ์ค‘๋‹จ๋œ๋‹ค.

 

๊ทธ๋ฆผ 11.19๋Š” ํ”„๋กœํ† ์ฝœ์— ๋ถ€ํ•ฉํ•˜๋Š” ์˜ค๋ฅ˜ ์ฝ”๋“œ์ด๋‹ค.

  • PRC_์ƒ์ˆ˜๋Š” ํ‘œ๋ฉด์ ์œผ๋กœ๋Š” ํ”„๋กœํ† ์ฝœ์— ๋…๋ฆฝ์ ์ด์ง€๋งŒ ์ฃผ๋กœ ์ธํ„ฐ๋„ท ํ”„๋กœํ† ์ฝœ์— ๊ธฐ๋ฐ˜์„ ๋‘”๋‹ค.
  • ์ด๋Š” ์ธํ„ฐ๋„ท ๋„๋ฉ”์ธ ์™ธ๋ถ€์˜ ํ”„๋กœํ† ์ฝœ์ด ์˜ค๋ฅ˜๋ฅผ PRC_ ์ƒ์ˆ˜์— ๋งคํ•‘ํ•  ๋•Œ ์–ด๋Š์ •๋„ ํŠน์ˆ˜์„ฑ์˜ ์†์‹ค์„ ์ดˆ๋ž˜ํ•œ๋‹ค.

 

11.7 Request Processing


  • Net/3๋Š” ์˜ฌ๋ฐ”๋ฅธ ํ˜•์‹์˜ ICMP ์š”์ฒญ ๋ฉ”์‹œ์ง€์— ์‘๋‹ตํ•˜์ง€๋งŒ ์ž˜๋ชป๋œ ICMP ์š”์ฒญ ๋ฉ”์‹œ์ง€๋ฅผ rip_input์— ์ „๋‹ฌํ•œ๋‹ค.
  • Net/3์— ์˜ํ•ด ์ˆ˜์‹ ๋œ ๋Œ€๋ถ€๋ถ„์˜ ICMP ์š”์ฒญ ๋ฉ”์‹œ์ง€๋Š” ์‘๋‹ต ๋ฉ”์‹œ์ง€๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  • ์‘๋‹ต์„ ์œ„ํ•œ mbuf ํ• ๋‹น์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด, icmp_input์€ ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์„ ํฌํ•จํ•˜๋Š” mbuf๋ฅผ ์‘๋‹ต์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ์†ก์‹ ์ž์—๊ฒŒ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

Echo Query: ICMP_ECHO and ICMP_ECHOREPLY

  • ICMP์— ECHO์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๊ฒƒ์„ Ping์ด๋ผ๊ณ  ํ•œ๋‹ค.
  • ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • icmp_code๋Š” ํ•ญ์ƒ 0์ด๋‹ค
  • icmp_id์™€ icmp_seq๋Š” ์š”์ฒญ์˜ ๋ฐœ์‹ ์ธ์— ์˜ํ•ด ์„ค์ •๋˜๊ณ  ์‘๋‹ต์—์„œ ์ˆ˜์ •์—†์ด ๋ฐ˜ํ™˜๋œ๋‹ค.
  • icmp_data์— ๋„์ฐฉํ•˜๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋„ ๋ฐ˜์˜๋œ๋‹ค.

์ฒซ ๋ฒˆ์งธ ๋ฐ•์Šค [235-237]

  • icmp_type์„ ICMP_ECHOREPLY๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.

๋‘ ๋ฒˆ์งธ ๋ฐ•์Šค [277-282]

  • ์˜ฌ๋ฐ”๋ฅธ ๋ฐ์ดํ„ฐ๊ทธ๋žจ ๊ธธ์ด๊ฐ€ ๋ณต์›๋œ๋‹ค.
  • icps_reflect๋ฅผ ์ฆ๊ฐ€์‹œ์ผœ ์š”์ฒญ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.
  • *icps_outhist[icp→icmp_type]++*๋ฅผ ์ฆ๊ฐ€์‹œ์ผœ ICMP ๋ฉ”์‹œ์ง€์˜ ์œ ํ˜•์„ ๊ณ„์‚ฐํ•œ๋‹ค.
  • ์š”์ฒญ์ž์—๊ฒŒ ์‘๋‹ต์„ ๋‹ค์‹œ ๋ณด๋‚ธ๋‹ค.

 

Timestamp Query: ICMP_TSTAMP and ICMP_TSTAMPREPLY

๊ทธ๋ฆผ 11.22๋Š” ICMP timestamp ์š”์ฒญ,์‘๋‹ต์ด๋‹ค.

  • icmp_code๋Š” ํ•ญ์ƒ 0์ด๋‹ค.
  • icmp_id์™€ icmp_seq๋Š” ICMP ์—์ฝ”๋ฉ”์‹œ์ง€์˜ ๋ชฉ์ ๊ณผ ๋™์ผํ•˜๋‹ค.
  • icmp_otime์€ ์š”์ฒญ์ด ์‹œ์ž‘๋œ ์‹œ๊ฐ„์œผ๋กœ ์š”์ฒญํ•˜๋Š” ์‚ฌ๋žŒ์ด ์„ค์ •ํ•œ๋‹ค.
  • icmp_rtime์€ ์š”์ฒญ์ด ์ˆ˜์‹ ๋œ ์‹œ๊ฐ„์œผ๋กœ ์š”์ฒญ์— ์‘๋‹ตํ•˜๋Š” ์‚ฌ๋žŒ์ด ์„ค์ •ํ•œ๋‹ค.
  • icmp_ttime์€ ๋‹ต์‹ ์ด ์ „์†ก๋œ ์‹œ๊ฐ„์œผ๋กœ ์š”์ฒญ์— ์‘๋‹ตํ•˜๋Š” ์‚ฌ๋žŒ์ด ์„ค์ •ํ•œ๋‹ค.

์ฒซ ๋ฒˆ์งธ ๋ฐ•์Šค [238-246]

  • ICMP_TSTAMPREPLY๋กœ ํƒ€์ž…์„ ๋ณ€๊ฒฝํ•œ๋‹ค. - icmp_rtime๊ณผ icmp_ttime์— ํ˜„์žฌ์‹œ๊ฐ„์„ ๊ธฐ๋กํ•œ๋‹ค.๐Ÿค”
  • ์‘๋‹ต์„ ์ „์†กํ•œ๋‹ค.

 

Address Mask Query: ICMP_MASKREQ and ICMP_MASKREPLY

๊ทธ๋ฆผ 11.24๋Š” ICMP ์ฃผ์†Œ์˜ ์š”์ฒญ๊ณผ ์‘๋‹ต์ด๋‹ค.

  • ์‹œ์Šคํ…œ์ด ์‘๋‹ตํ•  ๊ด€๋ฆฌ ๊ถŒํ•œ์ด ์—†์œผ๋ฉด ์ฃผ์†Œ ๋งˆ์Šคํฌ ์š”์ฒญ์„ ๋ฌด์‹œํ•ด์•ผํ•œ๋‹ค.
  • global integer icmpmaskrepl์ด 0์ด ์•„๋‹Œ ๊ฒฝ์šฐ Net/3๋Š” ์ฃผ์†Œ ๋งˆ์Šคํฌ ์š”์ฒญ์— ์‘๋‹ตํ•œ๋‹ค.
  • ๊ธฐ๋ณธ๊ฐ’์€ 0์ด๋ฉฐ sysctl(8) ํ”„๋กœ๊ทธ๋žจ์„ ํ†ตํ•ด icmp_sysctl๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ๋ฐ•์Šค [247-256]

  • ์š”์ฒญ์ด 0์ด๊ฑฐ๋‚˜ ๋„ˆ๋ฌด ์งง์œผ๋ฉด ์Šค์œ„์น˜๋ฌธ์„ ๋น ์ ธ๋‚˜๊ฐ„๋‹ค.

 

Select subnet mask

๋‘ ๋ฒˆ์งธ ๋ฐ•์Šค [257-267]

  • ์š”์ฒญ์ด 0.0.0.0 ๋˜๋Š” 255.255.255.255๋กœ ์ „์†ก๋œ ๊ฒฝ์šฐ ์›๋ณธ ์ฃผ์†Œ๋Š” ifaof_ifpforaddr์—์„œ ์›๋ณธ ์ฃผ์†Œ์™€ ๋™์ผํ•œ ๋„คํŠธ์›Œํฌ์˜ in_ifaddr ๊ตฌ์กฐ๋ฅผ ์ฐพ๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.
  • ์†Œ์Šค ์ฃผ์†Œ๊ฐ€ 0.0.0.0 ๋˜๋Š” 255.255.255.255์ธ ๊ฒฝ์šฐ ifaof_ifpforaddr๋Š” ์ˆ˜์‹  ์ธํ„ฐํŽ˜์ด์Šค์™€ ์—ฐ๊ฒฐ๋œ ์ฒซ ๋ฒˆ์งธ IP ์ฃผ์†Œ๋กœ ํฌ์ธํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

Convert to reply

์„ธ ๋ฒˆ์งธ ๋ฐ•์Šค [269-270]

  • icmp_type์„ ICMP_MASKREPLY๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.
  • icmp_mask์— ์œ„์—์„œ ์ €์žฅํ•œ ia→ia_sockmask.sin_addr.s_addr์„ ์ €์žฅํ•œ๋‹ค.

 

Select destination address

๋„ค ๋ฒˆ์งธ ๋ฐ•์Šค [271-276]

  • ์š”์ฒญ์˜ ์ฃผ์†Œ๊ฐ€ 0์ด๋ผ๋ฉด ์กฐ๊ฑด๋ฌธ์— ์„ฑ๋ฆฝํ•œ๋‹ค.
  • ์ˆ˜์‹  ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ BROADCAST์ด๋ฉด ia_broadaddr๋กœ ์‘๋‹ตํ•œ๋‹ค.
  • ์ˆ˜์‹  ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ POINTTOPOINT์ด๋ฉด ia_dstaddr๋กœ ์‘๋‹ตํ•œ๋‹ค.

 

Information Query: ICMP_IREQ and ICMP_IREQREPLY

  • ICMP ์ •๋ณด ๋ฉ”์‹œ์ง€๋Š” ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.
  • ์†Œ์Šค์™€ ๋Œ€์ƒ ์ฃผ์†Œ ํ•„๋“œ์˜ ๋„คํŠธ์›Œํฌ ๋ถ€๋ถ„์— 0์ด ์žˆ๋Š” ์š”์ฒญ์„ broadcastํ•˜์—ฌ ํ˜ธ์ŠคํŠธ๊ฐ€ ์—ฐ๊ฒฐ๋œ IP๋„คํŠธ์›Œํฌ์˜ ์ˆ˜๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด์—ˆ๋‹ค.
  • ์š”์ฒญ์— ์‘๋‹ตํ•˜๋Š” ํ˜ธ์ŠคํŠธ๋Š” ์ ์ ˆํ•œ ๋„คํŠธ์›Œํฌ ๋ฒˆํ˜ธ๊ฐ€ ์ฑ„์›Œ์ง„ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ํ˜ธ์ŠคํŠธ๊ฐ€ ์ฃผ์†Œ์˜ ํ˜ธ์ŠคํŠธ ๋ถ€๋ถ„์„ ๊ฒ€์ƒ‰ํ•˜๋ ค๋ฉด ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•˜๋‹ค.
  • ์ด์œ  : RARP์™€ BOTP๊ฐ€ ์ฃผ์†Œ ๊ฒ€์ƒ‰์— ๋” ์ ํ•ฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ˜ธ์ŠคํŠธ๊ฐ€ ICMP ์ •๋ณด ๋ฉ” ์‹œ์ง€๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์„ ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค.

Router Discovery: icmp_routeradvert and icmp_routersolicit

  • RFC 1256์€ ICMP ๋ผ์šฐํ„ฐ ๊ฒ€์ƒ‰ ๋ฉ”์‹œ์ง€๋ฅผ ์ •์˜ํ•œ๋‹ค.
  • Net/3 ์ปค๋„์€ ์ด๋Ÿฌํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ์ง์ ‘ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๊ณ  rip_input์„ ํ†ตํ•ด ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๊ณ  ์‘๋‹ตํ•˜๋Š” user-level daemon์œผ๋กœ ์ „๋‹ฌํ•œ๋‹ค.

11.8 Redirect Processing


Redirect๋ž€?

๋ฆฌ๋‹ค์ด๋ ‰ํŠธ๋ž€ ๋ง ๊ทธ๋Œ€๋กœ re(๋‹ค์‹œ) + ์ง€์‹œํ•˜๋‹ค(direct) ๋‹ค์‹œ ์ง€์‹œํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

ex) ๋ธŒ๋ผ์šฐ์ €๊ฐ€ A URL์„ ์›น ์„œ๋ฒ„์— ์š”์ฒญํ–ˆ๋‹ค๊ณ  ํ•œ๋‹ค.
์„œ๋ฒ„๋Š” HTTP ์‘๋‹ต ๋ฉ”์‹œ์ง€๋ฅผ ํ†ตํ•ด B URL๋กœ ๋‹ค์‹œ ์š”์ฒญํ•˜๋ผ๊ณ  ๋ธŒ๋ผ์šฐ์ €์—๊ฒŒ ๋‹ค๋ฅธ URL(๊ธธ, ๋ฐฉํ–ฅ) ์„ ์ง€์‹œํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ๋ผ ํ•œ๋‹ค.

 

๊ทธ๋ฆผ 11.26์€ ICMP redirect ๋ฉ”์‹œ์ง€์˜ ํ˜•์‹์„ ๋ณด์—ฌ์ค€๋‹ค.

  • ํŒจํ‚ท์ด ์ž˜๋ชป๋œ ๋ผ์šฐํ„ฐ๋กœ ์ „์†ก๋  ๋•Œ redirect ๋ฉ”์‹œ์ง€๊ฐ€ ๋„์ฐฉํ•œ๋‹ค.
  • ๋ผ์šฐํ„ฐ๋Š” ํŒจํ‚ท์„ ์˜ฌ๋ฐ”๋ฅธ ๋ผ์šฐํ„ฐ์— forwardํ•˜๊ณ  ์‹œ์Šคํ…œ์ด ๋ผ์šฐํŒ… ํ…Œ์ด๋ธ”์— ํ†ตํ•ฉํ•˜๋Š” ICMP redirect ๋ฉ”์‹œ์ง€๋ฅผ ๋‹ค์‹œ ๋ณด๋‚ธ๋‹ค.

Validate

์ฒซ ๋ฒˆ์งธ ๋ฐ•์Šค [283-290]

  • icmp_code๋Š” 0-3์ด๋ฏ€๋กœ code>3์ด๋ฉด ์ธ์‹ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ด๋•Œ badcode๋กœ ์ด๋™ํ•œ๋‹ค.
  • ๋ฉ”์‹œ์ง€ ๊ธธ์ด๊ฐ€ ์ž˜๋ชป๋˜๊ฑฐ๋‚˜ IPํŒจํ‚ท ํ—ค๋” ๊ธธ์ด๊ฐ€ ์ž˜๋ชป๋˜๋ฉด switch๋ฌธ์„ ๋น ์ ธ๋‚˜๊ฐ„๋‹ค.
  • ICMP_ADVLENMIN : ICMP ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€์˜ ์ตœ์†Œ ํฌ๊ธฐ ICMP_ADVLEN : icp๋กœ ๊ฐ€๋ฆฌํ‚ค๋Š” ํŒจํ‚ท์— ์žˆ์„ ์ˆ˜ ์žˆ๋Š” IP์˜ต์…˜์„ ํฌํ•จํ•œ ICMP ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€์˜ ์ตœ์†Œ ํฌ๊ธฐ์ด๋‹ค.

๋‘ ๋ฒˆ์งธ ๋ฐ•์Šค [291-300]

  • icmpgw : redirect ๋ฉ”์‹œ์ง€์˜ ์†Œ์Šค์ฃผ์†Œ (๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ธ ๊ฒŒ์ดํŠธ์›จ์ด)
  • icmpdst : ์›๋ž˜ ํŒจํ‚ท์˜ ๊ถŒ์žฅ ๋ผ์šฐํ„ฐ (์ฒซ ๋ฒˆ์งธ ํ™‰ ๋Œ€์ƒ)
  • icmpsrc : ์›๋ณธ ํŒจํ‚ท์˜ ์ตœ์ข… ๋Œ€์ƒ

 

Update routes

์„ธ ๋ฒˆ์งธ ๋ฐ•์Šค [301-306]

  • Net/3๋Š” network redirect์™€ host redirect๋ฅผ ๋™์ผํ•˜๊ฒŒ ์ทจ๊ธ‰ํ•œ๋‹ค.
  • redirect ์ •๋ณด๋Š” ๋ผ์šฐํŒ… ํ…Œ์ด๋ธ”์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” rtredirect๋กœ ์ „๋‹ฌ๋œ๋‹ค.
  • redirect๋œ ๋Œ€์ƒ์ด pfctlinput์œผ๋กœ ์ „๋‹ฌ๋˜์–ด ๋ชจ๋“  ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ ์•Œ๋ฆฐ๋‹ค.

 

11.9 Reply Processing


  • ์ปค๋„์€ ICMP ์‘๋‹ต ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ICMP request๋Š” ํ”„๋กœ์„ธ์Šค์— ์˜ํ•ด ์ƒ์„ฑ๋˜๋ฏ€๋กœ ์ปค๋„์€ ICMP ๋ฉ”์‹œ์ง€๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ํ”„๋กœ์„ธ์Šค์— ์ˆ˜์‹ ๋˜๋Š” reply๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.
  • ICMP ๋ผ์šฐํ„ฐ discovery ๋ฉ”์‹œ์ง€๋Š” rip_input์œผ๋กœ ์ „๋‹ฌ๋œ๋‹ค.

์ฒซ ๋ฒˆ์งธ ๋ฐ•์Šค [307-322]

  • ์ปค๋„์—์„œ ICMP ์‘๋‹ต ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•œ ์ž‘์—…์ด ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ raw ์ƒํƒœ์˜ switch๋ฌธ ์ดํ›„์— ์‹คํ–‰์ด ๊ณ„์†๋œ๋‹ค.
  • switch๋ฌธ์˜ ๊ธฐ๋ณธ ์‚ฌ๋ก€(์ธ์‹๋˜์ง€ ์•Š๋Š” ICMP ๋ฉ”์‹œ์ง€)๋„ ์›์‹œ ์ƒํƒœ์˜ ์ฝ”๋“œ๋กœ ์ œ์–ด๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.

 

11.10 Output Processing


๊ทธ๋ฆผ 11.29๋Š” ICMP์ถœ๋ ฅ์ฒ˜๋ฆฌ ๊ณผ์ •์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

11.11 icmp_error Function


icmp_errorํ•จ์ˆ˜๋Š” IP ๋˜๋Š” ์ „์†ก ํ”„๋กœํ† ์ฝœ์˜ ์š”์ฒญ์— ๋”ฐ๋ผ ICMP ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ด๋ฅผ icmp_reflect๋กœ ์ „๋‹ฌํ•˜์—ฌ ์œ ํšจํ•˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๊ทธ๋žจ ์†Œ์Šค๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

์ฒซ ๋ฒˆ์งธ ๋ฐ•์Šค [46-57]

  • n : argument (์œ ํšจํ•˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๊ทธ๋žจ์„ ํฌํ•จํ•˜๋Š” mbuf์— ์ฒด์ธ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ )
  • type, code : ICMP ์˜ค๋ฅ˜type๊ณผ code ๊ฐ’
  • dest : ICMP ๋ฆฌ๋””๋ ‰์…˜ ๋ฉ”์‹œ์ง€์— ํฌํ•จ๋œ ๋‹ค์Œ ํ™‰ ๋ผ์šฐํ„ฐ ์ฃผ์†Œ
  • destifp : ์›๋ณธ IP ํŒจํ‚ท์„ ์œ„ํ•œ ์†ก์‹  ์ธํ„ฐํŽ˜์ด์Šค์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ

๋‘ ๋ฒˆ์งธ ๋ฐ•์Šค [58-75]

  • redirect ๋ฉ”์‹œ์ง€๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ICMP ์˜ค๋ฅ˜๋Š” icps_error๋กœ ๊ณ„์‚ฐ๋œ๋‹ค.
  • Net/3๋Š” redirect ๋ฉ”์‹œ์ง€๋ฅผ ์˜ค๋ฅ˜๋กœ ๊ฐ„์ฃผํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • IP_MF์™€ IP_DF๋กœ ํ‘œ์‹œ๋˜๋Š” ๋น„ํŠธ๋ฅผ ์ œ์™ธํ•œ ip_off์˜ ์ผ๋ถ€ ๋น„ํŠธ๋Š” 0์ด ์•„๋‹ˆ๋‹ค.
  • ICMP_INFOTYPE์€ ICMP ์š”์ฒญ ๋˜๋Š” ์‘๋‹ต ์œ ํ˜•์ด๋ฉด true, ์•„๋‹ˆ๋ฉด false๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ๋ฐ์ดํ„ฐ๊ทธ๋žจ์€ ๋งํฌ ๊ณ„์ธต ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ ๋˜๋Š” ๋ฉ€ํ‹ฐ์บ์ŠคํŠธ๋กœ ๋„์ฐฉํ•œ๋‹ค.

 

 

๊ทธ๋ฆผ 11.31์€ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€์˜ ๊ตฌ์„ฑ์„ ๋ณด์—ฌ์ค€๋‹ค.

 

์ฒซ ๋ฒˆ์งธ ๋ฐ•์Šค [76-106]

  • m_gethdr์€ ์ƒˆ ํŒจํ‚ท ํ—ค๋” mbuf๋ฅผ ํ• ๋‹นํ•œ๋‹ค.
  • MH_ALIGN์€ mbuf์˜ ๋ฐ์ดํ„ฐ ํฌ์ธํ„ฐ๋ฅผ ๋ฐฐ์น˜ํ•˜์—ฌ ICMP ํ—ค๋”, ์œ ํšจํ•˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๊ทธ๋žจ์˜ IPํ—ค๋”, ์œ ํšจํ•˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๊ทธ๋žจ์˜ ์ตœ๋Œ€ 8๋ฐ”์ดํŠธ๊ฐ€ mbuf ๋์— ์œ„์น˜ํ•˜๋„๋ก ํ•œ๋‹ค.
  • icmp_type, icmp_code, icmp_gwaddr, icmp_pptr, icmp_nexymtu๊ฐ€ ์ดˆ๊ธฐํ™” ๋œ๋‹ค.

 

์ฒซ ๋ฒˆ์งธ ๋ฐ•์Šค [107-125]

  • IPํ—ค๋”, ์˜ต์…˜, ๋ฐ์ดํ„ฐ๊ฐ€ ์ž˜๋ชป๋œ ๋ฐ์ดํ„ฐ๊ทธ๋žจ์—์„œ ICMP ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋กœ ๋ณต์‚ฌ๋œ๋‹ค.
  • ํ—ค๋”๊ธธ์ด๋Š” ์œ ํšจํ•˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๊ทธ๋žจ์˜ ip_len์— ๋‹ค์‹œ ์ถ”๊ฐ€๋œ๋‹ค.
  • ์˜ฌ๋ฐ”๋ฅธ ๋ฐ์ดํ„ฐ๊ทธ๋žจ ๊ธธ์ด(ip_len), ํ—ค๋”๊ธธ์ด(ip_hl), ํ”„๋กœํ† ์ฝœ(ip_p)์„ ๋ณต์›ํ•˜๊ณ  TOS ํ•„๋“œ(ip_tos)๋ฅผ ์ง€์šด๋‹ค.

๋‘ ๋ฒˆ์งธ ๋ฐ•์Šค [126-129]

  • ์™„์„ฑ๋œ ๋ฉ”์‹œ์ง€๋Š” icmp_reflect๋กœ ์ „๋‹ฌ๋œ๋‹ค.
  • ์ž˜๋ชป๋œ ๋ฐ์ดํ„ฐ๊ทธ๋žจ์€ ์‚ญ์ œ๋œ๋‹ค.

 

11.12 icmp_reflect Function


  • ICMP_reflect๋Š” ICMP ์‘๋‹ต๊ณผ ์˜ค๋ฅ˜๋ฅผ ์š”์ฒญํ•œ ๊ณณ์œผ๋กœ ๋‹ค์‹œ ๋ณด๋‚ด๊ฑฐ๋‚˜ ์ž˜๋ชป๋œ ๋ฐ์ดํ„ฐ๊ทธ๋žจ์œผ๋กœ ๋‹ค์‹œ ๋ณด๋‚ธ๋‹ค.
  • ์ „์†กํ•˜๊ธฐ ์ „์—๋Š” icmp_reflect๋Š” ๋ฐ์ดํ„ฐ๊ทธ๋žจ์˜ source์™€ ๋ชฉ์ ์ง€ ์ฃผ์†Œ๋ฅผ ๋ฐ˜์ „์‹œํ‚จ๋‹ค.

 

๊ทธ๋ฆผ 11.34๋Š” ICMP ์‚ญ์ œ์™€ ์ฃผ์†Œ ์š”์•ฝ์ด๋‹ค.

 

Set destination address

์ฒซ ๋ฒˆ์งธ ๋ฐ•์Šค [329-345]

  • icmp_reflect๋Š” ip_dst์˜ ๋ณต์‚ฌ๋ณธ์„ ๋งŒ๋“ค๊ณ  ip_src(์›๋ณธ)๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์‹œ์ž‘ํ•œ๋‹ค.
  • icmp_error์™€ icmp_reflect๋Š” ip_src๊ฐ€ ์˜ค๋ฅ˜๋ฉ”์‹œ์ง€์˜ ์œ ํšจํ•œ ๋Œ€์ƒ ์กฐ์ˆ˜์ธ์ง€ ํ™•์ธํ•œ๋‹ค.
  • ip_output์€ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ ์ฃผ์†Œ๋กœ ์ „์†ก๋œ ๋ชจ๋“  ํŒจํ‚ท์„ ์‚ญ์ œํ•œ๋‹ค.

 

Select source address

๋‘ ๋ฒˆ์งธ ๋ฐ•์Šค [346-371]

  • icmp_reflect๋Š” in_ifaddr์—์„œ ๋ฉ”์‹œ์ง€์˜ ์†Œ์Šค ์ฃผ์†Œ๋ฅผ ์„ ํƒํ•œ๋‹ค.
  • ์ผ์น˜ํ•˜๋Š” ํ•ญ๋ชฉ์ด ์—†์œผ๋ฉด ์ˆ˜์‹  ์ธํ„ฐํŽ˜์ด์Šค์˜ in_ifaddr ๊ตฌ์กฐ๊ฐ€ ์„ ํƒ๋˜๊ฑฐ๋‚˜ in_ifaddr์˜ ์ฒซ ๋ฒˆ์งธ ์ฃผ์†Œ๊ฐ€ ์„ ํƒ๋œ๋‹ค.
  • ip_src๋ฅผ ์„ ํƒํ•œ ์ฃผ์†Œ๋กœ ์„ค์ •ํ•˜๊ณ  ์˜ค๋ฅ˜๊ฐ€ ์ƒˆ ๋ฐ์ดํ„ฐ๊ทธ๋žจ์ด๊ธฐ ๋•Œ๋ฌธ์— ip_ttl์„ 255(MAXTTL)๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.

Get reversed source route

์ฒซ ๋ฒˆ์งธ ๋ฐ•์Šค [372-385]

  • cp๋Š” ์‘๋‹ต ์„ ํƒ์‚ฌํ•ญ์˜ ์‹œ์ž‘์„ ๊ธฐ๋ฆฌํ‚จ๋‹ค.
  • ip_srcroute๋Š” ipintr๊ฐ€ ๋ฐ์ดํ„ฐ๊ทธ๋žจ์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ์ €์žฅ๋œ ์†Œ์Šค ๊ฒฝ๋กœ ์˜ต์…˜์„ ๋˜๋Œ๋ฆฌ๊ณ  ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ip_srcroute๊ฐ€ 0์„ ๋ฐ˜ํ™˜ํ•˜๋ฉด icmp_reflect๋Š” mbuf๋ฅผ ํ• ๋‹นํ•˜๊ณ  ์ดˆ๊ธฐํ™”ํ•˜์—ฌ ๋นˆ ipoption๊ตฌ์กฐ๋กœ ์ด๋™ํ•œ๋‹ค.

Add record route and timestamp options

๋‘ ๋ฒˆ์งธ ๋ฐ•์Šค [386-416]

  • mbuf๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋ฉด for๋ฌธ์€ ์›๋ž˜ IPํ—ค๋”์—์„œ ์˜ต์…˜์„ ๊ฒ€์ƒ‰ํ•˜๊ณ  ๋ ˆ์ฝ”๋“œ ๊ฒฝ๋กœ์™€ ํƒ€์ž„์Šคํƒฌํ”„ ์˜ต์…˜์„ ip_srcroute์— ์˜ํ•ด ๋ฐ˜ํ™˜๋˜๋Š” ์†Œ์Šค ๊ฒฝ๋กœ์— ์ถ”๊ฐ€ํ•œ๋‹ค.
  • ICMP ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•˜๊ธฐ ์ „์— ์›๋ž˜ ํ—ค๋”์˜ ์˜ต์…˜์„ ์ œ๊ฑฐํ•ด์•ผํ•œ๋‹ค.

Remove original options

์ฒซ ๋ฒˆ์งธ ๋ฐ•์Šค [417-429]

  • icmp_reflect๋Š” IP ํ—ค๋”์˜ ๋์œผ๋กœ ICMP ๋ฉ”์‹œ์ง€๋ฅผ ์ด๋™ํ•˜์—ฌ ์›๋ž˜ ์š”์ฒญ์—์„œ ์˜ต์…˜์„ ์ œ๊ฑฐํ•œ๋‹ค.
  • mbuf์— ์žˆ๋Š” ์ƒˆ๋กœ์šด ์˜ต์…˜๋“ค์„ opts์— ์˜ํ•ด ๊ฐ€๋ฆฌ์ผœ์ง€๋ฉฐ ip_output์— ์˜ํ•ด ๋‹ค์‹œ ์‚ฝ์ž…๋œ๋‹ค.

Send message and cleanup

๋‘ ๋ฒˆ์งธ ๋ฐ•์Šค [430-435]

  • ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ์™€ ๋ฉ€ํ‹ฐ์บ์ŠคํŠธ ํ”Œ๋ž˜๊ทธ๋Š” icmp_send์— ๋ฉ”์‹œ์ง€์™€ ์˜ต์…˜์„ ์ „๋‹ฌํ•˜๊ธฐ ์ „์— ๋ช…์‹œ์ ์œผ๋กœ ์ง€์›Œ์ง€๋ฉฐ, ๊ทธ ํ›„์— ์˜ต์…˜์„ ํฌํ•จํ•˜๋Š” mbuf๊ฐ€ ํ•ด์ œ๋œ๋‹ค.

 

11.13 icmp_send Function


  • icmp_send๋Š” ๋ชจ๋“  ์†ก์‹  ICMP ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  IP ๊ณ„์ธต์— ์ „๋‹ฌํ•˜๊ธฐ ์ „์— ICMP ์ฒดํฌ์„ฌ์„ ๊ณ„์‚ฐํ•œ๋‹ค.

์ฒซ ๋ฒˆ์งธ ๋ฐ•์Šค [440-457]

  • Net/3๋Š” mbuf ๋ฐ์ดํ„ฐ ํฌ์ธํ„ฐ์™€ ๊ธธ์ด๋ฅผ ์กฐ์ •ํ•˜์—ฌ IP ํ—ค๋”๋ฅผ ์ˆจ๊ธฐ๊ณ  in_cksum์ด ICMP ๋ฉ”์‹œ์ง€๋งŒ ๋ณด๋„๋ก ํ•œ๋‹ค.
  • ๊ณ„์‚ฐ๋œ ์ฒดํฌ์„ฌ์€ icmp_cksum์˜ ํ—ค๋”์— ๋ฐฐ์น˜๋˜๊ณ  ๋ฐ์ดํ„ฐ๊ทธ๋žจ๊ณผ ๋ชจ๋“  ์˜ต์…˜์€ ip_output์œผ๋กœ ์ „๋‹ฌ๋œ๋‹ค.
  • ICMP ๊ณ„์ธต์€ ๊ฒฝ๋กœ ์บ์‹œ๋ฅผ ์œ ์ง€ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ icmp_send๋Š” ์„ธ ๋ฒˆ์งธ ์ธ์ˆ˜๋ฅผ null๋กœ ์„ค์ •ํ•œ๋‹ค.
  • icmp_send๋Š” ip_output์— ์ œ์–ดํ”Œ๋ž˜๊ทธ๋ฅผ ์ „๋‹ฌํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋„ค ๋ฒˆ์งธ ์ธ์ˆ˜๋ฅผ 0์œผ๋กœ ์„ค์ •ํ•œ๋‹ค.

 

11.14 icmp_sysctl Function


  • IP์— ๋Œ€ํ•œ icmp_sysctl ํ•จ์ˆ˜๋Š” ๋‹จ์ผ์˜ต์…˜์„ ์ง€์›ํ•œ๋‹ค. (๊ทธ๋ฆผ 11.41 ์ฐธ๊ณ )
  • ์‹œ์Šคํ…œ ๊ด€๋ฆฌ์ž๋Š” sysctl(8) ํ”„๋กœ๊ทธ๋žจ์„ ํ†ตํ•ด ์˜ต์…˜์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ฆผ 11.40์€ icmp_sysctl parameters๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ๋ฐ•์Šค [467-478]

  • ํ•„์š”ํ•œ ICMP sysctl ์ด๋ฆ„์ด ์—†์œผ๋ฉด ENOTDIR์ด ๋ฐ˜ํ™˜๋œ๋‹ค.

๋‘ ๋ฒˆ์งธ ๋ฐ•์Šค [479-486]

  • ICMP ์ˆ˜์ค€ ์•„๋ž˜์—๋Š” ์˜ต์…˜์ด ์—†์œผ๋ฏ€๋กœ sysctl_int๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ icmpmaskrepl์„ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์˜ต์…˜์ด ์ธ์‹๋˜์ง€ ์•Š์œผ๋ฉด ENOPROTOOPT๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

11.15 Summary


  • ICMP ํ”„๋กœํ† ์ฝœ์€ IP ์ „์†ก๊ณ„์ธต์œผ๋กœ ๊ตฌํ˜„๋˜์ง€๋งŒ IP๊ณ„์ธต๊ณผ ๊ธด๋ฐ€ํ•˜๊ฒŒ ํ†ตํ•ฉ๋œ๋‹ค.
  • ์ปค๋„์ด ICMP ์š”์ฒญ ๋ฉ”์‹œ์ง€์— ์ง์ ‘ ์‘๋‹ตํ•˜์ง€๋งŒ ์˜ค๋ฅ˜์™€ ์‘๋‹ต ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ์ ์ ˆํ•œ ์ „์†ก ํ”„๋กœํ† ์ฝœ์ด๋‚˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœ๊ทธ๋žจ์— ์ „๋‹ฌํ•œ๋‹ค.
  • ์ปค๋„์€ ICMP ๋ฆฌ๋””๋ ‰์…˜ ๋ฉ”์‹œ์ง€๊ฐ€ ๋„์ฐฉํ•˜๋ฉด ๋ผ์šฐํŒ… ๋ฐ์ด๋ธ”์„ ์ฆ‰์‹œ ๋ณ€๊ฒฝํ•˜์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ผ์šฐํŒ… darmon๊ณผ ๊ฐ™์€ ๋Œ€๊ธฐ ํ”„๋กœ์„ธ์Šค์—๋„ redirect๋ฅผ ์ „๋‹ฌํ•œ๋‹ค
๋ฐ˜์‘ํ˜•