[링크 계층: 링크, 접속망, 랜]
⤷링크 계층이 제공하는 서비스
- 에러 감지
보정, 수정
(라우팅: 제어 평면, 포워딩: 데이터 평면)
⤷바로 붙어 있는 물리 계층 사이의 전송을 링크 계층이라고 한다. 바로 옆 라우터.
⤷이렇게 바로 연결된 두 사이에 에러가 없어야 첫 번째 노드에서 두 번째 노드까지 두 번째에서 세 번째 노드까지 에러가 없어야 출발지에서 목적지까지 에러가 없다는 것을 보장할 수 있다.
⤷에러를 감지했을 때 전송 계층에서 재전송.
⤷링크 계층에서는 가능하면 수정하겠다.
(많은 정보 필요)
⤷데이터링크를 같이 공유해서 사용.
⤷링크 계층의 주소: MAC 주소
[링크 계층 소개]
⤷이 선들이 링크.
⤷각 서버나 데스크탑 장비들이 노드.
(호스트와 라우터들)
⤷링크 : 통신 경로를 따라 인접(adjacent) 노드를 연결하는 통신 채널
⤷이 데스크탑에서 라우터까지 안전하게 전송되는 것을 보장하는 게 링크 계층에서 하는 일이다.
⤷링크에는 유선, 무선, LAN(local area network)이 있다. LAN은 유선, 무선으로 다 구현 가능하다.
⤷데이터 링크 계층의 패킷은 프레임(frame)이라고 부른다.
⤷IP 데이터 그램에 헤더와 트레일러를 붙여서 프레임이라고 부르는 것이다.
⤷물리적으로 연결된 인접한 노드와 노드 사이에 데이터를 안전하게 전송한다.
⤷출발지에서 목적지까지 가는데 출발지가 랩탑이라면 랩탑에서 AP까지는 무선이다.
⤷각 링크가 다른 링크가 사용되어있을 수 있다. (유선, 무선)
⤷다른 프로토콜이 사용되어 데이터그램이 전송.
⤷예를 들어, 첫 번째 링크는 이더넷이고
중간 링크는 frame delay라는 기술이고,
마지막 링크는 802.11 (무선)이다.
⤷이런 식으로 각 링크는 다른 물리선을 사용하고 거기에 사용되는 프로토콜이 다르다.
⤷각 링크는 서로 다른 서비스를 제공한다.
⤷어떤 링크는 rdt 안정적인 데이터 전송을 제공할 수도 있고 제공하지 않을 수도 있다는 것.
<전송예시>
여행자 : 데이터그램
교통편 : 링크
운송 방식 : 링크 계층 프로토콜
여행사 직원 : 라우팅 프로토콜
=> 링크 계층의 기본 서비스는 단일 통신 링크상으로 데이터그램을 한 노드에서 인접노드로 이동시키는 것이지만 서비스의 세부사항은 링크에 적용되는 특정 링크 계층 프로토콜을 따른다.
[링크 계층이 제공하는 서비스]
프레임화
링크 접속 (엥 이건 책에만 있넹)
신뢰적 전달
오류 검출과 정정
<프레임화>
⤷거의 모든 링크 계층 프로토콜은 네트워크 계층 데이터그램을 링크상으로 전송하기 전에 링크 계층 프레임에 캡슐화한다.
⤷프레임은 네트워크 계층 데이터그램이 들어있는 데이터 필드와 여러 개의 헤더 필드로 구성된다.
⤷프레임 구조는 링크 계층 프로토콜에 의해서 명시된다.
<링크 접속>
⤷매체 접속 제어(medium access control, MAC) 프로토콜은 링크상으로 프레임을 전송하는 규칙에 대해서 명시한다.
⤷MAC 주소는 48비트이다.
⤷출발지와 목적지를 나타내기 위해 사용하는 MAC 주소가 프레임의 헤더부분에 붙게 된다.
⤷네트워크 인터페이스 카드 만들 때 공장에서 MAC 주소를 찍어서 만든다.
<신뢰적 전달>
⤷링크 계층 프로토콜이 신뢰적 전달 서비스를 제공하는 경우 네트워크 계층 데이터그램은 링크상에서 오류 없이 전달된다.
⤷낮은 비트 오류 링크에서는 (에러를 만들 확률이 낮다면) 신뢰할 수 있는 데이터전송을 사용할 필요가 없다. (ex. fiber, 일부 트위스트 페어: 에러 잘 안남)
⤷무선 링크에서는 에러 확률이 높음.
이럴 경우에 인접한 두 노드 사이에 신뢰할 만한 안정적인 데이터 전송이 중요하다.
왜 링크 계층의 신뢰성과 단대단 신뢰성 둘 다 필요할까?
=> 인접한 노드들 사이에 에러가 없어야 결국 출발지에서 목적지까지 에러가 없다는 것을 보장할 수 있기 때문이다.
<흐름 제어>
⤷받는 애가 받을 수 있을 만큼만 보내는 것.
⤷TCP에서는 winsize를 가지고 했다.
⤷링크 계층에서는 인접한 노드사이에서 내가 받을 수 있을 만큼만 보내라고 알려준다.
이 노드 사이에서 속도를 조절해 주는 것이다.
<오류 검출과 정정>
⤷두 노드 사이의 거리가 멀면 신호가 감쇄하거나 노이즈가 껴서 에러가 발생할 수 있다.
⤷수신 노드의 링크 계층 하드웨어는 1로 전송된 프레임 비트를 0으로 또는 그 반대로 오인할 수 있다. 이러한 비트 오류는 신호의 약화나 전가기 잡읍 때문에 생긴다.
⤷오류가 있는 데이터그램은 전달할 필요가 없으며 따라서 대부분의 링크 계층 프로토콜은 오류를 검출하는 방법을 제공한다.
⤷에러를 찾으면 재전송하거나 버린다.
⤷에러가 있는 걸 찾아서 고치겠다. 이건 더 많은 정보를 필요로 한다.
<half-duplex와 full-duplex>
⤷half-duplex는 양방향으로 보낼 수는 있는데 한순간에 한 노드만 보낼 수 있다.
(무전기 같은거)
⤷full-duplex는 둘 다 동시에 양방향으로 보낼 수 있다.
[링크 계층이 구현되는 위치]
⤷모든 호스트마다 링크 계층이 구현된다.
⤷대부분의 경우 링크 계층은 네트워크 인터페이스 카드(NIC)로 알려진 네트워크 어댑터에 구현된다.
⤷네트워크 어댑터의 중심에는 링크 계층 제어기가 있으며 링크 계층 제어기는 여러 기능들이 구현되어 있는 단일의 특수 용도 칩이다.
⤷하드웨어와 소프트웨어 그리고 이를 연결하는 펌웨어의 조합이 NIC이다.
⤷호스트마다 이게 다 들어있다.
[어댑터들의 통신]
⤷인접한 두 노드 간에 프레임이라고 하는 데이터 그램이 전송되는 상황.
<sender>
⤷보내는 쪽에서는 IP 데이터그램을 헤더와 트레일러를 붙인 프레임에 캡슐화를 한다.
⤷오류 검사 비트, rdt, 흐름 제어 등을 추가한다.
<receiver>
⤷오류, rdt, 흐름 제어 등을 찾는다.
⤷데이터 그램을 추출하고 상위 레이어로 전달한다.
[오류 검출 및 정정 기술]
⤷16비트 값, 1의 보수 취해서 보냄
⤷다시 1의 보수하고 값이 다 1이면 에러가 없는거고 하나라도 0이 있으면 에러가 있다. (체크섬)
[에러 감지]
⤷EDC = (여분)
Error Detection and Correction bits
⤷이게 길면 길수록 에러를 체크하는 방법이 더 많아 진다.
⤷D = 에러 검사를 체크하기 원하는 데이터 부분. 헤더 필드가 포함되어 있다.
⤷에러 감지는 100% 정확하게 찾을 수는 없다.
⤷프로토콜은 약간의 에러는 놓칠 수 있다 하지만 그럴 확률이 높지는 않다.
⤷EDC필드가 클수록 에러를 더 잘 감지할 수 있고 수정할 수 있다. 근데 이게 크다는 건 그만큼 중복이기 때문에 오버헤드이다.
⤷D에 EDC 붙인걸 비트에러 체크하는 링크를 거쳐 보냄.
⤷체크를 해서 모든 D’의 비트가 괜찮은지 봐서 에러가 없으면 데이터그램 추출해서 상위링크로 보낸다.
⤷에러가 있으면 버리거나, 재전송하거나, 수정을 한다.
[패리티 검사]
⤷전송되는 데이터의 오류를 검출하기 위한 3가지 기술은 패리티 검사, 체크섬, 순환중복검사이다.
⤷패리티 검사는 가장 쉽고 오버헤드가(EDC 부분) 적게 사용되는 방법이다.
⤷패리티는 1의 개수를 얘기하는데
odd면 1의 개수가 홀수이고
even이면 1의 개수가 짝수이다.
⤷1개의 비트만 추가됨 (싱글 비트 패리티)
⤷여기서는 1의 개수가 9개임 (홀수 패리티)
⤷패리티 비트를 포함해서 전체 1의 개수가 홀수여야 하는 것이다.
⤷근데 오류가 생겨서 1의 개수가 10이 되면 짝수니까 어디서 에러가 생긴지는 모르겠지만 에러가 생겼다는 것은 알게 된다.
⤷한 비트가 반전이 일어났을 때 에러 감지를 하게 되는 것이다.
⤷row와 column 대해서 각각에 패리티를 한다.
⤷총 열과 행 개수만큼의 비트가 추가된다.
⤷열과 행의 비트를 추가하면 에러 감지 뿐만 아니라 수정까지 가능하다.
⤷(행row은 1이 4개) 짝수 패리티를 만들어준다. (열은 1이 2개)
⤷이 경우는 에러가 없을 때이다.
⤷에러가 감지되었을 때는 2번째 행이 이상하다고 에러가 생김.
⤷저 부분이 1로 바뀌어야 하는구나하고 에러를 탐지할 뿐만 아니라 수정하는 것이다.
⤷에러 탐지와 수정은 single 비트 에러 일때만 체크가 가능하다.
⤷이렇게 중복된 데이터를 넣을수록 오버헤드는 커지지만 에러에 대한 탐지뿐만 아니라 수정까지 가능하다.
[인터넷 체크섬] 411p
⤷전송된 패킷에서 오류 감지
(전송 계층에서만 사용됨)
⤷TCP와 UDP 프로토콜에서는 인터넷 체크섬이 모든 필드에 대해서 계산된다.
⤷IP에서는 IP헤더에 대해서만 체크섬을 계산한다.
⤷체크섬 방법은 상대적으로 패킷 오버헤드가 적다.
<sender>
⤷세그먼트 내용을 16비트 정수로 처리한다.
⤷체크섬 : 16비트를 다 더해서 합에 대한 1의 보수를 취해서 세그먼트 content에 추가한다.
⤷체크섬 값을 UDP 체크섬 필드에 넣는다.
<receiver>
⤷수신된 체크섬을 검사한다.
⤷한 비트라도 0이면 오류가 발생한 것이다.
⤷에러가 감지되면 전송 계층에서는 재전송하라고 한다. MAC으로, UDP에서는 그냥 drop 시켜 버린다.
->왜 전송 계층에서는 체크섬을 사용하고
링크 계층에서는 CRC를 사용할까?
⤷전송 계층은 일반적으로 호스트의 운영체제의 일부로 소프트웨어로 구현된다.
⤷전송 계층의 오류 검출이 소프트웨어로 구현되므로 체크섬처럼 간단하고 빠른 오류 검출 기법이 필요하다.
⤷반면, 링크 계층에서의 오류 검출은 어댑터안의 전용 하드웨어로 구현되므로 더 복잡한 CRC 연산을 빨리 수행할 수 있다.
[순환 중복 검사, CRC] 개중요해 시험출제
⤷Cyclic redundancy check 412p
⤷오늘날 사용되는 오류 검출 기술
⤷CRC 코드는 다항식 코드로도 알려졌는데 그 이유는 전송되는 비트열에 있는 0과 1값을 계수로 갖는 다항식처럼 비트열을 생각할 수 있고, 또한 비트열에 적용되는 연산을 다항식 연산으로 이해하는 것이 가능하기 때문이다.
⤷에러 수정은 불가능함. 탐지만 가능.
⤷D비트로 이루어진 데이터를 전송한다고 가정.
⤷sender와 receiver는 G라고 하는 생성자를 알고 있어야 한다. G는 r+1만큼의 비트수가 필요하다. (최상위비트는 1이어야 함.)
⤷sender는 데이터 D에 대해 추가 비트 R을 선택해서 D 뒤에 덧붙인다.
⤷<D,R>을 보냈는데 이걸 더해서 G로 나눠본다. 정확히 나눠져야 정상.
⤷나머지가 0이면 에러가 없는 것.
나머지가 0이 아니면 에러가 감지된 것.
⤷그러면 receiver는 재전송하거나 버린다.
⤷CRC는 이더넷, 802.11 와이파이, ATM 등에서 사용된다.
-> 내가 보내려고 하는게 D비트이다.
거기에 R비트만큼을 추가한다.
(ex. 50바이트에다가 6비트를 추가)
⤷우선 6비트를 0으로 만들어줘야 한다.
D*2r XOR R
⤷여기서 r은 6이다.
⤷비트를 더할 때 컴퓨터는 이런 계산을 한다. 수학적으로는 이런 수식이라는 것!
⤷6비트의 D를 보내려고 한다.
⤷G는 4비트이다. (sender와 receiver가 알고 있음)
⤷G = r+1 비트
⤷그래서 R은 3비트만 붙여줄 수 있다.
⤷sender는 D와 R을 보내게 된다.
⤷이걸 받은 receiver는 D*23이렇게 해서 XOR R을 한다. 이걸로 나머지가 0인지 아닌지를 체크한다.
⤷XOR 한거에다가 XOR R을 더 하면 다 0이 된다. 그래서 D*2r이 효과가 나오고
⤷G로 나눴을 때의 remainder가 실제로 내가 추가하려고 하는 R비트가 된다는 뜻이다.
강의 59:00
<- 자리 수 별로 뺀다고 생각하기
⤷이렇게 나머지가 0인게 중요!
=> CRC 매커니즘 매우 중요하다!
[다중 접속 링크와 프로토콜]
⤷다수의 송수신 노드들의 공유되는 브로드캐스트 채널로의 접속을 조정하는 문제
⤷링크는 노드와 노드 사이에 물리적인 연결을 말한다.
⤷이 물리적인 연결은 유선 또는 무선임.
- 점대점(point-to-point) 링크는 링크의 한쪽 끝에 한 송신자와 링크의 다른 쪽 끝에 한 수신자가 있는 것이다. (ex. 전화기, 이더넷 스위치, 호스트)
- 브로드캐스트(boradcast) 링크는 동일한 하나의 공유된 브로드캐스트 채널에 다수의 송신 노드 및 수신 노드들이 연결된다.
⤷여기서 브로드캐스트라는 용어는 임의의 한 노드가 프레임을 전송하면 채널이 그 프레임을 방송해서 다른 모든 노드들이 그 프레임의 복사본을 수신하기 때문에 사용된 것이다. (ex. 이더넷, 무선 랜)
⤷칵테일 파티를 하는 경우 사람들이 많아서 그 사람의 말을 잘 들을 수가 없다. 간섭이 일어난다. 데이터 충돌.
[다중 접속 프로토콜, MAC]
⤷유선 및 무선 근거리망과 위성망을 포함하는 다양한 네트워크 설정에서 필요하다.
⤷노드들이 보낼 데이터가 있으면 그때 브로드캐스트 채널에 접속해서 보낸다.
⤷이럴 때 간섭이 발생한다. 노드가 동시에 두 개 이상의 신호를 수신하는 경우 충돌이 발생한다.
⤷다중 접속 프로토콜은 공유되는 브로드캐스트 채널로 보내는 노드들의 전송을 조정하기 위함이다.
⤷노드가 채널을 공유하는 방법, 즉 노드가 전송할 수 있는 시기를 결정하는 분산 알고리즘
⤷채널에 대한 정보를 공유하는 것도 채널 자체를 사용해야 한다.
[이상적인 다중 접속 프로토콜]
- 초당 R비트의 전송률을 갖는 브로드캐스 트 채널
(다음과 같은 특징을 지니는 것이 바람직함)
단 하나의 노드가 전송할 데이터가 있을 때는 그 노드가 R bps의 처리율을 갖는다.
M개의 노드가 전송할 데이터가 있을 때는 각 노드가 R/M bps의 처리율을 갖는다.
이 프로토콜은 완전 분산되어 있다. (간섭 x) 즉, 고장으로 인해 전체 시스템을 정지시킬 수 있는 마스터 노드가 없다.
이 프로토콜은 단순해서 구현하는데 비용이 적게 든다.
[다중 접속 프로토콜 3가지 분류]
(MAC protocol)
채널 분할 프로토콜
⤷동시에 많이 보낼 때는 가장 효과적인 방법인데 보낼 데이터가 각각 누군 많고 누군 적으면 링크의 사용률이 떨어지는 단점이 있다.
랜덤 접속 프로토콜
⤷아무것도 쪼개지 않음. 충돌이 발생할 수 있다. 다시 보내야 한다.
순번 프로토콜
⤷라운드 로빈 방식 같음. 노드 별로 순서가 있음.
[채널 분할 프로토콜]
시분할 다중화 (TDM)
주파수 분할 다중화 (FDM)
코드 분할 다중 접속 (CDMA)
<TDMA, time division multiple access>
⤷시분할 다중화
⤷시간을 쪼개서 각각의 노드에게 시간 슬롯을 주는 것이다. 그 시간 동안에는 내가 데이터를 다 보낼 수 있는 것이다.
⤷각 노드들은 일정 길이의 슬롯을 얻는다.
(길이=하나의 패킷을 전송할 수 있는 시간)
⤷6개 슬롯이 있다는 것은 6개의 노드가 있다는 것이다.
⤷근데 이 중에서 1, 3, 4번만 보낼 데이터가 있어. 2, 5, 6번은 idle. 그냥 공백으로 비워지게 된다.
⤷즉 이런 경우에는 절반의 사용률을 보인다.
⤷노는 슬롯이 생기게 되는 단점이 있다.
<FDMA, frequency division multiple access>
⤷주파수 분할 다중화
⤷주파수 대역으로 분할된 채널 스펙트럼
⤷각 스테이션은 고정 주파수 대역을 할당
⤷보낼 데이터가 없는 부분은 주파수 대역대가 idle하고 있다. 놀고 있다. 낭비가 됨.
⤷2, 5, 6번은 놀게 된다.
⤷이것도 마찬가지로 보낼 데이터가 많을 경우에는 사용률이 좋아지지만 이 경우처럼 안사용하는 경우에는 사용률이 절반으로 떨어진다.
⤷일이 많을 때 더 효율적이다.
[랜덤 접속 프로토콜]
알로하 프로토콜
CSMA 프로토콜
(이걸 가장 많이 사용한다.)
⤷랜덤 접속 프로토콜에서 전송 노드는 항상 채널의 최대 전송률인 Rbps로 전송한다.
⤷충돌이 생기면 충돌과 관련된 각 노드는 프레임이 충돌 없이 전송될 때까지 자신의 프레임을 계속해서 재전송한다.
⤷하지만 충돌했을 때 노드는 해당 프레임을 즉시 재전송할 필요가 없다. 대신 그 프레임을 재전송하기 전에 랜덤 지연 시간 동안 기다린다.
⤷충돌과 관련된 각 노드는 자신만의 랜덤 지연 시간을 선택한다.
⤷충돌이 생긴 후 각 노드는 지연 시간을 스스로 결정하며 따라서 충돌했던 노드 중 하나는 다른 노드가 선택한 지연 시간보다 충분히 작은 지연 시간을 선택함으로써 충돌 없이 자신의 프레임을 채널로 전송할 수 있다.
⤷충돌이 생길 수 밖에 없는데 이 방법에서는 어떻게 충돌을 감지할 것인지가 중요!
충돌을 어떻게 회복할 것인지!
⤷이 4개를 배운다.
⤷일이 적을 때 더 효율적이다.
<슬롯 알로하>
⤷가장 단순한 랜덤 접속 프로토콜
⤷슬롯 알로하에서는 다음과 같이 가정한다.
모든 프레임은 정확히 L 비트로 구성된다.
시간은 L/R초의 슬롯들로 나뉜다.
(즉, 한 슬롯은 한 프레임 전송에 걸리는 시간과 같다.)
노드는 슬롯의 시작점에서만 프레임을 전송하기 시작한다.
각 노드는 언제 슬롯이 시작하는지 알 수 있게끔 동기화되어 있다.
한 슬롯에서 2개 이상의 프레임이 충돌하면, 모든 노드는 그 슬롯이 끝나기 전에 충돌 발생을 알게 된다.
⤷슬롯 알로하의 동작은 다음과 같다.
노드는 전송할 새 프레임이 있으면 다음 슬롯이 시작할 때까지 기다렸다가 그 슬롯에 전체 프레임을 전송한다.
만약 충돌하지 않으면, 노드는 성공적으로 자신의 프레임을 전송한 것이다. 따라서 재전송할 필요가 없다.
만약 충돌하면, 노드는 그 슬롯이 끝나기 전에 충돌을 검출한다. 노드는 그 프레임이 충돌 없이 전송될 때까지 확률 p로 해당 프레임을 다음 슬롯들에게서 재전송한다. 성공할 때까지.
<슬롯 알로하의 장/단점>
⤷각 노드의 프레임들은 이 슬롯 한 개의 크기와 같다.
⤷처음에 1,2,3을 보내니까 충돌이 일어날 수 밖에 없음.(C) 두 번째는 아무도 안보내니까 (Empty) 하나만 보낼때는 (Success)
⤷보내자마자 바로 아 여기서 충돌이 일어났구나를 알 수 있다.
<장점>
하나의 활성 노드로 하여금 채널의 최대 속도인 R로 지속적으로 프레임을 전송할 수 있다. (전송할 프레임이 있는 노드를 활성노드라고 한다.)
각 노드가 충돌을 감지하고 언제 재전송할지 각자 결정하므로 상당히 분산되어 있다. (노드는 슬롯을 동기화 시켜야 한다.)
매우 단순하다.
<단점>
충돌이 생길 수 밖에 없다. 슬롯이 낭비된다.
빈 슬롯이 생긴다.
노드는 패킷을 전송하는 시간보다 짧은 시간 내에 충돌을 감지할 수 있다.
타임 슬롯에 대한 동기화가 필요하다.
<슬롯 알로하의 효율성>
⤷N개의 활성 노드가 있을 때 슬롯 알로하의 효율은 Np(1-p)N-1이다.
⤷많은 노드가 전송할 프레임이 많을 때 기껏해야 37%의 슬롯만 낭비되지 않는다.
⤷따라서 채널의 실제 전송률은 Rbps가 아닌 0.37Rbps이다.
⤷최고의 효율성이라는 것은 p를 찾는 것이다. 이 식을 최대화 시키는 p를 찾는 것.
⤷최대로 전체 능력의 37%만 사용하는 것.
⤷슬롯 알로하 프로토콜은 모든 노드가 슬롯의 시작점에서 전송을 시작할 수 있도록 동기화되어 있기를 요구한다.
<알로하>
⤷슬롯을 나누지 않은 형태
⤷동기화할 필요가 없다.
⤷프레임이 도착하면 노드는 즉시 그 프레임 전체를 브로드캐스트 채널로 전송한다.
⤷충돌이 발생할 확률이 증가할 수 밖에 없다.
⤷만일 전송된 프레임이 하나 이상의 다른 전송과 충돌하면, 노드는 확률 p로 그 프레임을 즉시(단, 자신의 충돌된 프레임이 완전히 전송된 다음에) 재전송한다.
⤷즉시 재전송하지 않는 경우, 노드는 프레임 전송 시간 동안 기다린다.
⤷프레임을 t0일 때만 보내는 게 아니라 t0-1부터 t0+1까지 아무 때나 보낼 수 있다.
⤷슬롯알로하는 충돌이 발생할 확률이 시작하는 시간에만 있었는데
알로하는 충돌이 발생할 확률이 바로 전 시간 보터 다 보내는 시간까지 충돌이 계속 생길 수 있다.
<알로하의 효율성>
⤷p를 보내는데 내가 t0에 보냈을 때 t0-1과 t0사이에 아무것도 보내면 안된다. 또 t0부터 t0+1사이에도 아무것도 보내면 안된다.
⤷내가 보낼 때 내 이전에 시간에도 아무것도 보내면 안되고 내 다음 시간에도 보내면 안된다.
⤷이 경우 일 때는 약 18%밖에 사용되지 않는다.
⤷슬롯 알로하보다 사용률이 좋지 않다.
⤷슬롯알로하나 알로하는 프레임의 사이즈는 똑같다.
⤷슬롯알로하는 시작시간에 보낼 수 있고
알로하는 보낼 데이터가 있으면 슬롯의 시작을 기다리지 않고 그냥 보낸다. 그래서 시간 동기화가 없다. 그래서 충돌 확률이 높아서 사용률이 낮다.
⤷슬롯 알로하와 알로하에서 노드가 전송 여부를 결정하는 것은 브로드캐스트 채널에 접속되어 있는 다른 노드의 활성 여부와 무관하다. 특히, 노드는 전송 시작 시 다른 노드의 전송 여부에 대해서는 주의하지 않고, 만일 다른 노드가 자신의 전송을 간섭하는 경우에도 자신의 전송을 중시하지 않는다.
즉, 계속해서 수다떠는 무리한 파티.
<CSMA, carrier sense multiple access>
예의 바른 대화를 위한 2가지 규칙
캐리어 감지 (carrier sensing)
⤷말하기 전에 듣는다.
(노드를 전송하기 전에 채널을 듣는다.)
⤷만일 다른 노드가 프레임을 채널로 전송하고 있으면, 노드는 임의의 짧은 시간 동안 전송 중단을 감지하면 프레임을 전송하기 시작한다.
충돌 검출 (collision detection)
⤷다른 사람이 동시에 말하기 시작하면 말을 중단한다. (송신 노드는 전송하면서 동시에 채널을 듣는다.)
⤷만일 다른 노드가 방해 프레임을 전송하고 있음을 검출하면, 자신의 전송을 중단하고 랜덤 시간 동안 기다린 후 유휴 시 감지 및 전송 과정을 반복한다.
<CSMA의 충돌>
⤷CSMA도 충돌은 발생할 수 밖에 없다.
언제 발생?
전파 지연. 비어있다고 생각해서 보냈는데 저쪽에서 어떤 애 출발한 것.
충돌은 전체 패킷 전송 시간 낭비이다.
⤷거리 및 전파 지연은 충돌 확률을 결정하는 데 중요한 역할을 한다. 이게 전파지연.
⤷저 표시한 곳에 도달했을 때 2번째 4번째가 알게 되는 것이다.
⤷보내는 순간에만 놀고 있는지 바쁜지를 체크해서 보내고 전파 지연이나 거리의 문제 때문에 충돌이 발생한다.
⤷충돌을 감지해도 노랑이도 끝까지 가고 빨강도 끝까지 가니까 낭비가 된다.
⤷이러한 전파 지연이 길수록 네트워크의 다른 노드에서 이미 시작된 전송을 캐리어 감지 노드가 감지할 수 없는 경우가 더 증가한다.
<CSMA/CD, collision detection>
⤷CSMA는 충돌 검출을 수행하지 않는다.
⤷충돌이 발생했음에도 불구하고 자신의 프레임 전체를 계속 수행한다.
⤷CSMA/CD는 노드가 충돌 검출을 수행하면, 충돌이 검출되었을 때 바로 자신의 전송을 중단한다. 채널 낭비를 방지함.
⤷충돌을 감지하는 게 유선에서는 쉽다.
⤷무선에서는 시그널의 강도가 전달되면서 약해지기 때문에 충돌을 감지하기가 어렵다. 그래서 아예 충돌을 방지하는 방법을 사용한다.
<이더넷에서 CSMA/CD 알고리즘>
⤷동작 과정
어댑터는 네트워크 계층으로부터 데이터그램을 받아서 링크 계층 프레임을 만든 후에 그 프레임을 어댑터의 버퍼에 저장한다.
어댑터는 채널이 idle한 것을 감지하면 프레임 전송을 시작한다. 만약 어댑터가 채널이 busy한 것을 감지하면 어떤 신호 에너지도 감지되지 않을 때까지 기다렸다가 프레임을 전송하기 시작한다.
전송하는 동안 어댑터는 브로드캐스트 채널을 사용하는 다른 어댑터로부터의 신호 에너지가 있는지 감시한다.
프레임 전체를 전송하는 동안 다른 어댑터로부터의 신호 에너지가 감지되지 않으면, 프레임 전송을 완료한다. 그러나 전송 도중에 다른 어댑터로부터의 신호 에너지를 감지하면, 자신의 프레임 전송을 시작한다.
어댑터는 전송을 취소한 후 임의의 랜덤 시간만큼 기다린 후 단계 2로 돌아간다.
(=이진 지수적 백오프)
m 번째 충돌 후 NIC는 {0,1,2,…, 2m-1}에서 무작위로 K를 선택합니다. NIC는
K*512 비트 시간 동안 대기하고 2단계로 돌아간다.
⤷여기서 m은 10을 잘 넘기지 않는 값이다.
⤷더 많은 충돌로 더 긴 백오프 간격.
<CSMA/CD의 효율성>
⤷오랜 시간 동안 다수의 활성 노드들이 있을 때 충돌 없이 프레임이 채널로 전송되는 시간 비율이다.
tprop= 신호 에너지가 임의의 두 어댑터 사이에서 전파되는 데 걸리는 최대 시간
ttrans= 최대 크기의 이더넷 프레임을 전송하는 데 걸리는 시간
⤷효율이 1이 되려면
tprop이 0이 되어야 한다.
ttrans이 무한대가 되어야 한다.
⤷알로하보다 더 좋은 성능을 가진다.
간단하고 저렴하고 분산화되어 있다.
[순번 프로토콜]
폴링 프로토콜(polling protocol)
토큰 전달 프로토콜(token-passing protocol)
⤷일이 많건 적건 상관이 없다. 최선의 방법
<폴링 프로토콜>
⤷노드 중 하나를 마스터 노드로 지정한다.
⤷마스터 노드는 각 노드를 라운드 로빈 방식으로 폴링한다.
⤷slaves들을 순서대로 물어본다.
⤷마스터 노드가 물어보는 오버헤드가 있다.
⤷지연이 발생한다.
⤷마스터 노드가 죽으면 노예들도 다 죽는다. 그래서 마스터 노드를 또하나 두기도 한다.
single point of failure
<토큰 전달 프로토콜>
⤷토큰을 잡은 노드만 데이터를 보낸다.
⤷마스터 노드가 없고 토큰이라는 작은 특수 목적 프레임이 정해진 순서대로 노드 간에 전달된다.
⤷토큰을 만들고, 토큰이 이동하는 오버헤드가 있다.
⤷토큰이 중간에 없어지거나 토큰이 고장나면 동작하지 않는다.
single point of failure