Hardware | Protocol | |
---|---|---|
MAC | IP | |
Type | 1 | 0x0800 |
Len | 0x08 | 0x06 |
Mac주소가 필요하다는 것은 Data Link Layer이므로 Frame 형태로 APR Packet을 전송한다.
ARP_Output_Module(){
IP Packet이 도착하면 그 IP주소에 해당하는 데이터가 CACHE TABLE에 있는지 확인한다.
if(존재하는 경우){
if(상태가 R인 경우){
data-link layer에게 ARP packet(IP PACKET + MAC주소)을 전송한다.
}
if(상태가 P인 경우){
packet을 queue에 삽입한다.
}
}
if (존재하지 않는 경우){
cache entry를 만들고 상태를 PENDING으로 설정하고 attempt를 1 증가시키낟.
queue를 생성한다.
queue에 packet을 삽입한다.
ARP Request를 전송한다.
}
ARP_Input_Module(){
ART Packet이 도착하면 해당 데이터가 존재하는지 cache table을 확인한다.
if(존재하는 경우){
if(상태가 P인 경우){
while(queue가 채워지면){
packet을 queue에서 제거한다.
packet은 pacekt과 MAC주소를 보낸다.
}
}
if(존재하지 않는 경우){
entry를 생성한다.
entry를 table에 추가한다.
{
if(packet이 request인 경우){
ARP reply를 전송한다.
}
}
주기적으로 table을 관리하고 오래 사용되지 않은 entry는 제거하고, request 전송 후 reply가 없으면 다시 request를 전송한다.
ARP_Cache_Control_Module(){
timer동작시 시작
{
if(state free){ continue {
if(state Pending){
attempt하나 늘리고
if(시도가 최댓값과 같아지면){
free로 바꾸고 queue 없앰
}
else{
ARP Request 보냄
}
if(state Resolved){
time-out 감소
if(time-out값이 0보다 작으면){
free로 바꾸고 queue 없앰
}
}
}
}