데이터를 전송할 때 가장 먼저 routing table을 찾아가서 next 주소를 알아낸다.
routing table을 만들 때 ARP를 사용한다.
Address Mapping
table은 정적일 수도 동적일 수도 있다. physical MAC주소는 하드웨어 회사에서 지정해놓고 logical IP주소의 경우 변경할 수 있다.
ARP는 IP주소를 받아 physical 주소로 반환한다.
Position of ARP in TCP/IP protocol suite
ARP 프로토콜은 IP 주소를 전달하면, physical address(MAC 주소)로 반환한다는 개념이다.
A에서 B로 정보를 전달하는 상황에서 B의 IP주소는 알지만 MAC주소가 필요한 상황이다.
ARP는 request로 같은 네트워크 상 모든 컴퓨터(broadcast)에 찾으려는 IP주소의 MAC주소를 찾는다는 신호를 보낸다.
해당사항이 없는 컴퓨터에서는 request를 무시하고, IP에 해당하는 컴퓨터인 B만 A에게 reply한다.
ARP packet
오른쪽 표는 Operation Code의 값에 따른 동작이다.
- Source Hardware Address : 보내는 하드웨어의 MAC주소
- Source Protocol Address : 보내는 하드웨어의 IP주소
- Destination Hardware Address : 목적지 하드웨어의 MAC주소
- Destination Protocol Address : 목적지 하드웨어의 IP주소
Encapsulation of ARP packet
Data에는 IP Datagram이 들어가므로 이를 IP단에서 처리해야하는지 ARP단에서 처리해야하는지에 대한 정보가 Type에 들어간다.
ARP request는 broadcast로 모든 네트워크 컴퓨터에 전송하고, reply는 특정 컴퓨터에만 unicast로 보낸다.
Four cases using ARP
case 1 : sender와 receiver가 같은 네트워크에 있는 경우, 전송을 위한 MAC주소가 필요하므로 ARP가 사용된다.
case 2 : 다른 네트워크로 넘어가야하는 경우, router의 MAC주소가 필요하므로 ARP가 사용된다.
case 3 : router에서 router로 보내는 경우, MAC주소가 필요하므로 ARP가 사용된다.
case 4 : router에서 receiver로 전송하는 경우, MAC주소가 필요하므로 ARP가 사용된다.
hop-to-hop이 필요한 경우에는 모두 ARP가 사용된다.
example
system A가 system B로 패킷을 전달하는 과정이다.
A에서 B로 ARP request를 보낸다. 위 'Encapsulation of ARP packet'에서 본 것과 같이 type에는 ARP이므로 0806이 들어가고, ARP구조에서 operation code는 ARP request이므로 1으로 설정된다.
Data에는 보내는 IP주소와 MAC 주소가 들어가고, 목적지의 MAC주소는 모르므로 0으로 설정하고 IP주소가 들어간다.
ARP packet의 destination address에는 목적지 MAC주소가 들어가는데, ARP request는 broadcast이므로 모든 bit가 1로 설정된다.
B에서 A로 ARP reply를 보낸다.
ARP reply로 Data의 operation code 2가 설정되고, 보내는 IP / MAC주소와 목적지 IP / MAC주소가 들어간다.
ARP packet의 destination address에 목적지인 A의 MAC주소가, source address에 B의 MAC주소가 들어간다.
A가 B로부터 ARP reply를 받으면 정보에 따라 routing table을 update한다.
ARP Package
위 그림에서 Cache table이 ARP table에 해당한다. 이를 관리하기 위한 세 개의 모듈이 있다.
cache-control module은 주기적으로 cache table을 관리하며 ARP request에 대한 reply가 안온 packet에 대해서 다시 보내는 등의 작업들을 한다.
output module은 IP packet Input을 받고 ARP packet을 request하는 역할을 한다.
output module을 통해 IP packet을 받으면 mapping정보를 cache table에서 찾는다. mapping 정보가 없을 경우 ARP request를 보낸다.
packet은 같은 경로로 여러 개가 들어오므로, 한 번 IP packet에 해당되는 mapping 정보가 table에 없는 경우 request를 하면서 같은 목적지의 IP packet들을 담는 queue를 생성하여 packet을 담는다.
위 표가 cache table이다. state가 R인 경우 MAC주소가 있는 것이고, P인 경우 MAC주소가 없어 request를 보낸 상태인 것이다.
queue에 대기하고 있는 packet의 수가 적혀있고, attempt는 잃어버린 경우 다시보낸 횟수, time-out는 대기하는 시간이다.
ARP request를 보내면 ARP reply를 보내는데 이 역할을 Input module에서 담당한다.
또한 request를 통해 MAC 주소를 알아내었을 때, queue에서 대기하고 있던 packet들을 data link layer로 보내주는 역할을 한다.
cache-control module에서는 attemp의 횟수가 최대 횟수를 초과하였을 때 해당 row를 지우거나, time-out이 0이 되었을 때 row를 지운다.
Pseudo Code
각 module의 Pseudo code 는 다음과 같다.
'개발 · 컴퓨터공학' 카테고리의 다른 글
Learning Unreal 4 언리얼 공부일지 - Log, Debug (0) | 2022.01.17 |
---|---|
Learning Unreal 4 언리얼 공부일지 - UCLASS와 class 내용 변경 (0) | 2022.01.16 |
UNIX - Socket Programming TCP / UDP (0) | 2021.12.03 |
UNIX - Sockets TCP, UDP (0) | 2021.12.02 |
네트워크 프로그래밍 - Link State Routing (0) | 2021.12.01 |