1계층의 역할 ⇨ 케이블이 연결되어 있는 기기에 대한 신호 전달
2계층부터 상위계층의 역할 ⇨ 데이터를 보내기 전에 (충돌이 나지 않기 위해) 어떤 일을 할지, 데이터가 도달한 후에 어떤 일을 할지 : 신호가 닿는 범위에서의 데이터 전송에 관한 규정
신호가 닿는 범위란
세그먼트 범위에서의 데이터 전송 : 멀티액세스 네트워크라면 허브로 연결된 기기 전체. 포인트 투 포인트 네트워크라면 서로 연결되어있는 두 대
1계층에서는 신호를 전달
2계층에서는 신호가 닿는 범위(세그먼트)에서 '데이터를 어떻게 송수신할지' 생각
프레이밍
1계층에서 주고받는 신호를 비트화해 거기에 의미를 갖게 하는 것
➡️ 프리엠블(지금부터 프레임이 시작된다는 신호)을 수신하면 '이제 프레임 신호가 온다는 것'을 알게 됨
그냥 데이터를 바로 보내지 않고 프레이밍해서 보내는 이유
타이밍을 맞추는 방식으로 프레이밍 말고 Clock신호(동기통신)라는 것도 있음
신호가 도달하는 범위에서 데이터를 송수신하도록 하는데 중요한 개념!
어드레싱(addressing)
- 주소를 어떻게 사용할지, 어떻게 배정할 지를 가르킴
데이터 전송 방법에 따른 3가지 주소 종류
각각의 기기는 유니캐스트 주소를 적어도 한 개는 갖고있음
복수의 인터페이스를 가진 기기(ex. 라우터)는 인터페이스마다 유니캐스트 주소를 갖게 됨
단, 유니캐스트 주소는 유일해야함
멀티캐스트 주소는 같은 주소를 가진 기기가 여러 개 있어도 됨. 즉 '기기그룹'이 같은 주소를 같는 것.
멀티캐스트 주소는 '그룹번호'같은 취급을 하기 때문에 멀티캐스트에 보내고 싶은 경우에는 수신처를 '그룹'으로 하면 그 그룹에 속한 기기가 수신을 함
요약하면,
멀티캐스트 그룹에 속해있는 기기는 '유니캐스트 주소' + '멀티캐스트 주소' ➡️ 2개를 갖게 됨
➕ 브로드캐스트 주소는 '전체수신'이 되므로 이 주소로 보낸 데이터는 모든 기기가 무조건 송신하게 됨
LAN에서 2계층은 이더넷이라는 규칙이 적용됨
이더넷에서 사용되는 주소는 MAC 주소 ➡️ 이 주소 정보를 헤더에 기술하고 이 정보를 통해 '누구로부터', '어디로'를 결정함.
캡슐화
이더넷 헤더, 이더넷 트레일러를 데이터그램 앞뒤로 붙임 ➡️ 이더넷 프레임으로 캡슐화 ➡️ 이터넷 프레임이 신호가 되서 (프레이밍) 케이블로 전달
정리하면,
헤더: 수신처의 주소, 송신처의 주소, 페이로드 내용 식별하는 타입
트레일러: 에러 체크하는 FCS(Frame Check Sequence)
FCS의 역할
신호가 전송되는 동안 문제가 생겨서 정확히 읽을 수 없게 되거나 '0'을 '1'로 반대로 읽어버리는 경우가 있는데 이런 경우를 체크하는 역할.
FCS는 에러를 고쳐주는 역할이 아니라, 에러가 발생했는지 아닌지만 알 수 있고 어떤 상태가 올바른 상태인지까지는 모름 ex.택배아저씨
이더넷은 어떻게 데이터를 송신할까?
LAN에서는 멀티액세스 네트워크(feat. 허브)를 사용하는 경우가 많음
이더넷에서는 신호를 보내는 타이밍이 겹치지 않도록 비켜나게 해서 되도록 충돌이 일어나지 않도록 함.
이를 위해 CSMA/CD(Carrier Sense Multiple Access/Collision Detection)이라는 엑세스 제어를 시행함
CSMA/CD - 교차로 교통정리 경찰👮👮🏻느낌
CS(신호감지): 누군가 송신 중이라면 송신하지 않음
MA(다중 액세스): 아무도 송신하고 있지 않다면 송신할 수 있음
CD(충돌 검사): 송신 후에 충돌이 일어나면 다시 재수행함
CS를 하는데 CD가 일어날 일이 있나?
정답은 🅾️
2대가 거의 동시에 신호를 감지해버린 경우가 있을 수 있음. 이 경우 2대 모두 아무도 송신하고 있지 않다고 생각해서 2대가 송신한 케이스
ex) 신호등이 없다고 가정할 때, 아무도 안 지나다닌다고 생각해서 양 방향에서 차가 동시에 엑셀밟음💥
결과적으로 CSMA/CD는 충돌을 '막는 것'이 아니고 '최대한 일어나지 않게 하는 역할'이라고 볼 수 있음
CSMA/CD로도 막을 수 없는 충돌 가능성을 줄이기 위해서는 충돌 도메인 내 컴퓨터 수🖥️🖥️를 줄일 필요가 있음
또한 신호가 지나는 길을 나누는 방법이 있음 ➡️ 스위치
스위치가 어떻게 충돌을 막나?
어디에서 충돌이 일어나고 있는지가 포인트!
충돌은 허브에서 발생한다. 허브가 동시에 신호가 도달할 때 1개 포트(신호 받는 곳)에 2개 이상의 기기로부터 신호를 수신하면 허브는 그것을 나눠서 보낼 수 없기 때문에 충돌이 발생하는 것
스위치 안에서 수신한 프레임을 따로따로 보낼 수 있도록 처리해서 충돌을 막는다. HOW? 방법은 2가지!
1. MAC주소 필터링
- 학습 + 스위칭이라는 동작으로 이뤄짐
학습
수신한 프레임의 송신처 MAC 주소를 기록한다. 수신한 포트(받는 애)랑 MAC 주소를 연관 짓는다.
이 학습에 의해 스위치는 포트에 연결되어있는 컴퓨터의 MAC 주소를 기억하게 됨
이 대응표를 어드레스 테이블 이라고 함
스위칭
스위치는 프레임을 수신한다
프레임의 수신처 MAC 주소를 보고 그 MAC 주소가 있는 포트만 프레임을 송신한다
그 외 다른 포트는 송신하지 않는다
어떻게 수신처 MAC주소가 있는 포트를 알수 있냐고? ➡️ '학습'을 통해 만든 어드레스 테이블에서 찾는것!!
MAC주소를 통해 송신하는 포트를 필터링하기 때문에 MAC주소 필터링이라고도 불림
만약 해당 MAC 주소가 송신처의 프레임을 수신하기 전이어서 '학습하지 않은' 상태라면 MAC 주소 필터링을 할 수 없게됨 ➡️ 이 경우 허브와 마찬가지로 플러딩🌊이 발생하게 됨 (왜? 송신할 포트를 모르니까!)
2. 버퍼링
수신처가 다른 프레임이 동시에 스위치에 도달해도 충돌은 발생하지 않는다.
단, 수신처가 같은 프레임이 동시에 도달한 경우라면?