제목이 좀 유치하죠? ^^* 말랑 말랑한 블로그 공간에서의 표현이므로 너그럽게 봐 주시기 바랍니다.
오늘과 내일에 걸쳐 L2(Ethernet) 스위칭과 L3(IP) 라우팅 과정에서 살펴 보도록 하겠습니다. 본 글을 통해 다음과 같은 내용을 설명 드리도록 하겠습니다.
Switching과 Routing
위 그림은 앞으로(오늘과 내일) 설명드릴 망 구성도이므로 잘 봐 주시기 바랍니다. (특히 서버/라우터의 MAC, IP 주소, 스위치/라우터의 포트(인터페이스) 번호)
좌측 그림과 같이 Sender(SVR1)와 Receiver(SVR2)가 동일 네트워크(LAN)에 위치해 있는 경우 라우터 R1을 거치지 않고 스위치 S1을 통해 바로 통신이 되며 이 때의 패킷 구성은 다음과 같습니다. (동일 네트워크인지 아닌지 어떻게 구분하는지 궁금하시면 여기를 클릭)
Header | Fields | ||||
Ethernet Header
|
* Destination MAC = Receiver(SVR2)의 MAC 주소 m2 * Source MAC = Sender(SVR1)의 MAC 주소 m1 |
||||
IP Header
|
* Destination IP = Receiver(SVR2)의 IP 주소 1.1.1.20 * Source IP = Sender(SVR1)의 IP 주소 1.1.1.10 |
반면 우측 그림과 같이 Sender(SVR1)와 Receiver(SVR3)가 동일 네트워크(LAN)에 위치하지 않은 경우 라우터 R1을 거치게 되는데 이 때의 Ethernet Header 필드는 라우터를 사이에 두고 서로 값을 가지게 됩니다.
SVR1에서 R1으로 패킷 전송시
Header | Fields | ||||
Ethernet Header
|
* Destination MAC = Router(R1의 ge1/1)의 MAC 주소 a1 * Source MAC = Sender(SVR1)의 MAC 주소 m1 |
||||
IP Header
|
* Destination IP = Receiver(SVR3)의 IP 주소 2.1.1.30 * Source IP = Sender(SVR1)의 IP 주소 1.1.1.10 |
R1에서 SVR3로 패킷 전송시
Header | Fields | ||||
Ethernet Header
|
* Destination MAC = Receiver(SVR3)의 MAC 주소 m3 * Source MAC = Router(R1의 ge2/1)의 MAC 주소 a2 |
||||
IP Header
|
* Destination IP = Receiver(SVR3)의 IP 주소 2.1.1.30 * Source IP = Sender(SVR1)의 IP 주소 1.1.1.10 |
Ethernet Switching
그림을 그리다 보니 너무 길쭉해 졌습니다. (다음 시간 그림은 더 길어요~)
1. SVR1 sends ARP Request
Header | Fields | |||||||||||||
Ethernet Header
|
* Destination MAC = FF:FF:FF:FF:FF:FF(브로드캐스팅, 동일 LAN에 있는 모든 단말로 전달) * Source MAC = Sender(SVR1)의 MAC 주소 m1 |
|||||||||||||
ARP Header
|
* Sender MAC = ARP Request 패킷 송신자(sender), 즉 SVR1의 MAC 주소 m1 * Sender IP = ARP Request 패킷 송신자(sender), 즉 SVR1의 IP 주소 1.1.1.10 * Target MAC = 00:00:00:00:00:00임 (SVR1은 이 값을 알고 싶어 하는 것임) * Target IP = ARP Request 패킷 수신자(target), 즉 SVR2의 IP 주소 1.1.1.20 |
2. SVR2 responds with ARP Reply
Header | Fields | |||||||||||||
Ethernet Header
|
* Destination MAC = ARP Reply를 수신할 SVR1의 MAC 주소 m1 * Source MAC = Sender(SVR2)의 MAC 주소 m2 |
|||||||||||||
ARP Header
|
* Sender MAC = ARP Reply 패킷 송신자(sender), 즉 SVR2의 MAC 주소 m2 * Sender IP = ARP Reply 패킷 송신자(sender), 즉 SVR2의 IP 주소 1.1.1.20 * Target MAC = ARP Reply 패킷 수신자(target), 즉 SVR1의 MAC 주소 m1 * Target IP = ARP Reply 패킷 수신자(target), 즉 SVR1의 IP 주소 1.1.1.10 |
3. SVR1 sends IP Packet to SVR2
Header | Fields | |||||||||||||
Ethernet Header
|
* Destination MAC = Receiver(SVR2)의 MAC 주소 m2 * Source MAC = Sender(SVR1)의 MAC 주소 m1 |
|||||||||||||
IP Header
|
* Destination IP = Receiver(SVR2)의 IP 주소 1.1.1.20 * Source IP = Sender(SVR1)의 IP 주소 1.1.1.10 |
한가지 질문이 있는데요, SVR2의 ARP Table에서 SVR1의 lan1의 MAC주소 생성 시점은 언제 인가요? 3번의 SVR2가 SVR1의 ARP Request을 수신한 후, 즉 SVR1에 ARP Reply송신전 인가요?
감사합니다!
SVR2의 ARP Table에 SVR1의 MAC 주소가 생성되는 시점은 본 블로그 설명 이후에 발생합니다.
SVR1에서 SVR2로 Ping Request(ICMP Echo Request)을 보내고, 그 응답으로 SVR2에서 SVR1으로 Ping Reply(ICMP Echo Reply)를 보내는 시나리오를 가지고 설명 드리겠습니다.
■ SVR1(1.1.1.10)에서 Ping 1.1.1.20 수행 (본 블로그 설명 내용)
1. SVR1은 1.1.1.20에 대한 MAC이 없으므로(ARP entry miss), ARP Request를 Broadcasting함
2. 이를 수신한 SVR2는 ARP Reply로 응답
- SVR1이 보낸 ARP Request 패킷에 의해 SVR2가 SVR1의 MAC 주소를 배우지는 않습니다!
3. ARP Reply를 수신한 SVR1은 SVR2의 MAC을 배움 (ARP entry fill)
4. 이제 SVR1에서 SVR2로 Ping Request 전송되고 SVR2가 수신
■ SVR2(1.1.1.20)에서 SVR1으로 Ping 응답 (본 블로그에 설명되지 않은 내용)
5. SVR2가 1.1.1.10으로 Ping Reply를 보내려 하는데, SVR2는 1.1.1.10에 대한 MAC이 없음 (ARP entry miss)
6. 따라서 SVR2는 ARP Request를 Broadcasting 함
7. 이를 수신한 SVR1은 ARP Reply로 응답
8. ARP Reply를 수신한 SVR2는 SVR1의 MAC을 배움 (ARP entry fill)
- 이 시점에 SVR2는 SVR1의 MAC 주소를 배움!!!!
9. 이제 SVR2에서 SVR1으로 Ping Reply 전송
정리하면, ARP entry(IP 주소에 대한 MAC 주소 정보)는 ARP Reply를 수신하면서 생성됩니다.
그렇다면, SVR2에서 SVR1으로 ARP Reply를 송신시에는 어디의 ARP Table을 참조하게 되나요?
아래의 MS페이지에서는 ARP Request 수신후 ARP Table에 ARP를 생성 후 ARP Reply를 송신한다고 나와 있는데 조금 어렵네요.
http://technet.microsoft.com/ko-kr/library/cc758357(v=ws.10)
1. ARP Request/Reply는 "상대방(IP)의 MAC 주소를 알아 오는 프로토콜로, ARP Request/Reply 전송시에 ARP Table은 참조하지 않습니다. 왜냐면 자신의 IP와 MAC 주소는 ARP Table에 포함되어 있지 않거든요.
2. MS 페이지 내용을 보고 혹시나 해서 시험을 해 보았는데요 (Windows XP와 7으로 각각 시험)
MS Windows의 경우, ARP Request 패킷에 포함된 "Sender의 IP와 MAC 주소"를 가지고 ARP Learning을 바로 하네요. (좋은 정보 주셔서 감사합니다.)
즉, 위 설명을 다음과 같이 수정해야 겠습니다. (아래 3번 내용 참조)
■ SVR1(1.1.1.10)에서 Ping 1.1.1.20 수행
1. SVR1은 1.1.1.20에 대한 MAC이 없으므로(ARP entry miss), ARP Request를 Broadcasting함
2. 이를 수신한 SVR2는 ARP Reply로 응답
3. 또한 ARP Request를 수신한 SVR2는 이 패킷에 포함된 Sender(SVR1)의 IP와 MAC을 배워 ARP entry에 추가 (ARP entry fill: IP=1.1.1.10 is at "m1")
4. ARP Reply를 수신한 SVR1은 SVR2의 MAC을 배움 (ARP entry fill: IP=1.1.1.20 at "m2")
5. 이제 SVR1에서 SVR2로 Ping Request 전송되고 SVR2가 수신
■ SVR2(1.1.1.20)에서 SVR1으로 Ping 응답
5. SVR2가 1.1.1.10으로 Ping Reply를 보내려 하는데, SVR2는 1.1.1.10에 대한 MAC이 있음 (위에 2/3번 과정)
6. 따라서 ARP Request 전송 절차 없이, SVR2는 SVR1으로 Ping Reply 전송
그런데요.
이와 같이 단말(Receiver)이 ARP Request 패킷 기반으로 Sender의 MAC과 IP를 자신의 ARP cache에 넣는지는 OS 의존적인 사항 같습니다. (자신은 없지만요...)
그래서 Linux에서도 이와 같이 동작하는지는 확인이 좀 필요할 것 같네요. (손재홍님. 혹시 Linux 동작도 확인이 되시면 공유 부탁드릴께요~) ^^
내용 정리 감사합니다, 리눅스에서의 동작확인 되면 공유하도록 하겠습니다.
항상 감동드릴 수 있는 넷매니아즈가 되도록 노력하겠습니다! ^^*
ARP 동작에 대해 한 가지 문의 드립니다.
HOST A가 HOST B에 대한 mac 정보를 arp cache table에 가지고 있으며, HOST A가 arp cache를 5 분 마다 갱신 한다고 가정합니다.
HOST A 와 HOST B가 24 시간 내내 데이타를 주고 받을 때에도, host A는 host B로 5분 마다 arp request를 보내게 되는지요?
이러한 현상이 있어서 문의 드립니다.
감사합니다.
참고적으로 2가지 말씀드리면.
예전에 외산 장비를 가지고 시험을 해 본 적이 있는데 아래와 같은 특성을 가지고 있습니다.
[벤더 1] Aging time을 20분(1200초)로 설정시, ARP entry의 aging time 값은 +-300초를 랜덤하게 적용하여 최대 1500초에서 최소 900초 중에 aging out이 되도록 합니다. 이를 통해 ARP operation이 특정 시간에 몰리지 않도록 합니다. (even distribution)
[벤더 2] ARP aging time의 3/4에 이르면, ARP request를 보내고 reply가 수신되면 해당 엔트리의 aging out timer 값를 갱신하여 엔트리를 계속 가지고 있을 수 있도록 합니다. (만약 reply가 수신되지 않으면 4/4에 이르러서 aging out됨)
동일 네트워크인지 아닌지 어떻게 구분하는지 궁금하시면 여기를 클릭
이 클릭이 작동을 안해 여쭤봅니다.
그 방식이 어떻게 되나요?
아래 글(Subnet Mask와 Default Gateway)에 설명되어 있습니다.
https://www.netmanias.com/ko/?m=view&id=blog&no=5403
안녕하세요
네트워크 공부하는 초보입니다.
너무나 상세하고 순차적인 설명에 이해가 빠르게 됬습니다. 너무 감사드립니다.
너무나 좋은 글에 감사합니다.
정말 대단히 많은 도움이 되었습니다.
감사합니다. NETMANIA.
감사합니다.! 많이 배우고 갑니다.!
R1은 수신된 ARP Request 패킷의 Target IP 주소를 보고 이 주소가 내 것이 아님을 알고(R1이 소유한 주소는 1.1.1.1과 2.1.1.1) 버립니다. 라고 하셨는데, 만약 스위치에 단말이 여러 개 연결되어 있을 때, ARP Request 패킷을 폐기하기전에 ARP cache table에 기록을 안하나요.? 댓글에는 ARP Request 패킷만으로도 ARP learning을 한다고 하셨는데...
좋은 글 감사합니다.
안녕하세요
네트워크 공부 막 시작한 초보입니다 ㅜㅜ
데이터링크 계층에서 app message가 150bytes, H4,H3이 20bytes, H2가 16bytes, T2가 4 bytes라면 구성된
프레임 크기를 구하라고하면 저거 다 더하면 되는 건가요??
참고로 H4는