Did you know that you can navigate the posts by swiping left and right?
데이터링크 계층은 데이터를 네트워크 전송 방식에 맞게 단위화(Framing)해서 그 단위들을 전송한다. 데이터링크 계층은 Ethernet 프로토콜이 있고, Ethernet 장치를 위한 표준 주소 지정 시스템을 제공한다. 이는 물리적 주소인 MAC(Media Access Control) 주소이다. MAC 주소는 xx:xx:xx:xx:xx:xx의 형식으로 총 6바이트로 전 세계에서 유일한 주소이다. (NIC :: 랜카드의 고유번호라고 생각하면 된다.)
데이터 링크 계층이 제공하는 서비스(일)는 3가지가 있다. 혼잡제어(Congestion Control)는 일반적인 L2 프로토콜에서 안쓰임
데이터 배열에 Data, Header, Trailer 등을 넣어서 캡슐화(Encapsulate)를 하는 작업을 말한다.
각각의 노드(송신자, 수신자, 중간중간의 각종 라우터, 스위치 등의 하드웨어)에서 다음 노드로 데이터를 보낼 때, L3(Network Layer)에서 받은 데이터그램(Datagram)을 캡슐화하는 작업을 의미한다. 그리고 캡슐화된 틀(데이터 배열)을 프레임(Frame)이라고 한다. L2 계층에서 패킷(단위)을 Frame이라고 한다.
송신자와 수신자의 처리 속도간의 차이를 해결하기 위한 제어
송신 측이 수신 측의 데이터 처리 속도 보다 훨씬 빠른 속도로 데이터를 보낸다면 어떻게 될까? 수신 측의 버퍼(Buffer)가 점점 길어질 것이다. 버퍼의 길이는 제한되어 있기 때문에, 버퍼가 가득 차면 데이터를 더 이상 저장할 수 없으니깐 데이터가 손실될 것이다. (그냥 버려질 것이다.) 그러나 그럴 수 없기 때문에 수신 측에서는 송신 측에게 그만 보내거나, 조금 천천히 보내달라는 피드백(Feedback)을 보낼 수 있다. 이것이 흐름제어 (Flow Control)이다.
에러를 감지하고 처리
송신 측에서 Framing을 하고 이것을 0과 1로 이루어진 비트로 변환하고 보낸다. 수신 측에서는 당연히 이 비트 배열들을 받을 텐데, 0과 1을 이루는 이 전기적 신호들이 매우 취약하기 때문에 아무래도 전선이다보니 중간에 손실이 있을 수도 있고, 외부 영향을 받아서 전기적 신호가 변형되는 경우가 있을 수 있다. 수신 측의 L2 계층이 이 전기적 신호를 보고 Framing 해야한다. 이 과정에 에러를 검출해낼 수 있다. 정확히는 에러를 검출해야만 한다. 에러를 검출하는 방법은 매우 많지만, 그 과정은 이 포스트의 주제범위를 벗어나기 때문에 생략한다. 검출된 에러를 L2에서는 2가지 방법으로 해결한다. 첫 번째 방법은 에러를 직접 수정하는 것이다. 해밍코드 같은거.. 두 번째 방법은 수신 받은 데이터 배열(Frame)을 폐기하고, 송신 측에 데이터를 다시 보내달라는 재요청을 하는 것이다.
위에서 L2(Data-Link Layer) 계층에서 하는 일과 MAC 주소가 무엇인지를 아-주 대충이나마 살펴보았다. 그러나, 의문이 생길 수 있다. 수신 측의 하드웨어 주소인 MAC 주소를 어떻게 알 수 있을까, 어떻게 특정한 MAC 주소로 데이터를 보낼 수 있을까? 여기서 해결해보도록 하자.
우리는 특정한 컴퓨터를 지정하는 주소 체계가 있다. 바로 IP주소이다. IP 주소는 L3(Network Layer)계층에서 사용하는 주소로, 인터넷 상에서 서로를 식별할 수 있는 식별자이다. 송신자와 수신자가 직접적으로 연결되어 있다면, IP 주소를 통해서 인터넷 상에서 정확한 본인의 위치를 알려줄 수 있다. 그러나, 일반적으로 송신자와 수신자가 직접 랜선으로 연결되어있는 것이 아니라 수많은 라우터와 서버로 연결되어있다. (중간에 거쳐가야하는 정거장이 많다는 의미이다.) 고로, 송신자에서 수신자에게 직접 데이터를 보내줄 수 없고, 라우터를 통해서 보내주어야한다. 좀 요약하고 비유적으로 말하자면, IP주소는 네비게이션이고, MAC주소는 현재 도로이다. IP주소는 목적지만을 표현하고, MAC주소는 실제 라우터를 통하는 길을 표현한다.
L2계층의 주소 체계에는 3종류가 있다. 이는, 수신자가 몇 명이냐로 나뉜다.
모든 기기(송신자, 수신자, 라우터 등)에는 Unicast Address가 할당되어 있다. Unicast는 1 대 1 통신을 의미하며, L2 계층에서 Framing을 할 때, Unicast Address를 넣으면 해당 MAC 주소를 가진 곳으로만 간다.
특정한 L2 계층의 프로토콜에는 Multicast Address를 정의하고 있다. Multicast란 1 대 다수 통신을 의미한다. 그러나, 아무데서나 쓸 수는 없고, 특정 범위(관할구역 같은 것)에서만 사용가능 하다.
Broadcast는 1 대 전체 통신을 의미한다. Broadcast Address를 담은 Frame은 모든 기기에게 전달된다. 일반적으로 Broadcast Address는 FF:FF:FF:FF:FF:FF 이다.
위에서 말한대로, 송신자와 수신자 사이에는 수많은 서버와 라우터 들이 있다. 고로, 직접적으로 데이터를 전송할 수 없기 때문에 라우터 들을 통해서 수신자에게 데이터를 보내야한다. 0과 1, 비트로 이루어진 전기적 신호는 IP가 아닌 MAC 주소를 따라 흐르기 때문에, 수신자로 향하는 길의 중간에 있는 노드 들의 MAC 주소가 필요하다. 이 때 유용한 기술이 바로 ARP 라는 것이다.
ARP란 네트워크 상에서 IP 주소를 MAC 주소로 대응(bind)시키기 위해 사용되는 프로토콜이다.
ARP란 매우 단순하다. 예를 들어서 설명해보자. 교수님이 “학번이 17번인 학생은 이따가 메일로 이름과 전화번호를 보내세요.”라고 수업시간에 말씀하셨고, 17번인 학생이 메일을 보내는 것이 ARP이다. 이 예시를 잘 해석해보자. 교수님은 학번이 17번인 학생의 개인정보가 필요한 상황이다. 그런데, 학번이 17번인 학생이 누군지 모르기 때문에, 수업시간에 말씀하신 것이다. 모두가 들리도록 말이다. 그러면 17번 학생도 당연히 이 말씀을 들을 것이고, 메일을 보낼 것이다. 이것을 ARP에 맞춰서 이해해보자. 송신자(교수님)는 수신자(17번 학생)의 MAC 주소(이름과 전화번호)가 알고싶다. 그러나 송신자가 가지고 있는 것은 IP주소(17번) 밖에 없다. 고로, 송신자는 Broadcast Address(수업시간의 말씀)를 이용해서 모든 노드(학생)에게 특정 IP주소(학번)를 가지고 있는 노드는 MAC 주소를 송신자 측에게 보내라고 한 것이다. 그러면, 특정 IP를 가지고 있는 노드는 MAC 주소를 전송할 테고, 서로 IP와 MAC 주소를 알 수 있게 되는 것이다.
ARP로 서로의 IP 주소와 MAC 주소를 알게 되었다면, 이것을 도표(Table)로 만들어서 특정 IP로 보낼 때마다 해당하는 MAC 주소로 보낼 수 있다. MAC 주소는 직접 연결된 범위(스위치, 허브, 라우터 같은)에서만 사용할 수 있다. 이게 궁금하면, Datagram Network에 대해서 공부를 하자.