데이터 링크 계층

정민교·2023년 7월 30일
0

네트워크

목록 보기
3/4

📒이더넷과 이더넷 헤더

물리 계층에서는 데이터를 물리적인 신호로 바꿔서 전달하는 역할만 했다면, 데이터 링크 계층에서는 기기에 MAC주소를 부여해 원하는 기기에만 데이터를 전달할 수 있도록 한다.

데이터 링크 계층에서 가장 많이 사용하고 있는 프로토콜은 이더넷이다.

초기 이더넷은 동축 케이블을 사용하는 버스형 네트워크였다.

버스형 토폴로지에서는 송수신을 동시에 하게되면 충돌이 발생하기 때문에 CSMA/CD 프로토콜이 만들어졌고, 반이중 통신이 되어 안전하게 통신할 수 있다.

하지만 반이중 통신은 속도에 한계가 있기 때문에 이를 해결하기 위해 UTP케이블과 광케이블이 등장했다.

데이터 링크 계층에서는 패킷을 캡슐화하여 프레임을 만든다.

프레임은 다음과 같은 구조를 가진다.

PreambleSFDDestination AddressSource AddressLength/TypeData...PadFCS

송신측에서 왼쪽에 있는 Preamble부터 차례로 보내고 수신측에서는 왼쪽부터 차례로 받는다.

목적지 주소부터 Length/Type을 이더넷 헤더라고 하고, FCS를 이더넷 트레일러라고 한다.

Data부분은 네트워크 계층에으로 받은 패킷이다.

이더넷 헤더, 패킷, 이더넷 트레일러를 포함한 전체 데이터를 프레임이라고 부른다.

이더넷 프레임의 크기는 Data 필드의 크기에 따라서 64~1518바이트가 된다.

✔️프리엠블, SDF(Start Frame Delimeter) 필드

이 필드는 랜카드에게 이더넷 프레임이 시작되는 것을 알리는 역할을 한다.

각 7바이트와 1바이트 8바이트로 구성되어있다.

✔️Destination Address, Source Address 필드

목적지 MAC 주소와, 송신지 MAC 주소이며 각 6바이트로 구성되어 있다.

목적지 MAC 주소가 모두 1(FF-FF-FF-FF-FF-FF)로 되어있으면 이 데이터를 브로드 캐스트 하라는 뜻이다.

✔️Length/Type 필드

상위 계층 프로토콜 타입이나 현재 프레임의 데이터 길이가 저장된다.

2바이트로 구성되어 있으며, 1500이하라면 데이터의 길이를, 1500보다 크다면 상위 프로토콜의 타입을 나타낸다.

✔️Data 필드

Data 필드는 46~1500바이트까지 올 수 있으며, 네트워크 계층으로부터 받은 패킷을 나타낸다.

데이터 크기가 너무 작다면 Pad 필드에 데이터를 덧붙여서 적절한 크기로 만든다.

✔️FCS 필드

전송하는 프레임이 손상됐는지 체크하기 위한 필드다.

4바이트 크기이고 수신 측에서는 FCS를 체크해서 데이터가 손상되었다고 판단하면 수신한 프레임 전체를 버린다.

📒CSMA/CD

허브에 대해 이야기 할 때 CSMA/CD 프로토콜에 대해 얘기했다.

허브를 통해 여러 대의 PC를 연결하고 통신할 수 있다.

허브를 중심으로 모든 PC를 연결하기 때문에 스타 토폴로지 네트워크로 구성된다.

이더넷 초기에 가장 먼저 표준으로 나온 케이블은 10BASE5라는 동축 케이블이다.

이 당시에는 UTP 케이블과 허브가 없었다. 따라서 하나의 동축 케이블에 BNC T Connector를 사용해 여러 PC를 연결하여 버스형 네트워크를 구성했다.

동축 케이블은 하나의 선으로 전기신호를 보내서 통신하기 때문에 두 대 이상의 PC가 동시에 신호를 보내면 충돌이 발생해 데이터가 손상된다.

CSMA(Carrier Sence Multi Access)/CD(Collision Detection)는 이러한 충돌을 방지하기 위해 만들어진 프로토콜이다.

Carrier는 반도체 내에서 전류의 흐름을 발생시킨다. Carrier Sence란 전선(동축 케이블)내에 Carrier가 많다면 전류가 흐르고 있다고 판단하는 것이며, Multi Access란 두 대 이상의 PC가 동축 케이블에 접근하는 것을 말한다.

1번 PC가 2번 PC에게 데이터를 전송하려고 한다. 1번 컴퓨터는 동축 케이블에 데이터가 전송 중인지 확인합니다. Carrier Sence를 하는 것이다.

근데 3번 PC도 2번 PC에게 데이터를 전송하려고 똑같은 작업을 한다.

두 PC는 이상이 없다고 판단하고 데이터를 동시에 전송한다. 이 과정에서 충돌이 발생하게 되는데 이를 감지하는 것을 Collision detection이라고 한다.

