3.1. 링크 계층
“링크 계층”(Link Layer)은 물리 계층과 네트워크 계층을 연결하는 계층으로
물리적으로 연결된 두 장치의 데이터를 전송하는 일련의 과정을 수행하고,
과정에서 발생하는 오류나 흐름제어, 접근제어등의 다양한 작업들을 수행합니다.
링크 계층의 PDU는 “프레임”(Frame) 으로 불리며, 대표적인 프로토콜 중 “이더넷”(Ethernet)이 여기에 해당됩니다.
링크계층 채널로 다음 네 가지가 있습니다.
1). “브로드캐스트 채널”(Broadcast Channel) :
하나의 송신자가 여러 수신자에게 데이터를 전송하는 방식입니다.
브로드캐스트 프레임은 모든 장치에 전파되며,
각 수신자는 자신에게 해당하는 프레임만을 받고 나머지는 무시합니다.
이더넷은 대표적인 브로드캐스트 채널입니다.
2). “점대점 통신 링크”(Point-to-Point Communication Link) :
하나의 송신자가 하나의 수신자에게 데이터를 전송하는 방식입니다.
둘 사이의 전용채널을 사용하는 구조이기 때문에 독립적이고, 높은 안정성과 신뢰성을 가집니다.
점대점 연결은 “PPP”(Point-to-Point Protocol)같은 프로토콜로 사용됩니다.
3). “멀티캐스트 채널”(Multicast Channel) :
하나의 송신자가 특정한 수신자 집단에 데이터를 전송하는 방식입니다.
4). “애니캐스트 채널”(Anycast Channel) :
하나의 송신자가 가장 가까운 수신자에게만 데이터를 전송하는 방식입니다.
링크계층 프로토콜을 사용하는 장치들을 “노드”(Node)라고 표현하고,
노드를 연결하는 통신채널을 “링크”(Link)라고 표현합니다.
다음은 링크계층이 제공하는 서비스를 나열한 것입니다.
1). “프레임 화”(Framing) : 네트워크 계층에서 전달받은 데이터를 링크계층에서 처리 할 수 있도록,
데이터 단위를 링크계층 PDU인 프레임으로 변환하는 것입니다.
2). “링크 접근”(Link Access) :
여러 노드가 하나의 링크를 공유할 때, 각 노드가 해당 링크를 효율적으로 사용하기 위한 방법을 제공합니다.
대표적인 링크접근 방법으로 “매체 접근 제어”(MAC, Medium Access Control) 프로토콜이 있습니다.
3). “신뢰적 전달”(Reliable Delivery) :
링크 계층에서 송신측 노드로부터 수신측 노드까지 데이터를 안정적으로 전달하게 해주는 방법을 제공합니다.
이를 위해 링크 계층에서는 오류 검출, 재전송 요청, 흐름 제어(Flow control) 등의 기능을 제공합니다.
신뢰적 전달은 일반적으로 무선 링크와 같이 오류 발생 확률이 높은 링크에서 중요하게 쓰입니다.
4). “오류 검출 및 정정” (Error Detection and Correction) :
오류 검출 및 정정은 데이터 프레임이 링크를 통해 전송되는 동안 발생하는 오류를 찾아내고,
필요에 따라 수정도 일부 수행하는 기능을 제공합니다.
i). “오류 검출” (Error Detection) : 프레임의 헤더에 포함된 오류 검출용 정보들을 사용하여
프레임 송수신 간에 발생한 오류를 검출할 수 있습니다.
ii). “오류 정정” (Error Correction) : 오류 검출 후 검출된 오류에 대해
추가적인 오류 정정 코드를 사용하여 데이터를 일부 복구 할 수 있는 기능을 제공합니다.
3.2. 링크 계층 동작 원리
링크 계층에서 서로와 통신을 하기 위해 사용하는 주소로 “MAC”(Media Access Control address)주소를 사용합니다.
MAC 주소는 호스트나 라우터의 물리 주소로 “랜 주소”, “이더넷 카드 식별 번호” 등으로도 표현합니다.
호스트나 라우터의 네트워크 장치인 “네트워크 어댑터”를
“네트워크 인터페이스 카드”(Network Interface Card, NIC)라고 표현하고, 이 NIC의 식별 번호가 MAC주소입니다.
MAC주소는 6바이트(48비트)로 구성되어 (16진수)2자 * 6개로 주로 MAC주소를 표현합니다.
6바이트 중 좌측 3바이트를 “OUI”(Organisationally Unique Identifier)로 보통 제조사 식별 번호를 기입합니다.
이 중 제일 좌측 1바이트의 가장 우측 1비트(Least Significant Bit)는
“I/G”(Individual/Group)플래그로 전파 할 때, 사용할 채널 방식을 나타냅니다.
이 값이 0이면, Unicast용으로 다른 단일 MAC주소에 전송하라는 의미가 되고,
1이면, Multicast용으로 다른 MAC주소 집단에 전송하라는 의미가 되고,
1이면서, 모든 MAC값이 1이 되면(즉 FF:FF:FF:FF:FF:FF이면),
Broadcast용으로 모든 다른 MAC주소에 전송하는 의미가 됩니다.
추가로 제일 좌측 1바이트의 가장 우측에서 두 번째 1비트(Second Least Significant Bit)는
“U/L” (Universal/Local)플래그로 MAC주소가 어떤 범위에서 고유 식별 가능한 지를 나타냅니다.
이 값이 0이면, “전역”(Universal)적으로 고유 식별 가능하다는 의미이고, MAC주소 충돌이 일어나지 않습니다.
1이면, “지역”(Local)적으로 고유 식별 가능하다는 의미이고, MAC주소가 지역을 벗어나면 충돌 가능성이 존재하므로,
정해진 지역을 벗어나지 않게 설계하는 것이 중요합니다.
다음은 링크계층의 오류 검출 기법 두 가지를 나열 한 것입니다.
1). “패리티 검사”(Parity Check) : 짝수 또는 홀수 패리티 비트를 미리 구한다음,
패리티비트를 사용하여 오류를 검출 할 수 있습니다.
i). 단일 패리티 기법 : 비트들을 한 줄 단위의 패리티 비트를 구하여,
비트가 홀수개 변경될 때, 오류 검출을 할 수 있습니다.
하지만, 비트가 짝수개 변경될 때는 오류 검출을 할 수 없는 한계가 존재합니다.
ii). 2차원 패리티 기법 : 비트들을 한 줄 단위의 패리티 비트를 가로와 세로로 두 가지 방법으로 구하여,
비트가 홀수개 변경될 떄, 오류 검출을 할 수 있고, 만약에 비트가 하나만 바뀐 경우라면, 오류 정정도 가능합니다.
2). “순환 중복 검사”(Cyclic Redundancy Check, CRC) : 데이터 프레임 가장 우측에 속하는 4바이트 블록 값이고,
오류 검출을 위해 사용됩니다. 데이터 프레임의 값을 D라고 정의한다면,
D의 d비트의 오류검출을 수행하기 위해 최대 6바이트 크기 R의 r비트를 정의하고, d+r비트열을 생성합니다.
d+r 비트열을 다항식 코드 G를 사용하여, 나머지 연산을 수행했을 때, 0으로 떨어지면, 오류가 없다고 판정합니다.
링크 계층을 주로 사용하는 장비로는 “스위치”(스위치 허브)가 있습니다.
스위치는 하나 이상의 포트를 가지며, 여러 물리적인 선 사이에 이들을 연결하고,
MAC을 토대로 데이터를 교환 할 수 있도록 합니다.
이는 네트워크 계층을 거치지 않기 때문에 IP를 사용한 처리 없이 MAC만을 사용해서 데이터 전송을 도와줍니다.
링크 계층의 스위치 동작 방식은 다음과 같습니다.
1). 만약, 스위치가 받은 데이터 프레임에 적힌 목적지 주소가 자신이 가지고 있는 “스위치 테이블”에 없다면,
해당 프레임을 Broadcast방식으로 주변 연결된 장치에 퍼뜨립니다.
“스위치 테이블”(Switch Table)은 이미 사용한 전적이 있는, 스위치가 알고 있는 MAC주소 리스트 입니다.
( 이 때, 스위치가 다른 장치와 주고 받는 통로를 “인터페이스”라고 표현합니다. )
( 구체적으로 어떤 인터페이스 x 에서 데이터 프레임이 수신 되면, 복사본을 생성한 후,
인터페이스 x를 제외한 나머지 모든 인터페이스에 출력 버퍼로 전달합니다. )
2). 만약, 스위치가 받은 데이터 프레임에 적힌 목적지 주소가 자신이 가지고 있는 “스위치 테이블”에 있을 때,
목적지가 들어온 인터페이스 내부에 존재 할 경우,( 즉, 출발지와 도착지가 같은 인터페이스 일 때, )
해당 프레임을 돌려 보내야 하는 것을 알고 있기 때문에, 돌려보낼 목적지 인터페이스를 제외하고,
나머지 인터페이스에 대해 ( 이미 Broadcast 되었다고 가정하고 ) 프레임을 전송하지 않습니다.
이를 “여과”(Filtering)기능이라고 표현합니다.
3). 만약, 스위치가 받은 데이터 프레임에 적힌 목적지 주소가 자신이 가지고 있는 “스위치 테이블”에 있을 때,
목적지가 들어온 인터페이스 외부에 존재 할 경우,( 즉, 출발지와 도착지가 다른 인터페이스 일 때, )
해당 프레임을 보내야 할 곳을 알고 있기 때문에, 보내야 할 목적지 인터페이스에 데이터 프레임을 바로 넘겨줍니다.
이를 “전달”(Forwarding)기능이라고 표현합니다.
스위치의 “자가 학습”(Self-Learning)기능은 데이터 패킷을 효율적으로 전달 하기 위해
스위치가 동적으로 MAC주소를 관리하고, MAC주소 테이블을 갱신하는 과정을 수행합니다.
1). 스위치 테이블은 수신 된 패킷에 대해,
[ 프레임의 출발지 MAC주소, 수신된 인터페이스 값, 수신 받은 당시 시간 ] 순서로 테이블에 저장합니다.
2). 스위치는 스위치 테이블을 MAC주소 정보를 지속적으로 갱신하기 위해,
기록된 시간 기준으로 일정 시간이 지나도록 재사용되지 않은 MAC주소를 삭제하도록 설정됩니다.
다음은 스위치의 특성에 대해 나열 한 것입니다.
1). 스위치는 “플러그 앤 플레이”(Plug & Play) 장치 입니다.
( 플러그 앤 플레이는 장치를 연결 및 사용할 때,
드라이버 설치나 사용자의 간섭 설정 없이 즉시 사용 가능 하다는 의미입니다. )
2). 스위치는 “전 이중”(Full Duplex)방식을 사용하여 동시 송수신이 가능합니다.
3). 스위치의 각 링크는 서로 다른 전달 매체를 사용하여 서로 다른 속도로 데이터를 주고 받습니다.
4). 스위치는 스위치 테이블을 가지고 있어 일부 목적지를 아는 데이터 프레임은 Broadcast없이 전달되기 때문에,
향상된 보안 기능과 패킷 처리 효율을 높여 줍니다.
5). 스위치와 라우터는 모두 “저장 후 전달”(Store-and-Forward)방식으로 동작합니다.
저장 후 전달 방식은 받은 데이터 프레임을 “전달”(Forward)하기 전에 데이터 그램을 버퍼에 “저장”(Strore)하고,
CRC를 이용하여 오류 검사를 실시하는 등의 데이터 무결성과 효율성을 높여줍니다.
3.3. ARP
네트워크 계층에서 사용하는 IP주소 데이터 그램을 주고받기 위해서는 상대 IP를 알아내고
상대의 MAC주소를 통해 데이터 프레임을 전송을 해야 하기 때문에
이 과정에서 상대의 MAC을 알아내는 프로토콜을 사용하게 됩니다.
“ARP”(Address Resolution Protocol) 프로토콜은 IP주소를 가지고 해당되는 MAC주소를 알아내는 프로토콜입니다.
송신측이 해당 서브넷에서 수신측 IP주소는 알고 있지만, MAC주소를 모를 때, ARP를 서브넷에 Broadcast방식으로
요청하고 해당 IP가 같은, 즉 수신측이 ARP를 받으면, Unicast방식으로 응답을 주고,
송신측에서 받은 응답을 토대로 MAC주소를 적용합니다.
이후, 응답을 1회성으로 받은 송신측은 해당 MAC주소를 ARP테이블에 기록하여 저장해둡니다.
ARP프로토콜의 패킷 형식은 다음과 같습니다.
8비트 | 8비트 | 16비트 | |||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
하드웨어 타입 | 프로토콜 타입 | ||||||||||||||||||||||||||||||
하드웨어 주소 길이 | 프로토콜 주소 길이 | 동작 구분 | |||||||||||||||||||||||||||||
송신지 하드웨어 구조 | |||||||||||||||||||||||||||||||
송신지 프로토콜 구조 | |||||||||||||||||||||||||||||||
목적지 하드웨어 구조 | |||||||||||||||||||||||||||||||
목적지 프로토콜 구조 |
1). “하드웨어 타입”(Hardware Type)은 사용 중인 물리적 주소 체계를 나타내는 비트열 입니다.
i). 하드웨어 타입 1 : 이더넷 (Ethernet) (주소 크기 6 바이트)
ii). 하드웨어 타입 6 : IEEE 802 네트워크 (주소 크기 6 바이트)
iii). 하드웨어 타입 15 : Frame Relay (주소 크기 2 바이트)
iv). 하드웨어 타입 32 : InfiniBand (주소 크기 8 바이트)
2). “프로토콜 타입”(Protocol Type)은 패킷이 사용될 예정인 상위 계층의 프로토콜을 나타내는 비트열 입니다.
i). 프로토콜 타입 0x0800 : IPv4 (Internet Protocol version 4) (주소 크기 4 바이트)
ii). 프로토콜 타입 0x86DD : IPv6 (Internet Protocol version 6) (주소 크기 16 바이트)
3). “하드웨어 주소 길이”(Hardware Address Length)는 해당 패킷이 사용하는 하드웨어 타입의
바이트 단위 길이를 나타내는 비트열 입니다.
4). “프로토콜 주소 길이”(Protocol Address Length)는 해당 패킷이 사용하는 프로토콜 타입의
바이트 단위 길이를 나타내는 비트열 입니다.
5). “동작구분”(Operation) 필드는 ARP 프로토콜 동작의 종류를 나타내는 필드 입니다.
i). 동작 구분 값 1 : ARP 요청 (Request) 이고,
수신자에게 해당 IP 주소를 가진 장치의 MAC 주소를 요청하기 위해 사용됩니다.
ii). 동작 구분 값 2 : ARP 응답 (Reply) 이고,
ARP 요청에 대한 응답으로 IP 주소를 가진 장치의 MAC 주소를 회신하기 위해 사용됩니다.
6). “송신지 하드웨어 주소”는 자신의 MAC 주소를, “수신지 하드웨어 주소”는 목적지의 MAC주소를 나타내고,
“송신지 프로토콜 주소”는 자신의 IP주소를, “수신지 프로토콜 주소”는 목적지의 IP주소를 나타냅니다.
처음, ARP를 사용할 때는 목적지를 특정 할 수 없기 때문에 목적지 MAC주소를 Broadcast로 설정합니다.
해당 IP주소를 가진 수신자가 수신지 프로토콜 주소를 보고 수신지 검증을 하고,
맞다면, 송신지 프로토콜 주소와 송신지 하드웨어 주소를 이용하여 수신지 값으로 바꿔 넣고,
자신의 MAC주소를 송신지 하드웨어 주소에 넣어 Unicast방식으로 응답 해주기 위해 사용됩니다.
“RARP”(Reverse Address Resolution Protocol)는 ARP의 역 관계로 MAC주소를 가지고,
해당 장치의 IP주소를 받아오는 프로토콜입니다.
주로, 서브넷의 트래픽이나 패킷을 중계하기 위해 고안된 프로토콜 입니다.
오늘날에는 유사하지만 다른 “DHCP”가 자리 잡으면서 RARP는 잘 안 쓰이지만 중요한 개념에 속합니다.
3.4. 이더넷
“이더넷”(Ethernet)은 링크 계층의 MAC주소와 프레임을 다루는 프로토콜 중 하나로,
오늘날 자주 사용되는 “LAN”(Local Area Network)기술입니다.
다음은 이더넷에 대해 나열 한 것입니다.
1). 이더넷은 IEEE 802.3 워킹그룹에 의해 표준화 되었습니다.
2). 링크계층에서 MAC주소를 다루며, “충돌검사”(CSMA/CD)방식을 사용하여 여러 데이터 프레임들을 처리합니다.
3). 이더넷은 네트워크 계층으로 “비연결형”(Unconnection-Oriented), “비신뢰적”(Unreliable) 서비스를 제공합니다.
i). 전송할 상대와 사전 연결 행위 없이 즉시 프레임을 주고 받습니다.
ii). 데이터 프레임을 수신하면 CRC로 오류 검사를 수행하지만, 어떠한 응답을 하지 않으며,
오류가 발생한 프레임은 즉시 버려집니다.
이더넷은 비연결형, 비신뢰적으로 만듦으로서 속도와 비용 절감 효과를 얻기 때문에,
오늘날까지 추가적인 서비스 없이 비연결형, 비신뢰적으로 사용 중 입니다.
4). 현재까지 사용되는 이더넷의 종류를 나열 한 것입니다.
i). Ethernet : 10Mbps, 동축케이블과 TP를 사용 ( 예 : 10Base-5 , 10Base-2 , 10Base-T )
ii). Fast Ethernet : 100Mbps, TP와 광섬유를 사용 ( 예 : 100Base-TX , 100Base-FX )
iii). Gigabit Ethernet : 1000Mbps, TP와 광섬유를 사용 ( 예 : 1000Base-SX , 1000Base-LX , 1000Base-T )
iv). 10 Gigabit Ethernet : 10Gbps, Full-duplex만 지원, TP와 광섬유를 사용 ( 예 : 10GBASE-SR , 10GBASE-T )
5). 이더넷 그룹을 “토폴로지”(Topology)로 표현하며, 총 세 가지 형태가 존재합니다.
i). 버스 토폴로지 , ii). 허브 기반 스타 토폴로지 , iii). 스위치 기반 스타 토폴로지
이더넷 프레임의 형태는 다음과 같습니다.
물리계층 프레임 시작 (IPG 시작) | 링크계층 프레임 ( 이더넷 프레임 ) | IPG 종료 | |||||
---|---|---|---|---|---|---|---|
프리앰블 (7B) | SFD (1B) | 목적지 주소 (6B) | 출발지 주소 (6B) | 타입 (2B) | 데이터와 패딩 (46B ~ 1500 B) | CRC (4B) | IPG (12B) |
1). 프리앰블 (7 바이트) :
2). SFD (1 바이트) :
3). 목적지 주소와 출발지 주소 (각 6 바이트) :
4). 타입 (2바이트) :
5). 데이터와 패딩 (46 ~ 1500 바이트) :
6). CRC (4바이트) :
7). IPG (12바이트) :
이더넷은 “64바이트 최소 프레임 크기”를 유지하면서 전송을 해야 합니다.
64바이트의 최소 프레임 크기를 유지하는 이유는 충돌 검출의 정확성과 기능을 보장하기 위함입니다.
만약, 이더넷이 64 바이트 최소 프레임 크기 제약을 깨고 더 작은 크기의 통신을 하는 경우에는
이더넷이 충돌을 감지하기 전에 데이터가 충돌 된 채로 전송 완료가 되기 때문에,
이더넷은 충돌 감지 분해능으로 64바이트로 지정하고,
어떠한 송수신 프레임이든 최소 64바이트 이상으로 보내도록 정하여 충돌 감지를 하기 위한 것입니다.
계산 해보면 데이터가 46바이트 이상이어야 최소 64바이트가 되는 것을 볼 수 있습니다. ( IPG 블록은 제외 )
기가비트의 반 이중 모드(Half-duplex)모드에서는 전송 슬롯의 길이가 512바이트로,
64바이트 최소 프레임이 슬롯에 맞게 512 바이트 크기로 변환 되어 전송을 시도 하는데,
이 때, 512 바이트 보다 작은 프레임이면, 이를 맞추기 위해 IPG블록 위치에 확장 비트열을 사용하여 보정합니다.
만약, 512 바이트 보다 큰 프레임이면, 프레임을 단편화 하여 슬롯에 나누어 전송을 시도합니다.
512 바이트 보다 작은 프레임이 많은 경우에는 전송 효율이 떨어지게 되는데,
이 효율을 늘리기 위해 “프레임 버스팅”(Frame Bursting)기법을 사용하기도 합니다.
프레임 버스팅은 프레임의 길이가 512 바이트 이하인 프레임들에 대해서
“캐리어 확장”(Carrier Extension)을 진행하여 데이터를 한번에 보낼 수 있도록 합니다.
즉, 첫 프레임의 타입을 캐리어 확장 값으로 설정하면, 캐리어 확장이 되고,
이후, “IFG”(InterFrame Gap)을 사이에 두고, 각 프레임을 연결하여 한 번에 전송하는 방법입니다.\
이더넷은 다중 접속을 허용하기 때문에, “다중 접속 프로토콜”을 사용합니다.
다중 접속 프로토콜은 다음 세 가지가 존재합니다.
1). 채널 분할 프로토콜 :
2). 랜덤 접속 프로토콜 :
3). 순번 프로토콜 :
CSMA/CD