- station은 어느 station이 전송할 권한이 있는지 찾기 위해 서로 협의한다.
- station은 다른 station에서 승인하지 않으면 전송할 수 없다.
- 권한을 가진 애에게 "나 데이터 보내도 돼?" 라고 물어봄.
-> 승인을 받으면 보낼 수 있음. ( 승인을 받기 전까지는 보낼 수 없음. )- station이란 ? 데이터를 전송, 수신 또는 처리하는 장치
controlled-access 의 3가지 protocols
- Reservation : 데이터를 보내기 전에 예약을 하는 방법
- 시간은 interval 들로 나뉨.
- 그리고 각각의 시간안에서 보내진 data frame 들보다 reservatoin frame 이 먼저 존재.
[ 장점 ]
- 충돌을 발생하지 않도록 하는 관점에서는 훌륭함.
- 보낼 data 를 가지고 있는 애가 많으면 좋음.
[ 단점]
- 보낼 data 를 가지고 있는 애가 적으면 비효율적.
- Polling : 하나의 장치가 주 station 으로 지정되고, 다른 장치는 보조 station 으로 지정.
모든 데이터 교환은 기본 station 을 통해 이루어져야함.
(최종목적지가 보조장치인경우에도)기본 station 이 link 를 제어함.
주어진 시간에 어떠한 장치가 channel 을 사용할 수 있는지는 주 station 이 결정.
station 이 "data 보낼 사람 있어?" 라고 질문
-> 대답한 애가 data 전송질문자, 대답자가 있어야 함.
- Token Passing : token 을 받은 애만 data 를 보내라.
[ 장점 ]
- 충돌이 발생하지 않음.
- primary 없음.
[ 단점 ]
- token 을 받을 때까지 기다려야함.
random-access protocols : 충돌을 최소화하고, throughput 을 최대화하는 방법을 찾는 protocol
- station 이 없음. -> control 하는 station 이 없음.
- 누구도 다른 station 보다 우월하지 않으며, 다른 station 을 control 할 수 없다.
- 누가 data 를 보낼지는 protocol 에 따라 결정
- station 은 충돌을 피하기 위해 다음과 같은 과정을 따를 수 있도록 algorithm 을 작성하면 됨. ( 알고리즘을 짤 때 전부 고려해야함. )
- 통신매체를 언제 쓸 수 있을까? -> 남이 보내지 않을때
- 매체가 쓰일 때 station 은 어떻게 해야할까? -> 사용되지 않을 때까지 기다리면 됨.
- 제대로 전송되었는지는 어떻게 확인? -> ACK 로 판단
- 충돌이 일어났다면 어떻게 해야하지? -> 다시 보내던지 그건 알아서..
- 앞으로의 과정에서 알아두면 좋은 단어
1) Vulnerable time : 새로운 data 를 보내면 충돌이 일어나는 시간.
= 이 시간에 data 를 보내면 충돌일어남.
- ALOHA : 최초의 random access 방법
- 아무나 보낼 data 가 있으면 보내면 됨.
- 그렇기에 충돌이 매우 자주 발생. -> 성능 bad
- data 를 보낼 애가 적을 때는 효율이 아주아주 좋음. ( very good! )
- 충돌이 발생하면 random 한 시간 기다린 후 다시 보내봄.
-> 몇번 반복해도 계속 충돌이 일어나면 보내기를 포기 ( abort )- 이 때 기다리는 시간의 범위가 크면 충돌가능성은 낮지만, 기다리는 시간도 길어짐.
- ALOHA 는 현재 link 상태를 보지 않아 충돌이 많이 발생하는 것임.
( 누가 안보낼 때 보내는 방식으로 작동하지 않음. )- ALOHA 의 Vernerable time 은 내가 data 를 전송하는 시간의 2배
-> Vernerable time 을 줄이기 위한 방법으로 slotted ALOHA 사용.
-> 시간을 어떠한 slot 으로 나눠 그 slot 에서만 보낼 수 있고, slot 안에서만 충돌 발생.
-> 앞뒤로 check 할 필요 없어 Vernerable time 이 줄어듦.
2) CSMA ( Carrier Sense Multiple Access )
- 충돌 가능성을 최소화하고 성능을 향상시키기 위해 개발된 방법.
- 통신매체를 사용하고 있는지 아닌지를 먼저 한번 살펴봐라.
-> 1) 보내기 전 확인하던지
-> 2) 다른사람이 말하고 있는지 들어라.
- sensing 하고 보내니 CSMA 의 Vernerable time 은 전파시간과 동일
- sensing 의 3가지 방법
1) I - persistent : 계속 sensing 하다가 매체가 잠깐이라도 사용이 되지 않을 때 보냄.
2) Nonpersistent : 한번 sensing 후 random time 기다리고 sensing ..... 을 반복하다가 다시 sensing 할 때 매체가 쉬고있다면 data 전송
3) p - persistent : 1) + 2) 방법
-> 계속 sensing 하다가 매체가 사용되지 않을 때 조금 기다렸다가 다시 체크
-> 만약 그때도 사용되지 않는다면 전송, 사용되고있다면 또 잠깐 기다렸다가 sensing
3) CSMA / CD ( Carrier Sense Multiple Access with Collision Detection )
- CSMA 방법인데 충돌이 일어나면 보내던걸 중지 ( Abort ) 후 check 해서 매체가 사용되지 않을 때 재전송하는 방법.
- Ethernet 에서 사용되는 방식.
- CSMA / CD 의 흐름순서
- CSMA 의 persistent 방법 중 하나 선택 해 적용.
- 충돌이 발생하지 않았거나, 내가 이전에 보낸 데이터가 전송완료되었다면 또 보내거나 수신함.
- 충돌이 일어났다면 jamming signal 을 보냄. ( 자기가 충돌이 발생한 것을 "확실하게" 알려주는 신호 )
- 매체가 사용되는지 확인 후 사용된다면 random time 기다린 후 다시 수행, 사용되지 않는다면 abort.
- ALOHA 와의 차이점
- 매체를 check 하는 방법이 추가됨.
- 전송이 완료된 것 또는 충돌이 일어난 것을 탐지하기 위해 계속 모니터링을 한다.
( 이 두가지 상황이 detect 되면 전송을 중지시킨다. )- 충돌이 발생하면 다른 station 들이 충돌이 일어났다는 것을 알 수 있도록 짧은 jamming 신호를 보낸다.
-> 사실 충돌이 발생하면 energe 가 2배정도로 커져서 충돌이 일어났음을 감지할 수 있지만 "확실하게" 알려주고자 jamming 신호를 보낸다.
4) CSMA / CA ( Carrier Sense Multiple Access with Collision Avoidance )
- 무선 통신에서 사용하고자 개발된 방법.
- CSMA / CD 는 무선통신에서 제대로 작동하지 않는다.
-> 무선통신에서는 에너지 감쇠속도가 빨라서 에너지를 봤을 때 collision 을 탐지하기 어렵다. ( 이걸 CSMA / CA 로 해결 )
- CSMA / CA 의 흐름 순서
- 채널( 매체 ) 를 지속적으로 sensing
- 채널을 사용하고 있지 않다는 것 탐색 시 바로 data 를 전송하는 것이 아니라 IFS 라고 하는 시간동안 기다림.
-> 채널이 사용되지 않다고 sensing 되었더라도 멀리 있는 station 이 전송을 시작했을지도 모름. ( 이걸 한번 더 고려하고자 IFS 라는 시간을 기다림. )- 무작위로 대기하는 곳의 slot 을 결정. ( after IFS 때 채널이 사용되고 있다면 slot 의 개수가 2의 배수로 늘어남. )
- CSMA / CA 는 무작위 결과가 waiting station 이 차지하는 slot의 수를 결정한다는 것을 제외하고는 p - persistent 방법과 매우 비슷함.
1) FDMA : Frequency - Division Multiple Access
- 사용가능한 주파수를 나눠 사용
- 본인이 사용 가능하다고 허락받은 주파수만 사용가능.
2) TDMA : Time - Division Multiple Access
- 시간을 나눠 각 station 에게 할당해줌.
- 할당받은 시간에는 모든 주파수를 본인이 혼자 사용 가능.
3) CDMA : Code - Division Multiple Access ( 중요! )
- 하나의 채널만 점유 ( 같은 주파수 동시 사용 )
- 모든 station 이 동시에 데이터를 보냄. ( 시분할이 없음. )
- 각각의 data 에 본인의 code 를 곱해서 보냄.
- 그러면 채널에서 모든 데이터를 합쳐서 보냄.
- 이렇게 만들어진 data 에서 decoding 을 하면 누가 어떤 데이터를 보냈는지 확인 가능.
- [ 아래는 decoding 하는 과정 ]