해당 포스팅은 한양대학교 이석복 교수님의 컴퓨터네트워크 강의를 정리한 글입니다.
http://www.kocw.net/home/search/kemView.do?kemId=1169634
1. Introduction
- link layer는 NIC (network interface card)에 구현이 된다.
- 2개의 타입의 "link"가 존재한다.
- point-to-point
- 노드들간에 구별되는 link를 사용한다. 보안상 이점이 있지만, 패킷의 경로가 길어지고 하드웨어적인 자원이 많이 소요되는 단점이 있다.
- broadcast link
- 여러 노드들이 하나의 공유된 link를 사용한다.
- 모든 경로로 어떤 호스트의 데이터 전송이 다 퍼져나간다.
1) An ideal multiple access protocol
- 한개의 node가 transmit를 원하면, 해당 링크를 전부 사용한다.
- 여러개의 node가 transmit을 원하면, 평균 rate R/M으로 보낼 수 있어야한다.
- 분산처리
- simple
2. MAC protocols: taxonomy
- MAC (Medium Access Control)
공유된 채널에 다수의 사용자가 접속할 수 있도록 도와주는 프로토콜이다.
- channel partitioning
- 채널을 잘게잘게 쪼개, 여러개의 sub channel로 만든다.
- random access
- 채널이 쪼개져 있는 것이 아니고, 한개의 채널로 누군가 사용하려고 할 때, 처리해주는 방식이다.
- taking turns
- 서로서로 번갈아가면서 보내도록 하는 방식이다.
1) Channel partitioning MAC protocols
- TDMA: time division multiple access -> 시간을 쪼개서 여러유저들이 사용가능하도록 한다.
- FDMA: frequency division multiple access -> 주파수를 각 유저들에게 할당한다.
- 하지만, 해당 slot에서 사용을안한다면? 낭비가 되는 문제가 존재한다. (Channel partitioning의 단점)

2) Random access protocols
- 노드가 패킷을 전송하고 싶을때, 그냥 보내는 방식이다.
- 만약 두가지 이상의 node가 동시에 보낸다면? -> "collision"이라고 한다.
random access MAC protocol은 다음과 같은 특징이 있다.
- collision을 어떻게 발견할 것 인지,
- collision을 어떻게 회복할 것인지?
a) CSMA (carrier sense multiple access)
- 누군가 transmit한다면, transmit하기 전에, 채널에 전송되고 있는 것이 있는지 기다린 후, 있다면 끝난 뒤에 보낸다.
- 하지만, collision은 그래도 발생할 수 있는 문제가 있다.
- 첫번째 node에서 데이터를 전송했을 때, 마지막 node가 전송되고 있음을 아는데 걸리는 시간이 걸릴 수 밖에 없다
- 아무리 전파되는 속도를 빠르게 하더라도
propagation delay는 빛의 속도가 최대이기 때문이다.
b) CSMA/CD (collision detection)
- 이를 위해 충돌 감지 및 abort위한 프로토콜이다.
- 충돌이 난 경우에는 즉시 전송을 취소한다.
- NIC에서 datagram을 상위 계층에서 받는다.
- NIC channel이 idle하다면 전송하고, busy하다면 기다린다. (기존 CSMA)
- 만약 다른 데이터가 detection이 되었다면 바로 전송을 취소한다.
- 충돌이 났으니, 쉬었다가 다시 데이터를 보내야하는데 이는
binary backoff를 통해서 얼마나 쉴지 결정을 한다.
-> 어떤 충돌이 발생하면 0~2^m -1 의 숫자중에 랜덤으로 선택하여 기다린다. 이때, m은 충돌이 발생한 횟수이다.
즉, 충돌이 많이나면 날 수록 더 많이 기다리는 확률이 늘어나는 방식이다.

3) Taking turns MAC protocols
- polling: master가 존재하고, 해당 master가 관제하는 것인데 master가 망가지면 못쓰는 단점이 존재한다.
- token passing: 번호표 같은 token을 두고, 보낸 다음 token을 다음 노드로 전달한다. 만약 토큰이 유실된다면 큰 문제가 발생 가능한 단점이 명확하다.