LAN 어댑터 개요

Violet_Evgadn·2023년 4월 26일
0

네트워크

목록 보기
18/37

이더넷

이더넷이란?

이더넷이란 하나의 인터넷 회선에 유/무선 통신장비, 허브, 라우터 등을 통해 다수의 시스템 간 통신이 가능한 네트워크 구조를 말한다.

뭔가 어려워 보이지만, 그냥 케이블 같은 인터넷 회선을 통해 데이터를 주고받을 수 있으면 이더넷을 활용하는 것이다.

이더넷은 전 세계에서 가장 많이 활용되는 네트워크 규격이다.

인터넷과 헷갈릴 수도 있지만 이 둘은 완전히 다른 개념이다.

인터넷은 여러 네트워크를 전 세계적으로 연결한 컴퓨터 네트워크이다.

그에 비해 이더넷은 네트워크를 구성하는 방식 중 1개 방법을 말한다.

즉, 이더넷을 통해 네트워크를 구성한 뒤 이런 방식으로 구성된 여러 개의 네트워크를 연결하면 인터넷이 되는 것이다.

이더넷 기술은 시간이 지날수록 점차 발전되었는데 발전 과정을 확인해 보며 이더넷에 대해 알아보자.

10BASE-5(이더넷 원형)

PC가 보낸 신호가 연결된 케이블 전체에 흐르는 이더넷의 원형 구조이다.

이 구조는 위 이미지에서 볼 수 있듯 "트랜시버(Transceiver)"라는 작은 기기와 케이블로 구성되어 있다.

이때 트랜시버는 케이블 사이에 신호를 흘리는 역할만 수행하므로 사실상 네트워크가 케이블로만 이루어져 있다 해도 과언이 아니다.

이더넷의 원형 구조에선 기기가 신호를 송신할 경우 연결되어 있는 케이블 전체에 신호가 흐른다.

이때 네트워크에 송신한 신호는 IP 헤더 및 MAC 헤더에 수신처 정보와 패킷을 전달받을 중간 노드에 대한 정보를 저장하고 있다.

이 값을 활용해 패킷을 받아야 할 기기가 맞다면 패킷을 수신하고 아니라면 패킷을 받자마자 폐기한다.

실제 네트워크에선 복수의 기기가 신호를 송신하기 때문에 다수의 신호가 1개 케이블에 흐르며 신호 충돌이 일어날 수 있다.

하지만 이런 부분에 대한 대비책이 결정되어 있고 최근에는 스위칭 허브의 보급에 따라 신호가 충돌하지 않으므로 크게 걱정할 필요는 없다

10BASE-T(리피터 허브)

케이블만 사용했던 이더넷은 트렁크 케이블을 "리피터 허브"로 대체하고 트랜시버 케이블을 "트위스트 페어 케이블"로 대체하며 한 단계 발전했다.

10BASE-5에선 기기가 트랜시버 케이블을 통해 트렁크 케이블로 신호를 보내면 연결된 모든 트렁크 케이블에 신호가 흐르며 목적지까지 신호가 이동했다.

10BASE-T에선 기기가 트위스트 페어 케이블을 통해 신호를 리피터 허브에 보내면 리피터 허브가 목적지까지 신호를 전송한다.

이때 리피터 허브는 10BASE-5와 마찬가지로 허브와 연결되어 있는 트위스트 페어 케이블 전체에 신호를 보낸다.

스위칭 허브

10BASE-T에서 리피터 허브보다 발전된 "스위칭 허브"라는 것을 사용함으로써 이더넷은 한 단계 더 발전되었다.

현재는 이더넷이라고 말하면 스위칭 허브를 이용한 이더넷을 의미한다.

리피터 허브와 유사해보지만 중요한 점이 변경되었는데 바로 허브와 연결된 모든 케이블에 신호를 보내지 않는다는 것이다. 스위칭 허브는 자체적으로 패킷을 받을 다음 기기를 판단하여 그 기기에만 신호를 보낸다.

리피터 허브와 스위칭 허브는 나중에 더 자세히 다룰 것이다.


패킷을 전기 신호로 변환

LAN 어댑터

이더넷 같은 네트워크 Protocol은 케이블 같은 네트워크 기기를 통해 신호를 이동시킨다.

