CSMA / CA(2)

2021-03-04

컴퓨터 네트워크를 공부하면서 정리를 한 내용들 입니다.

-참고 K-mooc 부산 대학교 유영환 교수님 : 컴퓨터 네트워크 강의


무선에서는 단말이 보내는 데이터가 강하고

단말에 도착하는 데이터는 많이 약화 되어서 잡음처럼 들리기 때문에

collision이 발생해도 모르는 경우가 많습니다.

802.11 DCF

그래서 CSMA/CA 에서는 receiver가 데이터를 받으면

검사를 하고 잘 받았다고 하면 ACK 메시지를 보내게 되어 있습니다.

Example

sender측에서는 처음에 DISF만큼 감지를 해 보고

그 기간동안 아무도 전송 중이 아니라면 데이터를 보내고

receiver측에서는 데이터를 받았다면 ACK 메시지를 보냄으로서

sender가 확인할 수 있게끔 해 줍니다.

ACK를 일정 시간 동안 받지 못하면 sender는 재전송 하게 됩니다.

DIFS, SIFS

DIFS와 SIFS는 Data와 ACK 를 보내기 이전에 일정 시간을 뜻합니다.

DIFS와 SIFS는 각각 이런 용어의 약자입니다.

Distributed Inter-Frame Space : 프레임 간의 시간 간격

Short Inter-Frame Space : 더 짧은 프레임 간의 시간 간격

DIFS와 SIFS에서 DIFS가 더 큰 값이어야 합니다.

DIFS 값이 SIFS 값보다 커야 되는 이유는 아래와 같습니다.

DIFS가 SIFS보다 짧다면?

만약 DIFS가 SIFS보다 짧거나 한다면

Receiver가 데이터를 받고 나서 ACK를 전송하기 위해 있는 시간(SIFS)동안

어떤 다른 노드가 이 중간의 시간동안

데이터를 보내기 위해 채널 감지를 시작 할 수 있습니다.

SIFS보다 DIFS가 짧다면 감지를 시작 해서 보면

DIFS 쪽에선 데이터를 보내기 시작 하게 됩니다.

그러면 전송되는 데이터와 receiver ACK 메시지가

서로 충돌이 날 수 있기 때문에 sender는 ACK를 받지 못해서

처음 보냈던 데이터를 다시 재전송 해야 되는 문제가 발생 합니다.

그래서 이 DIFS는 무조건 SIFS보다 크게 만듦으로서

receiver가 ACK를 보내려고 준비하는 이 시간 동안에

다른 노드가 채널을 감지를 시작한다하더라도

DIFS가 SIFS보다 크기 때문에 DIFS 만큼 감지하는 동안에

ACK 메시지를 발견하게 됩니다.

이렇게해서 데이터를 잘 받고나서도 다른 노드 데이터와의 충돌 때문에

ACK 메시지가 깨지는 현상을 막을 수 있게됩니다.

굳이 SIFS가 필요한가?

간격을 두지 말고 데이터를 받자 마자 ACK를 보내면

중간에 들어 올 수 없지 않을까? 라고 생각 할 수도 있습니다.

그렇게 될 수가 없는 이유는 receiver가 데이터를 받았을 때,

데이터가 잘 도달했는지 Checksum 체크를 하는 시간,

ACK 메시지를 만드는 시간도 필요했습니다.

왠만한 모든 시스템이 이것들을 준비 할 수 있는

시간의 최대값을 SIFS 값으로 정해 놓았습니다.

Resolution to Hidden Terminal Problem

CSMA/CA 같은 경우에는 A가 보내려고 하는 순간에

누군가 보내고 있음을 감지 하면 그 때 random backoff time을 이용해서

Collision을 회피하는 방식을 사용하지만

A가 C가 전송하는 내용을 감지 하지 못해서 B한테 전달을 하고

충돌이 발생 하는 이런 hidden terminal problem은 해결이 안되었습니다.

그래서 hidden terminal problem을 해결하기 위해

CSMA/CA에서 옵션으로 추가를 해놨습니다.

이 방식은 채널을 reserve 할 수 있게 하자는 겁니다.

그래서 예약 할 수 있는 메시지로 RTS(request-ro-send)

“데이터를 보내려고 한다”는 메시지를 전송 하게 됩니다.

예를 들어서 각각의 원은 각 호스트들의 통신 범위를 뜻하는데

A가 RTS라는 메시지를 전송하게 되면 RTS 신호가 B에 도달 할 수 있습니다.

B에 도달하게 되면 C는 이 RTS 신호를 받지 못합니다.

그래서 A가 보내려고 하는 것을 C는 알지 못하기 때문에

B가 RTS 신호를 받으면 B는 자신의 통신 범위 내로 CTS를 전송하게 됩니다.

그러면 A는 CTS를 보내도 좋다는 허가 메시지로 받아 들일 것이고

C는 CTS 메시지를 보고 다른 단말과 B와 통신을 하고 있다는 사실을 알게됩니다.

이렇게 reservation 메시지를 통해서 채널의 충돌을 방지 할 수 있습니다.