Notice
Recent Posts
Recent Comments
순간이 영원해 지는 곳
CSMA, CSMA/CD, CSMA/CA 정리 본문
여러개의 호스트가 하나의 매체/링크를 공유할때는 두 개 이상의 호스트가 동시에 링크를 사용하는 경우 전기신호의 충돌로 인하여 통신을 할 수 없게 된다.
이렇게 링크를 공유하는 경우 원할한 통신을 위해서는 서로간의 약속이 필요하게 된다.
지금은 거의 사용하지 않지만 Bus Topology형태의 네트워크나 허브를 통해 구성된 LAN의 경우가 매체를 공유하는 경우에 해당된다.
또한 전파를 사용하는 무선통신의 경우에도 매체를 공유한다고 볼 수 있다.
링크를 공유하는 버스형 토폴로지
공유 링크에 접근하기 위한 프로토콜 중에서 Random Access(임의접근) 방식에 속하는 프로토콜에는 ALOHA, CSMA, CSMA/CD, CSMA/CA 가 있다.
※ Random Access = Contension Based Access(경쟁기반접근)
Random Access 방식에서는 어떤 지국도 다른 지국보다 우선순위가 높지 않으며, 다른 지국을 제어할 수 없다.
매 순간 전송할 데이터가 있는 지국은 전송할지 말지를 결정하기 위해 프로토콜에서 정해진 절차를 따른다. 이 결정은 매체의 상태(휴지 상태이나:idle, 바쁘냐:busy)에 좌우된다. 다시 말하면 각 지국은 매체의 상태를 확인하는 것을 포함한 미리 정해진 절차를 따라서 매체 상태에 따라 자신이 전송하고자 할 때 전송할 수 있다.
두 개 이상의 지국이 동시에 전송하려고 하면 접근에 대한 간섭-충돌-이 벌어지며 이로인해 프레임은 손상되거나 변형된다.
* CSMA(Carrier Sense Multiple Access)
지국이 매체를 사용하려고 시도하기 이전에 매체를 감지하게 되면 충돌의 기회를 줄일 수 있다. CSMA(반송파 감지 다중 접근)는 각 지국이 전송하기 이전에 먼저 매체에 귀를 기울일 것(또는 매체의 상태를 확인하는 것)을 요구하고 있다. 다시 말하면 CSMA는 "전송 이전에 감지" 또는 "말하기 이전에 듣기" 원칙에 기반을 두고 있다.
-> Listen before Talk (Transmission)
CSMA는 충돌의 가능성을 줄일 수 있으나 완전히 없앨 수는 없다.
지국이 매체를 감지하여 매체가 idle 한것을 감지한다 해도 다른 지국이 전송한 프레임의 첫 번째 비트가 아직 도달 중일 수 있다.
-> 프레임이 전송(전파)되는 시간차때문에 idle한것을 감지하고나서 프레임을 전송하는 경우 다른 곳에서 보낸 프레임이 도착하여 두 프레임이 충돌, 손상될 수 있다. 전파지연(Propagation Delay) 때문이란 얘기다. - CSMA의 한계
※ 지속 방식(persistent mechanism)
채널이 사용 중이거나 휴지 상태일때 어떻게 행동하느냐에 관한 방식이다.
(1) 1-persistent
이 방식에서는 지국이 회선의 상태를 지속적으로 확인하다가 휴지 상태인 것을 감지하게 되면 즉각 프레임을 전송한다. 이 방식은 두 개 이상의 지국이 회선이 휴지 상태인 것을 감지할 것이고 그런 경우에 모두 즉각 프레임을 전송하기 때문에 가장 높은 충돌 위험을 유발한다.
-> idle을 기다리는 두개 이상의 station이 회선의 idle이 확인됨과 동시에 보낼 것이므로 충돌확률 100%
(2) nonpersistent
전송할 프레임이 있는 지국이 회선을 감지하여 idle상태에 있으면 즉시 프레임을 전송한다. 만일 회선이 busy상태인 경우 random한 시간을 기다렸다가 다시 회선을 감지한다.
이 방식은 두 개 이상의 지국이 같은 시간을 대기하고 있다가 동시에 전송할 확률이 낮기 때문에 충돌의 위험은 낮다. 그러나 전송할 프레임을 가진 지국이 있음에도 회선이 idle상태에 있을 수 있기 때문에 회선 효율이 낮다.
예) station1이 전송할 프레임을 가지고 회선은 busy상태였다. 임의시간(3밀리초)동안 기다리는데, 1밀리초 뒤에 회선이 idle이 되었다. 2밀리초동안은 회선이 사용되지 않으므로 효율이 낮다.
(3) p-persistent
이 방식은 1-persistent 처럼 지속적으로 회선을 확인하다가 회선이 idle상태가 되는 순간 확률(p)을 뽑는다.
q = 1 - p
>> p 가 1이 나온 경우 즉각 프레임을 전송한다.
>> p 가 1이 아닌 경우 q 만큼의 Time Slot 동안 기다리다가 회선을 다시 감지한다.
>>>> 회선이 idle하면 p를 뽑는다.
>>>> 회선이 busy하면 대기한다.(다시 지속적으로 확인?)
위의 두가지 방식을 합한 방식이며, 충돌의 위험을 줄이면서 회선 효율은 높인다.
채널이 사용 중이거나 휴지 상태일때 어떻게 행동하느냐에 관한 방식이다.
(1) 1-persistent
이 방식에서는 지국이 회선의 상태를 지속적으로 확인하다가 휴지 상태인 것을 감지하게 되면 즉각 프레임을 전송한다. 이 방식은 두 개 이상의 지국이 회선이 휴지 상태인 것을 감지할 것이고 그런 경우에 모두 즉각 프레임을 전송하기 때문에 가장 높은 충돌 위험을 유발한다.
-> idle을 기다리는 두개 이상의 station이 회선의 idle이 확인됨과 동시에 보낼 것이므로 충돌확률 100%
(2) nonpersistent
전송할 프레임이 있는 지국이 회선을 감지하여 idle상태에 있으면 즉시 프레임을 전송한다. 만일 회선이 busy상태인 경우 random한 시간을 기다렸다가 다시 회선을 감지한다.
이 방식은 두 개 이상의 지국이 같은 시간을 대기하고 있다가 동시에 전송할 확률이 낮기 때문에 충돌의 위험은 낮다. 그러나 전송할 프레임을 가진 지국이 있음에도 회선이 idle상태에 있을 수 있기 때문에 회선 효율이 낮다.
예) station1이 전송할 프레임을 가지고 회선은 busy상태였다. 임의시간(3밀리초)동안 기다리는데, 1밀리초 뒤에 회선이 idle이 되었다. 2밀리초동안은 회선이 사용되지 않으므로 효율이 낮다.
(3) p-persistent
이 방식은 1-persistent 처럼 지속적으로 회선을 확인하다가 회선이 idle상태가 되는 순간 확률(p)을 뽑는다.
q = 1 - p
>> p 가 1이 나온 경우 즉각 프레임을 전송한다.
>> p 가 1이 아닌 경우 q 만큼의 Time Slot 동안 기다리다가 회선을 다시 감지한다.
>>>> 회선이 idle하면 p를 뽑는다.
>>>> 회선이 busy하면 대기한다.(다시 지속적으로 확인?)
위의 두가지 방식을 합한 방식이며, 충돌의 위험을 줄이면서 회선 효율은 높인다.
* CSMA/CD(Carrier Sense Multiple Access with Collision Dectection)
CSMA/CD 방식은 CSMA 방식에 충돌을 처리하는 절차를 더한 것이다. 유선링크의 경우 충돌을 확인할 수 있기 때문에 사용가능한 방식이다.
프레임을 전송 함과 동시에 두 개의 다른 포트를 이용하여 충돌이 발생하는지 감시한다.
프레임이 목적지에 도착할 시간 이전에 다른 프레임의 비트가 발견되면 충돌이 일어난 것으로 판단한다.
유선 Ethernet LAN 에서 사용하는 프로토콜이다.
※ 동작 순서
1. persistent mechanism중 하나를 이용해 프레임 전송을 시도한다.
(회선이 idle할때까지 listen 하다가, idle해진 순간 전송을 하고 기다린다.)
2. 충돌(collision)이 발생 했는가?
3-1. (no) 전송 성공 -> 끝
(내가 모든 프레임을 보낼때까지 다른 전송이 감지되지 않으면 전송이 성공한 것이다.)
3-2. (yes) 다른 지국이 충돌을 감지하지 못했을 것을 대비하여 짧은 충돌 신호(jamming signal) 전송
(충돌이 발생한 경우 전송을 중지하고 jamming signal을 보낸다.)
-- 이하 충돌이 발생한 경우 Exponential Backoff (Random Backoff) 과정 --
※ 재충돌을 방지하기 위해 랜덤시간동안 기다렸다가 전송을 시도한다. 기다리지 않고 곧장 회선을 listen하여 전송을 시도한다면 충돌을 일으킨 호스트와 또다시 충돌을 일으키고 말것이다!!!
4. 전송횟수 K = K+1
5. K가 최대값(보통 15) 보다 큰가?
6-1. (yes) 전송 중지 -> 끝
6-2. (no) 0 ~ 2^K - 1 사이의 수 R을 뽑는다.
7. Wait Time 만큼 기다린 후 1. 번으로
Wait Time = R * Maximum propagation time(상수)
또는
Wait Time = R * Average transmission time for a frame(상수)
※ 여기서 의문점 : 충돌이 계속해서 일어난 호스트의 경우 K값이 커지므로 점점 더 오랜시간을 기다릴 수 있다. 이런경우 이 호스트는 갈수록 프레임을 보내기 어려울 것이다. 그렇다면 이 방법은 잘못된 것인가?
-> Exponential Backoff의 목적은 충돌(Collision)을 빨리 회복하는데 있기 때문에 이 방법을 써야한다.
* CSMA/CA(Carrier Sense Multiple Access with Collision Avoidance)
CSMA/CD의 기본 아이디어는 지국이 충돌을 감지하기 위해서는 신호를 전송하는 동시에 신호를 받을 필요가 있다는 것이다. 충돌이 없으면 지국은 자신이 보낸 신호만을 받게 된다. 충돌이 생기면 지국은 자신의 신호와 다른 지국이 보낸 신호인 두 개의 신호를 받게 된다.
무선 네트워크에서는 충돌을 감지하기 힘들기 때문에 CSMA/CD방식을 사용할 수 없다. 따라서 충돌을 회피하는 방식을 사용한다.
802.11 표준을 보면 두가지 매체 접근 방식이 있는데 하나는 PCF(Point Coordination Function) Mode라고 하는 우선순위 기반으로 경쟁하는 방식이다.
기본적으로 사용하는 방식은 DCF(Distributed Coordination Function) Mode로, CSMA/CA 프로토콜을 사용하는 동등한 우선순위를 가지고 경쟁하는 방식이다.
CSMA/CA는 IEEE 802.11 무선 LAN(또는 무선 Ethernet)에서 사용하는 프로토콜이다.
CSMA/CD 에서는 ACK 프레임을 사용하지 않지만, CSMA/CA 에서는 ACK 프레임을 사용한다.
Continuously sense
Found idle
↓↓↓↓↓↓↓↓↓↓↓↓↓ ▼ ||||||||||||||||||||||||||||||||
---■■■■■■■■■■■■■-------------□□□□□□□□□□□□□□□□-■■■■■■■■-■■■■■■■-----> Time
Busy |← IFS →| Contention window Send Frame Time-out
Found idle
↓↓↓↓↓↓↓↓↓↓↓↓↓ ▼ ||||||||||||||||||||||||||||||||
---■■■■■■■■■■■■■-------------□□□□□□□□□□□□□□□□-■■■■■■■■-■■■■■■■-----> Time
Busy |← IFS →| Contention window Send Frame Time-out
※ IFS(Inter Frame Space) : 프레임 간 공간 - 첫번재 충돌 회피 방법
우선 채널이 휴지 상태인 것으로 확인되더라도 전송을 늦추어서 충돌을 회피한다. 휴지 상태의 채널이 발견된 즉시 전송하지 않는 것이다. 지국은 IFS라 불리는 일정 시간을 기다린다. 채널을 감지했을때 휴지상태인 것처럼 보일지라도 멀리 떨어진 지국이 이미 전송을 시작했을지 모르기 때문이다. 이런 경우 기다리지 않고 전송을 해버리면 충돌이 일어날 수 있으므로 IFS동안 기다리게 된다.
CSMA/CA에서 IFS는 지국이나 프레임의 우선순위를 규정하는 것에도 사용될 수 있다. 예를 들어 더 짧은 IFS시간을 갖도록 허락된 지국은 다른 지국에 비해 높은 우선순위를 갖는 셈이다. (기다리는 시간이 짧으므로 먼저 프레임을 보낼수 있다.)
802.11 표준에서는 DIFS, SIFS, EIFS 와 같이 여러 IFS 를 사용한다.
※ Contention Window : 다툼 구간 - 두번재 충돌 회피 방법
Contention Window는 time-slot으로 나뉘어져 있는 일정 시간이다. 전송할 준비가 되어있는 지국은 임의의 수를 선택하여 그 만큼 기다린다. (임의의 수만큼 기다린다는 것 이외에 p-persistent 방식과 비슷하다.) 이 구간에서는 지국이 매 time-slot뒤에 채널을 감지하게 된다. 이때 채널이 사용 중인 것을 감지하면 지국은 이 과정을 다시 시작하는 것이 아니라 단지 타이머를 멈추고 채널이 휴지 상태인 것이 감지되면 그 때 다시 타이머를 작동한다. 이로 인해 가장 오래 기다린 지국이 우선순위를 갖게 된다.
예) station A, B가 프레임을 전송하려고 채널이 idle 되기를 기다린다고 가정하자.
채널이 idle 된 순간 staton A와 B 모두 IFS 만큼 기다린다.(이때 A와 B의 IFS는 같다고 하자)
Contention Window에서 A는 4번 time-slot을 뽑았고, B는 2번 time-slot을 뽑았다.
station B는 time-slot 2에서 프레임을 전송한다.
station A는 time-slot 2(
수정함)에서 채널이 busy한것을 확인(station B가 사용중)하고 채널을 계속 감지하며 idle이 되기를 기다린다.
B의 프레임 전송이 끝나는 순간 채널이 idle 된다.
station A는 IFS만큼 기다린 뒤 time-slot을 새로 뽑지 않고 2번 time-slot을 뽑은 것으로 동작한다.
(A는 최초에 4 time-slot을 뽑았으며, 2 time-slot 후에 B 의 전송 때문에 채널 busy 를 감지하였기 때문에 채널이 다시 idle 상태일때 남은 2 time-slot만큼만 기다리면 전송한다.)
* 실제 우리 주변의 유무선 LAN 환경
NESPOT 같은 AP를 통한 네트워킹 방식(infrastructure mode)에서 802.11b은 DSSS(Direct Sequence Spread Spectrum)라는 인코딩 방식을 사용하여 2.4GHz 주파수 대역을 서로 다르면서도 중첩되는 11개의 채널로 나눈다. 이 중 3개의 채널이 서로 중첩되지 않는데, 여러개의 AP가 중첩되는 전송영역을 가지는 핫스팟에서 각 AP는 중첩되지 않는 채널을 사용하여 서로 충돌이 일어나지 않게 한다. 같은 AP에 연결된 호스트들은 같은 채널을 사용하므로 자신과 같은 AP에 연결된 호스트들끼리만 CSMA/CA로 통신하게 된다.
802.11a 와 802.11g에서 사용하는 인코딩 방식인 OFDM역시 중첩되지 않는 여러개의 채널을 이용한다.
허브를 이용한 유선LAN의 경우 한 호스트의 전기신호가 같은 네트워크의 다른 호스트에게 무조건 전달이 되지만 스위치를 사용한 경우엔 출발지와 목적지 호스트에게만 전기신호가 전달된다.
또한 스위치가 전이중통신(full-duplex)통신을 지원하는 경우 통신하는 두 호스트간에는 전송과 수신이 동시에 일어날 수 있으므로 한 호스트의 통신이 다른 호스트의 통신타이밍에 영향을 주지 않는다. 따라서 매체(링크)를 여러 호스트가 공유할때 사용하는 CSMA/CD방식이 필요없다.
스위치를 통해 연결된 두개의 호스트가 동시에 같은 호스트에 패킷을 보내려 할때에도 스위치가 알아서 버퍼링을 통해 처리하기 때문에 충돌없는 패킷전달이 가능하다.
NESPOT 같은 AP를 통한 네트워킹 방식(infrastructure mode)에서 802.11b은 DSSS(Direct Sequence Spread Spectrum)라는 인코딩 방식을 사용하여 2.4GHz 주파수 대역을 서로 다르면서도 중첩되는 11개의 채널로 나눈다. 이 중 3개의 채널이 서로 중첩되지 않는데, 여러개의 AP가 중첩되는 전송영역을 가지는 핫스팟에서 각 AP는 중첩되지 않는 채널을 사용하여 서로 충돌이 일어나지 않게 한다. 같은 AP에 연결된 호스트들은 같은 채널을 사용하므로 자신과 같은 AP에 연결된 호스트들끼리만 CSMA/CA로 통신하게 된다.
802.11a 와 802.11g에서 사용하는 인코딩 방식인 OFDM역시 중첩되지 않는 여러개의 채널을 이용한다.
허브를 이용한 유선LAN의 경우 한 호스트의 전기신호가 같은 네트워크의 다른 호스트에게 무조건 전달이 되지만 스위치를 사용한 경우엔 출발지와 목적지 호스트에게만 전기신호가 전달된다.
또한 스위치가 전이중통신(full-duplex)통신을 지원하는 경우 통신하는 두 호스트간에는 전송과 수신이 동시에 일어날 수 있으므로 한 호스트의 통신이 다른 호스트의 통신타이밍에 영향을 주지 않는다. 따라서 매체(링크)를 여러 호스트가 공유할때 사용하는 CSMA/CD방식이 필요없다.
스위치를 통해 연결된 두개의 호스트가 동시에 같은 호스트에 패킷을 보내려 할때에도 스위치가 알아서 버퍼링을 통해 처리하기 때문에 충돌없는 패킷전달이 가능하다.
'통신 & 네트워크' 카테고리의 다른 글
리눅스로 AP 만들기 (hostapd 설치) (8) | 2011.01.03 |
---|---|
WFQ 동작 과정 (패킷 처리 예제) (5) | 2009.08.17 |
패킷의 여행 (4) | 2009.03.18 |
Go-back-N ARQ, Selective Repeat ARQ 프로토콜 정리 (23) | 2009.03.02 |
쉽게 설명한 라우팅(Routing)과 포워딩(Forwarding) (29) | 2009.01.01 |
Comments