이때 신호는 빛이나 전기 신호 형태여야 이동이 가능하다.

현재 패킷은 0과 1로 이루어진 디지털 데이터이므로 이를 케이블에 송출할 순 없다.

따라서 디지털 데이터를 전기나 빛 신호로 변환해야지만 케이블에 송출이 가능할 것이며 이것이 송/수신 동작의 본질이다.

그리고 디지털 데이터를 전기 신호로 변환해 주는 작업을 하는 하드웨어가 바로 "LAN 어댑터"이다.

이때 LAN 어댑터는 단독으로 동작하지 않고 OS에 설치되어 있는 LAN 어댑터를 제어하기 위한 "LAN 드라이버"라고 부르는 LAN 어댑터 전용 소프트웨어에 의해 제어되며 동작한다.

LAN 드라이버는 LAN 어댑터를 관리하는 SW인 만큼 LAN 어댑터 기종에 따라 달라지므로 LAN 어댑터 제조 업체 전용 SW를 사용해야 한다. 하지만 주요 제조 업체의 LAN 드라이버는 OS에 기본적으로 설치되어 있으므로 큰 신경을 쓰진 않아도 된다.

LAN 어댑터 내부 구조

LAN 어댑터 구조별 역할

  • 버퍼 메모리 : 송/수신하는 패킷을 일시적으로 저장하는 메모리
  • MAC : 충돌 검출/재송신 등 이더넷의 송/수신 동작을 제어
  • PHY(MAU) : 신호를 송신하는 회로와 신호를 수신하는 회로를 합친 것
  • RJ-45 커넥터 : LAN 케이블을 접속하는 커넥터

위 이미지는 LAN 어댑터의 내부 구조를 개념적으로 그린 것이므로 실제 제품의 내부 구조는 제조 업체나 기종에 따라 살짝 달라질 수 있다.

하지만 위 이미지를 통해 LAN 어댑터의 동작 방식에 대한 개념은 이해할 수 있을 것이다.

LAN 어댑터 초기화

모든 하드웨어는 전원이 공급되면 초기화 과정을 거치는데 LAN 어댑터 또한 OS가 기동 되며 초기화 작업이 수행된다.

LAN 어댑터의 초기화 과정에선 하드웨어 이상 검사, 초기 설정 확인 및 적용 등 다른 하드웨어와 공통적인 초기화 작업도 수행하지만 LAN 어댑터만의 특별한 초기화 작업도 수행하는데 바로 "MAC 주소 설정"이다.

이전에 말했듯 LAN 어댑터는 제조될 때 전 세계에서 중복되지 않는 값을 ROM에 기록하며 이 고유값을 "MAC 주소"라고 한다.

그리고 LAN 어댑터는 패킷을 송/수신하기 위하여 이 MAC 주소를 파악해야 할 필요가 있다.

이때 LAN 어댑터는 MAC 주소를 파악하기 위해 필요할 때마다 ROM에 들르지 않는다.

초기화 과정에서 ROM에 저장된 MAC 주소 값을 가지고 와 MAC 회로에 저장함으로써 나중에 MAC 주소가 필요할 경우 OS는 MAC 회로에 저장된 값을 가지고 오면 된다.

LAN 어댑터를 위한 제어 정보

LAN 드라이버는 IP 담당 부분에서 만든 패킷을 받아 LAN 어댑터의 버퍼 메모리에 복사한다.

그리고 복사를 마친 뒤 패킷을 송신하도록 MAC 회로에 명령을 보내면 MAC 회로의 작업이 시작된다.

MAC 회로(LAN 어댑터)는 버퍼 메모리에 저장된 패킷을 추출한 뒤 제어 정보를 추가한다.

패킷의 맨 앞에는 "프리앰블"과 "스타트 프레임 딜리미터"라는 제어 정보를 붙이며 맨 뒤에는 "FCS"라는 오류 검출용 데이터를 부가한다.

참고로 LAN 어댑터 동작을 설명하다 보면 "프레임"이라는 용어가 나올 텐데 패킷과 용어만 다를 뿐 동일한 의미라고 생각하면 된다.

그렇다면 각 제어 정보에 대해 간단히 알아보도록 하자.

클록

