TCP/IP 프로토콜 그룹은 데이터 링크층이나 물리층에 대해서는 규정하지 않았다. 이 두 계층은 인터넷에서 연결을 담당한다. 이들 유선망 또는 무선망은 TCP/IP의 상위 세 계층에게 서비스를 제공한다.
이 챕터에서는 모든 네트워크와 연관성 있는 데이터 링크층에 대한 일반적인 개념과 공통 주제를 소개한다.
처음 절에서는 데이터 링크층을 소개한다. 이 절은 링크와 노드의 기본 개념을 정의하는 것으로 시작된다. 이 절에서는 데이터 링크층에서 제공하는 서비스를 나열하고 간략하게 설명한다. 다음으로 점-대-점 링크와 브로드캐스트 링크와 같은 두 가지 범주의 링크를 정의한다. 마지막으로 데이터 링크층의 두 개의 부계층에 대해 설명한다.
두 번째 절에서는 링크 계층 주소지정에 관해 설명한다. 이 절에서 먼저 데이터 링크층에서 주소 지정 메커니즘을 뒷받짐하는 근거에 관해 설명한다. 링크 계층 프로토콜에서 사용하는 세 가지 유형의 링크 계층 주소에 관해 설명한다. 네트워크 층에서 주소를 데이터 링크층의 주소로 바꿔주는 주소 변환 프로토콜(ARP, Address Resolution Protocol)에 관해 설명한다.
이 장에서는 데이터 링크층의 통신에 초점을 맞추고 있다. 데이터 링크층의 통신은 데이터 링크층 사이에서 5개로 분리된 논리적인 연결로 구성되어 있다.

발신지나 목적지는 하나의 데이터 링크층이 포함되지만, 라우터는 2개의 데이터 링크층이 포함된다.
데이터 링크층의 통신은 노드-대-노드이다. 인터넷에서 한 지점의 데이터 단위는 다른 지점에 도달하기 위해 LAN과 WAN과 같은 많은 네트워크를 통과하게 된다. 이러한 LAN과 WAN은 라우터를 통해 연결된다. 이것은 2개의 종단 호스트와 라우터를 노드(Node)로 그리고 두 노드 사이의 네트워크를 링크(Link)로 나타내는 것이 일반적이다.

데이터 링크층은 물리층(1)과 네트워크층(3) 사이에 위치한다.
물리층으로부터 서비스를 제공받아서 네트워크층으로 서비스를 제공한다.
데이터 링크층의 책임 범위는 노드-대-노드이다. 패킷이 인터넷에서 전송될 때, 호스트와 라우터와 같은 노드의 데이터 링크층은 경로의 다음 노드까지 데이터그램을 전달해야 하는 책임을 갖는다.
이러한 목적을 위해 전달하는 노드의 데이터 링크층은 네트워크층으로부터 전달받은 데이터그램을 프레임으로 캡슐화해야 한다. 그리고 전달을 받는 노드의 데이터 링크층은 프레임으로부터 데이터 그램을 역캡슐화해야 한다. 다시 말해 발신지 호스트의 데이터 링크층은 캡슐화해야하고, 목적지 호스트의 데이터 링크층은 역캡슐화해야 한다. 하지만 각 중계 노드는 캡슐화와 역캡슐화가 모두 가능해야 한다.
중계노드에서는 각 링크가 서로 다른 프레임 형식을 사용하는 프로토콜을 사용할 수 있기 때문에 캡슐화와 역캡슐화가 필요하다.

데이터 링크층에서 제공하는 첫 번째 서비스는 프레임 짜기이다. 각 노드에서 데이터 링크층은 다음 노드에게 데이터 그램을 전송하기 전에 네트워크층에서 전달받은 패킷인 데이터그램을 프레임으로 캡슐화해야 한다. 노드는 또한 논리 채널을 통하여 전달받은 프레임으로부터 데이터그램을 역캡슐화해야 한다.
데이터 링크층에서 패킷은 일반적으로 프레임(Frame)이라고 부른다.
프레임 생산률이 소비율보다 높으면, 종단에서 전송 받는 프레임은 소비될 때까지 버퍼에 저장되어야 한다. 수신 쪽에서 버퍼 크기를 무제한으로 가질 수 없다.
첫 번째 선택은 전달받는 데이터 링크층에서 버퍼가 꽉 차 있다면, 프레임을 폐기시키는 것이다.
두 번째 선택은 데이터 링크층으로 전송하는 것을 멈추거나 느리게 하는 피드백(Feedback)을 전송하는 것이다.
전송 측 노드에서 데이터 링크층의 프레임은 비트 형태에서 전자기 신호로 변환되어 전송 매체를 통하여 전송된다. 수신 측 노드는 전자기 신호를 전달 받아 비트 형태로 변환하여 프레임을 생성하기 위해 재좆립한다. 오류를 검출한 후에 송신자 노드에서 이를 수정하거나 오류를 폐기하고, 송신 노드에게 재전송을 요청해야 한다. (오류제어는 10장에서 자세히 알아보자)
링크가 프레임의 혼잡으로 인해 프레임 손실이 발생하더라도, 광역 통신망 이외의 대부분의 데이터 링크층 프로토콜은 혼잡을 완화하기 위해 직접 혼잡 제어를 사용하지 않는다.
일반적으로 혼잡 제어는 종단-대-종단으로 통신하기 때문에, 네트워크 층 또는 전송층의 문제로 생각한다.
데이터 링크층은 전송 매체의 모든 성능을 사용하는 점-대-점(point-to-point)링크가 있고, 링크 성능의 일부를 사용하는 브로드캐스트(broadcast)링크가 있다.
예를 들어, 두 사람의 친구가 대화하기 위해 집전화를 사용할 때, 이들은 점-대-점 링크를 사용한다.
반면에 두 사람의 친구가 휴대폰을 사용한다면 공기를 여러 휴대폰 사용자가 공유하기 때문에 이들은 브로드캐스트 링크를 사용하고 있다.
이 절에서는 데이터 링크층을 데이터 링크 제어(DLC, Data Link Control)와 매체 접근 제어(MAC, Media Access Control)라는 2개의 부계층으로 나누어서 살펴보도록 한다.

