네트워크 계층까지는 두 호스트간의 통신에만 관심이 있기 때문에 연결 링크는 추상화 되어있었다.

하지만 실제로는 여러개의 호스트가 하나의 회선을 공유하는 경우가 있기 때문에 다수의 호스트에서 회선을 동시에 사용한다면 충돌이 일어난다.

 

네트워크 계층은 호스트간 데이터 전송에 관심이 있었다면 링크 계층은 충돌에 관심이 있는 계층이다.

첫 라우터까지 충돌없이 데이터가 잘 전송되는지가 주요 관심사이다.

 

 

6.1 링크 계층 소개

 

링크 계층 프로토콜을 실행하는 장치를 노드라고 한다. 호스트, 라우터, 스위치, WiFi AP 등이 해당된다.

통신 경로상의 인접한 노드들을 연결하는 통신 채널은 링크라고 한다.

 

대부분의 링크 계층은 네트워크 인터페이스 카드에 구현된다.

 

 

6.3 다중 접속 링크와 프로토콜

 

네트워크 링크는 점대점 링크와 브로드캐스트 링크 두 종류가 있다.

이 중 브로드캐스트 링크는 하나의 공유된 브로드캐스트 채널에 다수의 송신 노드 및 수신 노드들이 연결되고 한 노드가 프레임을 전송하면 연결된 모든 노드들이 그 프레임을 수신한다.

이 때 동시에 여러 노드가 프레임을 송수신하면 프레임이 충돌하는 다중 접속 문제가 발생하게 된다.

 

다중 접속 문제를 해결하기 위해 브로드캐스트 채널로 보내는 노드들의 전송을 조정하기 위한 다중 접속 프로토콜이 존재한다.

채널 분할 프로토콜, 랜덤 접속 프로토콜, 순번 프로토콜 세 가지로 분류할 수 있다.

 

 

1) 채널 분할 프로토콜

◾ 시분할 다중 접속 (time division multiple access, TDMA)

시간을 시간 프레임으로 나누고 각 시간 프레임을 N개의 시간 슬롯으로 나누어서 N개의 노드에게 할당한다.

노드는 전송할 프레임이 있을 때마다 자신에게 할당된 시간 슬롯 동안만 프레임 비트를 전송한다.

시간을 공평하게 배분받기 때문에 매우 공정하지만 프레임을 전송할 노드가 단 하나라고 해도 전송률이 평균 R/N으로 제한되고 자신의 차례를 항상 기다려야 하는 단점이 있다.

 

◾ 주파수분할 다중화 (frequency division multiple access, FDMA)

대역폭을 다른 주파수로 나눠서 각 주파수를 N개의 노드에게 할당한다.

자신의 차례를 기다리지 않아도 되지만 전송률이 R/N으로 제한되는 단점이 여전히 존재한다.

 

 

2) 랜덤 접속 프로토콜

채널 분할 프로토콜이 충돌 자체를 피하는 방식이었다면 랜덤 접속 프로토콜은 충돌을 허용하되 처리하는 방식에 대해 다룬다.

슬롯 알로하, 알로하, CSMA 등의 프로토콜이 있다.

 

◾ CSMA (Carrier Sense Multiple Access)

 

노드가 프레임을 전파하기 전에 링크가 사용중인지 확인(carrier sensing)하고 사용중이라면 프레임을 전파하지 않고 잠시 대기한다.

하지만 링크에서 이동되는 것은 전자기파이므로 아무리 빨라도 전파하는 즉시 모든 노드에 도달할 수 없다.

한 노드에서 프레임을 전파했지만 자신에게 브로드캐스팅이 도달하기 전에 carrier sensing이 통과되면 마찬가지로 프레임을 전파하고 CSMA는 충돌 검출을 수행하지 않기 때문에 충돌이 일어나게 된다.

 

◾ CSMA/CD (Collision Detection)

CSMA에서 충돌 검출을 추가로 수행한다.

충돌이 발생하면 브로드캐스팅을 중단하고 랜덤한 시간만큼 대기한 후에 다시 재전송한다.

대기시간의 범위는 짧을수록 좋지만 너무 짧으면 재충돌 가능성이 높고 너무 길면 지연시간이 길어진다.

그래서 이진 지수적 백오프 알고리즘을 이용해서 최초 충돌시 시간을 짧게 설정하고 충돌이 반복해서 발생 시 시간을 점차 늘려나간다.

 

공공구역에서 다수의 사람들이 와이파이 접속 시 연결이 매우 불안정하고 느린것은 노드가 많을수록 충돌이 빈번하게 일어나기 때문이다. 

 