프리앰블과 스타트 프레임 딜리미터 동작을 알기 위해선 어떻게 디지털 신호를 신호 데이터로 변환시키는지 알아야 한다.

가장 기본적인 변환 방법은 디지털 데이터의 0과 1 비트 값을 정해진 전압이나 전류 값에 대응시키는 것이다.

예를 들어 0일 경우 5V에 대응시키고 1일 경우 10V에 대응시키는 것이다.

이럴 경우 신호를 디지털 데이터로 변환할 때는 5V 일 때 0으로, 10V 일 때는 1로 변환시키기만 하면 될 것이다.

하지만 여기에서 중요시 봐야 하는 점이 있는데 실제 신호에는 각 비트의 구분을 나타내는 보조선이 있다는 것이다.

아래 사진에서 "Data" 영역을 보면 1과 0으로 데이터가 구성되어 있음을 볼 수 있다.

이때 주의 깊게 봐야 할 것은 "00" 혹은 "111"처럼 동일한 디지털 데이터가 이어지는 상황이다.

이런 경우 단순히 0과 1을 정해진 규칙에 따라 신호 데이터로 변환시키기만 한다면 연속되는 디지털 데이터 비트에 대한 구분이 불가능해진다는 문제가 생긴다.

만약 5V 짜리 신호 데이터가 2초 동안 흘렀다면 2초 동안 흐르는 데이터가 1번 온 것인지 1초 동안 흐르는 데이터가 2번 온 것인지 파악이 불가능해진다는 것이다.

출처 : https://www.tutorialspoint.com/digital_communication/digital_communication_line_codes.htm

이런 문제를 해결하기 위해 "클록"이라는 신호를 사용한다.

클록 신호가 아래에서 위로 변화할 때나 위에서 아래로 변화할 때 데이터 신호의 전압이나 전류 값을 읽고 0과 1의 디지털 데이터로 변환시키는 것이다.

Uniploar NRZ는 위 사진처럼 Clock 주기와 Data 주기를 맞춤으로써 간단히 데이터를 변환할 수 있다.

Uniploar NRZ는 매우 간단하지만 심각한 문제점이 존재한다.

만약 신호를 멀리까지 보내고 싶을 경우 신호가 통과해야 하는 케이블이 길어질 것이다.

이 경우 신호선의 길이가 달라져 데이터 신호와 클록 신호가 전달되는 시간에 차이가 생기게 된다.

즉, 수신 측에서 데이터 신호와 클록 신호를 결합한 Unipolar NRZ 신호 데이터를 받았지만 이를 다시 해독할 때 필요한 클록 신호가 안정적으로 도착한다는 것은 보장할 수 없다.

이런 문제를 해결하기 위해선 클록 신호와 디지털 데이터를 합성하여 아예 1개의 신호로 만든 후 송신하면 된다.

1개의 신호를 보내는 것이기 때문에 2개의 데이터가 동시에 도착하는지 걱정해야 하는 Unioploar NRZ의 문제점을 해결할 수 있는 것이다.

클록 신호와 디지털 데이터를 합성할 때는 "XOR"을 활용한다.

XOR은 배타적 논리합이라고 불리는데 2개의 명제 가운데 1개만 True일 경우 True를 반환하고, 2개 모두 True이거나 2개 모두 False일 경우 False를 반환한다.

이 XOR은 수리 논리학에서 활용하는 용어인데 이를 컴퓨터 프로그래밍(논리회로)에서는 XOR 게이트를 사용한다고 한다.

True는 디지털 데이터 1 혹은 높은 전압, False는 디지털 데이터 0 혹은 낮은 전압을 의미한다.

이를 표로 그리면 아래와 같을 것이다.

출처 : https://sierrahardwaredesign.com/basic-networking/glossary-item-manchester-encoding/

위 사진을 보면 이해가 쉬울 것이다.

위 사진에선 Clock 신호가 위에서 아래로 변화할 때의 신호 값에 따라 합성 신호를 만든다.

첫 번째 Clock 신호가 위에서 아래로 변화할 때 Data는 1 값을 가진다. 그리고 현재 Clock 신호는 아래로 변화했으므로 낮은 전압을 가지고 있는 신호이다.

