6. The Link Layer and LANs (3)

728x90
반응형

6.4 LANs

IP address는 network layer의 주소이다. 그래서 네트워크 계층에서 포워딩할 때 사용했었다.

link layer 에서는 IP 주소가 아닌 MAC(Media Access Control) address를 사용한다.

MAC 주소는 우리가 지역적으로(locally) 움직일 때, 즉 한 홉에서 한 홉으로 패킷을 넘겨줄 때 사용한다. 즉, LAN에서 목적지와 통신하기 위한 실질적인 주소이다.

MAC 주소는 48 bit로 구성이 된다. 그래서 보통 12개의 hexa 코드로 구성이 된다. hexadecimal(16진수니까 하나당 24=4비트) 코드니까 4*12 = 48 bit

MAC 주소는 네트워크 카드(랜카드)의 ROM에 고유한 MAC 주소가 유니크하게 부여가 된다.

그래서 내 컴퓨터에 랜카드를 꽂고 Local Area Network에 연결이 되면 이 MAC 주소는 내 컴퓨터의 랜카드에 간직되어 진다.

MAC 주소는 유니크해야 한다(충돌나면 안됨;;). 그래서 IEEE에서 이 MAC 주소를 관리한다. 랜카드 제작회사가 IEEE에게 이 MAC 주소를 사온다. 그래서 MAC 주소의 앞에 1~6번째 자리(24 bit)의 번호는 제조사 코드, 뒤의 7~12번째 자리는 디바이스의 고유 번호이다.

그렇다면 IP 주소가 있는데 왜 MAC 주소가 필요할까?

IP 주소가 논리적 주소라면 MAC 주소는 물리적 주소이다.

IP 주소는 집 주소, MAC 주소는 주민등록번호라고 생각하면 이해하기가 편하다. 집 주소는 내가 이사가면 변할 수 있지만(not portable), 주민등록번호는 내가 서울에서 살든 부산에서 살든 인천에서 살든 변하지 않는다(Portability).

그래서 동일한 IP 주소여도 MAC 주소가 다르면 구별할 수 있게 된다.

그렇다면 MAC 주소만 있으면 되는 것 아니냐? 할 수 있는데, 그러면 라우팅 테이블에 너무 많은 정보가 기록되서 라우터가 다운될 수 있다.

그래서 IP 주소와 MAC 주소를 모두 사용하는 것이 효율적이다.

ARP(Address Resolution Protocol, 주소 결정 프로토콜)은 IP 주소를 MAC 주소로 대응시키기 위한 프로토콜이다. 즉, ARP는 IP 주소와 MAC 주소를 일대일 맵핑을 시켜줘서 LAN에서 목적지를 찾아갈 수 있도록 한다. 이 IP 주소와 MAC 주소를 일대일 매핑에서 정리한 테이블을 ARP Table이라고 한다.

ARP Table에는 TTL(Time To Live)이라는 것도 저장을 하는데, TTL이란 이 ARP table에 있는 정보들을 어느 시간동안 저장해 둘 것인지를 나타내는 것이다. 라우팅을 하면 굉장히 많은 패킷이 들어오게 되서 TTL이 없으면 저장해야 하는 데이터량이 엄청나게 늘어나게 된다. 그래서 일정 시간동안 다시 사용되지 않으면 데이터를 지워서 ARP table의 사이즈를 유지한다.

동일한 LAN에 있는 애들끼리 통신할 때, ARP protocol이 어떻게 동작하는지 알아보자.

A라는 노드가 B라는 노드에게 데이터그램을 보내고싶다고 해보자. 하지만 A는 B의 MAC 주소를 모른다.

A는 B가 동일한 LAN에 있으니까 ARP query 패킷을 broadcast 해버린다. 그러면 같은 LAN에 있는 모든 노드들이 이 ARP query 패킷을 받게 되고, 그 중 노드 B가 A에게 자신의 MAC 주소를 응답해준다. 즉, A의 MAC 주소로 frame을 보낸다.

A가 응답을 받으면 B의 IP주소와 MAC 주소 pair를 ARP 테이블에 캐싱을 한다(TTL 때문에 저장이 아니라 캐싱).

그러면 이번에는 다른 LAN에 있는 경우를 봐보자.

다른 LAN에 있을 경우에는 라우터를 이용한다.

A가 B에게 패킷을 보내고 싶은데, B의 MAC 주소를 모른다.

몇 가지 가정을 정하자면, A는 B의 IP 주소를 알고, A는 첫번째 홉 라우터(R)의 IP 주소를 알고, R의 MAC 주소는 안다고 가정하자.

  1. 맨 처음에 datagram에 노드 B의 IP 주소를 저장하고 B의 MAC 주소는 모르니까 R의 MAC 주소로 집어넣고 frame을 만들어서 R에게 보낸다.
  2. 라우터 R은 network layer의 장비이므로 frame의 MAC 주소 정보는 제거하고 datagram을 얻는다. 그리고 destination IP 주소를 확인하고, 라우터 R은 Node B의 MAC 주소를 알고 있으므로, MAC destination address를 넣어서 frame을 만들어서 노드 B에게 전해준다.
  3. 노드 B는 A가 보낸 패킷을 얻는다.

6.4 LANs

이더넷은 유선 LAN 환경에서 표준이되는 네트워크 구성 방식이다.

이더넷은 랜카드에 구현이 되서 나온다.

가장 처음 널리 사용된 LAN 기술로, 간단하고 저렴하며 다양한 속도를 제공한다는 특징이 있다.

이더넷을 구현하는데 90년대까지는 모두 bus 구조로 구현을 했다.

그런데 이 bus 구조는 collision이 일어날 수 있다.

그래서 요즘은 star 구조로 구현된다.(스위치 가격이 옛날보다 저렴해졌다.)

즉, 중앙에 스위치를 두고, 각각의 노드들(spoke)는 서로 분리된 이더넷 프로토콜을 동작시킨다.

star 구조는 collision이 일어나지 않기 때문에 성능이 좋다.

그러면 이더넷을 지원하는 이더넷 스위치를 알아보자.

스위치는 datalink layer의 장비로서 frame을 store하고 forwarding하는 역할을 한다.

들어오는 frame의 MAC address를 확인해서 해당 디바이스가 있는 링크로 보낸다. 그래서 CSMA/CD 프로토콜을 사용해서 포워딩 해준다.

transparent

즉, 스위치의 역할은 블랙박스화 되어있기 때문에 호스트들은 스위치의 존재를 신경쓰지 않아도 된다.

plug-and-play 방식으로 동작하기 때문에 configuration을 할 필요 없다.

스위치는 star 구조를 쓰니까 호스트들과 direct connection을 한다.

스위치는 호스트들이 보낸 패킷들을 버퍼에 넣어두고, 각각의 incoming link에서 서로 다른 이더넷 프로토콜을 사용해서 패킷을 전달해준다.

이때, 스위치가 스케쥴링을 해주기 때문에 동시에 전송을 해도 충돌이 일어나지 않는다.

스위치는 어떻게 frame을 A'으로 보내려면 4번 링크, B'에게 보내려면 5번 링크로 보내면 된다는 것을 알 수 있을까?

각각의 스위치는 switch table을 통해서 각 호스트들의 MAC 주소를 알고있다.(라우팅 테이블이랑 비슷)

스위치는 learning을 한다. 즉, 어떤 호스트에 어떤 interface를 통해서 도달할 수 있는지를 알 수 있다.

스위치에 어떤 frame이 도달하면 그 frame에는 source의 MAC address가 있다. 그러면 스위치는 A의 주소가 1번 링크를 통해 들어오므로 A는 1번 링크를 통해서 도달할 수 있다는 것을 알게된다.

