발단
얼마 전에 서버의 고장난 NIC을 교체했었습니다. 그러면 당연히 해당 IPv4/6 주소에 대한 MAC 주소도 새로 설치한 NIC의 MAC 주소로 바뀌므로 다른 서버들은 자연스럽게 해당 서버의 MAC 주소를 알기 전까지는 통신할 수 없게 됩니다. 여기에 더해 L2 스위치의 Port Security 설정과 다른 호스트들의 운영체제도 고려해야 합니다.
그래서 오늘은 다시 통신이 가능해지기까지 걸리는 시간과 그 과정에 대해 정리해 보았습니다.
Unsolicited Neighbor Advertisement(Gratuitous ARP Request)가 가능한 경우
➡️ 수 초 이내에 통신이 가능합니다.
- 자신의 NIC에 변경사항이 생김을 인식한 OS가 NA 혹은 GARP를 보냅니다. 전자는 멀티캐스트(All-nodes address), 후자는 브로드캐스트입니다. OS가 스스로 NA를 보내지 않는 경우에는 써드파티 앱을 사용하거나 IP 주소를 임시로 변경하는 등의 트릭이 필요합니다.
- 중간에 위치한 L2 스위치가 프레임을 수신하면서 해당 포트의 새 MAC 주소를 학습합니다.
- NA 혹은 GARP를 수신한 다른 서버들이 각각 자신의 캐시를 업데이트합니다.
- 만약 NA나 GARP를 제대로 처리하지 않는 호스트가 있으면 찾아서 캐시를 지워주어야 합니다.
Unsolicited Neighbor Advertisement(Gratuitous ARP Request)가 불가능한 경우
➡️ 1분 정도의 시간이 소요됩니다.
- 우선 다른 서버들의 OS가 Windows 서버인 경우, Neighbor Cache(ARP Cache)에 학습된 주소를 사용해서 15초에서 45초 사이의 임의의 시간(Reachable Time)동안 기존의 MAC 주소로 통신을 시도하게 됩니다. 리눅스인 경우 기본값이 60초입니다. 이 시간을 보내고 해당 캐시 정보가 만료되면 다시 Neighbor Solicitation(ARP Request)를 보냅니다.
- 이를 수신한 L2 스위치는 멀티캐스트 혹은 브로드캐스트합니다.
- 이를 수신한 문제의 서버가 이에 Neighbor Advertisement(ARP Response)로 응답합니다.
- 이를 수신한 L2 스위치는 새 MAC 주소를 학습합니다.
- NA를 수신한 서버들이 각각 자신의 캐시를 업데이트합니다.