즉, "낮음"과 "높음"이 결합되므로 "높음"을 의미하는 신호로 합성될 것이며 실제 가장 아래에 있는 "Machester" 신호 데이터를 보면 높은 전압의 신호로 변경되었음을 볼 수 있다.

프리앰블 & 스타트 프레임 딜리미터

위에서 클록에 대해 이해했다면 아래와 같은 의문이 들 수 있을 것이다.

그럼 모든 기기에선 클록 주기가 똑같은 걸까? 만약 그렇지 않다면 신호를 해독하기 위한 Clock 신호가 수신 측에 없는 것은 동일한 문제, 오히려 Clock을 보내지 않았으니 도착할 확률은 0이므로 더욱 불안정한 데이터 송신 방법이 아닐까?

실제로 클록 신호의 주기는 다양하다.

또한 만약 클록 신호의 주기가 모든 기기에서 같다 하더라도 송신 데이터를 만들기 시작했을 때의 Clock 신호 시작점과 패킷이 도착했을 때의 Clock 신호 시작점이 동일하다는 것도 보장할 수 없다.

이렇게 다양한 클록 신호의 주기를 맞추기 위해 활용하는 제어 정보가 바로 "프리앰블"이다.

참고로 이더넷뿐만 아니라 무선 LAN 등 다양한 네트워크 프로토콜에는 각자의 프리앰플 형태가 존재하지만 지금은 가장 대표적인 이더넷 프리앰블에 대해서만 설명하겠다.

프리앰블은 "10"으로 시작하여 "1010..."과 같이 1과 0이 번갈아 나타나는 56 비트 데이터이다.

수신 측에서는 데이터를 받은 뒤 프리앰블이 가지고 있는 파형으로 수신 측의 클록 신호의 주기를 동기화한다.

이런 처리를 거치고 나면 수신 측이 가지고 있는 클록 신호와 데이터를 생성할 때 사용한 클록 신호가 동일할 것이므로 안전하게 데이터를 해독할 수 있는 것이다.

스타트 프레임 딜리미터는 "11"이라는 비트 패턴으로 끝나는 제어 정보로써 프리앰블 뒤에 붙는 8 비트짜리 제어 정보이다.

그렇다면 스타트 프레임 딜리미터는 왜 존재할까?

만약 수신 측에서 프리앰블이 56 비트 데이터임을 사용하여 프리앰블 영역을 파악한다고 가정해 보자.

그럼 수신 측에선 데이터를 1 Bit 확인할 때마다 개수를 센 뒤 56개를 셌을 경우 뒤의 내용이 패킷임을 인지하게 될 것이다.

하지만 이는 매우 비효율적인 방법이다.

따라서 10이 반복되는 프리앰블과 구분되도록 "11"을 마지막에 붙인 스타트 프레임 딜리미터를 사용하는 것이다.

이를 통해 스타트 프레임 딜리미터 이후의 데이터가 실제 패킷의 내용임을 알 수 있으며 수신 측에선 "11"이 나오는 순간 그 이후 내용의 패킷 데이터임을 쉽게 알 수 있는 것이다.

FCS

LAN 어댑터가 패킷의 맨 뒤에 붙인 제어 정보인 FCS는 "Frame Check Sequence"의 약자이다.

이 값은 패킷을 운반하는 도중 노이즈나 충돌 등의 영향으로 파형이 흐트러져 데이터가 변하지 않았는지를 확인하기 위한 검증용 값이다.

FCS는 32비트의 비트열로써 패킷의 맨 앞부터 맨 끝까지 내용을 특정한 계산식에 기초하여 계산한 값이다.

이 계산식은 CRC(Cyclic Redundancy Check)라는 디스크 장치 등에 사용하는 오류 검사 코드와 동일한 종류로써 계산에 활용된 값과 1비트라도 다를 경우 다른 결과를 도출하도록 되어 있다.

만약 패킷 내용이 변했다면 1비트라도 값이 달라졌을 것이고 계산식을 통해 값을 계산하면 FCS에 저장된 값과 다를 것이다. 이런 값의 불일치를 통해 데이터가 변형되었다는 사실을 검출할 수 있다.

profile
혹시 틀린 내용이 있다면 언제든 말씀해주세요!

0개의 댓글