티스토리 뷰
이제부터 스위치가 존재하는 근거리 네트워크 통신은 어떻게 이뤄지는지 알아볼 것이고, ARP 프로토콜이 왜 필요하고 어떻게 동작하는지 알아보겠습니다. 시작하기 앞서 스위치가 왜 필요한지?에 대해서 먼저 생각을 해보겠습니다.
컴퓨터가 통신할 수 있다는 것은 컴퓨터가 연결되어 있다는 의미입니다. 여러대의 컴퓨터를 연결하는 가장 단순한 방법은 무엇일까요? 바로
전부 연결해주면 됩니다.
하지만, 이 접근법은 너무 비용이 크다는 단점이 명확합니다. 연결한 선을 간단한 전선이라고 생각해봅시다. 그러면 100대의 컴퓨터가 서로 통신하고 싶은 상황에서 전선은 N * (N-1) / 2개가 필요합니다.
문제를 개선하기위해 위와같은 접근을 떠올렸습니다. 바로 어떤 허브를 두고, 모든 통신은 허브를 거쳐가도록 만드는 것이에요. 컴퓨터 N대가 서로 통신을 하고 싶다면, 이제 허브와 연결만 하면 됩니다. 전선의 개수도 N개가 되었고 비용적으로 많이 절감할 수 있게 되었습니다.
그림에서 파란색으로 나타낸 미지의 존재가 바로 스위치입니다.
스위치는 네트워크의 물리 계층과 네트워크 계층 사이에서 패킷을 전달하는 역할을 하고, 근거리 네트워크에서 사용되는 하드웨어입니다.
물리 계층과 네트워크 계층 사이에 존재하기 때문에 스위치를 링크 계층 장치라고 볼 수 있습니다. 따라서 스위치는 네트워크 계층의 '데이터그램'이 아닌 링크 계층 '프레임'을 교환합니다. 또한 프레임을 전달하기 위해 네트워크 계층 주소인 IP 주소를 사용하지 않고 링크 계층의 주소를 사용합니다.
MAC 주소
방금 위에서 처음 보는 내용이 등장했는데요, '링크 계층 주소'라는 용어입니다.
호스트와 라우터들은 모두 네트워크 계층 주소를 가지는데요, 링크 계층 주소도 모두 가집니다.
여기서 조금 더 정확히 개념을 잡기 위해 이전 포스팅에서 봤던 그림을 다시 가져왔습니다. 위에서 언급했던 호스트가 링크 계층 주소를 가진다는 것은 호스트나 라우터의 '네트워크 어댑터'가 주소를 가진다를 말합니다.
따라서 만약 하나의 호스트가 다수의 네트워크 인터페이스 카드를 가진다면 여러개의 링크 계층 주소를 가질 수 있습니다.
또 특이한 점은 링크 계층에 속하는 스위치가 링크 계층 주소를 할당받지 않는다는 점입니다. 스위치는 호스트와 라우터 간에 패킷을 전달하는 아주 단순한 일만 하기 때문에 굳이 링크 계층 주소를 가질 필요가 없습니다.
링크 계층 주소는 '랜주소', '물리 주소', 'MAC 주소' 등으로 불리는데, 이제부터 가장 일반적인 MAC주소로 링크 계층 주소를 부르겠습니다.
MAC 주소는 길이가 6바이트이기 때문에 2^48개 만큼의 사용 가능한 랜 주소가 있습니다.
MAC 주소는 위의 그림과 같이 16진수 표기법으로 표시되며, 주소의 각 바이트는 2개의 16진수로 표시됩니다. 또한 MAC 주소는 원래 영구적이도록 설계되었으나, 이제는 소프트웨어를 사용해서 변경할 수도 있습니다.
MAC 주소의 가장 흥미로운 특징 중의 하나는 어떤 어댑터도 동일한 주소를 갖지 않는다는 것입니다. 또한 IP 주소는 계층구조(네트워크 부분 + 호스트 부분)으로 이루어진 반면 MAC 주소는 평면 구조를 가지며 어댑터의 위치에 따라 변경되지 않습니다. 다시말해 이더넷 카드가 있는 휴대용 컴퓨터는 어디에 있던지 항상 동일한 MAC 주소를 가집니다.
어댑터가 프레임을 목적지 어댑터로 전송할 때, 송신 어댑터는 프레임에 목적지 어댑터의 MAC 주소를 넣고 그 프레임을 랜상으로 전송합니다. 프레임을 수신한 어댑터는 프레임 안의 목적지 MAC 주소가 자신의 MAC 주소와 일치하는지를 검사합니다. 만약 일치하면 어댑터는 프레임에 포함된 데이터그램을 추출하고, 그 데이터그램을 프로토콜 스택의 위쪽으로 전달합니다.
때때로 어떤 송신 어댑터는 랜상의 다른 모든 어댑터가 자신이 전송한 프레임을 수신하고 처리하기를 원합니다. 이 경우에 송신 어댑터는 프레임의 목적지 주소 필드에 특수한 'MAC 브로드캐스트 주소' 'FF-FF-FF-FF-FF-FF'를 넣기도 합니다.
호스트는 왜? IP 주소와 MAC 주소를 가질까?
호스트와 라우터가 네트워크 계층 주소뿐만 아니라 MAC 주소를 가지는 것에는 몇가지 이유가 있습니다.
- 랜은 IP와 인터넷만을 위해서가 아니라 임의의 네트워크 계층 프로토콜들을 위해 설계되었습니다. 따라서 어댑터에 네트워크 계층 입장에서 중립적인 MAC 주소가 아닌 IP 주소를 할당했다면 어댑터는 다른 네트워크 계층 프로토콜을 쉽게 지원할 수 없었을 것입니다.
- 어댑터가 MAC 주소가 아닌 네트워크 계층 주소를 사용했다면, 네트워크 계층 주소를 어댑터 RAM에 저장하고, 어댑터를 이동할 때마다 재구성 했을것입니다.
한줄로 요약하면 네트워크 구조에서 계층이 독립적인 구성 요소가 되도록 하기 위해서 각 계층은 자신만의 주소 기법을 가져야만 했습니다.
ARP(Address Resolution Protocol)
ARP는 동일한서브넷상에 있는 호스트나 라우터의 네트워크 계층 주소와 링크 계층 주소를 상호간에 변환하는 프로토콜입니다.
그렇다면 왜? 네트워크 계층 주소와 링크 계층 주소간에 변환이 필요할까요? 아래의 그림을 보겠습니다.
이 그림은 아주 간단한 네트워크를 보여주는데요, 각 호스트와 라우터는 하나의 IP 주소와 하나의 MAC 주소를 가지고 있습니다.
이 그림을 보면서 IP 주소 222.222.222.220을 가진 호스트가 호스트 222.222.222.222로 IP 데이터그램을 전송하려고 한다고 가정해봅시다. 이 둘은 현재 출발지와 목적지 노드가 동일한 서브넷에 있습니다. 따라서 데이터그램을 전송하기 위해 출발지 노드는 반드시 어댑터에게 목적지 222.222.222.222의 MAC 주소도 줘야 합니다.
그러면 여기서 중요한 문제가 있습니다. '송신 호스트가 어떻게 222.222.222.222를 가진 목적지 호스트의 MAC 주소를 결정할 수 있는가?'입니다. 그리고 이것은 ARP를 이용해 가능해집니다.
송신 호스트의 ARP 모듈은 입력값으로서 동일한 랜상의 임의의 IP 주소에 대해 대응되는 MAC 주소를 돌려줍니다. 즉 위의 그림에서 IP 주소 222.222.222.220를 가진 송신 호스트가 자신의 ARP 모듈에게 IP 주소 222.222.222.222를 주면 MAC 주소 49-BD-D2-C7-56-2A를 얻을 수 있습니다.
따라서 ARP는 IP 주소를 MAC 주소로 변환해준다는 사실을 알게 되었습니다. 뭔가 ARP는 호스트 네임을 IP 주소로 변환해주는 DNS와 비슷해보입니다. 하지만 같지 않습니다. ARP가 DNS와 다른 가장 큰 특징은 DNS는 인터넷의 임의의 장소에 있는 호스트 네임을 해결하는 반면, ARP는 동일한 서브넷상에 있는 호스트나 라우터 인터페이스의 IP 주소만을 해결한다는 것입니다.
ARP가 어떤 것인지 살펴봤으니 이제 ARP가 어떻게 동작하는지 알아봅시다. 각 호스트와 라우터는 자신의 메모리에 아래와 같은 'ARP 테이블'을 가지고 있습니다.
이 ARP 테이블은 호스트 222.222.222.220의 테이블을 임시로 나타낸 것인데, IP 주소와 MAC 주소 간의 매핑 정보를 포함합니다.
또한 ARP 테이블은 테이블에서 각 매핑이 언제 삭제될지를 나타내는 TTL 값을 포함합니다.
중요한 것은 이 테이블에 서브넷상의 모든 호스트와 라우터에 대한 엔트리를 가지고 있지 않아도 된다는 것입니다. TTL만 봐도 이를 생각해볼 수 있는데 TTL이 만료되면 IP와 MAC 주소에 대한 매핑이 사라질 수도 있습니다.
목적지 IP 주소에 대한 MAC 주소가 ARP 테이블에 없다면, 어떻게 해야 할까요? 이 경우에 송신 노드는 목적지 노드의 MAC 주소를 얻기 위해 ARP 프로토콜을 사용합니다. ARP 프로토콜을 사용하기 앞서 송신 노드는 'ARP 패킷'이라는 특수 패킷을 구성합니다.
ARP 패킷은 송신 및 수신 노드의 IP 주소와 MAC 주소를 포함하는 필드들을 가지고 있으며, ARP 질의 패킷의 목적은 IP 주소에 대응되는 MAC 주소를 결정하기 위해 서브넷의 다른 모든 호스트와 라우터들에게 질의하는 것입니다.
다시 이 그림으로 돌아와서 222.222.222.220이 송신 노드라고 가정하겠습니다. 현재 Host 1의 ARP 테이블에는 아무런 값도 매핑하고 있지 않다고 가정하겠습니다.
Host 1은 Host 3의 MAC 주소를 알고 싶습니다. 그래서 Host 3의 IP 주소를 ARP 질의 패킷에 넣고 MAC 주소는 브로드캐스트 주소인 FF-FF-FF-FF-FF-FF으로 설정해 서브넷으로 전송합니다.
ARP 질의 패킷의 목적지 MAC 주소가 브로드캐스트 주소이기 때문에 각 어댑터는 프레임에 들어있는 ARP 패킷을 자신의 ARP 모듈로 전달합니다. ARP 모듈은 자신의 IP 주소가 ARP 패킷에 들어 있는 목적지 IP 주소와 일치하는지 검사합니다.
Host 3를 제외하고 ARP 모듈은 IP 주소가 일치하지 않아 ARP 질의 패킷을 버립니다. Host 3는 자신에게 온 ARP 패킷이라는 것을 눈치채고 응답 ARP 패킷을 질의한 노드로 돌려보냅니다.
이것이 가능한 이유는 그림에는 나와있지 않지만, ARP 질의 패킷의 송신 노드에 Host 1이 자신의 MAC 주소와 IP 주소를 함께 넣기 때문입니다.
이제 Host 1은 Host 3의 MAC 주소를 알게 되었고, 응답 패킷에 들어있는 정보를 이용해 자신의 ARP 테이블을 갱신합니다.
이렇게 ARP 프로토콜이 동작하는 방식을 이해하게 되었습니다. ARP 프로토콜을 관찰해보면 아래와 같은 2가지 흥미로운점을 발견할 수 있습니다.
- 질의 ARP 메시지는 브로드캐스트 프레임으로 전송되는 반면, 응답 ARP 메시지는 표준 프레임으로 전송된다는 점입니다. 이것이 어떻게 가능할까요? 정답은 방금 위에서 언급했습니다.
- ARP 프로토콜은 플러그 앤 플레이라는 점입니다. 즉, 노드의 ARP 테이블은 사람이 관여하지 않아도 자동으로 구성된다는 점입니다.
여기서 또 한가지 의문이 있습니다. ARP는 링크 계층 프로토콜일까요? 네트워크 계층 프로토콜일까요?
위에서 살펴본 것처럼 ARP 패킷은 링크 계층 프레임에 캡슐화됩니다. 따라서 구조적으로는 링크 계층보다 위에 있다는 것을 알 수 있습니다. 하지만, 링크 계층 주소를 포함하는 필드가 있기에 링크 계층 프로토콜로 볼 수도 있습니다. 같은 이유라면 네트워크 계층 주소를 포함하는 필드도 있기 때문에 네트워크 계층 프로토콜로 볼 수도 있죠.
따라서 'ARP는 링크 계층과 네트워크 계층의 경계에 있는 프로토콜이다'라고 말하는게 타당합니다.
지금까지 호스트가 '같은 서브넷'에 있는 다른 호스트로 데이터그램을 전송하려고 할때 ARP가 어떻게 동작하는지 확실히 이해하게 되었습니다. 마지막으로 어떤 서브넷에 있는 호스트가 그 서브넷에 없는 호스트에게 네트워크 계층 데이터그램을 전송하려는 더 복잡한 상황을 해결해보고 글을 마무리 짓도록 하겠습니다.
위의 그림은 라우터에 의해 서로 연결된 2개의 서브넷으로 구성된 단순한 네트워크를 보여줍니다.
위의 그림에도 몇가지 흥미로운 것들이 보이는데요, 각 호스트는 정확히 하나의 IP 주소와 하나의 어댑터를 가지고 있습니다. 그러나 라우터는 2개의 인터페이스를 가진것을 볼 수 있고, 인터페이스당 1개의 IP, 어댑터를 가집니다.
다시말해 그림에서 라우터는 2개의 IP 주소와 2개의 MAC 주소를 가지는 것을 볼 수 있습니다.
또한 서브넷 1은 네트워크 주소 111.111.111/24를 가지며, 서브넷 2는 네트워크 주소 222.222.222/24를 가지는 것에 주목해야 합니다.
서브넷 1의 호스트 111.111.111.111이 데이터그램을 서브넷 2의 호스트 222.222.222.223으로 전송하고 싶다고 합시다. 그러면 어떻게 해야할까요?
먼저 송신 호스트는 데이터그램을 자신의 어댑터로 전송할 것입니다. 하지만 수신 호스트의 MAC 주소도 전달해야 하지요.
여기서 Host 5의 CC-49-DE-D0-AB-7D를 목적지지 호스트의 MAC 주소로 넣는 것이 타당해 보입니다. 어떻게 알았다고 치고, 한번 보내봅시다.
패킷을 보냈습니다. 그리고 이 패킷은 이제 유실됩니다.
그림을 해석해보면 목적지 MAC 주소와 일치하는 인터페이스가 서브넷 1에는 존재하지 않습니다. 따라서 서브넷 1의 어떤 어댑터도 IP 데이터그램을 자신의 네트워크 계층으로 전달하지 않습니다. 따라서 패킷은 유실됩니다.
패킷을 잃어버리기는 싫으니깐, 그림을 조금 더 관찰해봅시다. 그리고 Host 1 -> Host 5로 전달되기 위해서는 Router로 Host 1의 패킷이 전달되는게 타당해보입니다.
그래서 같은 서브넷에 있는 Router의 MAC 주소를 도착지 MAC 주소로 설정하고 다시 보내봅시다.
물론 Host 1 입장에서 Router 1의 MAC 주소는 ARP 프로토콜로 획득할 수 있습니다. 위에서 설명했던 과정이고 글이 더더욱 길어지므로 Host 1의 ARP 테이블에 Router 의 인터페이스 MAC 주소를 알고 있다고 생각하고 넘어가겠습니다.
라우터는 이 프레임이 자신을 가리키는 것을 보고 데이터그램을 꺼내 네트워크 계층으로 전달합니다. 이제 데이터그램을 출발지 호스트에서 라우터까지 성공적으로 전송했습니다.
그러나 여전히 라우터부터 목적지 까지 전달해야 합니다. 라우터는 데이터그램을 열고 도착지 IP 주소를 확인합니다. 그리고 여기서 포워딩 테이블을 참조해 적절한 인터페이스를 결정할 수 있습니다.
라우터는 포워딩 테이블을 참조해 데이터그램을 라우터 인터페이스 222.222.222.220을 거쳐서 전달하게 됩니다. 222.222.222.220 인터페이스는 데이터그램을 자신의 어댑터로 전달하고, 어댑터는 데이터그램을 새 프레임에 캡슐화하여 서브넷 2로 전송하게 됩니다.
당연하게도 목적지 프레임의 MAC 주소는 Host 5의 MAC 주소로 설정합니다. 이 정보 역시 라우터의 222.222.222.220 인터페이스가 ARP 프로토콜을 통해 얻을 수 있습니다.
이제 Host 1이 보낸 패킷이 Host 5에 도착하게 되었습니다. 서로 다른 서브넷에 있는다해도 통신에 성공한 것이죠.
여기까지 ARP 프로토콜에 대해 알아봤습니다. 한땀한땀 그림을 그리는게 쉽지가 않네요 ㅎㅎ;; 잘못된 내용이 있다면 지적 및 피드백 부탁드립니다.
Ref : 컴퓨터 네트워킹 하향식 접근 7판
'CS > Network' 카테고리의 다른 글
[Network] 인터넷 네트워크 (2) | 2022.12.05 |
---|---|
[Network] 링크 계층과 다중 접속 프로토콜 (0) | 2022.10.13 |
- Total
- Today
- Yesterday
- paging
- go
- fiber
- spring
- OS
- Database
- algorithm
- network
- Effective Java
- 공지
- GORM
- effective
- ARP
- Operating System
- cs
- soft delete
- java
- mmu
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |