지난 강의까지 네트워크 레이어를 다루었다. 이번시간부터는 링크레이어를 다룬다.
여러 클라이언트가 게이트웨이 라우터에 함께 진입한다. 이때 네트워크 계층에서 패킷을 보내면 도식화된 그래프처럼 한 줄로 쭉 연결되서 가는 것이 아닌 여러 컴퓨터들이 네트워 계층에 물려 진행된다. 이때 서로 다른 클라끼리 collision이 발생하여 신호가 섞일 수 있다. Link 레이어는 클라끼리 충돌발생을 막는 역할을한다 혹은 충돌이 발생했을 때 문제를 해결한다. 이러한 일이 링크레이가 맡는 가장 주요한 일이다.
트랜스포트레이어와 네트워크레이어는 OS내부에 코드로 구현되어 있다. 링크레이어부터는 하드웨어 단으로 가는데 바로 Network Interface Card(NIC) 에 위치하고 있다. 링크레이어는 프레임을 내려보낸다. 당연히 프레임의 데이터에는 IP를 넣는다.
엄마아빠누나나 이렇게 저녁식사를 하면서 4명이 동시에 말을 한다면 누가 무얼 말하는지 알기 어려울 것이다. 따라서 이러한 소리를 교통정리를 해줄필요가 있다. 일상생활에서 대화의 규칙처럼 link 계층에서 gateway protocol로 진입할 때 규칙이 바로 MAC(Medium Access Control) 프로토콜이다. 이러한 맥 프로토콜의 예시로는 wifi, 3g, lte (무선), 이더넷(유선) 등이 있다. 링크 레이어에서 말하는 프로토콜은 모두 맥 프로토콜이라고 할 수 있다. 쉽게 생각하면 맥프로토콜은 충돌에 대한 해결책이라고 볼 수 있다.
한 노드가 R(bandwidth) 만큼 쓸 수 있으면 M 개의 노드가 데이터를 보냈을 때 평균적으로 R/M (bandwidth) 씩 사용하는 것이 이상적인 맥 프로토콜일 것이다. 또한 중앙관리가 아닌 분산화되면서 단순한 프로토콜이 가장 이상적인 맥 프로토콜일 것이다. 이러한 이상적인 맥 프로토콜 환경을 위해 수많은 제안이 있었는데 그중 세가지를 알아보자 - channel partitioning / random access / taking turns
channel partitioning의 대표적인 예로는 Time Division Multiple Access (TDMA)가 있다. 기본적인 원리는 시간을 쪼개서 교통정리를 하는 것이다. 각 클라에게 time slot을 assign 함으로서 gateway router로 가는길을 교통정리를 한다. 또 다른 예시로는 Frequency division multople access (FDMA) 가 있다. TDMA에서는 시간을 배정했다면 FDMA는 주파수를 배정한다
Random Access Protocol 은 MAC 프로토콜의 3종류 중 하나로 gateway router 로 가는도중 데이터끼리 충돌을 어떻게 탐지할 것이며 충돌이 났을 때 어떻게 대처할지에 관한 프로토콜이다. RAP의 대표적인 예시는 ALOHA(최초 but 문제많음)와 CSMA(보완해서 나옴)가 있다. 알로하는 이름부터 드러나듯이 하와이 대학에서 만든 프로토콜로 작은작은 섬들로 이루어진 하와이 특성상 섬끼리는 유선통신이 힘들기 때문에 무선 연결을 하면서 충돌이 난걸 해결하기 위해 만든 프로토콜이다.
CSMA의 핵심은 일단 말하는 걸 듣고 나서 끝나면 프레임(링크레이어 전송단위)을 쏘고 그 다음걸 듣는 방식이다. CSMA 충돌은 만약 두 노드가 조용하다고 생각해서 두 개 모두 Carrier sense 했다가 나타나는 문제이다. 이후에 이걸 깨닫게 되면 특정시간동안 통신을 멈춘다. 이러한 충돌의 핵심은 propagation delay(빛의 속도로 링크 길이를 나눈 값) 때문이다. delay시간 안에 시간차를 두고 프레임이 오면 이러한 충돌이 발생한다.(생각해보면 당연한게 둘이 거의 동시에 말했는데 음속 범위 안이라면 귀에 동시에 말이 박혀 충돌이 생길 것이다.) 따라서 이를 해결하는 방법도 propagation delay를 제거하면 되지만 이건 빛의 속도라 불가능한 부분..이다.차선책으로 잠깐 통신을 멈췄다가 다시 통신을 시도한다. → CSMA를 개선한 CSMA/CD 방식. 이렇게 충돌이 나서 잠깐 멈추는 시간을 exponential back off 라고 한다. 이 방식에 의해 사람들이 몰리면 몰릴수록 back off 시간이 느려진다.
그렇다면 지금까지 나온 두개 맥 프로토콜, channel partitioning 과 random access 는 각각 언제 사용하는 것이 좋을까?
- channel partitioning → 사람이 많으면 많을 수록 유리하다. 대신 사람이 적으면 효율이 떨어진다
- random access → 사람이 적으면 효율적이나 사람이 많으면 Back up이 길어지고 비효율적이다
이 두 개의 절충안으로 내놓은 방법이 바로 마지막 Taking turns 프로토콜이다.
Taking turn 프로토콜은 두가지 방법으로 진행된다 - Polling, Token Passing
- Polling: 방식에서는 마스터 컨트롤러(중앙 집중식 컨트롤러)가 존재하여 네트워크의 모든 통신을 관리한다. 이 컨트롤러는 네트워크 상의 각 장치에 차례대로 "통신할 차례"를 주어, 그 순간에만 해당 장치가 데이터를 전송할 수 있도록 한다. 하지만 master 가 다운되면 모두가 골로가는 단점이 있다.
- Token Passing: 특정한 "토큰"이라는 데이터 구조가 네트워크를 순환한다. 이 토큰을 받은 장치만이 데이터를 전송할 권리를 가지며, 전송이 끝나면 토큰을 다음 장치에게 전달한다. 하지만 어디 한 컴퓨터에서 토큰을 잃어버리면 다같이 골로간다.
따라서 single failure가 매우 치명적인 결과를 가져오기 때문에 잘 사용하지 않는다.
앞서 한정적인 IP주소를 활용하기 위해 Layer Violation 에도 불구하고 서브넷으로 돌려막기(하나의 IP주소를 가지고 여러개 세분화된 주소로 나눔) 를 한다고 했다. 서브넷 안의 호스트들은 같은 네트워크 prefix를 가지고 라우터를 거치지 않으면서 자기네들끼리 정보교환이 가능하다. 이러한 호스트들의 집합을 LAN(Local Area Network) 이라고 한다. (서브넷은 네트워크를 더 작은 논리적 부분으로 나누기 위한 방법, LAN은 이러한 서브넷들이 모여서 이루어진 더 큰 네트워크일 수 있으며, 지리적으로 가까운 범위 내에서 장치들을 연결한 로컬 네트워크를 의미)
Ethernet 은 Lan에서 데이터를 전송하는데 사용하는 기술로 서브넷 안의 호스트들이 서로 통신할 수 있는 역할을 수행한다. 이더넷은 링크레이어에 있기 때문에 MAC프로토콜(CSMA/CD)을 따르며 데이터를 Frame 단위로 전송하며 호스트들이 라우터없이도 데이터를 송수신한다. (기억할 것은 이더넷은 MAC주소로 호스트를 식별한다는 것)
IP주소와 MAC주소가 헷갈릴 수 있으니 다시 들여다보자. 맥주소는 링크 레이어에서 ip주소는 네트워크 레이어에서 사용된다. 맥주소는 한번 정해지면 다시는 바꾸지 못하지만 ip주소는 바꿀 수 있다. 즉 맥주소는 공장에서 찍히면 그 번호로 평생간다. 맥의 Scope는 로컬네트워크이다. 같은 네트워크에서 컴퓨터가 패킷을 보낼 때 디바이스의 맥주소를 활용한다. ip주소의 Scope는 지역적으로도, 글로벌하게도 사용될 수 있다. 네트워크와 네트워크 간의 통신에서도 ip주소를 활용할 수 있다(mac주소는 디바이스 고유 주소라 불가)
IP주소를 통해 데이터가 들어와서 맥주소를 통해 서브넷에 있는 호스트들에게 데이터가 가야해서 IP주소에서 Mac주소로 변환하는 작업이 필요하다. 이를 위해 네트워크 장치가 IP 주소에서 MAC 주소로 변환해주는 프로토콜이 바로 Address Resolution Protocol (ARP) 이다. 이때 매번 전환하기보다 캐시를 통해 최적화가 된다. IP주소와 Mac주소간 맵핑 정보를 저장하는 캐시를 ARP Table이라고 부른다. 즉 아직 IP주소와 MAC주소 연결이 된적이 없어 캐시가 없을 경우에는 ARP에 따라 ARP Request 를 랜 전체에 broadcast 하고 게이트웨이(라우터)에서 받아 테이블에 캐시가 저장된다. 이후부터는 ARP Table을 통해 별도의 arp request 없이 데이터가 교환된다.
결국 맥 프로토콜은 충돌을 방지하기 위한 프로토콜인데 트랜스포트 레이어의 TCP와 차이가 있다. 가장 큰 차이점은 이더넷(링크레이어)이 프레임을 보냈는데 collision을 감지하지 못하면 성공적으로 작업이 이루어졌다고 99% 확신한다. 반면 트랜스포트 레이어는 보내고 나서 ACK(확답)을 기다립니다 따라서 이더넷에서 Collision을 감지하지 못하면 치명적이다.
이더넷에서 collision을 탐지하지 못했을 때는 이와 같이 해결한다. 예를 들어 A 호스트에서 F라우터로 전송될 때 E라우터에서 Collision이 일어나면 이 정보를 다시 D → C → B 를 거쳐 A로 되돌아와야 한다. 만약 B에서 오는 중인데 모르고 A에서 다시 프레임을 날리거나 B에서 끊겨버리면 문제가 발생한다. 이를 해결하기위해 minimum frame을 64바이트로 강제함으로서 A가 Collision을 인식하게끔 한다. 따라서 프레임은 작은 정보일경우 padding이라도 넣어서 64바이트로 만들어주어야 한다. (만약 최소 바이트가 아니면 Collision으로 판단하고 재전송해버림)
정리하자면 데이터가 향하는 경로를 설정하는데 있어서 네트워크 레이어에서 IP를 포워딩함에 있어 사용하는 맵핑 데이터는 포워딩 테이블이, 링크 레이어에서 프레임을 포워딩함에 있어 사용하는 맵핑데이터는 ARP Table이 사용된다는 것을 학습했다. 앞서 ARP Table은 request 이후에 한 번 연결되면 캐시메모리 테이블로 남아서 더이상 request없이 통신한다고 했다. 그렇다면 이 "한 번"연결이 어떻게 되는지 보자.
먼저 네트워크 스위치에 대해 알아보자. 만약 호스트가 추가할 때마다 유선을 계속 중간에 뚫는다면 나중에 매우 힘들어질 것이다. 스위치는 네트워크 내의 여러 장치를 연결하여 데이터를 주고받을 수 있게 가운데서 중간역할을 수행한다. 가운데서 데이터 패킷의 출발지와 목적지 MAC 주소를 기반으로, 패킷을 적절한 포트로 전달한다. (물론 링크레이어에서 동작한다.)
스위치는 목적지 MAC 주소(BB:BB:BB:BB:BB:BB)를 MAC 주소 테이블에서 찾는다. 초기에는 스위치의 MAC 주소 테이블(ARP Table)이 비어 있기 때문에 목적지 MAC 주소가 테이블에 없어서, 스위치는 프레임을 모든 포트로 브로드캐스트한다. 호스트 B가 응답하면, 스위치는 호스트 B의 MAC 주소를 테이블에 추가하고, 이 MAC 주소가 연결된 포트를 테이블에 기록한다. 이렇게 스위치를 하면서 포트넘버와 MAC number의 테이블을 자동적으로 만들어주는 과정을 Self-learning 이라고 부른다. 즉 self-learning은 ARP request를 받아 포트넘버와 MAC 넘버의 테이블을 만드는 과정을 부른다. (포워딩 테이블은 다익스트라 알고리즘, link state 알고리즘을 사용해서 테이블을 채웠다는 점에서 차이가 있다.) (주의할 점은 스위치는 무언가 역할을 수행하는 건 아니고 그냥 거쳐가는 링크레이어의 경로이다.)
hop count 란 네트워크의 한 부분으로 출발지와 목적지로 패킷이 이동할 때 마다 발생하는 카운트이다. 이때 서브넷이 여러개가 엮여있을 수 있다. 스위치 여러개가 또 하나의 스위치에 엮이고 엮여 광역망이 만들어진다. 따라서 같은 서브넷에 있는 호스트들은 한 번만 이동하기 때문에 싱글홉, 다수의 라우터를 거칠 수 있는 호스트들은 멀티홉이라 부른다.
즉 이러한 스위치 사이의, 서브넷 간의 통신에서는 multi hops, single hop 통신은 네트워크 내에서 출발지와 목적지가 같은 네트워크 세그먼트 또는 서브넷에 있을 때 발생한다. 싱글홉의 경우, 데이터는 중간에 다른 라우터를 거치지 않고, 한 번의 전송으로 목적지에 도달한다.
'Computer Science > Network' 카테고리의 다른 글
무선 이동 네트워크 (0) | 2024.05.20 |
---|---|
네트워크 계층 (0) | 2024.05.09 |
| 컴퓨터 네트워킹 하향식 접근 | Ch1 컴퓨터 네트워크와 인터넷 (0) | 2024.05.07 |
전송 계층 (0) | 2024.05.05 |