6장 링크 계층
(본 글은 “컴퓨터 네트워킹 하향식 접근” 도서 및 네트워크 프로그래밍 수업 내용을 정리한 글 입니다.)
6. 링크계층
6.1.1 링크 계층 소개
노드 : 호스트와 라우터
링크 : 인접한 노드들을 연결하는 통신채널 (무선, 유선 , LASs)
- 링크에서는 각 패킷을 프레임으로 캡슐화한다 (세그먼트 → 데이터그램 → 프레임)
- 송신측이 데이터그램을 받으면 헤더를 붙여 프레임화
- 수신측에서는 헤더의 내용을 보고 오류를 찾아 정정 후 문제가 없다면 데이터 그램을 추출해 네트워크 계층으로 올림
-
링크 계층은 하나의 노드로부터 물리적으로 연결된 인접노드로 데이터를 전달해주는 책임을 가진다
- 각 Frame은 서로다른 링크상에서 다른 링크프로토콜을 통해 전달된다
- 각 링크 프로토콜은 서로 다른 서비스 제공
- 노트북 A → 무선통신 (LTE 이동통신기술 사용) → 기지국 → 이더넷 기술 → …. 라우터와 라우터는 광.. (즉 채널자체도 다르고 링크 프로토콜이 각각 다름)
6.1.2 링크계층의 서비스
- 프레임화 : 데이터그램을 받으면 헤더에 하드웨어주소(MAC주소)를 붙인다
- 결국 이 MAC주소를 보고 자기가 받을지 버릴지 결정하는 것
- MAC프로토콜 : 링크상에서 프레임을 전송할 때 따르는 효율적인 전송규칙의 프로토콜을 일컫는 표현
- ex) CSMA/CD
- 공유 링크상의 접속을 제어한다 (충돌문제도 관리)
- 신뢰성 전달
- TCP처럼 재전송방식을 사용하기도 하지만 대체로 오류를 해결하는 방식을 자주 사용
- 단 유선처럼 오류가 적은곳에서는 부하를 위해쓰지 않는다
- 오류 확률이 높은 무선링크부분에만 적용하는게 보다 효과적
-
오류 검출
- 신호의 약화나 잡음으로 발생
- 오류검출비트를 추가해야 한다
- 대체로 빠른속도를 위해 하드웨어단에서 처리
- 재전송보다는 오류를 정정
- 링크계층의 구현위치
- 때체로 NIC, 하나의 칩으로 구현
- 하드웨어와 소프트웨어 펌웨어 모두의 조합
6.2 오류검출
- EDC : 오류 검출 및 정정 비트
- D : 오류 체크에 의해 보호되는 데이터
- 항상 100%오류를 검출할 수 있는건 아니다
6.2.1 패리티 검사
- 단일 비트 패리티 : 단일 비트의 오류를 검출
- 짝수 패리티 : 1의 개수가 짝수가 되도록 패리티 비트 설정 (반대는 홀수)
- 이차원 비트 패리티 : 단일 비트 오류를 검출하고 정정
그러나 이 방법들은 2비트 이상의 오류를 검출할 수 없다
→ 오류가 거의 없는 유선상황에서 대체로 많이 사용
6.2.2 체크섬
- 16비트 정수들을 다 더한 후 1의 보수를 취한 값
- 수신자도 데이터를 받아 체크섬을 계산 후 같은지 판별하는 원리
- CRC와 비교했을 때 비교적 간단하나 검출정도는 취약
6.2.3 CRC(순환중복검사)
- 수학적인 나누기연산 (조금더 복잡하다)
-
하드웨어적으로 보통 구현한다
- 용어
- <D,R> = D *2^R XOR R
- D*(2^R) = 데이터에 대해 r비트만큼 시프트 연산 후 0을 채워넣는다
- <D,R> (= D *2^R XOR R ) = 이 상태에서 0의 자리에 CRC를 넣는다
- G = r+1
- <D,R> = D *2^R XOR R
-
순서
-
- r만큼 D에 대해 시프트 연산 (비워진만큼 0이 채워짐) → D*(2^r)
-
- D*(2^r)에 대해 G XOR수행한 나머지를 계산한다 → R계산
-
- 계산된 R과 D*(2^r)을 XOR연산한다 (비워진 0에 계산된 R넣기) → <D,R>
-
- 송신자는 <D,R>을 보낸다
-
- 수신자는 <D,R>을 G로 나눠보는데 나머지로 0이 나오는지 확인한다
-
- r+1비트이상의 오류가 발생하면 검출하지 못한다 (r까지만)
6.3 다중 접속 링크 & 프로토콜
6.3.1 두 종류의 네트워크 링크
링크 계층에서는 2가지의 채널구조가 존재할 수 있다
- 점대점
- 이더넷스위치와 호스트간의 점대점 링크
- ppp, hdlc등의 프로토콜 존재
- 브로드캐스트 링크
- 물리적으로 다 연결되어있어서 하나에서 다른 한 곳으로 연결 가능
- 유선과 무선 모두 가능
- 충돌문제
- 하나의 공유된 브로드캐스트 채널상에서 여러 노드가 동시에 프레임을 전송하면 충돌 발생
- 충돌 시간만큼 브로드캐스트 채널은 낭비된다 (여러 노드의 신호가 다 깨짐)
- 다중접속프로토콜 : 각 노드들이 어떻게 공유할지 결정하는 분산알고리즘이 필요하다
6.3.2 이상적인 다중 접속 프로토콜
- 단 하나의 노드가 전송을 한다면 충돌없이 전체 전송률 bps활용 가능
- N개의 노드가 전송을 보낸다면 평균적으로 R/N 정도의 전송률 활용가능
- 각 노드는 완전 분산된 형태를 가진다
- 각자의 노드가 자신의 판단으로 보냄
- 동기화도 없다
- 프로토콜 자체가 매우 단순
6.3.3 MAC프로토콜
- 채널분할 프로토콜
- 채널을 더 작은 조각으로 나누어 각 노드는 할당된 조각만을 사용함
- 시간, 주파수, 코드
- 트래픽이 커야 유리하다
- 랜덤 접속 프로토콜
- 모든 노드가 동시에 채널접속 가능
- 충돌이 발생할 수 있다 (당연)
- 대신 충돌을 완화하고 빠르게 복구하는 형태로 동작
- 트래픽이 작아야 유리하다
- 순번프로토콜
- 위 두 프로토콜의 특징을 섞었다
- 순번을 정해 해당 타이밍동안은 자유롭게 사용
- 단 순번이 올때까지 오래 기다려야 한다
6.3.3.1 채널분할 MAC프로토콜
TDMA
- 시간을 프레임 단위로 나누고 각 프레임을 Slot으로 나눈다
- 각 노드는 Slot을 할당받아 사용한다
- 슬롯의 크기는 고정적이며 하나의 Frame에 몇 개의 슬롯이 들어가는지는 TDMA관리자가 설계
- 각 노드에 할당된 slot이 사용되지 않으면 낭비가 발생한다
FDMA
- 채널 스팩트럼을 여러 주파수 대로 나눈다
- 각 노드는 특정 주파수대를 할당받아서 사용
- 할당받은 주파수를 사용하지 않으면 낭비
CDMA
- 서로 다른 코드들을 노드들에게 할당
- 이때 코드는 직교코드의 특성을 지닌다 (곱해서 0이됨)
- 코드를 사용하여 패킷을 보내면 충돌이 발생하더라도 성공적으로 데이터를 수신할 수 있다
- 보내려는 신호와 코드를 비트에 곱한다 (-1 * -1 = 1 )
- 각 곱해진 신호를 더해서 수신측에 보낸다
- 수신측에서는 받은 신호에 대해 다시 코드 연산을 수행
- 연산된 결과를 다시 연산
6.3.3.2 랜덤 접속 프로토콜
- 컨트롤 자체가 분산되어있다(누군가 체계적으로 관리하지 않음)
- 전송할 패킷이 있다면 그냥 보낸다
- 사전 조율과정이 없음
- 해당 채널의 최대 전송률 R bps를 보낸다
- 충돌을 감지하고 충돌에 대한 대처가 필요하다
슬롯 알로하
- 시간을 각 슬롯으로 나눈다
- 각 노드가 패킷을 보내기 시작하면 다음 슬랏이 시작되는 시점에 패킷을 보낸다
- 각 노드는 슬롯에 대한 동기화 필요(슬랏이 시작되면 동시에 보내야 한다)
- 이때 충돌이 발생하더라도 적어도 하나의 슬랏구간에 대한 손실만 발생한다 (막 보내면 2배 손실)
- 충돌에 대한 동작
- 적절한 확률을 계산하여 성공할 때 까지 후속슬랏에서 패킷을 계속 보낸다
- 너무 확률을 높이면 재충돌 확률이 높아짐
- 너무 확률을 낮추면 채널활용률이 떨어진다
- 충돌난 노드가 많을 수록 확률을 줄여야 한다는 특징이 있다
- 적절한 확률을 계산하여 성공할 때 까지 후속슬랏에서 패킷을 계속 보낸다
-
장점
- 각 노드는 채널의 최대 전송률로 패킷 전송 가능
- 상당히 분산된 형태(충돌이 감지되면 알아서 다시 보냄)
- 비교적 단순
-
단점
- 슬롯을 사용하지 않거나 충돌 발생시 낭비
- Clock동기화가 필요하다
- 보내면서 충돌을 확인해야 한다
- 효율
- N개의 노드가 있고 각 슬롯에서 p확률로 프레임전송을 시도한다 가정
- 임의의 노드의 프레임 전송이 성공할 확률 : p(1-p)^(N-1)
- 특정 노드의 프레임 전송이 성공할 확률 : Np(1-p)^(N-1)
- 최대 효율을 가지는 p의값을 찾고 계산하면 37% 즉 최대 채널 활용률은 37%
- 순수 알로하 (slot동기화 없음)는 2배로 좋지 않은 18%
CSMA
-
만약 채널을 누가 사용중이라고 감지(busy)했다면 프레임 전송을 미룬다.
- CSMA/CD는 강화판
- 충돌을 감지하면 전송하던 프레임을 멈춘다
- 채널의 낭비가 감소된다
- 유선의 경우 충돌감지가 더 쉽다
-
프레임 전송이 시작되고 퍼지는 시간안에 누군가 읽게되면 충돌이 발생
- 즉 전파지연시간과 노드간의 거리가 충돌여부에 영향을 미친다
- 알고리즘
-
- NIC는 데이터그램 수신 후 프레임 생성
-
- 채널을 확인한다
- idle이라면 보내고 busy라면 기다렸다가 다시 확인
- 채널을 확인한다
-
- 프레임을 보내다가 충돌을 감지했다면 jam signal전송
- jam signal이란 100%혼잡상황을 알릴 수 있는 신호
- 프레임을 보내다가 충돌을 감지했다면 jam signal전송
-
- m번째 충돌에 대한 값의 범위 0~ 2^m-1 중 랜덤하게 k값을 선택해 해당 시간을 기다렸다가 2번
- 충돌을 겪을 수록 많은 노드가 동시에 보냈다는 것을 의미하고 지수적으로 시간을 늘린다
- 이를 binary BackOff이라고 한다
- m번째 충돌에 대한 값의 범위 0~ 2^m-1 중 랜덤하게 k값을 선택해 해당 시간을 기다렸다가 2번
-
- 성능
- 전파시간이 낮고 전송률이 높으면 효과적이다
- 충돌이 많으면 비효율적이기 때문에 노드가 작을수록 효과적이다
6.3.3.2 순번 프로토콜
폴링
- 마스터 노드가 라운드 로빈방식으로 각 노드를 폴링후 폴링된 노드가 패킷 전송
- 순번을 누군가 컨트롤
- 마스터 노드가 고장나면 다 죽는다
- polling 오버헤드 존재
토큰 패싱
- 토큰 받은 시점에서 패킷을 보낸다
- 데이터 보낼 게 없다면 토큰을 넘긴다
- 토큰 오버헤드가 존재
- 노드 고장으로 토큰을 보내지 않으면 멈춘다
케이블 접속 네트워크
- 채널분할, 랜덤접속 프로토콜 모두가 복합적으로 다 포함[FDM, TDM, random Access)
- 다중채널로 구성되어 있다(FDM방식을 활용)
- 다중 하향 채널 : 경쟁자가 아에 없고 헤드앤드에서 각 집으로 내려가는 방향
- 다중 상향 채널 : 충돌이 발생할 수 있다 (다중접속상황)
- DOCSIS
- 각 집은 채널 분할 프로토콜의 할당받은 slot에 데이터를 보내서 보낸다 (TDML)
- 슬롯 요청 프레임은 랜덤 접속 프로토콜 방식의 경쟁으로 보낸다
댓글남기기