그러면 충돌을 감지한 컴퓨터가 데이터 전송을 중지하고 연결된 모든 컴퓨터에게 충돌이 발생했다는 Jamming 신호를 전송한다.

그러면 1번과 3번 PC는 랜덤한 시간 동안 대기 후에 다시 데이터를 재전송한다. 다시 충돌이 발생하면 또 기다렸다 재전송하는데 충돌이 15번 발생하면 더 이상 데이터를 전송하지 않고 전송을 포기한다.

이렇게 CSMA/CD 프로토콜로 동축 케이블 하나를 이용해 모든 컴퓨터가 안전한 반이중 통신을 가능하다.

그런데 현재 UTP 케이블은 송, 수신 선으로 전이중 통신이 가능한데 이더넷 초기에는 그러지 못했다. 송, 수신선이 따로 존재하긴 했지만 송신할 때는 수신을 하지 못해 논리적으로 반이중 통신만 가능한 형태였다.

3개의 PC가 허브에 연결되어 있다고 가정하자. 1번과 2번이 동시에 3번 PC에 데이터를 전송한다고 할 때, 허브는 1번 PC가 보낸 데이터를 2번과 3번에게, 2번 PC가 보낸 데이터를 1번과 3번에게 전달한다.

이 과정에서 3번에 두 데이터 전송 시도가 동시에 발생하며 충돌이 발생한다.

1번이 보낸 데이터를 먼저 보내고 2번이 보낸 데이터를 나중에 보내면 충돌이 해결되긴 한다. 하지만 허브는 그저 포트가 많은 리피터 역할일 뿐이기 때문에 그런 작업을 할 수 있는 메모리와 처리장치가 존재하지 않다.

나중에 브리지와 스위치가 만들어지면서 위와 같은 방법이 가능해져서 전이중통신 표준이 발표되었다. 그래서 UTP 케이블의 송, 수신선을 제대로 사용할 수 있게 되었다.

현재는 전이중통신을 사용하기 때문에 CSMA/CD는 거의 사용하지 않는다.

📒브릿지

동축케이블을 사용하여 버스 토폴로지 형태의 네트워크로 구성하게 되면 CSMA/CD 방식으로 반이중통신만 가능하다.

UTP 케이블과 허브를 이용해서 스타 토폴로지 형태로 네트워크를 구성해도 허브에서 충돌이 발생할 수 있기 때문에 이 때도 반이중통신만 가능하다.

따라서 충돌이 발생하지 않도록 허브에 동시에 데이터가 들어왔을 때 하나의 데이터를 먼저 전송하고 나머지 데이터는 메모리에 보관했다가 나중에 전송하여 충돌이 해결하려는 시도가 등장했다.

그래서 허브에 메모리와 CPU가 필요해졌다. 그런데 메모리와 프로세서가 있으면 굳이 나머지 포트로 브로드캐스팅 할 필요가 없기 때문에 MAC주소를 보고 해당 MAC주소에만 데이터를 전송하도록 해서 네트워크 혼잡도를 낮추려고 했다.

이렇게 해서 등장한 것이 브릿지다.

브릿지를 통해 연결된 4개의 컴퓨터가 있다고 가정하자.

1번이 4번에게 데이터를 전송한다. 이때 목적지 MAC 주소를 4번의 MAC 주소로 설정한다.

브릿지는 데이터의 목적지 MAC주소를 보고 해당 MAC 주소를 가진 컴퓨터에게 데이터를 전송한다.

그래서 2번과 3번은 쓸데없는 데이터를 받지 않아서 네트워크 트래픽이 적어진다. 또한 충돌도 발생하지 않아서 CSMA/CD 프로토콜도 사용할 필요가 없어 UTP 케이블의 송,수신선을 이용해 전이중통신이 가능하다.

따라서 브릿지를 사용하면 포트별로 콜리전 도메인이 나뉘어진다.

📒스위치

브릿지와 기능적인 차이는 없다. 브릿지보다 성능이 좀 더 좋다. 스위치는 오류를 체크하는 기능이 있고, 속도가 더 빠르고, 더 많은 포트를 가지고 있다. 또한 버퍼를 가지고 있다.

스위칭 허브라고도 불리는데, 브릿지, 스위치, 스위칭 허브 전부 다 똑같은 말이다.

스위치와 브릿지 모두 MAC 주소를 이용하기 때문에 데이터링크 계층에 속한다.

1번, 2번은 허브에 3번, 4번은 스위치에 연결되어 있으며, 허브와 스위치가 연결된 네트워크를 상상해보자.

이렇게 4대의 컴퓨터가 허브와 스위치로 연결되어 있으며, 서로 통신한 적이 없다고 하자. 그러면 스위치의 MAC 주소 테이블은 비어있는 상태가 된다.

이 상태에서 1번이 4번에게 데이터를 전송한다. 그러면 1번은 허브로 데이터를 전송하고, 허브는 2번과 스위치로 데이터를 브로드캐스팅 한다.