정리를 좀 해보자면

  1. incoming link를 통해 send host의 MAC 주소를 기록한다. 이때, send host의 정보가 switch table에 없으면 기록을 해준다.
  2. A에서 A'으로 보내야되는데 A'의 정보가 없으면 flooding을 한다. 즉, 1번 링크를 제외한 모든 링크로 데이터를 뿌린다.
  3. 그러면 A'은 응답을 해준다. 그러면 스위치는 A'의 MAC address와 interface를 table에 저장한다.
  4. 그 뒤, destination MAC address가 switch table에 있으면 forwarding 즉, selectively send 해준다.

스위치가 여러개가 연결되어있으면 예를 들어, 위 그림에서 호스트 A가 호스트 G에게 데이터를 보내야할 때에는 어떻게 해야할까?

self learning 즉, recursive하게 반복을 통해서 배우게 된다.

스위치 1개 있을 때와 방식은 동일하다.

스위치와 라우터를 정리해보자.

스위치와 라우터 둘 다 store and forward 방식으로 구현이 된다.

그런데 라우터는 network layer의 기기이고, 스위치는 link layer의 기기이다.

둘 다 forwarding table을 가지고 있다.

하지만 라우터는 IP 주소를 기반으로 라우팅 알고리즘을 사용해서 forwarding table을 계산한다.

반면에 스위치는 MAC 주소를 기반으로 flooding과 learning을 사용해서 forwarding table을 학습한다.

Virtual LAN이란 단일 물리적 네트워크를 여러 가상 네트워크로 논리적으로 분할하기 위해 사용하는 기술이다.

같은 그룹에 있는 사람들끼리는 같은 LAN에 속하는 것이 좋다(통신할 일이 많을 테니 오버헤드를 줄이기 위해서).

그런데 예를 들어, 컴퓨터 공학과의 교수님들이 A라는 건물에 있다가 일부 교수님들이 B 건물로 이사를 갔다고 해보자.

그러면 물리적으로 다른 스위치로 연결되기 때문에 통신을 할때마다 interconnection switch를 사용해서 broadcasting을 할 일이 많아지기 때문에 오버헤드가 커지는 문제가 발생한다.

그래서 물리적으로 스위치는 다르더라도 논리적으로 하나의 스위치인 것처럼 사용해서 오버헤드를 줄이거나 혹은 보안을 위해서 물리적으로 같은 스위치더라도 분리해서 서로 다른 스위치인 것처럼 동작하기 위해서 등장한 것이 가상화 LAN이다.

예를 들어, 하나의 스위치에 1~16개의 포트가 있는데 1~8번은 전자공학과 9~16번은 컴퓨터 공학과 그룹으로 나누어서 2개의 스위치인 것처럼 동작시킬 수 있다.

그런데 이 가상화 LAN은 이 스위치가 2개의 별개의 스위치라고 생각한다. 그래서 물리적으로 동일한 스위치이지만 전자공학과의 호스트에서 컴퓨터공학과의 호스트에게 데이터를 전송하려면 라우터를 거쳐서 전송해야 한다.

Traffic Isolation

port-based VLAN에서 동일한 스위치라고 판단된 전자공학과의 1~8번 포트의 frame들은 오직 1~8번 포트로만 도달할 수 있다. 컴퓨터공학과의 9~16번 포트로 갈려면 라우터를 거쳐가야한다.

또한 포트 번호 별로 나눌 수도 있고, endpoint의 MAC 주소를 기반으로도 나눠줄 수 있다.

Dynamic membership

전자공학과였던 2번 포트가 컴퓨터공학과로 assign 해줄 수도 있다.

물리적으로 여러개의 스위치에서 그룹을 만들었을 때에는 어떻게 해야할까?

서로 다른 스위치여도 전자공학과는 전자공학과끼리 컴공과는 컴공과끼리 물리적으로 링크를 걸어줘야 한다.

그래서 trunk port를 만들어서 frame 전송한다.

728x90
반응형