위와 같이 구성된 네트워크가 존재할 때, 오른쪽 3대의 컴퓨터가 서로 통신을 위해 데이터를 주고 받는다 할 때
A라는 컴퓨터가 B라는 컴퓨터에게 데이터를 보내는 동시에
C라는 컴퓨터가 B라는 컴퓨터에게 데이터를 보낸다면
A와 C는 동시에 하나의 선으로 통신을 보낸다.
하지만 이는 충돌(Collision)이 발생하고 충돌이 일어나면 B는 어떤 데이터라도 제대로 받지 못하게 된다.
그래서 media access control 이라는게 존재한다.
즉, link를 공유하는 상황에서 서로 원활하게 통신하기 위해 나온 것이 MAC이다.
Mutiple-access protocols은 다음과 같이 분류된다.
1. Controlled-access protocols
- station은 어느 station이 전송할 권한이 있는지 찾기위해 서로 협의한다.
- station은 다른 station에서 승인하지 않으면 전송할 수 없다.
*station : 데이터를 전송, 수신 또는 처리하는 장치
Reservation
데이터를 보내기 전에 예약을 하는 방법이다.
시간은 interval로 나뉘고, 각 interval에서 data frame 보다 reservation frame이 먼저 존재한다.
장점
충돌을 발생하지 않도록 하는 관점에서 효율이 좋음
보낼 data를 가지고 있는 애가 많으면 좋음
단점
보낼 data를 가지고 있는 애가 적으면 비효율적
Polling
하나의 장치가 primary station으로 지정되고, 다른 장치는 secondary station으로 지정된다.
- 모든 data 교환은 주 station을 통해 이루어져야함.
- primary station이 link를 제어함.
- 주어진 시간에 어떠한 장치가 channel을 사용할 수 있는지는 primary station이 결정
station이 data 보낼 사람이 있는지 질문 -> 대답한 애가 data전송
Token Passing
token을 받은 애만 data를 보내도록 함.
장점
충돌이 발생하지 않음.
primary 없음
단점
token을 받을 때까지 기다려야함.
2. Random Access Protocols
충돌을 최소화하고, throughput을 최대화 하는 방법을 찾는 프로토콜
- station이 없음 -> control 하는 station이 없음.
- 누구도 다른 station보다 우월하지 않으며, 다른 station을 control 할 수 없다.
- 누가 data를 보낼지는 protocol에 따라 결정
충돌을 피하기 위해 다음과 같은 과정을 따르도록 해야함.
- 통신매체를 언제 쓸 수 있을까? -> 남이 보내지 않을때
- 매체가 쓰일 때 station은 어떻게 해야할 까? -> 사용되지 않을 때까지 기다리면 됨.
- 제대로 전송되었는지 어떻게 확인 -> ACK로 판단
- 충돌이 일어났다면 어떻게 해야하나? -> 다시 보내던지 알아서..
* Vulnerable time : 새로운 data를 보내면 충돌이 일어나는 시간 = 이 시간에 data를 보내면 충돌 발생
ALOHA
최초의 random access 방법
- 아무나 보낼 data가 있으면 보냄 -> 충돌이 자주 발생, 성능 ↓
- data를 보낼 애가 적을 때는 효율이 아주 좋음
- 충돌이 발생하면 random한 시간 기다린 후 다시 보냄 -> 계속 충돌 발생 시 abort
- 이 때 기다리는 시간의 범위가 크면 충돌 가능성은 낮지만, 기다리는 시간도 길어짐
- ALOHA는 현재 link 상태를 보지 않아 충돌이 많이 발생
- Vulnerable time은 내가 data를 전송하는 시간의 2배
-> vulnerable time을 줄이기 위해 slotted aloha 사용
-> 시간을 slot으로 나눠 slot에서만 보내고, slot에서만 충돌 발생 , vulnerable time이 반으로 줄어듦.
CSMA (Carrier Sense Multiple Access)
충돌 가능성을 최소화하고 성능을 향상시키기 위함.
데이터를 보내기 전에 medium을 검사해서, 아무도 보내지 않다고 판단하면 데이터를 보낸다.
vulnerable time은 propagation time과 같다.
sensing의 3가지 방법
1. I - persistent : 계속 sensing 하다가 매체가 잠깐이라도 사용이 되지 않을 때 보냄.
2. Nonpersistent : 한번 sensing 후 random time 기다리고 sensing...을 반복하다가 다시 sensing 할 때 매체가 쉬고있다면 data 전송 (wait time을 다르게 하는데 그 이유는 wait time이 똑같으면 또 충돌할 확률이 높음)
3. p - persistent : 1 + 2 방법
계속 sensing 하다가 매체가 사용되지 않을 때 조금 기다렸다가 다시 체크
-> 만약 그때도 사용되지 않는다면 전송, 사용되고 있다면 또 잠깐 기다렸다가 sensing
CSMA / CD (Carrier Sense Multiple Access with Collsion Detection)
CSMA 방법에서 충돌이 일어나면 보내는걸 중지하고, check해서 매체가 사용되지 않을 때 재전송하는 방법
위 그림을 잘 보면, A에서 출발한 검정색 선과 C에서 출발한 빨간색 선이 교차하는 지점이 있다.
이 부분이 충돌(Collision)이 발생한 지점이 된다.
위에서 말했듯, C는 A의 데이터가 도착하지 않으면 medium이 사용중이라는 것을 알지 못한다.
따라서 persistent 방법을 사용하더라도 충돌을 최소화 할 수는 있지만, 충돌은 여전히 발생할 수 있다.
C는 데이터를 보내다가 A의 데이터가 C까지 오게되면 충돌이 일어났다는 것을 감지(Detect)하고 전송을 멈춘다(Abort).
반면 A는 아직 C의 데이터와 충돌이 일어났다는 것을 알지 못한다.
아직 C의 데이터가 A까지 도달하지 않았기 때문이다.
1. CSMA의 persistent 방법 중 하나 선택 해 적용
2. 충돌이 발생하지 않았거나, 내가 이전에 보낸 데이터가 전송완료되었다면 또 보내거나 수신함.
3. 충돌이 일어났다면 jamming signal을 보냄.
4. 매체가 사용되는지 확인 후 사용된다면 random time 기다린 후 다시 수행, 사용되지 않는다면 abort
ALOHA 와의 차이점
1. 매체를 check 하는 방법이 추가됨.
2. 전송이 완료된 것 또는 충돌이 일어난 것을 탐지하기 위해 계속 모니터링 한다.
3. 충돌이 발생하면 다른 station 들이 충돌이 일어났다는 것을 알 수 있도록 짧은 jamming 신호를 보냄.
-> 충돌이 발생하면 energy가 2배 정도로 커져서 충돌이 일어났음을 알지만, 확실하게 알려주고자 jamming 신호를 보냄.
CSMA / CA (Carrier Sense Multiple Access with Collision Detection)
무선 통신에서 사용하고자 개발됨.
1. 채널에서 지속적으로 sensing
2. 채널을 사용하고 있지 않다는 것 탐색 시 바로 data를 전송하는 것이 아니라 IFS 라고 하는 시가나동안 기다림
-> 채널이 사용되지 않다고 sensing 되었더라도 멀리 있는 station이 전송을 시작했을지도 모름. (이걸 한번 더 고려하여 IFS 시간을 기다림.)
3. 무작위로 대기하는 곳의 slot을 결정. (after IFS 때 채널이 사용되고 있다면 slot의 개수가 2의 배수로 늘어남)
CSMA / CA는 무작위 결과가 waiting station이 차지하는 slot의 수를 결정한다는 것을 제외하고 p -persistent 방법과 유사
CTS and RTS
위에서 carrier sensing 한 다음, IFS만큼 기다리고 contention window 과정을 거쳤었다.
그때의 대기시간을 DCF interframe space(DIFS)라고 부른다.
RTS를 보낸 후, 목적지 station은 short interframe space(SIFS, DIFS 보다 더 적은 시간을 갖는다) 만큼 기다린다.
이후 CTS를 보내고, 출발지 station은 SIFS만큼 기다린 후, 데이터를 전송한다.
목적지 station은 데이터가 전부 도착한 후, SIFS만큼 기다린 후 ACK를 보내게 된다.
이때 CTS에는 얼만큼의 시간동안 데이터를 보낼지에 대한 정보가 들어있다.
따라서 위의 C와 D의 경우는 CTS에 명시된 시간만큼 데이터를 보내지 않는다.
위 그림에서 NAV(Network allocation vector)가 이를 나타냄을 알 수 있다.
3. Channelization
- 다중 엑세스 방법
- link의 bandwidth를 나눠쓰는 방식
1. frequency divide
2. time divide
3. through code
FDMA (Frequency-Division Mutiple Access)
- 사용가능한 대역폭을 주파수로 나눠 사용
- 사용 가능하다고 filtering 한 주파수만 사용 가능
TDMA와 달리 모든 대역폭을 사용할 수 없지만, 연속해서 계속 보낼 수 있다는 장점이 있다.
TDMA (Time - Division Multiple Access)
- 시간을 나눠 각 station에게 할당
- 할당받은 시간에는 모든 주파수를 본인이 혼자 사용 가능
CDMA (Code - Division Multiple Access)
- 하나의 채널만 점유 (같은 주파수 동시 사용)
- 모든 station이 동시에 데이터를 보냄 (time sharing이 없음)
각각의 data에 본인의 code를 곱해서 보냄
그러면 채널에서 모든 데이터를 합쳐서 보냄.
이렇게 만들어진 data에서 decoding을 하면 누가 어떤 데이터를 보냈는지 확인기능
References
https://ideadummy.tistory.com/114
https://velog.io/@jmink002/%EB%8D%B0%EC%9D%B4%ED%84%B0%ED%86%B5%EC%8B%A0-Chapter-9
'🖥️ Computer Science > Data communication' 카테고리의 다른 글
[데이터 통신] Connecting Devices and Virtual LANs (0) | 2024.06.04 |
---|---|
[데이터 통신] Wired LANs - Ethernet (0) | 2024.06.01 |
[데이터 통신] Data Link Control (2) | 2024.05.21 |
[데이터 통신] Introduction To Data-Link Layer (0) | 2024.05.08 |
[데이터 통신] Error Detection and Correction - 2 (0) | 2024.05.07 |