KOCW 컴퓨터네트워크-이석복 강의를 수강하며, 해당 내용을 바탕으로 배운 점들을 정리하였다.
각 호스트와 라우터를 노드라고 했을 때, 실제로 데이터가 인접 노드까지 이동하는 단계이다.
각 호스트가 각기 다른 회선으로 연결돼있다면 고민할 필요도 없겠지만 현실적으로 불가능하다. 여러개의 노드가 하나의 회선을 공유하는 형태로 구성되어 있다.
노드들이 회선을 공유한 상태에서 한 노드가 데이터를 전송하면, 회선 전체로 퍼져나간다. 이 때 다른 노드에서 전송된 데이터와 회선에서 만난다면 충돌이 발생하여 데이터를 사용할 수 없다.
이를 방지하기 위해 MAC(Mutiple Access Control) 프로토콜을 사용한다.
3가지 접근법이 존재한다
channel partitioning
random access
taking turns
Random access protocol은 여러가지가 있지만 현재 기본적으로 사용되는 것은 CSMA이다.
CSMA : listen before transmit
보내기 전에 채널이 사용중인지 확인한다.
Propagation delay로 인해 여전히 CSMA를 사용하더라도 충돌 발생 여지가 존재한다.
충돌 탐지를 통해 충돌이 발생한 경우 Frame을 재전송한다.
NIC가 network layer로 부터 datagrame을 받아서 frame을 생성한다.
NIC가 채널이 사용중이지 않다는 것을 확인하면 전송을 시작한다.
만약 채널이 사용중이라면 사용중이지 않을 때까지 대기한다.
전송된 Frame이 충돌 없이 전송됐다면 끝난다.
전송중인 프레임에서 충돌을 감지한다면, 전송을 중단하고 jam signal을 전송한다.
충돌 후에는 binary back off에 의해 랜덤 시간만큼 대기 후 다시 전송을 진행한다.
Link layer에서의 통신은 MAC address를 사용한다.
기기가 가진 고유한 값으로, 하드웨어에 설정돼있기 때문에 유일하다.
실제로 각 기기가 데이터를 주고 받기 위해서는 MAC address가 필요하다.
라우팅 알고리즘을 사용하기 위해서 논리적 주소인 IP를 이용하는데, IP 주소를 MAC주소로 변환하는 과정이 필요하다.
이를 위해 IP주소와 MAC주소를 매칭시켜 저장하는 ARP 프로토콜을 이용한다.
IP 주소를 확인하고 해당 IP에 매칭되는 MAC 주소가 테이블에 존재하는지 확인한다.
존재하면 해당 MAC주소를 이용해 다음 목적지로 전달한다.
존재하지 않는다면 broad cast를 통해 IP와 일치하는 MAC 주소를 알아낸 후 table에 저장한다.
Collision domain을 분리하기 위한 장치이다.
그림처럼 각 도메인을 분리한 후 전송 흐름을 통제한다.
Switch는 몇번 출구에 어떤 호스트가 존재하는지 알아야한다.
이 정보를 테이블에 저장해두고 이용한다.
1번 포트에서 A가 요청을 보낸다면 A는 1번에 존재한다는 것을 학습할 수 있다.
목적지 호스트에 대한 정보가 table에 존재하지 않는다면 모든 링크에 확인하는 메시지를 전송한다. -> flood