인터넷에서 발신지와 목적지 호스트가 연결된 정확한 지점을 나타내기 위해 네트워크층 식별자로서 IP 주소를 사용한다. 하지만 인터넷과 같은 비연결형(connectionless) 네트워크 간 네트워크에서는 IP주소만을 사용하여 데이터그램을 목적지까지 전송할 수 없다.
인터넷에서 각 데이터그램은 같은 발신지 호스트에서 같은 목적지 호스트까지 서로 다른 경로를 선택하기 때문이다.
발신지와 목적지 IP주소는 두 종단을 지정하지만 데이터그램이 경유하는 경로에 대해서는 지정하지 못한다.
데이터그램에서 IP주소는 변경되지 않는다는 점을 기억하자. 만약 데이터그램에서 목적지 IP주소가 변경된다면, 패킷은 목적지까지 전달되지 못할 것이다.
따라서 비연결형 네트워크 간 네트워크(internetwork)에서는 다른 주소 지정 메커니즘이 필요하다.
링크 계층 주소(link-layer address)는 링크 주소(link address), 물리 주소(physical address) 또는 MAC주소(MAC address)라고 불린다.
데이터그램이 네트워크층(3)에서 데이터 링크층(2)으로 전달될 때, 데이터그램은 프레임으로 캡슐화되고 두 데이터 링크 주소는 프레임 헤더에 추가된다. 이 2개의 주소는 프레임이 링크에서 다른 링크로 이동할 때마다 변경된다.

IP 주소의 순서와 링크층 주소의 순서는 서로 다르다는 점을 주의하자.
또한 각 프레임이 같은 발신지와 목적지 주소(과)를 갖는 데이터그램을 포함하고 있지만, 프레임의 링크 계층 주소는 링크에서 링크로 갈 때마다 변경된다.
각 호스트나 라우터의 인터페이스는 유니캐스트 주소를 할당받는다. 유니캐스팅은 일-대-일 통신을 의미한다. 유니캐스트 주소를 목적지로 갖는 프레임은 링크에서 하나의 개체에 전달된다.
가장 일반적인 LAN과 이더넷에서 유니캐스트 링크 계층 주소는 48비트(6바이트)이다. 이것을 콜론(:)으로 나누어 16진수로 표현하면 다음과 같다.
A2:34:45:11:92:F1
어떤 링크 계층 프로토콜은 멀티캐스트 주소를 지정한다. 멀티캐스팅은 일-대-다 통신을 의미한다. 그러나 그 범위는 로컬 링크로 제한한다.
가장 일반적인 LAN과 이더넷에서 멀티캐스트 링크 계층 주소는 48비트(6바이트)이다. 이것을 콜론(:)으로 나누어 16진수로 표현하면 다음과 같다. 그러나 두번째 수는 16진수로 홀수이어야 한다.
A3:34:45:11:92:F1
어떤 링크 계층 프로토콜은 브로드캐스트 주소를 지정한다. 브로드캐스트는 일-대-전체 통신을 의미한다. 목적지로 브로드캐스트 주소를 갖는 프레임은 링크 내의 모든 장치로 전달된다.
가장 일반적인 LAN과 이더넷에서 브로드캐스트 링크 계층 주소는 48비트(6바이트)로 모두 "1"이다. 이것을 콜론(:)으로 나누어 16진수로 표현하면 다음과 같다.
FF:FF:FF:FF:FF:FF
다음 노드의 IP 주소는 링크를 통과하는 프레임이 이동하는데 도움이 되지 않는다. 따라서 다음 노드의 링크 계층 주소를 알아야 한다.
이때 주소 변환 프로토콜(ARP, Address Resolution Protocol)이 도움이 된다.
해당 프로토콜은 네트워크층에서 정의한 보조 프로토콜 중 하나이다.
(이 책에서는 이 프로토콜이 IP주소를 지정된 링크 계층 주소에 매핑시키고, 데이터 링크층으로 그것을 전달하기 때문에 해당 챕터에서 설명한다.)

