[학부 과정] 데이터 통신 9주차

2023. 4. 24. 16:03학부 과정/데이터 통신

8주차는 Apple developer Academy 교육을 듣고 오느라 수업에 참여하지 못했다.

그래도 9주차 수업 때, 이전 수업을 다시 한번 리뷰를 해주신 덕분에 수업을 이해할 수 있었다.

Mac에 대해서 배우고 있다. 이 전 수업 시간에 Aloha protocol에 대한 수업을 했다.

오늘은 CSMA에 대해 배웠다. 

정리 시작하겠다.

 

MAC
CSMA
Carrier 신호를 감지한 다음, 잠깐 채널을 모니터링을 하고 미디엄의 상태를 체킹하고 안쓰고 있다면 쓴다.
나말고 누가 쓰고 있는지 체킹하는 방법:
전압 신호 5V를 계속 보내고 있음. 에너지 신호의 전력을 구하는 방법은 제곱해서 적분한다. 시간으로 나누어주면 전력. 쭉 더해지면 에너지이다.
만약 신호가 아무것도 안보내졌다면, 명시적으로 +5v -5v보단 작을 것이다. 신호를 보내는 채널이 있을 때, 미리 자기가 모니터링을 하면서 전압신호를 통해 확인할 수 있다.
취약 신호 Vtime은 충돌이 날 가능성이 있는 시간이다.
전체 시스템의 취약 시간은 제일 멀리 떨어져있는 놈의 propagation을 기준으로한다.
가급적으로 충돌이 안나게끔 적게 만들기 위해서 
vtime은 성능(throughput)과 관련이 있다.
불필요하게 데이터를 보내는 시간이 없다.
CSMA - CD(collision detect) : 유선 LAN 초기 version 
K=0 setting -> persistence method를 골라서 보내 -> 충돌이 났는지 계속 모니터링 -> 문제가 없으면 success
충돌이 났으면 리셋하고 jamming signal을 다른 사람들한테 보내고 k를 증가시킴 그런 다음 R을 골라 0부터 2^k-1만큼 -> Tb 기다려->  
알로하와 차이점은 보내고 본인이 계속 모니터링을 한다.
보내려고 맘먹은 3명이 있어. 한명이 다 보냈으니깐 남은 두 사람 모두 보내고 싶어함 -> 충돌
하지만 약간의 시간의 차이를 갖고 내가 먼저 이 채널을 소유하고 보내고 있음을 다른 사람들이 알면 충돌이 안 일어남
보낼 마음이 있더라도 누가 쓰고 있음을 sensing 하면 보내지 않음. 
1. 1 - persistence : 프레임을 보낼게 생겼어 -> 바로 못보냄 -> sensing을 해서 채널이 비워있는지 checking-> 신호가 없다면 그때 보냄/ 문제는 다른 사람도 신호가 없다면 바로 보낸다는 점이다. 
2. non-persistence : 한번 sensing을 한 다음 누가 쓰고 있음을 확임 -> 계속 모니터링을 하는 게 아니라 랜덤한 시간만큼 기다렸다가 센싱
3. p-persistence : 센싱을 한 다음, 바로 프레임을 보내는 게 아니라, 또 다른 랜덤한 r( 0에서부터 1사이의 숫자)을 골라 -> p는 set value, r값이 p보다 작으면 보내고, 크면 한슬롯 기다린다. 

Minimum Frame Size
중간에 있는 노드들은 충돌이 일어났음을 확인할 수 있지만, A라는 노드는 자기가 프레임을 다 보냈다고 생각하기 때문에 충돌이 안일어났다고 생각할 수 있다. 
Tfr > 2Tp
R= 10Mbps, Tp= 256 마이크로sec Tfr >= Tp
2 *256 마이크로 sec = 51.2 마이크로 sec
bit의 개수 -> Rb* Tfr= 10Mbps * 51.2 마이크로 sec = 512 bits = 64bytes
Tp는 거리, 전파속도에 영향을 받는다.
Tp= d/c' (c'=2*10^8)
d= c'*Tp =2*10^8 * 256마이크로 sec = 51200m =51.2km

CSMA -CA (collision Avoidance) : 무선 LAN 사용
충돌이 날 것같으면 가급적이면 회피하라.
IFS, contention window, acknolegments protocol만 쓰는 것도 있고, 추가로 RTS, CTS와 함께하는 프로토콜이 있다.
contention window에다가 time slot을 함께하는게 특징이다.
station이 보낼 frame이 존재하면, k=0 초기화하고 센싱을 해서 누가 쓰고 있으면 계속 모니터링한다. 누가 아무도 안쓰고 있으면 바로 보내는 게 아니라 일정간격동안 기다린다.IFS라는 시간만큼 기다린다. R을 골라서 R이 제일 작은 애가 가장 먼저 보내도록 하는데 바로 보내진 않는다. Rth slot을 보낸다. 의미는 지금 보낼 게 있다라는 것을 의미한다.  그러면 Rth를 받은 수신기가 응답 신호로 CTS 신호를 보내준다. 그 뒤에 다시 IFS 만큼 다시 기다린 다음 보낸다. 프레임을 보내고 CD와는 다르게 누가 쓰고 있는지 carrior sensing을 하지 않는다. 무선 단말이기 때문에 베터리 즉 에너지를 쓰기 아깝기 때문이다. 마지막으로 수신기로부터 Ack 신호를 통해 받으면 success 안오면 K를 증가 시킨 다음, Tb 만큼 기다린다.

우리가 일반적으로 쓰이는 통신 시스템: channelization protocols
aloha : 충돌이 났을 때, throghput의 지수승으로 늘려 나가고 랜덤하게 하나 고른 숫자를 통해 충돌을 방지한다. 수신기로부터 ack를 받냐 못받냐로 감지한다.
기본적으로 4가지 방식을 봤을 때, 충돌이 났을 때, 어떻게 감지하냐? 숫자를 랜덤으로 골랐을때, 숫자가 같지 않은 경우 충돌을 예방한다.
그 나름대로 차이점:
알로하 기반 -> 고르고 데이터를 보내, ack이 오면 다른 걸 보내면 되고, ack이 오지 않으면  r을 고른다. 
초기 상태 k=0 ,자기가 보낼 프레임 존재하면 우선 보내고 본다. 그러고 나서 ack이 오면 Thank you,
취약 시간 Vtime 적게 갖게 되고 그러면 throughput이 적어진다.
보낼때 slot단위로 보내게된다.