CS/네트워크
#8 Link Layer(Data Link Layer + Physical Layer)
Scala0114
2021. 11. 25. 16:13
1. Broadcast Medium(공용 채널)
- 네트워크 계층에서 봤던 추상화된 형태와는 달리 실제로 라우터와 호스트,
라우터와 라우터의 사이에는 전용 회선이 존재하는 것이 아닌 경우가 많음 - 실제로는 사이에 다른 호스트나 라우터와 함께 사용하는 공용 채널이 존재하는 경우가 대부분이며
이러한 매체를 Broadcast Medium 이라 한다.
2. MAC(Medium Access Control) 프로토콜
- 송신한 데이터가 공용 채널에서서로 충돌하여 쓰레기 데이터가 되는 것을 막을 방법이 필요
=> Medium Access (Control) Protocol - MAC
=> WIFI 도 공기를 Broadcast Medium으로 하는 MAC 프로토콜의 일종(802.11) - 이상적인 MAC 프로토콜의 지향점(링크 대역폭이 R일 때)
- 하나의 노드만이 통신을 수행할 경우 대역폭 전체(R)를 사용할 수 있다.
- N 개의 노드가 통신을 수행할 경우 대역폭 전체를 N으로 나눈 R/N 만큼의 대역폭을 사용할 수 있다.
- 통신을 관리하는 특별한 노드가 존재하지 않는다(모든 노드가 동등한 입장)
- 단순하게 동작해야한다.
- 접근법
- Partitioning
- TDMA(Time Division Multiple Access)
- 각 노드에게 회선을 사용할 수 있는 시간 슬롯을 배정하는 방식
- 주어진 시간동안은 모든 주파수 대역을 사용할 수 있음
- 동시 사용자가 적을 경우 시간 슬롯이 낭비될 수 있음
- FDMA(Frequency Division Multiple Access)
- 각 노드에게 주파수 대역을 나누어 배정하는 방식
- 아날로그 방식으로 구현이 간단함
- 인접채널간 간섭문제를 해결하기 위해 주파수 대역사이에 가드밴드가 필요해진다
=> 가드밴드로 인해 낭비되는 주파수대역 생김
- 주파수 대역이나 시간 슬롯이 낭비되지 않는 경우(사용자가 많은 경우)에 유리
- TDMA(Time Division Multiple Access)
- Random Access
- Partition 방식의 경우 충돌방지는 확실하게 되지만 주파수대역 낭비나 시간슬롯 낭비의 문제가 있음
- 노드들이 원하는 타이밍에 통신을 수행하는 방식
- 사용자가 적을 경우 Partitioning에 비해 효율적
- CSMA(Carrier Sense Multiple Access)
- 공용 채널이 사용되고 있지 않다고 판단되면 통신을 실시하는 방식
- 충돌(Collision)
- 한 노드가 다른 노드가 통신을 먼저 시작한것을 인식하기 전에 통신을 시작한 경우
발생하는 충돌을 미연에 방지하는 것은 불가능. - 충돌이 발생하는 것을 전제로 충돌로 인한 피해를 최소화하는 방식을 사용
=> CSMA/CD(Collision Detection)
=> 한쪽이 충돌발생을 탐지하고 바로 전송을 멈춘다
=> 랜덤 타이머를 설정하고 타임아웃시 재전송
=> 충돌이 발생할 때마다 타이머의 시간을 두 배씩 늘려간다 - 유선통신의 경우 충돌 감지 자체는 쉽게 가능
- 한 노드가 다른 노드가 통신을 먼저 시작한것을 인식하기 전에 통신을 시작한 경우
- Taking Turns
- polling
- 하나의 중심 호스트(master)가 연결된 다른 호스트(server)들에게 전송할 데이터가 있는지
확인하여 전송하도록 하는 방식
- 하나의 중심 호스트(master)가 연결된 다른 호스트(server)들에게 전송할 데이터가 있는지
- token passing
- token을 가진 호스트만이 전송을 할 수 있도록 하는 방식
- token을 가진 호스트만이 전송을 할 수 있도록 하는 방식
- 두 방법 모두 한가지 문제가 발생하면(master의 고장, token의 유실 등) 치명적인 문제가
발생하는 single point failure 문제로 실제로는 잘 사용되지 않음
- polling
- Partitioning
3. 이더넷(Ethernet)
- 유선 케이블 상황에서의 MAC 프로토콜
- Random Access 방식을 사용(CSMA/CD)
- 이더넷 프레임
- Preamble / SFD
- 비트동기, 프레임동기를 위한 부분
- Physical Layer의 헤더부분
- DA(Desination Address) / SA(Source Address)
- 목적지와 출발지의 MAC 주소
- 목적지와 출발지의 MAC 주소
- Len/Type
- 값이 0x0600 미만이면 프레임의 데이터 영역(Data + Padding)의 길이로 해석
- 0x0600 이상이면 Data부분에 담겨있는 상위 프로토콜의 타입으로 해석
=> ARP 쿼리, ARP 리스폰스 등
- Data
- IP 패킷이 들어있는 부분
- 뒤에 따라오는 Padding 부분은 0으로 채워진다.
- FCS(Frame Check Sequence)
- 수납된 데이터의 에러 검출을 위한 CRC
- 수납된 데이터의 에러 검출을 위한 CRC
- Preamble / SFD
- 신뢰성있는 전송
- 전송에 대한 피드백이 없는데 전송이 정상적으로 완료됐는지 확인하는방법
=> 외부 간섭이 없는 유선연결이기에 회선(채널)내에서의 충돌만 없다면 전송된것으로 볼 수 있음 - 충돌을 탐지하기 전에 전송이 종료되면 전송에 실패한 데이터를 재전송하지 못함
=> 전송측이 충돌을 탐지하기 위한 충분한 시간을 기다려줄 필요가 있음
=> 전송할 프레임의 길이가 충분하면 충돌을 감지할 수 있음
=> 이더넷은 이를 위한 프레임의 최소길이를 지정 - 보내려는 데이터의 크기가 프레임 최소길이보다 작다면?
=> 0으로 채워진 padding 부분을 붙여 최소길이를 만족시킴
- 전송에 대한 피드백이 없는데 전송이 정상적으로 완료됐는지 확인하는방법
- MAC 주소와 ARP
- MAC 주소
- 네트워크 랜카드가 가지고있는 고유 주소
- 랜카드가 제조된 시점부터 바뀌지 않는 값
- ARP(Address Resolution Protocol)
- IP 주소를 물리적 네트워크 주소에 바인딩하기 위한 프로토콜
- 모든 호스트는 포워딩 테이블을 통해 IP패킷을 보낼 다음 목적지(next hop)를 알 수 있지만
그 IP에 해당하는 MAC 주소를 알지 못해 링크 레이어 레벨에서의 전송이 불가능하다.
이를 해결하기 위해서 ARP 프로토콜을 통해 IP주소에 해당하는 MAC 주소를 알아내야한다. - 절차
- 전송측은 프레임의 데이터/타입 영역에 IP패킷 대신 목적지 IP주소에 해당하는
MAC 주소를 요청하는 ARP 쿼리를 담아 네트워크상에 존재하는 모든 호스트들에게
브로드캐스트 - 전송측이 보낸 ARP 쿼리를 받은 호스트중 자신의 IP가 쿼리에서 원하는 IP주소와 일치하는
호스트는 자신의 프레임의 데이터/타입 영역에 ARP 응답(리스폰스)을 담아 전송하는 것으로
자신의 MAC 주소를 알림 - 전송측은 얻은 MAC 주소를 ARP 캐시(테이블)에 저장하고 이를 참조하여 목적지 IP에 해당하는
MAC 주소로 IP패킷을 담은 이더넷 프레임을 전송
- 전송측은 프레임의 데이터/타입 영역에 IP패킷 대신 목적지 IP주소에 해당하는
- IP 주소를 물리적 네트워크 주소에 바인딩하기 위한 프로토콜
- MAC 주소
4. 이더넷 네트워크의 물리적 형태
- 버스(Bus)
- 90년대 중반까지 주로 사용되었던 형태
- 모든 노드가 하나의 충돌 도메인을 가지기에 호스트들간에 충돌이 발생할 수 있음
- 90년대 중반까지 주로 사용되었던 형태
- 스타(Star)
- 현재 주로 사용되고있는 형태
- 여러 호스트들의 중심에 스위치가 존재하며 스위치와 각 호스트들 사이에는 전용 회선이 존재
- 스위치는 연결된 호스트들로부터 전송된 프레임을 버퍼에 담아두고 처리해나간다.
- 스위치의 각 인터페이스가 어느 호스트와 연결되어있는지를 학습해나가며
스위치 포워딩 테이블을 생성하여 이를 토대로 프레임들의 전송을 처리한다. - 학습의 절차
- 프레임을 전송받은 순간 전송한 호스트의 위치를 파악, 테이블에 저장
- 목적지의 위치를 모를 경우 flooding(브로드캐스트) 을 통해 위치를 알아내고 테이블에 저장
- 테이블을 참조하여 해당하는 목적지로 프레임을 전송
- 처음에는 테이블을 채워나가기 위해 flooding 이 발생하지만 시간이 조금 지나고나면
테이블이 완성되어 바로 포워딩을 할 수 있다.
- 스위치를 사용하는 것으로 보다 쉽게 이더넷 네트워크의 규모를 확장할 수 있다.
- 스위치가 행하는 포워딩을 스위칭이라고도 한다.
- 스위치는 MAC 주소를 가지지 않는다(사용자입장에선 보이지 않는다)