이번에는 OSI 7 Layer
의 두 번째 계층인 데이터 링크 계층
에 대해서 알아보도록 하겠습니다.
이더넷(Ethernet)
은 LAN에서 데이터 통신을 수행하기 위해 사용하는 규칙입니다.
여러 대의 컴퓨터가 통신을 할 경우 데이터들이 충돌을 일으킬 가능성이 있는데, 이더넷은 이런 충돌을 막고자 데이터들의 수신 시점을 늦추게 되어있습니다. 이 방법을 CSMA/CD(Carrier Sense Multiple Access with Collision Detection)
라고 합니다. 간략하게 이야기하자면 데이터를 보낼 때 연결된 케이블에 다른 데이터가 흐르는지 확인하고 흐르지 않으면 데이터를 보냅니다(CSMA). 그리고 추가적으로 충돌이 발생하고 있는지도 확인합니다(CD).
송신 전 busy 상태
인지 확인합니다.
busy 상태
: 바쁜, 케이블이 사용 중이라는 의미.
busy 상태면 대기하고 유휴 상태가 되면 RTS
를 전송합니다.
RTS
: Ready To Send or Request To Send. 데이터를 전송할 의사가 있음을 알리기 위해 보내는 신호.
CTS
를 받게되면 그 때 전송을 시작합니다.
CTS
: Clear To Send. 수신지에서 송신지에 데이터를 받을 준비가 되었다고 알리는 신호.
ACK
대기.
ACK
: Acknowledgement. 승인 신호. 이 신호는 수신측에서 데이터를 정상적으로 받았거나 송신해도 된다는 것을 알리는 신호.
SDMA/CD
는 상당히 좋아보이지만 무선 매체에서는 사용하기가 어렵다는 문제가 있습니다. 바로 숨겨진 단말기 문제
때문입니다.위 그림에서 무선 A 단말기와 무선 B 단말기처럼 배치 될 경우, B 단말기는 A 단말기의 범위에 있지 않으므로 A 단말기가 데이터를 보내고 있는지 알 수가 없습니다. 따라서 busy 상태를 서로가 알지 못하는 상태여서 충돌이 발생하게 되며, 이 문제를 숨겨진 단말기 문제
라고 합니다. 이러한 문제 때문에 무선 환경에서는 SDMA/CD
방식을 사용하기 어렵다는 문제가 발생합니다.
그래서 무선 환경에서는 SDMA/CA
라는 방식을 사용합니다.
SDMA/CA(Carrier Sense Multiple Access with Collision Avoidance)
는 무선 환경에서 충돌을 피하기 위해 사용하는 방식입니다. 이 방식은 전송 전에 캐리어 센싱
이라는 과정을 거칩니다.
캐리어 센싱
은 공유하고 있는 매체가 사용중인지를 확인하는 과정입니다. 수신지에 점유 시간을 알리는 등의 방식으로 사용중인지를 확인할 수 있습니다.
이 시간을 IFS(Inter-time Space)라고 합니다.
이더넷은 케이블의 종류, 통신 속도 등에 따라서 여러 규격으로 나뉩니다.
이 규격은 대충 [숫자 BASE n]으로 규격화 되어 있는데,
숫자는 통신 속도를 의미합니다.(Mbps 단위). BASE는 BASEBAND라는 전송 방식을 의미하고, n은 케이블 종류를 의미합니다. 숫자가 오는 것도 있고 문자가 오는 것도 있습니다.
대표적인 이더넷 규격을 4가지 소개해드리겠습니다.
- 10BASE5: 초기 이더넷, 10Mbps, 베이스밴드, 동축 케이블 최대 길이 500m.
- 10BASE2: 10Mbps, 베이스밴드, 최대 200m.
- 10BASET: 10Mbps, 베이스밴드, 꼬임선 사용.
- 10BASEF: 10Mbps, 베이스밴드, 시스템을 광케이블로 연결.
데이터링크 계층
은 다시 MAC 계층
과 LCC 계층
으로 나뉘어집니다.
MAC: Media Access Control
MAC 계층
은 전송 매체의 물리적 틍성을 반영하는 층으로, LAN의 종류에 따라서 다른 프로토콜들이 존재합니다. 대표적으로 이더넷
과 토큰 링
이 있습니다.
이더넷
의 경우 데이터를 송신하기 전에 케이블이 사용중인지 확인하고 전송을 하게됩니다.
토큰 링
은 데이터를 전송하기 위해 토큰이란 것을 발급 받고, 전송이 완료되면 토큰을 제출하는 식으로 데이터를 전송합니다.
LCC: Logical Link Control
LCC 계층
은 데이터링크 층을 소개할 때 수행한다고 했던 임무들(에러 제어, 흐름 제어, 접근 제어)를 수행합니다.
MAC 주소
는 데이터링크 계층에서 네트워크 통신을 하기 위해 네트워크 기기(하드웨어)에 부여되어있는 고유의 주소입니다. 즉, 통신이 가능한 장비라면 개별적으로 가지고 있는 유일한 번호라고 할 수 있습니다. 우리는 지금 컴퓨터를 이야기하고 있으므로, 컴퓨터에서는 랜카드에 MAC 주소가 부여되어 있습니다.
MAC 주소를 이용한 통신에서는 목적지 주소 등을 알리기 위해 패킷에 헤더를 붙입니다. 데이터링크층에서는 헤더에 이더넷 헤더
와 트레일러
를 붙여서 다음 계층으로 보냅니다.
이더넷 헤더
는 목적지의 MAC주소(6바이트)
, 수신지의 MAC주소(6바이트)
, type(2바이트)
의 정보가 담긴 14바이트의 정보입니다.
목적지와 수신지의 MAC 주소는 말 그대로, 송수신지의 MAC 주소를 의미합니다. 그리고 type
은 이더넷으로 전송되는 상위 계층의 프로토콜의 종류를 의미하는 번호가 들어갑니다.
트레일러
는 FCS(Frame Check Sequence)
라고도 하며 데이터 전송 과정에서 오류가 발생했는지를 검출하기 위해 사용이됩니다.
데이터에 이더넷 헤더와 트레일러가 추가되게 되면 이것을 프레임
이라고 부릅니다. 이더넷에서는 7개의 필드가 모여 하나의 프레임 포맷을 이루게 됩니다.
Preamble, SFD, 목적지 주소, 송신지 주소, 타입/길이, 데이터, FCS(CRC)
- Preamble: 수신지에 프레임이 전송됨을 알리고, 프레임의 전기 신호(0과 1)을 구분할 수 있도록 syncronization 신호를 제공한다.
- SFD(Start Of Frame): 프레임의 시작을 알린다.
- 목적지 주소, 송신지 주소: 각각 목적지와 송신지의 MAC 주소를 표시한다.
- 타입/길이: 위에서 언급한 프로토콜의 종류 표시. 이때 값이 1,500이하면 프레임 데이터 필드의 길이도 표시해준다.
- 데이터: 실제 데이터의 부분. 46byte ~ 1,500byte의 크기를 갖는다. 46byte 미만의 데이터는 빈 공간을 의미없는 부호로 채워준다.
- FCS(CRC, Cyclic Redundancy Check): 에러를 검출하는 필드이다.
이번엔 데이터가 충돌하지 않는 구조에 대해 알아보겠습니다.
simplex
라는단방향 통신
도 존재하는데, 이것은 라디오/TV처럼 일방적으로 받거나 주는 경우에만 사용합니다.
반이중 통신(half-duplex)
는 양방향 전송이 가능하지만, 동시에는 불가능한 방식입니다. 즉, 회선 하나로 송신과 수신을 번갈아가면서 사용하게 됩니다. 데이터가 짧고 가벼우면 번갈아가는 속도가 매우 빨라져서 전이중과 차이점이 없지만, 용량이 커지면 상당히 느려지게 됩니다.
전이중 통신(full-duplex)
는 데이터의 송수신을 동시에 수행합니다. 데이터를 동시에 전송해도 충돌이 일어나지 않으므로 주로 전송량이 많거나 전송 매체 용량이 큰 경우에 사용합니다.
두 컴퓨터를 직접 연결할 경우 LAN선이 주로 8개의 선을 2쌍씩 꼬아 4개의 쌍을 이용하므로, 컴퓨터1에 송수신선(2쌍), 컴퓨터2에 송수신선(2쌍)을 연결하여 사용할 수 있게 되는 것입니다.
따라서 비교해보면, 같은 조건에서는 전이중 통신이 훨씬 유리하다는 것을 알 수 있습니다.
모뎀, 허브 등이 반이중 통신 방식을 이용합니다. 앞서말한 효율의 문제 때문에 전이중 통신이 가능한
스위치(switch)
를 주로 사용하고 있습니다.