유선 연결(이더넷)은 각 노드의 신호의 세기가 비슷하기 때문에 충돌 감지가 쉬운편이지만 무선 연결은 나의 신호가 월등히 세기 때문에 어떤 노드의 신호 세기가 약하다면 노이즈로 판단하지 않을 수 있으므로 충돌 검출이 어려울 수 있다.

 

 

3) 순번 프로토콜

◾ 폴링 프로토콜

연결된 노드들의 상위에 마스터 노드를 추가해서 각 노드들에게 전송할 프레임이 있는지 매번 물어본다.

채널 분할 프로토콜의 장점인 충돌 회피와 랜덤 접속 프로토콜의 장점인 전송하고 싶을 때 전송하는것을 합친 형태이지만 폴링 지연이 발생하고 마스터 노드가 오작동하거나 다운되었을 경우 연결된 전체 노드도 같이 멈춘다는 단점이 존재한다.

 

◾ 토큰 전달 프로토콜

각 노드가 토큰을 순서대로 전달해가며 토큰이 있는 노드만 전송이 가능하게 한다.

토큰이 분실되면 전체 노드가 멈춘다는 단점이 존재한다.

 

위 두가지 프로토콜은 하나만 잘못되어도 모두가 잘못된다는 공통적인 문제가 있다.

 

 

◾ 채널 분할 프로토콜 : 사용자가 많을수록 효율적이다.

◾ 랜덤 접속 프로토콜 : 사용자가 적을수록 효율적이다.

◾ 순번 프로토콜 : 이상적인 경우 가장 효율적이지만 하나만 잘못되어도 모두가 잘못된다.

 

현재 이더넷과 와이파이는 랜덤 접속 프로토콜을 사용한다.

채널 분할 프로토콜은 LTE 등의 이동 통신에서 사용한다.

 

 

6.4 스위치 근거리 네트워크

 

1) 링크 계층 주소체계와 ARP

◾ MAC 주소

링크 계층 주소는 호스트나 라우터가 아닌 어댑터(네트워크 인터페이스)가 가지게된다.

호스트 이름이나 IP 주소와 다르게 MAC 주소는 변하지 않는다.

프레임의 출발지 및 목적지 주소에는 MAC 주소가 기입된다.

 

◾ ARP (Adress Resolution Protocol)

호스트에서 데이터가 TCP/IP 패킷에 담길 때 목적지에 해당하는 IP 주소는 DNS에 의해 변환되었다. 이 패킷이 프레임에 담길 때에는 목적지가 MAC 주소로 적혀야 하는데 IP 주소를 MAC 주소로 변환해주는 프로토콜이 ARP 이다.

 

호스트의 포워딩 테이블에 의해 next hop의 IP 주소를 알아내면 데이터 영역에 ARP 쿼리, 목적지 주소에 FF-FF-FF-FF-FF-FF를 담은 프레임을 브로드캐스팅 해서 next hop의 MAC 주소를 알아내서 ARP 테이블에 추가한다.

ARP 테이블에 추가되면 위의 과정을 생략하고 바로 테이블의 목적지를 가져온다.

 

포워딩 테이블 → ARP 테이블 순으로 참조해서 링크마다 프레임의 목적지를 정한다.

매 링크마다 프레임이 전달될 때, IP 패킷의 TTL을 감소시키고 출발지와 목적지의 MAC 주소가 변화하며 최종 목적지까지 프레임이 전달된다.

 

 

 

2) 이더넷

 

이더넷 프레임 구조

이더넷은 CSMA/CD를 MAC 프로토콜로 사용하고 있다.

CSMA/CD는 충돌 여부를 검출하기는 하지만 충돌에 대한 피드백을 해당 노드에게 제공하지 않는다. 그 이유는 이더넷은 유선 연결이기 때문에 충돌 검출을 쉽게 할 수 있고 이더넷 내부에서 충돌이 일어나지 않는다면 프레임은 잘 전달됐다는 의미와 동일하기 때문에 피드백을 제공하지 않는다.

 

프레임이 너무 짧은 경우에는 실제 충돌이 일어나더라도 충돌 검출보다 프레임의 마지막 비트 전송이 더 일찍 끝나는 경우가 발생하기 때문에 프레임의 최소 사이즈(64바이트, 18+46)가 정해져있다.

이더넷 프레임의 데이터 필드 최소값은 46 바이트이고 IP 데이터그램이 이보다 작으면 임의의 패딩값을 넣어서 46바이트를 채운다.

 

Length(Type)필드는 데이터 필드에 담긴게 IP 패킷인지 ARP 쿼리인지 등을 구분한다.

 

 

3) 링크 계층 스위치

이더넷 연결에 의한 분류

요즘은 이더넷 연결을 bus형이 아닌 스위치에 연결하는 star형을 사용한다.

