지금까지 한 번에 여러 기기가 데이터를 보낼 때 충돌을 감지하고 충돌에 대처하는 방법을 배웠다. 이러한 데이터를 보낼 때 패킷 헤더에 destination, source 주소를 넣어 보내는데, link layer에서는 어떻게 이를 처리하는지 알아보자.
Addressing, ARP
모든 기기는 IP 주소와 MAC 주소를 가진다. IP 주소는 네트워크에 들어갈 때 부여 받는 주소이지만 MAC 주소는 기기가 만들어질 때부터 공장에서 번호를 찍어 나오는 주소이다. 학년이 올라갈 때마다 반, 번호가 바뀌는 것처럼 IP 주소도 같은 원리이고, MAC 주소는 사람의 주민등록번호처럼 영원히 바뀌지 않는 주소라고 생각하면 된다. IP 주소는 32비트 주소 체계를 가지고 있고, MAC 주소는 48비트 주소 체계를 가진다. 보통 NIC의 ROM에 MAC 주소가 기입되어 있다.
그렇다면, 같은 네트워크에 연결되어 있는 기기로 어떻게 패킷을 전송할 수 있을까? MAC과 IP 주소를 알아야 전송할 수 있다. ARP(Address Resolution Protocol)은 IP 주소와 MAC 주소를 매핑하는 프로토콜이다. ARP 테이블에 IP 주소와 MAC 주소를 매핑시켜서 IP 주소를 보내면 MAC 주소를 반환해준다. ARP 과정을 자세히 살펴보자.
A가 B에게 데이터그램을 전송하는 상황이다. A의 ARP 테이블에 B에 대한 정보가 없기 때문에 A는 B의 IP 주소를 포함해서 ARP 요청을 broadcast한다. 그래서 Destination MAC 주소는 FF-FF-FF-FF-FF-FF로 설정되어 LAN에 있는 모든 노드들은 ARP 요청을 받게 된다. B에서는 본인에게 해당되는 메세지이기 때문에 자신의 MAC 주소를 담아서 A로 전송하고 A는 ARP 테이블을 만든다.
그렇다면, 같은 네트워크 상에 존재하지 않는다면 어떻게 패킷을 전송할까? 서로 다른 네트워크에 존재하는 A가 B에게 데이터그램을 전송하고자 한다. 먼저, 네트워크 주소(prefix)를 보고 같은 망인지 확인한다. 만약 같은 망이라면 frame을 직접 만들어 전송한다. 같은 망이 아니라면 A가 라우터의 MAC 주소를 알고 있다고 가정했을 때, A에서는 해당 라우터의 MAC 주소를 목적지 주소로 전송한다. 라우터에 도착한 패킷은 네트워크 계층으로 넘어가서 destination IP 주소를 보고 다시 encapsulate한다. source 주소는 라우터의 MAC 주소, destination 주소는 B의 MAC 주소로 설정하여 전송한다. 이를 통해 알 수 있는 점은 ARP 프로토콜은 같은 네트워크 상에서만 동작한다는 것이다.
Proxy ARP라는 기능이 있다. 라우터는 접근 가능한 네트워크의 ARP라면 ARP Response로 자신의 MAC 주소를 알려준다. 만약에 A에서 B로 패킷을 전송하려는데, gateway를 잘못 보낸 경우라면 어떻게 해야 할까? 그러더라도 정상적으로 동작한다. 그 이유는 라우터에서 자신의 IP 주소가 아니지만 자신이 도달할 수 있는 곳이라 판단하고 자신의 MAC 주소를 전달한다. 만약에 해당 네트워크에 있는 기기가 다른 네트워크로 이동하면, 외부에서는 다른 네트워크로 이동했는지 모르고 이동하기 전의 네트워크로 패킷을 보낼 것이다. 원래 연결되어 있던 라우터는 이동한 기기가 어느 네트워크로 이동했는지 알기 때문에 Proxy ARP를 통해 이동한 네트워크로 패킷을 전달한다. Proxy는 '대신하다'는 뜻이 있는데, 라우터가 대신 패킷을 전달해주겠다는 프로토콜이라고 이해하면 된다.
RARP(Reverse Address Resolution Protocol)는 ARP와 반대로, MAC 주소를 보고 IP 주소를 알려주는 프로토콜이다. 컴퓨터를 껐다 켜면 IP가 세팅되어 있는 것을 자동으로 읽어온다. IP 정보는 하드디스크에 저장되어 있는데, 컴퓨터에 하드디스크가 없다면 IP 정보를 얻을 수가 없다. 그래서 서버에 MAC 주소를 전달하고 IP 주소를 얻어온다.
GARP(Gratuitous Address Resolution Protocol)은 장비가 ARP Broadcast를 통해 다른 장비에게 네트워크에 있는 자신의 존재를 알리는 목적으로 사용한다. 이 장비에 대한 엔트리를 가지고 있는 장비는 자신의 ARP 테이블을 갱신하여 이 장비의 엔트리가 만료 되지 않도록 한다. 즉, 자신의 정보를 네트워크 상의 다른 장비들에게 알려 ARP 테이블을 갱신하도록 한다. GARP를 수신한 네트워크 상의 다른 장비들은 송신자 정보가 자신의 캐시에 이미 존재하는 경우, 그 엔트리에 대한 타이머를 초기화하거나 새로운 하드웨어 주소로 수정한다. 위에서 원래 있던 네트워크에서 새로운 네트워크로 이동하면 원래 네크워크로 들어오는 패킷을 Proxy ARP를 통해서 이동한 새 네트워크에 패킷을 전달한다고 했다. 그렇다면 다시 원래 네트워크로 돌아오면 GARP를 통해서 ARP 테이블을 업데이트 하도록 한다.
또한 GARP를 통해서 충돌 감지도 할 수 있다. 어떤 시스템에서 GARP Broadcast에 응답 하면, 그 시스템은 송신자 시스템과 같은 IP 주소를 사용하고 있다는 것을 뜻한다. 이런 경우에 두 시스템은 충돌이 발생한 것을 인지하고 다른 호스트에서 로컬 호스트의 IP 주소를 사용하고 있다는 경고 메시지를 표시할 수도 있다.
'CS > 네트워크' 카테고리의 다른 글
[컴퓨터망] 6. Link Layer(LANs: Switch, VLANs) (1) | 2024.06.13 |
---|---|
[컴퓨터망] 6. Link Layer(LANs:Ethernet) (0) | 2024.06.13 |
[컴퓨터망] 6. Link Layer(MAC) (0) | 2024.06.12 |
[컴퓨터망] 6. Link Layer(링크 레이어 서비스, 에러 탐지와 정정) (0) | 2024.06.11 |
[컴퓨터망] 5. Network Layer(ICMP, Network Management) (0) | 2024.06.08 |