mac 프로토콜은 liked layer에서의 충돌 방지를 위한 프로토콜을 말한다.

 

❗ csma(carrier sence multiple access)

csma는 random access 방식을 사용한다. 다시말해 호스트는 자신이 원할때 마다 통신을 할 수 있다는 것을 의미한다.

기본적인 컨셉은 listen before send으로 carrier(데이터를 보낼 host)가 보내지 전에 우선석으로 sence(듣고)한 후 데이터를 보내는 방식이다.

하지만 propagation delay(빛의 속도, c)가 0이 아니기 때문에 boradcast 매체인 liked layer에서는 충돌이 발생할 수 밖에 없다. 즉 충돌은 나기마련이라는 것이 결론이다. 따라서 충돌을 방지할 수 있는 mac 프로토콜이 필요하다.

 

 

❗ csma / cd(carrier sence multiple access / collision detection)

그래서 등장한 것이 csma의 보완버전으로 충돌을 관리하는 mac 프로토콜이다.

작동원리

NIC가 충돌을 감지하면 그 순간 통신을 멈춘다. 그 후 일정시간을 기다린다. 이 과정을 binary exponential backoff이라고 한다. 0,1,2,…,2^m-1(m is count of collision) 중 랜덤으로 값을 선택하여 그 만큼의 딜레이를 갖는다. exponential한 값중에 랜덤하게 선택하기 때문에 충돌횟수가 늘어나면 더 오래기다릴 확률이 높아진다.

tcp의 congest control과 비슷한 원리인듯 하다. cast의 상황을 독립적으로 판단하고 적절히 양보하게 된다.

 

 

❗ 네트워크가 너무 느린데?!

가끔 많은 사람들이 같이 와이파이를 사용하는 경우에 우리가 체감적으로 네트워크가 느리다고 느끼는 것이 실제 네트워크가 느린것이 아니라 사람이 몰려서 backoff 시간이 늘어난다는 요인이 작용하기 때문이다.

 

 

❗ethernet minimum frame size

propagation delay가 빛의 속도이지만, csma / cd 만으로는 충돌이 발생했음에도 불구하고 충돌을 인식하지 못하는 아주 최악의 상황이 발생할 수 있다.

 

충동이 일어났음에도 인지하지 못하는 경우는 어떤 상황일까?

A와 B가 boradcast 매체의 host라고 가정하자.

1. A가 B에게 데이터를 보냈다.

2. A가 B에게 보낸 데이터가 B에게 도달하기 전에 B 또한 A에게 데이터를 보낸다.

3. 이때 B->A로 오는 와중에 A입장에서, A->B 데이터 전송이 끝난다면,

4. B->A데이터는 이미 노이즈 섞인 불완전한 데이터이지만

5. A는 자신이 통신을 모두 마친 후 아주 평안한 상태에서 받은 데이터이기 때문에 충돌이라는 것을 인지하지 못한다.

 

이처럼 충돌이 발생했음에도 불구해고 탐지하지 못하는 상황이 발생하는 것을 막기위해 최소전송단위시간이 존재한다. 찰나의 순간에 데이터를 같이 보내는 경우 그것을 인지하기 위해 일정크기 이상으로 데이터를 보내자는 약속이 있는 것이다. 이것이 바로 ethernet minimum frame size (64byte)이다. 만약 보내는 데이터가 64byte보다 작다면 padding 집어넣어서 64byte를 맞추어 보낸다.

+ Recent posts