하나의 링크를 공유해서 사용하는 bus형은 carrier sense시 링크가 사용중이라면 대기해야 하지만 star형은 각자의 독립된 링크를 가지기 때문에 carrier sense시 항상 조용하기 때문에 원하는 때에 프레임을 항상 전송할 수 있다.

 

스위치는 호스트들과 라우터 사이에 존재해서 서로를 연결시키고 프레임을 전달한다. 하지만 호스트들과 라우터는 스위치의 존재를 모르기 때문에 스위치를 목적지로 삼지 않는다.

그럼에도 불구하고 프레임이 올바르게 전달되는 이유는 스위치에도 테이블이 존재하기 때문이다.

그리고 이 테이블은 자가학습을 통해 테이블이 작성된다.

 

스위치 테이블은 스위치의 해당 링크(인터페이스)로 프레임이 들어올 때 작성된다.

어느 호스트가 어떤 링크를 통해 프레임을 전달했는지 알기 때문에 테이블에 추가한다.

만약 목적지가 테이블에 존재하지 않는다면 자기 자신을 제외한 모든 링크에 프레임을 브로드캐스팅(flood) 한다.

스위치 테이블을 통해 목적지를 찾아가는 것을 스위칭이라고 한다.

 

 

스위치의 포트 개수는 한정적이기 때문에 규모를 키우려면 스위치에 스위치를 연결해서 멀티 스위치를 구성한다.

 

 

◾ 스위치 대 라우터

라우터는 네트워크 계층의 장비이고 스위치는 링크 계층의 장비이다.

또한 라우터는 하나의 새로운 서브넷을 형성시키지만 스위치는 그렇지 않다.

라우터는 라우팅 알고리즘에 의해 포워딩 테이블을 만들지만 스위치는 자가 학습을 통해 스위치 테이블을 만든다.

 

 

6.7 총정리: 웹페이지 요청에 대한 처리

 

1) 시작하기: DHCP, UDP, IP 그리고 이더넷

랩탑이 부팅 시 IP 주소를 할당받기 위해서 DHCP 메시지를 UDP/IP 패킷에 담고 브로드캐스팅해서 DHCP 서버로부터 IP 주소를 할당받는다.

 

DHCP 패킷의 source는 0.0.0.0, dest는 255.255.255.255로 브로드캐스팅 된다.

탐색-제안-요청-확인 순으로 작업이 이루어진다.

 

그 과정에서 스위치를 거친다면 자가 학습으로 스위치 테이블이 작성된다.

작업이 완료되면 자신과 게이트웨이 라우터의 IP 주소와 DNS 서버의 IP 주소를 알게되어서 자기 자신의 포워딩 테이블을 만들게된다.

 

 

2) 여전히 시작하기: DNS와 ARP

웹브라우저에 구글 도메인 주소를 입력 시 DNS 쿼리를 통해 목적지 주소의 IP를 받아와야 하는데 아직 ARP 테이블이 작성되지 않았기 때문에 게이트웨이 라우터의 물리 주소를 모르므로 ARP 요청 쿼리를 먼저 내보낸다.

 

ARP 쿼리 프레임의 source는 랩탑의 MAC주소, dest는 FF-FF-FF-FF-FF-FF로 브로드캐스팅 된다.

요청-응답순으로 작업이 이루어진다.

 

게이트웨이 라우터에서 ARP 응답 쿼리가 도착하여 ARP 테이블이 만들어지면 게이트웨이 라우터로 DNS 쿼리를 내보낸다.

 

 

3) 여전히 시작하기: DNS 서버로의 인트라-도메인 라우팅

게이트웨이 라우터는 포워딩 테이블(OSPF, BGP 등)을 참조해서 DNS 쿼리를 DNS 서버로 전달할 출력 링크를 결정한다.

DNS 서버는 DNS 레코드를 찾아서 응답 메시지를 랩탑에게 보내고 랩탑은 수신받은 메시지에서 구글의 IP 주소를 추출한다.

 

 

4) 웹 클라이언트-서버 상호작용: TCP와 HTTP

랩탑은 목적지 주소로 HTTP 요청을 보내기 전에 TCP 연결(3-way handshake)이 이루어져야 하기 때문에 TCP SYN 세그먼트를 보낸다. TCP SYNACK 피드백을 받아서 연결이 이루어졌다면 이제부터 HTTP 요청-응답 메시지를 주고받는다.

 

https://slideplayer.com/slide/7473201/

'이론 > 네트워크' 카테고리의 다른 글

무선 이동 네트워크  (0) 2022.11.25
네트워크 계층: 제어 평면  (0) 2022.11.20
네트워크 계층 : 데이터 평면  (0) 2022.11.19
트랜스포트 계층 (2)  (0) 2022.11.18
트랜스포트 계층 (1)  (0) 2022.11.18

+ Recent posts