Ethernet
- 서브넷이란 같은 네트워크 prefix를 가지고 라우터를 거치지 않아도 서로 접근이 가능한 호스트들의 집합이다.
- 이 호스트들의 연결이 LAN (Local Area Network)으로 이루어져 있다.
- 이더넷이란 유선 케이블 상황에서 선택 될 수 있는 매체Medium이다.
- bus를 활용한 방식은 가운데에 케이블을 두고 각각 케이블을 뚫어 사용하기 때문에 많은 작업이 요구되고, 모든 노드들이 동일한 충돌 영역에 있어서 서로 충돌할 수 있다.
- 그래서 현대에서는 star 방식이 많이 사용된다. switch라는 링크 레이어 장비를 중앙에 위치시켜 이 switch가 노드들을 관리하며 서로 충돌이 발생하지 않게 해준다.
Ethernet frame structure
- IP 패킷이 링크 계층으로 내려와 이더넷 프레임에 담기게 되는데 특이하게 헤더 필드가 아닌 CRC필드를 별도로 두어 에러체킹을 한다.
- preamble : 이더넷 프레임인지 체크하는 필드
- dest address, source address : 송, 수신 주소. 이때 IP주소가 아닌 MAC 주소가 담김
- type : 네트워크 프로토콜이 들어있음
이더넷 프레임이 어떤 종류의 데이터를 운반하고 있는지를 가리키는 식별 - CRC : Cyclic Redundancy Check at receiver. 에러 탐지 또는 복구에 사용
Ethernet uses CSMA/CD
- 이더넷이 사용하는 MAC 프로토콜은 CSMA/CD이다.
- 어댑터는 다른 어댑터가 전송중인 것을 감지하면 전송하지 않는. ⇒ Carrier Sense
- 전송중인 어댑터는 다른 어댑터가 전송중인 것을 감지하면 전송을 중단한다 ⇒ Collision Detection
- 재전송을 시도하기 전에, 어댑터는 랜덤한 시간 동안 대기한다 ⇒ Random Access
- ACK를 사용하지 않는 이유는 유선의 경우 충돌이 발생하지 않는다면 데이터는 무조건 목적지에 도착하기 때문이다.
그런데 ↓
❓Collison이 발생해도 MAC 프로토콜이 감지하지 못하는 경우가 있을까?
- A와 E가 각각 보내야할 프레임이 있다고 하자.
- A가 보낸 전자기파가 E에 도달하기 전, E는 전송하기 위해 carrier sense를 수행하면서 전자기파가 없으므로 E가 전달한다.
- A가 보낸 프레임이 E에 도착하기 직전에 충돌이 발생했다.
- E는 충돌을 감지하고 바로 대기 및 재전송을 준비한다.
- E가 쏟아낸 전파를 멈출 수 없으므로 A에게 도달하게 된다.
- 만약 A가 충돌(E가 쏟아낸 전파?)을 감지하기 전에 프레임 전송이 끝난다면 A는 충돌을 감지하지 못하고 전송이 완벽하게 이루어졌다고 착각하게 된다.
- 따라서 A가 말을 더 길게할 수 있게 한다면 충돌을 감지할 수 있었을 것이다. 따라서 이더넷에서는 최소 이야기 양을 정해주는 것이다.
- 이더넷에서는 프레임의 최소 크기를 64바이트로 정하고 전송하도록 강제한다.
- propagration delay(빛의 속도)와 프레임이 전달될 길이를 고려하여 Minimum frame size를 설정한다. ⇒ 64바이트
- 실질적으로 데이터 전송에 필요한 프레임이 15byte여도 collisiton detect를 위해 끝에다가 패딩을 붙여 사용한다.
ARP (Address Resolution Protocol)
- IP주소를 이용하여 MAC address를 조회하는 프로토콜이다.
- 이더넷 환경에서 브로드캐스트를 통해 특 IP의 MAC address를 가져온다.
- 그래서 브로드캐스트용 프레임을 보내게 되는데, 이 프레임의 source address는 송신자의 MAC address이고 dest address는 브로드캐스트 목적지 주소 이다.
- 이때 데이터에는 IP 패킷 데이터가 아닌 ARP 쿼리가 담기는데, IP 패킷인지 ARP 쿼리인지 체크하는 필드가 type 필드이다.
- ARP가 성공적으로 수행되면 IP에 매칭되는 MAC address를 구할 수 있는데 이 MAC address를 ARP table에 저장하고 캐싱하여 사용한다.
- 이 프로토콜을 통해 IP주소와 MAC주소를 일대일로 매칭하에 네트워크 통신에서 물리적인 장치를 올바르게 찾아갈 수 있도록 한다.
MAC address and ARP
- 프레임에 들어있는 헤더 중 address는 IP address와는 다른 MAC address 이다.
- 48 bit로 구성되어 있다.
- 24 bit씩 끊어서 앞의 24bit에는 제조사 번호, 뒤의 24bit에는 인터페이스 고유 넘버로 사용된다.
- 랜카드가 공장에서 나올 때 찍혀 나오기 때문에 변경이 불가능하다.
LAN address and ARP
- 프레임 헤더 중 source address에는 자기 자신의 MAC address가, dest address에는 다음에 갈 Gateway Router의 IP 주소가 적혀있다.
- 프레임 데이터 부분에는 DHCP가 알려준 나의 IP와 DNS가 알려준 목적지 IP주소가 있는 IP패킷이 담겨져 있다.
- 현재 자신의 IP, MAC address, 목적지 IP 주소는 알지만 전송해야할 Gateway Router의 MAC 주소는 알지 못한다.
- 그러나 DHCP를 통해 해당 Gateway Router의 IP 주소는 알고있어서 IP주소를 사용하여 ARP로 MAC주소를 알아낼 수 있다.
ARP Table
- 각 인터페이스 안에는 ARP Table이 존재한다.
- 테이블에는 IP 주소와 대응하는 MAC address가 적혀있다.
- 찾고자하는 MAC address가 테이블 안에 없다면, 이를 채워 넣기 위해 ARP 프로토콜을 사용한다.
- ARP 프로토콜은 테이블에 엔트리가 없다면 ARP Request 프레임을 브로드캐스트로 LAN 전체에 전달한다. 이후 Gateway Router의 IP에 해당하는 호스트가 응답한다.
- 즉, Gateway Router가 ARP Request에 응답하여 자신의 MAC address를 알려준다.
- ARP 프로토콜은 받은 MAC 주소를 ARP 테이블에 채워넣는다.
- ARP 테이블 내의 엔트리들은 캐시이기 때문에 일정 시간이 지난 후 소멸된다.
- 만약 소멸되어 필요한 정보가 없어진다면 다시 위의 과정들을 반복하며 채워넣는다.
✨ 라우터는 포워딩 테이블을 참조하여 다음 라우터를 찾아내고, 자기 자신의 프레임 dest address 필드에 다음 라우터의 MAC address를 집어넣음으로써 패킷을 이동시킨다.
IP 패킷이 목적지에 도달하는 과정
1️⃣ 송신자가 ARP 테이블을 통해 Gateway Router의 MAC address를 얻는다. (LAN 환경)
2️⃣ CSMA/CD 방식으로 데이터를 전송한다.
3️⃣ 라우터는 프레임을 받아서 IP패킷을 꺼낸 후 목적지 IP와 포워딩 테이블을 참고하여 다음에 보낼 라우터를 정한다.
4️⃣ 프레임의 source address의 MAC address는 현재 자신의(라우터) MAC address로 바꾸고 dest address는 자신의 ARP 테이블을 참고해서 다음으로 보낼 라우터의 MAC address로 바꾼다.
5️⃣ ~
6️⃣ 목적지 도착
⚠️ 주의사항
❗전체 과정에서 CSMA/CD(Carrier Sense Multiple Access with Collision Detection) 방식이 사용되는 것은 이더넷 기반의 네트워크에서만 해당되는 내용다. 다른 네트워크 기술이 사용되는 경우에는 다른 데이터 링크 계층 프로토콜이 사용될 수 있다.
✨ 목적지까지 도착할때까지 IP 패킷은 변하지 않고 프레임의 src mac 주소랑 desc mac 주소만 바뀐다. src mac 주소랑 desc mac 주소를 알기 위해 포워딩 테이블과 ARP 테이블을 참고한다. CSMA/CD 방식으로 전달한다.
'📝Computer Science > network' 카테고리의 다른 글
무선 이동 네트워크(1) _ CSMA/CA, RTS, CTS (0) | 2023.07.22 |
---|---|
링크 계층(3) _ Switch, Switch와 Router 차이점 (0) | 2023.07.22 |
링크 계층(1) _ MAC, CSMA, CSMA/CD (0) | 2023.07.20 |
네트워크 계층(6) _ AS (Autonomous System), BGP (0) | 2023.07.18 |
네트워크 계층(5) _ Distance Vector Algorithm, count-to-infinity (0) | 2023.07.18 |