스위치는 MAC 주소를 확인해서 해당 MAC 주소와 연결된 포트에만 데이터를 전송한다고 했지만 처음에는 MAC 주소 테이블이 비어있기 때문에 그렇게 할 수 없다.

우선 스위치는 허브를 통해 전달받은 데이터의 출발지 MAC 주소를 확인하고 MAC 주소 테이블에 저장한다.

허브는 스위치의 0번 포트와 연결되어있다고 가정하자. 그럼 스위치의 MAC 주소 테이블에는 1번 컴퓨터의 MAC 주소와 0번 포트를 짝지어 MAC 주소 테이블에 저장한다. 이를 learning이라고 한다.

그리고 4번 컴퓨터의 MAC 주소는 MAC 주소 테이블에 등록되어 있지 않아서 어떤 포트에 연결된 컴퓨터가 해당 MAC 주소를 가지고 있는지 알지 못한다. 따라서 0번 포트를 제외하고 일단 브로드캐스팅 한다. 이를 flooding이라고 한다.

3번은 자신에게 온 데이터가 아니기 때문에 버리고 4번은 자신에게 온 데이터가 맞기 때문에 상위계층으로 보내 데이터를 처리한다.

4번이 1번에게 응답한다고 가정하자. 그러면 4번은 스위치로 데이터를 전송한다. 스위치는 MAC 주소 테이블에 4번의 MAC 주소와 연결된 포트를 기록한다. learning 하는 것인다. 4번은 스위츼 2번 포트와 연결되어 있다고 가정하자. 그럼 4번의 MAC 주소와 2번 포트를 짝지어 MAC 주소 테이블에 등록한다.

스위치는 데이터의 목적지 MAC 주소가 MAC 주소 테이블에 있는지 확인한다. 1번의 MAC 주소는 0번 포트와 짝지어져 MAC 주소 테이블에 등록되어 있다. 그래서 flooding 하지 않고 0번 포트로 데이터를 전송한다. 이를 forwarding이라고 한다.

이후에 2번이 1번에게 데이터를 전송한다. 그럼 허브에서 데이터를 받아 브로드캐스팅한다. 1번은 자신에게 온 데이터이므로 처리한다.

스위치는 받은 데이터에서 출발지 MAC 주소를 learing한다. 이제 목적지 MAC 주소를 MAC 주소 테이블에서 찾는데 1번 MAC 주소와 2번 MAC 주소 모두 0번 포트인 것을 확인한다.

따라서 1번과 2번은 스위치가 없어도 통신할 수 있다고 판단하고 어디에도 데이터를 전송하지 않는다. 이를 filtering이라고 한다.

스위치는 learning, flooding, forwarding, filtering 해서 데이터를 전달한다.

시간이 지나면서 많은 데이터 송수신이 발생하면 많은 기기의 정보가 MAC 주소 테이블에 저장될 것이고, 그러면 메모리가 부족해진다. 따라서 일정 시간이 지난 등록된 MAC 주소는 자동으로 제거하는데 이를 aging이라고 한다.

보통 일정 시간은 5분이라고 한다. 그리고 aging 타이머가 다 되기 전에 MAC 주소를 참조한다면 해당 MAC 주소의 aging 타이머는 초기화되어 시간이 연장된다.

📒스패닝 트리 프로토콜

스패닝 트리란 트리 자료구조에서 모든 노드를 사이클 없이 연결하는 트리를 말한다.

스위치는 최소 스패닝 트리를 구해서 순환 구조를 제거하기 때문에 브로드 캐스트 메세지 무한 브로드 캐스팅 문제가 발생하지 않는다.

📒스위치의 한계

스위치를 무한대로 연결하면 전 세계 모든 컴퓨터를 연결하는 거대 네트워크도 구성할 수 있을 것 같지만 안된다.

스위치는 각 포트를 기준으로 콜리전 도메인이 나뉘어지지만, 그렇다고 스위치가 브로드 캐스팅을 하지 않는 것은 아니다.

브로드 캐스트 메세지를 전송하거나, flooding을 해야하는 상황에서는 스위치도 브로드 캐스팅을 한다. 따라서 스위치와 연결된 영역을 브로드 캐스트 도메인이라고 한다.

브로드 캐스트 도메인은 LAN 영역이라고도 부른다. 여기서 스위치를 연결해 네트워크를 확장하면 하나의 브로드 캐스트 도메인에 모든 PC가 존재하게 된다.

많은 수의 PC가 브로드캐스트 영역에 있게 되면 문제가 생긴다. 어떤 PC에서 데이터를 전송하는데 목적지 MAC 주소가 스위치에 존재하지 않는다면 flooding을 해야해서 브로드 캐스팅이 발생한다.

그러면 수십 만대의 컴퓨터에 쓸데없는 트래픽이 발생하게 된다.

그러면 어떻게 해야할까? 브로드 캐스트 영역을 나누면 된다. 브로드캐스트 영역을 나누기 위해 네트워크 계층을 공부해보자

profile
백엔드 개발자

0개의 댓글