일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- end to end
- 15649
- 밑바닥부터 시작하는 딥러닝
- pyenv
- 신경망 학습
- 개발환경
- 1002
- 1101
- 실버
- 백준
- 그리디 알고리즘
- Mac
- n과 m
- 파이싼
- 손실함수
- 파이썬
- 4948
- 백트래킹
- 9020
- 기계학습
- 가상환경
- 재귀
- 설정
- streamlit
- BOJ
- N-Queen
- Python
- 경사하강법
- Today
- Total
파이톨치
[네트워크] DataLink layer 본문
DataLink layer
데이터 링크 계층은 인접한 노드 간의 신뢰성 있는 데이터 전송을 목표로 한다.
네트워크에서 노드(node)는 호스트(host)와 라우터(router)로 구분할 수 있습니다. 호스트는 일반적으로 사용자가 직접 사용하는 컴퓨터나 장치를 의미하며, 라우터는 네트워크 간의 패킷 전송을 담당하는 장비입니다. 노드 간의 상호작용은 링크(link)를 통해 이루어집니다. 링크는 인접한 노드 간의 통신 채널을 의미하며, 크게 유선 링크(Wired links), 무선 링크(Wireless links), 그리고 LAN(Local Area Network)으로 구분할 수 있습니다.
데이터 링크 계층(Data Link Layer)에서는 2계층 패킷을 프레임(frame)이라고 부릅니다. 프레임은 상위 계층에서 전달받은 패킷을 캡슐화(encapsulation)한 것으로, 데이터 링크 계층에서 사용되는 주소 정보와 오류 제어 정보 등을 포함하고 있습니다.
네트워크 계층에서 링크 계층으로의 캡슐화과정은 다음과 같습니다:
1. 네트워크 계층에서 전달받은 패킷에 링크 계층 헤더와 트레일러를 추가하여 프레임을 생성합니다.
2. 프레임의 구조는 사용 중인 링크 계층 프로토콜(MAC 프로토콜)에 의해 명시됩니다.
데이터 링크 계층(Link Layer)은 다양한 서비스를 제공하여 물리적으로 인접한 노드 간의 안정적인 데이터 전송을 보장합니다. 주요 서비스로는 프레이밍(framing), 링크 접근(link access), 신뢰할 수 있는 전송(reliable delivery), 흐름 제어(flow control), 오류 감지(error detection), 오류 수정(error correction), 반이중 통신(half-duplex), 전이중 통신(full-duplex) 등이 있습니다.
1. 프레이밍(Framing): 상위 계층에서 전달받은 패킷을 프레임으로 캡슐화하는 과정입니다. 이 과정에서 MAC(Media Access Control) 주소와 같은 데이터 링크 계층 주소 정보를 프레임에 추가합니다.
2. 링크 접근(Link Access): 여러 노드가 공유하는 링크에서 데이터를 전송할 수 있는 권한을 얻는 과정입니다. 이를 위해 CSMA/CD, CSMA/CA 등의 접근 제어 프로토콜이 사용됩니다.
3. 신뢰할 수 있는 전송(Reliable Delivery): 무선 링크는 일반적으로 유선 링크에 비해 높은 에러율을 가지고 있습니다. 데이터 링크 계층에서는 이러한 에러를 감지하고 수정하여 안정적인 데이터 전송을 보장합니다.
4. 흐름 제어(Flow Control): 송신 노드와 수신 노드 간의 데이터 전송 속도를 조절하여 수신 노드의 버퍼 오버플로우를 방지합니다. 이를 통해 데이터 손실을 막을 수 있습니다.
5. 오류 감지(Error Detection): 전송 중 발생한 오류를 감지하기 위해 CRC(Cyclic Redundancy Check)와 같은 오류 감지 코드를 사용합니다. 이를 통해 수신 노드는 오류가 있는 프레임을 식별할 수 있습니다.
6. 오류 수정(Error Correction): 오류가 감지된 경우, 데이터 링크 계층에서는 자동으로 오류를 수정하거나 재전송을 요청하여 오류를 복구합니다.
7. 반이중 통신(Half-Duplex) 및 전이중 통신(Full-Duplex): 반이중 통신에서는 노드가 데이터를 송신하거나 수신할 수 있지만, 동시에 송수신할 수는 없습니다. 반면, 전이중 통신에서는 노드가 동시에 데이터를 송수신할 수 있습니다.
송신 노드의 데이터 링크 계층에서는 프레이밍, 오류 검사 비트 추가, 흐름 제어 등의 기능을 수행합니다.
수신 노드의 데이터 링크 계층에서는 오류 확인, 흐름 제어, 패킷 추출, 상위 계층으로의 전달 등의 기능을 수행합니다.
2계층의 주요 기능
1. 에러 제어:
* CRC(Cyclic Redundancy Check)를 사용하여 전송 중 발생한 에러를 검출합니다.
* 이더넷에서는 에러가 발생한 프레임을 버리고, 재전송 요청을 하지 않습니다.
2. MAC 제어:
* CSMA/CD(Carrier Sense Multiple Access with Collision Detection)와 같은 매체 접근 제어 기법을 사용하여 공유 매체에 대한 접근을 제어합니다.
* 이를 통해 충돌을 최소화하고 효율적인 데이터 전송을 보장합니다.
3. MAC 주소 확인:
* ARP(Address Resolution Protocol)를 사용하여 IP 주소에 해당하는 MAC 주소를 확인합니다.
* 이를 통해 상위 계층에서 받은 IP 주소를 기반으로 실제 데이터 전송에 필요한 MAC 주소를 얻을 수 있습니다.
이더넷 프레임 구조
이러한 구조를 가진 이더넷 프레임은 2계층에서 처리되며, 에러 제어, 매체 접근 제어, 주소 확인 등의 기능을 수행합니다. 이를 통해 안정적이고 효율적인 데이터 전송이 이루어집니다.
MAC sublayer
링크 계층에서는 MAC (Media Access Control) 주소를 사용하여 노드를 식별합니다. MAC 주소는 48비트로 구성되며, 네트워크 어댑터에 할당된 고유한 주소입니다. 이더넷과 같은 LAN에서는 MAC 주소를 사용하여 프레임을 전송합니다.
1. 브로드캐스트(broadcast) 환경
- 유선 이더넷은 공유 매체(shared medium)를 사용하므로 브로드캐스트 환경입니다.
- 허브(hub)는 들어오는 프레임을 모든 포트로 브로드캐스트합니다.
- 무선 네트워크 역시 브로드캐스트 환경입니다.
2. 스위치(switch)의 역할
- 스위치는 개별 포트 간 포인트-투-포인트(point-to-point) 연결을 제공합니다. 같은 네트워크 내에서 프레임을 전달하는 역할
- MAC 주소를 기반으로 프레임의 목적지 주소를 보고 해당 포트로만 프레임을 전달합니다.
3. 매체 액세스 제어(Media Access Control)
- 브로드캐스트 환경에서는 여러 노드가 동시에 전송할 경우 충돌(collision)이 발생합니다.
- 이를 방지하기 위해 MAC 프로토콜이 매체 액세스를 제어합니다. (예: CSMA/CD)
- 유선과 무선 환경에서 MAC 프로토콜이 다릅니다.
4. 오류 제어
- 물리 계층에서 발생하는 비트 오류를 검출하고 정정하기 위해 MAC 계층에서 오류 제어 프로토콜을 사용합니다. (예: 프레임 체크열)
따라서 MAC 서브레이어는 공유 매체 환경에서 매체 액세스를 제어하고, 충돌과 오류를 다루는 핵심 역할을 수행합니다.
NIC
링크 계층(Link Layer)은 네트워크의 각 호스트(host)에서 구현되며, 일반적으로 어댑터(adapter) 또는 네트워크 인터페이스 카드(NIC, Network Interface Card)에 구현됩니다. 이러한 어댑터나 NIC는 하드웨어, 소프트웨어, 펌웨어의 조합으로 이루어져 있습니다.
1. 어댑터(Adapter) 또는 네트워크 인터페이스 카드(NIC):
- 링크 계층은 주로 이더넷 카드(Ethernet card), 무선랜 카드(802.11 card) 등의 어댑터나 NIC에 구현됩니다.
- 최근에는 이더넷 칩셋(Ethernet chipset)과 같이 호스트의 메인보드에 직접 통합되는 형태로도 구현됩니다.
2. NIC의 역할:
- NIC는 링크 계층(Link Layer)과 물리 계층(Physical Layer)을 구현합니다.
- 링크 계층에서는 프레이밍, 주소 지정, 오류 제어 등의 기능을 수행하고, 물리 계층에서는 실제 비트 전송을 담당합니다.
- NIC는 호스트의 시스템 버스(System Bus)에 연결되어 호스트와 네트워크 사이의 데이터 전송을 가능하게 합니다.
3. 링크 계층의 구성:
- 링크 계층은 하드웨어, 소프트웨어, 펌웨어의 조합으로 이루어집니다.
- 하드웨어 부분은 NIC 자체와 물리적 인터페이스를 담당합니다.
- 소프트웨어 부분은 디바이스 드라이버(Device Driver)와 같이 호스트 운영체제에서 실행되는 부분입니다. 디바이스 드라이버는 NIC를 제어하고 상위 계층과의 인터페이스를 제공합니다.
- 펌웨어는 NIC 내부에 저장된 소프트웨어로, NIC의 동작을 제어하고 관리하는 역할을 합니다.
이러한 구조를 통해 링크 계층은 호스트와 네트워크 사이의 데이터 전송을 안정적이고 효율적으로 수행할 수 있습니다. NIC는 호스트의 시스템 버스에 연결되어 상위 계층에서 받은 데이터를 프레이밍하고 주소를 지정한 후 물리 계층을 통해 전송합니다. 반대로, 수신한 데이터는 물리 계층을 거쳐 NIC에서 처리되고 상위 계층으로 전달됩니다. 이 과정에서 하드웨어, 소프트웨어, 펌웨어가 긴밀히 협력하여 링크 계층의 기능을 수행합니다.
error detection & correction
에러 감지 및 수정(Error Detection and Correction, EDC)은 데이터 전송 과정에서 발생할 수 있는 오류를 찾아내고 수정하기 위해 사용되는 기술입니다. EDC 비트는 전송되는 데이터에 추가되는 중복 비트로, 수신 측에서 오류를 감지하고 수정하는 데 사용됩니다. 데이터(D)는 에러 체크 코드에 의해 보호되며, 헤더 필드에 포함될 수 있습니다.
에러 감지 방법에는 여러 가지가 있습니다:
1. 패리티 체크(Parity Checking):
패리티 체크(Parity Checking)는 데이터 전송 중에 발생할 수 있는 오류를 검출하기 위해 사용되는 간단한 방법입니다. 이 방법은 전송되는 데이터 비트의 개수에 따라 패리티 비트를 추가하여 오류를 감지합니다.
패리티 비트는 데이터 비트의 합이 짝수(even parity) 또는 홀수(odd parity)가 되도록 설정됩니다. 수신 측에서는 받은 데이터 비트와 패리티 비트의 합을 계산하여 오류 여부를 판단합니다.
1. 싱글 비트 패리티(Single Bit Parity):
- 예시: 데이터 비트가 1011이고, 짝수 패리티(even parity)를 사용한다고 가정해봅시다.
- 데이터 비트의 1의 개수를 계산하면 3개입니다. 짝수 패리티이므로 패리티 비트는 1이 되어야 합니다.
- 전송되는 비트열: 1011 1
- 수신 측에서는 받은 비트열의 1의 개수를 계산하여 짝수인지 확인합니다. 만약 홀수라면 단일 비트 오류가 발생한 것으로 판단할 수 있습니다.
2. 2차원 비트 패리티(Two-dimensional Bit Parity):
- 예시: 데이터 비트를 2차원 배열로 구성하고, 각 행과 열에 대해 패리티 비트를 계산합니다.
- 각 행과 열의 패리티 비트는 해당 행 또는 열의 데이터 비트 합이 짝수가 되도록 설정됩니다.
- 수신 측에서는 받은 데이터의 행과 열 패리티를 계산하여 오류 여부를 판단합니다.
- 만약 특정 행과 열의 패리티가 일치하지 않는다면, 해당 행과 열이 교차하는 비트에 오류가 발생한 것으로 판단(위치 지정)하고 해당 비트를 반전시켜 오류를 수정(수정 가능)할 수 있습니다.
패리티 체크는 간단하고 구현이 쉽다는 장점이 있지만, 단일 비트 오류만 감지할 수 있으며 수정 능력이 제한적입니다. 또한,짝수 개의 비트 오류가 발생하면 감지하지 못할 수 있습니다.
2. 인터넷 체크섬(Internet Checksum):
인터넷 체크섬(Internet Checksum)은 전송된 데이터의 무결성을 확인하기 위해 사용되는 에러 감지 방법으로, 주로 인터넷 프로토콜(IP)과 전송 제어 프로토콜(TCP), 사용자 데이터그램 프로토콜(UDP)에서 사용됩니다.
인터넷 체크섬은 구현이 간단하고 오버헤드가 적다는 장점이 있지만, 모든 종류의 에러를 감지하지는 못합니다. 예를 들어, 비트 순서가 바뀌는 에러나 짝수 개의 동일한 위치에서 발생하는 에러는 감지하지 못할 수 있습니다.
체크섬 계산 과정은 다음과 같습니다:
1. 송신 측:
- 전송할 데이터를 16비트 단위로 나눕니다.
- 모든 16비트 단위를 1의 보수(one's complement) 연산으로 더합니다. 이때 캐리(carry)가 발생하면 다시 합에 더해줍니다.
- 계산된 합의 1의 보수를 취하여 체크섬 값을 얻습니다.
- 계산된 체크섬을 데이터의 헤더에 포함시켜 전송합니다.
2. 수신 측:
- 수신한 데이터를 16비트 단위로 나누고, 체크섬 값을 포함하여 모두 1의 보수 연산으로 더합니다.
- 결과가 모두 1로 이루어진 값(즉, -0 또는 0xFFFF)이 나오면 에러가 없는 것으로 판단합니다. 그 외의 값이 나오면 에러가 발생한 것으로 판단합니다.
예시:
- 전송할 데이터: "1001 0011"
- 송신 측:
- 16비트 단위로 나누면: "0000000000011001" (첫 번째 그룹)
- 1의 보수를 취하여 체크섬 계산: ~0000000000011001 = 1111111111100110
- 체크섬을 데이터에 포함하여 전송: "00000000000110011111111111100110"
- 수신 측:
- 수신한 데이터를 16비트 단위로 나누기: "0000000000011001" (첫 번째 그룹), "1111111111100110" (체크섬)
- 1의 보수 연산으로 더하기: 0000000000011001 + 1111111111100110 = 1111111111111111 (-0 또는 0xFFFF)
- 계산 결과가 모두 1이므로 에러가 없는 것으로 판단합니다.
3. 순환 중복 검사(Cyclic Redundancy Check, CRC):
순환 중복 검사(Cyclic Redundancy Check, CRC)는 더욱 강력한 에러 감지 방식으로, 데이터 통신에서 널리 사용됩니다. CRC는 송신 측에서 데이터에 특정 비트 패턴을 붙여 전송하고, 수신 측에서는 이를 확인하여 에러 여부를 판단합니다.
CRC는 r개의 모든 버스트 오류를 감지할 수 있습니다. 버스트 오류란 연속적인 비트에서 발생하는 오류를 의미합니다. 또한, CRC는 실제로 이더넷, 802.11 WiFi, ATM 등 다양한 네트워크 기술에서 사용되고 있습니다.
CRC의 강점은 에러 감지 능력이 우수하다는 점이지만, 계산 과정이 비교적 복잡하고 오버헤드가 크다는 단점이 있습니다. 따라서 상황에 따라 적절한 에러 감지 방식을 선택하는 것이 중요합니다.
CRC 계산 과정은 다음과 같습니다:
1. 데이터 비트(D)를 이진수로 간주합니다.
2. r+1 비트 패턴(생성자, Generator)인 G를 선택합니다. 이때 G의 최상위 비트와 최하위 비트는 항상 1(미리 정해진 소수)입니다.
3. 데이터 비트 D의 끝에 r개의 0을 추가합니다. 이를 D * 2^r로 표기합니다.
4. D * 2^r을 G로 나누어 나머지 R을 구합니다. 이때 나눗셈은 모듈로-2 연산(XOR)을 사용합니다.
5. 나머지 R은 r 비트 길이를 가지며, 이를 CRC 비트라고 합니다.
6. 전송할 데이터는 D * 2^r + R이 됩니다. 즉, 원래의 데이터 비트 D 뒤에 CRC 비트 R을 붙여서 전송합니다.
수신 측에서는 받은 데이터를 G로 나누어 나머지가 0인지 확인합니다. 나머지가 0이 아니라면 에러가 발생한 것으로 판단합니다.
예시:
- 데이터 비트(D): 1101011011
- 생성자(G): 10011 (r+1 = 5), (r=4)
1. D * 2^r = 11010110110000
2. G로 나누기 (모듈로-2 연산):
11010110110000 / 10011 = 1101110010 ... 1110
나머지(R) = 1110
3. 전송할 데이터: 11010110111110
수신 측에서는 받은 데이터 11010110111110을 G로 나누어 나머지를 확인합니다.
11010110111110 / 10011 = 1101110011 ... 0000
나머지가 0이므로 에러가 발생하지 않은 것으로 판단합니다.
각 방법의 장단점:
1. 패리티 체크:
- 장점: 간단하고 구현이 쉽습니다.
- 단점: 단일 비트 오류만 감지할 수 있으며, 수정 기능이 제한적입니다.
2. 인터넷 체크섬:
- 장점: 구현이 간단하고 오버헤드가 적습니다.
- 단점: 모든 오류를 감지하지는 못하며, 수정 기능이 없습니다.
3. 순환 중복 검사(CRC):
- 장점: 강력한 에러 감지 능력을 가지고 있으며, 버스트 오류를 잘 감지할 수 있습니다.
- 단점: 구현이 상대적으로 복잡하고 오버헤드가 더 클 수 있습니다.
에러 감지 및 수정은 100% 신뢰할 수는 없지만, 프로토콜은 대부분의 오류를 감지할 수 있습니다. EDC 필드의 크기가 클수록 더 나은 감지 및 수정 능력을 가질 수 있습니다. 상황에 따라 적절한 에러 감지 방법을 선택하는 것이 중요합니다.
multiple access protocols
다중 접속 프로토콜 (Multiple Access Protocol)은 여러 노드가 하나의 공유된 미디어를 통해 데이터를 전송할 때 사용되는 방식입니다. 이 때, 두 개 이상의 노드가 동시에 데이터를 전송하게 되면 충돌 (Collision)이 발생하게 되어 데이터가 손상될 수 있습니다. 이를 해결하기 위해 미디어 접속 제어 (Media Access Control, MAC) 알고리즘이 필요합니다. MAC은 분산된 (Distributed) 알고리즘으로, 각 노드가 언제 데이터를 전송할 지 스스로 판단하도록 합니다.
이상적인 경우, M개의 노드가 존재할 때 각 노드는 R/M의 속도로 데이터를 전송할 수 있습니다. 이는 MAC을 위한 추가적인 통신 없이 가능한 최대 속도입니다.
전송 속도가 R bps인 브로드캐스트 채널에서,
1. 하나의 노드가 전송할 때는 R의 속도로 전송할 수 있어야 한다.
2. M개의 노드가 전송할 때는 각 노드가 평균 R/M의 속도로 전송할 수 있어야 한다.
3. 완전한 분산 방식이어야 한다.
- 전송을 조율하는 특별한 노드가 없어야 한다.
- 클럭이나 시간 슬롯의 동기화가 없어야 한다.
4. 프로토콜은 단순해야 한다.
중앙 집중식 (Centralized) 방식은 특정 노드가 모든 정보를 제어하는 것으로, 이는 비효율적입니다. 왜냐하면 데이터 전송 시 중앙 노드에 알려야 하고, 예약이 필요하기 때문입니다.
따라서 MAC 알고리즘은 다른 노드로부터 얻는 정보를 최소화하고, 각 노드가 스스로 판단하여 동작하도록 해야 합니다. 이를 통해 충돌을 피할 수 있습니다.
"no out of band channel for coordination"은 MAC을 위한 별도의 채널이 없다는 뜻입니다. 즉, MAC을 위한 정보 교환도 데이터 채널을 통해 이루어져야 합니다. 이는 제어 정보 전송으로 인한 오버헤드를 최소화하고, 프로토콜을 단순하게 유지하기 위함입니다.
허브(Hub)를 사용하는 경우 한 노드에서 보낸 데이터가 목적지와 상관없이 모든 노드에게 전달됩니다. 무선 네트워크에서도 마찬가지로 모든 노드가 같은 무선 채널을 공유하며, 노드 간에 직접적인 점대점(P2P) 연결이 없습니다. 반면, 스위치(Switch)를 사용하는 경우에는 노드 간에 가상의 P2P 연결을 생성하여 데이터를 전송합니다.
마지막으로 MAC 알고리즘은 완전히 분산되어야 하며 (특별한 노드나 동기화 없이), 가능한 한 간단해야 합니다.
TDMA / FDMA
채널 분할 방식(Channel Partitioning)은 TDMA(Time Division Multiple Access)와 FDMA(Frequency Division Multiple Access)로 나뉩니다. 이 방식은 각 노드에게 일정한 시간이나 주파수를 할당하여 데이터를 전송하도록 합니다. 하지만 이는 버스트한 인터넷 특성에 맞지 않습니다.
TDMA에서는 시간을 일정한 길이의 슬롯으로 나누고, 각 노드에 고정된 길이의 슬롯을 할당합니다. 한 라운드에서 각 노드는 자신에게 할당된 슬롯 동안만 데이터를 전송할 수 있습니다. 데이터가 없는 노드의 슬롯은 유휴 상태로 남게 됩니다. 예를 들어, 6개의 노드로 구성된 LAN에서 노드 1, 3, 4만 데이터를 전송할 경우, 슬롯 2, 5, 6은 유휴 상태로 낭비됩니다.
FDMA에서는 전체 채널 대역폭을 여러 개의 주파수 대역으로 나누고, 각 노드에 고정된 주파수 대역을 할당합니다. 노드는 자신에게 할당된 주파수 대역에서만 데이터를 전송할 수 있습니다. TDMA와 마찬가지로, 데이터가 없는 노드의 주파수 대역은 유휴 상태로 낭비됩니다.
채널 분할 방식은 노드 간 동기화와 중앙 제어가 필요하며, 버스트한 트래픽 특성을 가진 네트워크에는 적합하지 않습니다. 예를 들어, 3개의 노드가 있고 한 노드만 데이터를 전송할 때, 할당된 대역폭은 전체 대역폭의 1/3이 되어 비효율적입니다.
Random Access Protocol
랜덤 접속(Random Access) 방식, 특히 CSMA(Carrier Sense Multiple Access)는 우리가 실제로 사용하는 방식과 유사합니다. 이 방식에서는 채널이 분할되지 않아 충돌(Collision)이 발생할 수 있지만, 충돌 후에는 복구 과정을 거칩니다. 각 노드는 랜덤한 시간 동안 기다렸다가 데이터를 전송합니다. 이는 노드가 패킷을 보낼 때 우선순위는 없으며 채널을 독점하여 사용하는 방식입니다. CSMA는 노드가 패킷을 보내기 전에 채널의 상태(Carrier)를 감지합니다. 채널이 사용 중(Busy)이면 패킷을 보내지 않고, 사용 가능(Idle)할 때까지 기다립니다. 하지만 전파 지연(Propagation Delay) 때문에 충돌이 발생할 수 있습니다.
유선 네트워크에서는 CSMA/CD(Carrier Sense Multiple Access with Collision Detection)를 사용하여 충돌을 감지하고 해결책을 제안합니다. CSMA/CD에서는 충돌이 발생하면 노드가 패킷 전송을 중단(Abort)하고, 랜덤한 시간 동안 기다렸다가 다시 전송합니다. 이 때, 기다리는 시간은 충돌에 관여한 노드 수에 따라 달라집니다. 노드 수를 정확히 알 수 없기 때문에, 휴리스틱한 방법을 사용합니다. 예를 들어, 첫 번째 충돌 시에는 {0, 1} 중 랜덤하게 선택하여 기다리고, 두 번째 충돌 시에는 {0, 1, 2, 3} 중 선택하는 식으로 범위를 늘려갑니다. 이를 통해 노드들은 효율적으로 재전송 시간을 조절할 수 있습니다.
CSMA/CD는 주로 유선 이더넷에서 사용되는 방식입니다. 노드는 전송 전에 채널의 사용 여부를 확인(Carrier Sense)하고, 전송 중 (전파 딜레이에 의한) 충돌이 감지되면 전송을 중단한 후 임의의 시간 후에 재전송을 시도합니다.
CSMA/CD의 동작 과정을 좀 더 자세히 설명해 드리겠습니다.
1. 채널 감지 (Channel Sensing): 노드는 데이터를 전송하기 전에 먼저 채널이 사용 중인지 확인합니다. NIC(Network Interface Card)는 채널을 감지하여 채널이 유휴(idle) 상태인지 확인합니다.
2. 전송 시작 (Transmission Start): 채널이 유휴 상태이면 노드는 즉시 프레임 전송을 시작합니다. 네트워크 계층(Network Layer)으로부터 데이터그램(datagram)을 받은NIC는 프레임을 생성하고 전송을 시작합니다.
3. 전송 완료 (Transmission Completion): 노드가 프레임 전체를 전송하고 다른 노드의 전송을 감지하지 않으면 전송이 성공적으로 완료된 것으로 간주합니다. NIC는 프레임 전송을 마치고 다음 프레임 전송을 준비합니다.
4. 충돌 감지 및 중단 (Collision Detection and Abortion): 노드가 전송 중에 다른 노드의 전송을 감지하면 (즉,충돌이 발생하면) 전송을 중단하고 재밍 신호(Jamming Signal)를 보냅니다. 재밍 신호는 다른 노드에게 충돌이 발생했음을 알리는 역할을 합니다.
5. 이진 지수 백오프 (Binary Exponential Backoff): 전송을 중단한 후, 노드는 이진 지수 백오프 알고리즘(몇 명 때문인지 얼마나 기다릴지 몰라서)에 따라 임의의 대기 시간을 선택합니다. m번째 충돌 후, 노드는 {0, 1, 2, ..., 2^m - 1} 범위에서 랜덤한 정수 K를 선택합니다. 그런 다음 노드는 K * 512 비트 시간만큼 대기한 후 2단계(채널 감지)로 돌아갑니다. 충돌이 반복될수록 대기 시간의 범위가 지수적으로 증가하여 충돌 확률을 낮춥니다.
CSMA/CD의 성능은 전파 지연(Propagation Delay, tprop)과 프레임 전송 시간(Transmission Time, ttrans)에 영향을 받습니다.
- tprop: LAN에서 두 노드 간 최대 전파 지연 시간
- ttrans: 최대 크기의 프레임을 전송하는 데 걸리는 시간
- 효율(Efficiency) = 1 / (1 + 5 * tprop / ttrans)
- tprop이 전파 지연이 작을수록 효율이 1에 가까워집니다.
- ttrans가 프레임 전송 시간이 길수록 효율이 1에 가까워집니다.
CSMA/CD는 ALOHA에 비해 성능이 향상되었으며, 간단하고 저렴하며 분산된 방식으로 동작합니다. 이러한 특징으로 인해 이더넷(Ethernet)에서 광범위하게 사용되고 있습니다.
Taking Turns 프로토콜
순번 방식(Taking Turns)은 노드가 자신의 차례가 올 때까지 기다리는 방식입니다. 이 방식에서는 "키"를 넘기는 데 시간이 걸리지만, 데이터를 전송할 필요가 있는 노드가 키를 받을 수 있습니다. 이 방식은 채널 분할 방식보다는 오버헤드가 적지만, 키를 관리하고 복구하는 과정이 필요합니다.
Taking Turns 프로토콜은 채널 분할과 랜덤 접속의 장점을 결합하여 최상의 성능을 얻고자 합니다. 대표적인 "Taking Turns" 프로토콜로는 폴링(Polling)과 토큰 패싱(Token Passing)이 있습니다.
폴링(Polling)
폴링은 마스터 노드가 슬레이브 노드를 차례로 초대하여 데이터를 전송하도록 하는 방식입니다. 일반적으로 "멍청한" 슬레이브 장치와 함께 사용됩니다. 폴링의 장점은 마스터 노드가 데이터 전송을 제어할 수 있다는 점입니다. 하지만 폴링 오버헤드로 인한 효율성 저하, 슬레이브 노드의 데이터 전송 지연, 그리고 마스터 노드의 단일 실패 지점(Single Point of Failure) 문제가 단점으로 지적됩니다.
토큰 패싱(Token Passing)
토큰 패싱은 제어 토큰이 노드 간에 순차적으로 전달되는 방식입니다. 이 방식의 장점은 노드 간 공평한 채널 접근 기회를 제공한다는 것입니다. 그러나 토큰 전달에 따른 오버헤드, 토큰 전달 지연, 그리고 토큰의 단일 실패 지점 문제가 단점으로 존재합니다.
DOCSIS(Data Over Cable Service Interface Specification)
DOCSIS는 케이블 네트워크에서 데이터 전송을 위한 표준입니다. 이 표준은 다운스트림과 업스트림에 서로 다른 주파수 채널을 사용하는 FDM(Frequency Division Multiplexing) 방식을 채택하고 있습니다.
다운스트림의 경우, 여러 개의 40Mbps 채널을 사용하며 브로드캐스트 방식으로 전송됩니다. 단일 CMTS(Cable Modem Termination System)에서 채널로 데이터를 전송합니다.
업스트림의 경우, 여러 개의 30Mbps 채널을 사용하며 시간 슬롯을 사용하여 다중 접속(TDM, Time Division Multiplexing)을 구현합니다. 일부 슬롯은 할당되고, 일부 슬롯은 경쟁 기반으로 동작합니다. 업스트림 슬롯 할당을 위해 다운스트림 MAP 프레임이 사용되며, 선택된 슬롯에서는 랜덤 접속(이진 백오프) 방식이 사용됩니다.
"Taking Turns" 프로토콜은 폴링이나 토큰 패싱과 같이 노드 간에 순서대로 전송 기회를 부여하는 방식을 사용합니다. 이를 통해 채널 분할의 효율성과 랜덤 접속의 유연성을 모두 확보할 수 있습니다. - 폴링은 중앙 집중식 제어를 통해 데이터 전송을 관리하지만, 오버헤드와 지연, 단일 실패 지점 문제가 있습니다. - 토큰 패싱은 노드 간에 토큰을 순차적으로 전달하여 공평한 접근 기회를 제공하지만, 토큰 관리에 따른 오버헤드와 지연이 발생할 수 있습니다. - DOCSIS는 케이블 네트워크에서 다운스트림과 업스트림에 서로 다른 주파수 대역을 사용하고, 시간 슬롯을 활용하여 효율적인 데이터 전송을 가능하게 합니다. 이는 FDM과 TDM을 혼합한 형태로, 경쟁 기반 접속과 할당된 슬롯을 함께 사용하여 유연성과 효율성을 제공합니다.
LANs (Local Area Network)
LAN은 스위치로 연결된 네트워크 구조를 가지고 있습니다. LAN 내부에서는 IP 주소와 MAC 주소가 사용됩니다.
IP 주소를 MAC 주소로 변환: IP 주소를 사용하여 통신하고 싶지만, LAN 내부에서는 MAC 주소를 사용하여 단말에 접속합니다. 이 과정을 ARP(Address Resolution Protocol) 프로토콜이 담당합니다. ARP는 2계층에서 동작하므로 개발자가 직접 다룰 필요는 없습니다.
LAN의 특징
- LAN은 내부 장비들로 구성되지만, 외부 네트워크와 연결되기 위해서는 최소 하나 이상의 장비가 외부와 연결(게이트 웨이)되어 있어야 합니다.
- 등록된 MAC 주소를 가진 장비들만 LAN 내에서 통신할 수 있도록 제한할 수 있습니다.
MAC 주소와 IP 주소의 차이점
- MAC 주소: 네트워크 어댑터(LAN 카드)에 할당된 고유한 주소로, 물리적인 주소라고도 합니다. 48비트(6바이트)로 구성되며, 전 세계적으로 유일합니다. 예를 들어, "1A-2F-BB-76-09-AD"와 같은 형식을 가집니다.
- IP 주소: 네트워크에 연결된 장치에 할당되는 논리적인 주소입니다. IP 주소는 네트워크 주소와 호스트 주소로 구성되며, 장치의 위치에 따라 변경될 수 있습니다. 예를 들어, 노트북을 숭실대 네트워크에 연결하면 숭실대 네트워크 주소를 받게 됩니다.
LAN 내부 통신 과정
1. IP 주소 확인: 통신하고자 하는 상대방의 IP 주소를 확인합니다. 예를 들어, "137.196.7.78"과 같은 IP 주소를 가진 장치와 통신하고자 합니다.
2. 네트워크 주소 비교: 자신의 IP 주소와 상대방의 IP 주소의 네트워크 부분을 비교합니다.
- 같은 네트워크인 경우: 내부 통신을 수행합니다. 이때, 상대방의 MAC 주소를 알아내야 합니다 (ARP 동작).
- 다른 네트워크인 경우: 게이트웨이(Gateway)로 데이터를 전송하고, 게이트웨이에서 외부 네트워크로 라우팅합니다.
3. ARP(Address Resolution Protocol) 수행: 내부 통신을 위해 상대방의 IP 주소에 해당하는 MAC 주소를 알아내야 합니다. 이 과정을 ARP가 담당합니다. (IP -> MAC 주소)
- 자신의 ARP 테이블에서 해당 IP 주소에 대한 MAC 주소를 검색합니다.
- ARP 테이블에 없는 경우, ARP 요청(Request) 메시지를 브로드캐스트로 전송합니다.
- 해당 IP 주소를 가진 장치가 ARP 응답(Reply) 메시지로 자신의 MAC 주소를 알려줍니다.
- 응답받은 MAC 주소를 ARP 테이블에 저장하고, 향후 통신에 사용합니다.
4. 데이터 전송: 상대방의 MAC 주소를 알게 되면, 데이터 링크 계층에서 프레임을 구성하고 해당 MAC 주소로 데이터를 전송합니다.
ARP
ARP(Address Resolution Protocol)는 IP 주소를 MAC 주소로 변환하는 프로토콜로, LAN 내부에서 통신을 위해 필수적인 역할을 합니다. ARP의 동작 과정은 다음과 같습니다:
1. ARP 테이블 업데이트
- ARP 테이블은 IP 주소와 해당 IP 주소에 매핑된 MAC 주소, 그리고 TTL(Time to Live) 정보를 저장합니다.
- 네트워크 환경의 변화로 인해 IP 주소와 MAC 주소의 매핑이 변경될 수 있기 때문에, ARP 테이블은 주기적으로 업데이트되어야 합니다. 쿼리 송신자는 응답 메시지를 받으면 해당 정보를 ARP 테이블에 저장하고, 이후의 통신에서 해당 MAC 주소를 사용합니다.
2. ARP 쿼리 메시지 전송
- 통신하고자 하는 상대방의 IP 주소는 알고 있지만, MAC 주소를 모르는 경우, ARP 쿼리 메시지를 전송합니다.
- ARP 쿼리 메시지는 2계층 프레임을 사용하여 전송되며, 패킷 대신 쿼리 메시지가 담깁니다.
- 쿼리 메시지에는 알고자 하는 IP 주소와 해당 IP 주소에 대한 MAC 주소를 요청하는 내용이 포함됩니다.
- 쿼리 메시지는 LAN 내의 모든 장치에게 브로드캐스트됩니다. 브로드캐스트 주소(예: FF:FF:FF:FF:FF:FF)를 사용하여 전송됩니다.
3. ARP 응답 메시지 전송
- 브로드캐스트된 ARP 쿼리 메시지를 받은 장치 중, 자신의 IP 주소와 일치하는 장치가 응답 메시지를 전송합니다.
- 응답 메시지에는 요청받은 IP 주소에 해당하는 MAC 주소 정보가 포함됩니다.
- 응답 메시지는 ARP 쿼리 메시지를 보낸 장치에게 직접(유니캐스트) 전송됩니다.
- 타입 필드에는 "ARP 응답"임을 나타내는 값을 설정
4. ARP 테이블 갱신
- ARP 응답 메시지를 받은 장치는 해당 정보를 바탕으로 자신의 ARP 테이블을 갱신합니다.
- IP 주소와 MAC 주소의 매핑 정보가 ARP 테이블에 추가 또는 업데이트됩니다.
ARP를 통해 LAN 내부에서 효율적인 데이터 통신이 이루어지며, 개발자는 IP 주소를 기반으로 통신을 수행하지만 실제로는 하위 계층에서 MAC 주소를 사용하여 데이터를 전송한다는 점을 이해해야 합니다.
ARP 테이블 업데이트 및 TTL
ARP 응답 메시지를 받으면, 해당 정보를 ARP 테이블에 저장하고 업데이트합니다. 이때, 각 항목에는 TTL(Time to Live) 값이 함께 저장되는데, 일반적으로 기본값은 20입니다. TTL은 해당 항목의 유효 시간을 나타내며, 시간이 지나면 해당 항목은 테이블에서 제거됩니다. Plug and Play 기능을 통해 새로운 장치가 연결되면, ARP 테이블이 자동으로 업데이트됩니다. ARP 요청 메시지에는 알고자 하는 IP 주소만 포함되고 MAC 주소는 비워져 있는 반면, 응답 메시지에는 IP 주소와 MAC 주소가 모두 채워져 있습니다.
이러한 과정을 통해 LAN 내의 장치들은 IP 주소를 기반으로 통신하면서도, 실제로는 MAC 주소를 사용하여 데이터를 전송할 수 있게 됩니다. ARP는 이 과정을 자동으로 처리해주는 중요한 프로토콜입니다.
서로 다른 네트워크 간 통신
두 개의 서로 다른 네트워크가 라우터를 통해 연결되어 있는 상황을 가정해보겠습니다.
* 네트워크 A: 111.111.111.111, 111.111.111.112, 111.111.111.110 (라우터와 연결된 장치)
* 네트워크 B: 222.222.222.222, 222.222.222.221, 222.222.222.220 (라우터와 연결된 장치)
라우터는 서로 다른 네트워크 주소를 가지고 있지만, 라우터 간에는 동일한 네트워크 주소를 사용하여 통신합니다. 즉, 라우터는 각각 다른 LAN에 속해 있기 때문에 서로 다른 네트워크 주소를 가지고 있지만, 라우터 간 통신에는 MAC 주소를 사용합니다. 네트워크 A의 111.111.111.111에서 네트워크 B의 222.222.222.222로 패킷을 전송한다고 가정해보겠습니다.
1. 3계층(네트워크 계층)에서 IP 패킷을 생성할 때, 출발지 IP 주소(111.111.111.111)와 목적지 IP 주소(222.222.222.222)를 패킷 헤더에 포함시킵니다.
2. 2계층(데이터 링크 계층)으로 내려올 때, 출발지 MAC 주소(74-29-9C-E8-FF-55)와 목적지 MAC 주소(E6-E9-00-17-BB-4B)를 프레임 헤더에 포함시킵니다. 이때, 목적지 MAC 주소는 게이트웨이(라우터)의 MAC 주소입니다.
3. 라우터는 수신한 프레임을 3계층에서 처리하고, 다시 2계층으로 내려보낼 때 새로운 출발지 MAC 주소(1A-23-F9-CD-06-9B)와 목적지 MAC 주소(49-BD-D2-C7-56-2A)를 사용하여 프레임을 생성합니다. 이때, TTL 값도 변경되므로 CRC도 다시 계산되어야 합니다.
4. 네트워크 B의 장치들은 브로드캐스트된 프레임을 수신하지만, 자신이 목적지가 아닌 경우 해당 프레임을 버립니다.
5. 목적지 장치(222.222.222.222)는 프레임을 수신하고, 에러가 없는 경우 상위 계층으로 패킷을 전달합니다.
이러한 과정을 통해 서로 다른 네트워크에 속한 장치들은 라우터를 통해 통신할 수 있습니다. 라우터는 각 네트워크의 주소 체계를 이해하고, 패킷을 적절한 목적지로 전달하는 역할을 합니다. 이 과정에서 IP 주소는 변경되지 않지만, MAC 주소는 각 네트워크 구간마다 변경됩니다.
'대학수업 > 네트워크' 카테고리의 다른 글
[네트워크] 라우팅 알고리즘 (OSI 3계층) (0) | 2024.06.12 |
---|---|
[Network] Congestion Control (0) | 2024.05.31 |
TCP (0) | 2024.05.24 |
[네트워크] Network 계층 (0) | 2024.04.22 |
[네트워크] Network Overview (0) | 2024.04.21 |