호스트 또는 라우터는 네트워크에서 다른 호스트 또는 라우터의 링크 계층 주소를 찾기 위해 ARP 요청 패킷을 전송한다. 패킷은 전송자의 링크 계층과 IP주소와 수신자의 IP주소를 포함한다.
송신자는 수신자의 링크 계층 주소를 알지 못하기 때문에 질의 메시지는 링크 계층 브로드캐스트 주소를 이용하여 링크에 브로드캐스트된다.

네트워크에서 각 호스트와 라우터는 ARP 요청 패킷을 전달받고 처리한다. 하지만 해당 수신자는 IP주소를 인식하고 ARP 응답 패킷을 전송한다. 응답 패킷은 수신자의 IP와 링크 계층 주소를 포함하고 있다.
패킷은 요청 패킷을 보낸 노드로 직접 유니캐스트된다.
만약 시스템A가 시스템B의 링크 계층 주소를 찾기 위해 프레임을 브로드캐스트할 수 있다면, 왜 A는 B로 브로드캐스트 프레임을 사용하여 데이터그램을 전달하지 않는가?
이는 효율성 측면에서 고려해보면 알 수 있다.
시스템 A,B를 포함하여 20개의 시스템(링크)이 네트워크에 연결되었다고 가정하자. 시스템 A는 시스템 B에게 초당 10개의 데이터그램을 전송할 수 있다고 가정하자.

해당 그림은 ARP패킷의 형식을 보여준다.
IP주소가 N1이고 MAC 주소가 L1인 호스트는 IP 주소 N2와 물리 주소 L2(처음 호스트에게 알려지지 않은)를 가진 다른 호스트로 전송할 패킷을 가지고 있다. 두 호스트는 같은 네트워크에 있다.

해당 ARP패킷이 프레임으로 캡슐화 되었음을 볼 수 있다.
1번은 브로드캐스트이고 목적지의 MAC주소가 0으로 비어져 있다.
2번은 유니캐스트이고 시스템B의 MAC주소인 L2가 기록되어 보내짐을 알 수 있다.
앨리스가 데이터그램을 인터넷에서 세 노드 건너에 있는 밥에게 전송한다고 가정하자. 어떻게 앨리스는 밥의 네트워크층 주소를 찾을 수 있는가? 이것은 DNS(Domain Name System)를 통하여 알 수 있다.
우선은, 앨리스가 밥의 네트워크층(IP) 주소를 알고 있다고 가정하자. 다시 말해, 각 호스트는 서로의 IP 주소를 알고 있기 때문에 앨리스의 호스트는 전송할 데이터에 밥의 IP주소와 앨리스 호스트의 IP 주소를 포함한다.


네트워크층은 자신에게 주어진 와 패킷을 알고 있다.
하지만, 다음 노드의 링크 계층 주소를 찾아야 한다.
네트워크층은 자신의 라우팅 테이블을 참고하여 어느 라우터가 목적지 를 위한 다음 라우터인지 찾으려 한다. 라우팅 테이블은 을 제공한다. 하지만 네트워크층은 라우터 R1의 링크 계층 주소를 찾아야 한다. 링크 계층 주소 을 찾기 위해 ARP를 사용한다. 네트워크층은 이제 링크 계층 주소를 가진 데이터그램을 데이터 링크층으로 전달할 수 있다.
데이터 링크층은 자신의 링크 계층 주소 를 알고 있다. 그서은 프레임을 생성하고 프레임을 물리층으로 전달한다. 물리층에서 주소는 신호를 바뀌어 매체를 통해 전달된다.
R1은 단지 3개의 하위 계층을 가지고 있다. 전달받은 패킷은 이 세 하위 계층을 하부에서 위로 통과하여 다시 아래로 내려간다.

패킷이 도착하면, 역캡슐화를 진행하고 결국 네트워크층으로 전달된다.
네트워크층은 데이터그램을 의 주소를 갖는 장치로 전달해야 된다는 것을 알게 된다.
자신의 라우팅 테이블을 차고하여 의 주소를 얻게 되고 위와 마찬가지로 ARP 패킷을 통해 의 주소를 알아낸다.
링크 계층은 데이터그램을 와 자신의 링크 계층 주소인 에 더하여 캡슐화한다. 그리고 프레임을 물리층으로 전송한다.
물리층은 비트를 신호로 바꾸어 전송 매체를 통하여 R2에게 전달한다.
라우터 R2에서 동작은 그림 9.13과 같이 R1과 거의 동일하다.

밥 측에서는 더 이상 주소 지정과 주소 매핑은 필요하지 않다. 링크로부터 전달된 신호는 프레임으로 변경된다. 프레임은 데이터 링크층으로 전달된다. 거기에서 데이터그램을 역캡슐화하고 네트워크층으로 전송한다. 네트워크층에서는 메시지를 역캡슐화하고 전송층으로 전송한다.

이 예제를 통해 발신지와 목적지 네트워크층 주소인 가 데이터 전송 도중에 변경되지 않는 것을 보았다. 그러나 라우터 R1과 R2의 네트워크층 주소()는 앨리스의 컴퓨터에서 밥의 컴퓨터로 데이터그램을 전송해야 한다.