CS/Network

링크 계층

olsohee 2024. 3. 30. 00:50

링크 계층

링크 계층은 네트워크 계층의 한 단계 아래 계층으로, 링크 계층의 전송 단위는 프레임이다. 링크 계층을 이해함으로써 패킷이 라우터로 이동하는 그 과정을 좀 더 구체화시켜 이해할 수 있을 것이다.

이더넷(Ethernet)

이더넷은 링크 계층에서 같은 네트워크 간에 통신을 할 때 사용되는 프로토콜로, 컴퓨터, 서버, 라우터, 스위치 등의 네트워크 장치들을 연결하여 데이터를 전송하고 네트워크를 구성한다. 

 

따라서 이더넷을 사용하여 연결된 장치들은 같은 네트워크 내에 속해야 한다(LAN(Local Area Network)). LAN에서 이더넷을 사용하면 데이터는 주로 이더넷 스위치나 허브를 통해 전송된다.

이더넷 프레임

  • Destination Address: 도착지 MAC 주소
  • Source Address: 출발지 MAC 주소

링크 계층에서는 IP 주소가 아닌 MAC 주소가 사용된다. MAC 주소는 네트워크 인터페이스 카드(NIC)에 할당된 고유 ID이며, 변경이 불가하고 전세계적으로 유니크한 값이다. 즉, 머신이 다른 서브넷(네트워크)로 이동하면 IP 주소는 바뀌지만 MAC 주소는 바뀌지 않는다.

허브와 CSMA/CD

링크 계층에서 사용되는 네트워크 접속 장치로 허브라는 것이 있다. 허브는 여러 개의 포트를 가져 여러 장치를 연결할 수 있다. 그런데 허브는 포트에 연결된 모든 장치에 데이터를 브로드캐스트하여 충돌이 발생할 수 있다. 따라서 허브를 사용하는 네트워크에서는 CSMA/CD가 데이터 충돌을 방지하기 위한 중요한 프로토콜로 사용된다.

 

CSMA/CD 방식은 다음과 같다.

  1. 프레임을 전송하기 전에 전송 중인 프레임이 있는지 확인하고, 없으면 프레임을 전송한다.
  2. 그러나 두 호스트에서 동시에 전송을 시작하면 여전히 충돌이 발생할 수 있다.
  3. 따라서 충돌이 감지되면, 프레임 전송을 멈추고 랜덤 시간 동안 기다린 후 재전송한다. 
    • 이때 빨리 재전송하는 것이 좋으므로, 대기하는 랜덤 시간의 폭은 작을수록 좋다. 그러나 랜덤 시간의 폭이 작으면 또 충돌이 발생할 가능성이 높아진다.
    • 따라서 처음 충돌이 발생했을 때의 대기 시간이 0~2라고 하면, 그 다음 충돌에서는 0~4, 0~8, ... 의 범위로 대기 시간의 폭이 점차 커진다.
    • 즉, 빠른 재전송을 위해 조금만 기다렸다가, 또 충돌이 발생하면 프레임을 전송하려는 호스트가 많은 것이므로 조금 더 기다리는 방식이다.
    • 한 네트워크를 사용하는 사람이 많을 때 인터넷 속도가 느려지는 이유가 이 때문이다. 한 네트워크 내에서 많은 호스트가 프레임 전송을 시도하기 때문에 충돌이 잦고, 재전송을 위한 대기 시간이 소요되기 때문이다.

그렇다면 충돌은 어떻게 감지할까?

  • 유선 이더넷에서의 충돌 감지는 무선에 비해 쉽다. 유선에서는 케이블을 통해 전자기파가 전송되기 때문에 전자기파가 외부의 노이즈로부터 보호된다. 따라서 내가 보내는 전자기파의 세기와 다른 곳에서 보내는 전자기파의 세기가 비슷때문에 다른 전자기파와 충돌할 경우 전자기파의 변화를 감지하기 쉽다.
  • 반면 무선에서는 전자기파가 외부의 노이즈로 변형이 잦기 때문에 나의 전자기파에 비해 다른 곳에서 보내는 전자기파가 더 작다. 따라서 충돌하더라도 감지하지 못할 수가 있다.

스위치

 

허브를 사용하면 bus형의 모습을 띤다. 즉, 모든 장치로 데이터가 브로드캐스트되고, 이 과정에서 충돌이 발생하며, 충돌 발생 시 대기 후 재전송하는 과정에서 대기 시간이 소모된다는 단점이 있다.

 

이러한 허브의 단점으로 인해 스위치가 등장했다. 스위치는 start형의 모습을 띠고, 각각의 포트가 독립적으로 동작한다. 스위치를 사용하면 각 호스트가 프레임을 전송할 때 우선 스위치로 프레임이 전송되고, 스위치는 프레임의 dest MAC 주소를 기반으로 적절한 다음 위치로 프레임을 전송해준다. 이때 데이터 전송은 각 포트별로 독립적으로 이뤄지기 때문에 충돌이 발생하지 않는다. 즉, 다음 그림에서 A에서 A'로 가는 프레임 전송과 B에서 B'으로 가는 프레임 전송이 동시에 일어날 수 있다. 

그러면 A에서 A'으로 가는 프레임이 스위치로 들어왔을 때, 스위치가 A'으로 나가는 포트가 1~6번 중 어디인 줄 알고 보낼까? 이때 사용되는 것이 스위치 테이블이다. 

  1. A가 A'로 가는 프레임을 전송한다. (source MAC 주소: A의 MAC 주소, dest MAC 주소: A'의 MAC 주소)
  2. 프레임이 스위치로 도착한다.
  3. 프레임이 1번 포트로부터 들어왔으므로 스위치 테이블에 "1번 포트 - A"라는 것을 기록한다(self learning).
  4. 그리고 스위치 테이블에 목적지인 A'의 포트 정보가 있는지 확인하여, 있으면 목적지로만 프레임을 전송하고, 없으면 모든 포트에 프레임을 전송한다(플러딩). 이 경우 1번 포트는 A라는 것을 알기 때문에 1번을 제외한 모든 포트에 플러딩을 한다. 
  5. 즉, 스위치는 프레임을 받았을 때 프레임을 전송한 호스트의 정보를 알 수 있으며 이를 스위치 테이블에 기록한다. 초반에는 어느 포트가 어느 호스트인지 스위치 테이블에 데이터가 쌓이지 않아 플러딩이 자주 일어나지만, 금새 데이터가 쌓여 플러딩이 이뤄질 필요가 없다.

위와 같이 스위치가 하는 일을 스위칭이라고 한다. 그리고 참고로 스위치는 MAC 주소를 갖지 않는다. 즉, 호스트가 프레임을 보낼 때 도착지 MAC 주소는 스위치의 MAC 주소가 아니라는 것에 유의하자. 호스트는 프레임을 전기 신호로 전송할 뿐이고, 전기 신호를 받은 스위치가 목적지 MAC 주소에 맞게 보내주는 것이다.

 

스위치는 불필요하게 모든 호스트로 전기 신호가 전달되지도 않으며 충돌이 발생하지도 않는다. 따라서 현재의 네트워크에서는 일반적으로 허브가 아닌 스위치가 사용된다. 또한 충돌이 발생하지 않기 때문에 CSMA/CD도 사용되지 않는다.

 ARP(Address Resolution Protocol)

프레임이 기본 게이트웨이로 전송되고 여러 개의 라우터를 거쳐 목적지까지 가는 과정에서, 다음 목적지의 IP 주소는 알지만 MAC 주소는 모르는 경우가 생긴다. 즉, IP 주소를 기반으로 해당 위치의 MAC 주소를 알아와야 하는데 이때 사용되는 것이 ARP이다. ARP는 IP 주소를 통해 MAC 주소를 알아오는 프로토콜이다. 

 

ARP 쿼리에서 사용되는 프레임의 모습은 다음과 같다.

  • source MAC 주소: A의 MAC 주소
  • dest MAC 주소: 브로드캐스트 (255.255.255.255)
  • data: ARP 쿼리로, MAC 주소를 알고자 하는 호스트의 IP 주소가 담긴다. (보통의 경우에는 데이터 위치에 IP 패킷이 담기지만, ARP에서 사용되는 프레임의 데이터 위치에는 ARP 쿼리가 담긴다.)
  • type: 데이터 부분에 담긴 내용이 ARP 쿼리인지 IP 패킷인지 구분하기 위한 필드

ARP 과정은 다음과 같다. A가 C의 IP 주소를 기반으로 MAC 주소를 알아내는 과정이라고 가정하자.

A는 ARP 프레임을 만들어서 브로드캐스트로 전송한다. 

  • source MAC 주소: A의 MAC 주소
  • dest MAC 주소: 브로드캐스트 주소
  • data: C의 IP 주소 

브로드캐스트로 전송된 프레임을 모든 호스트가 받고, 각 호스트들은 ARP 프레임의 목적지 IP 주소를 확인하여 자신의 IP 주소인지 확인한다. 자신의 IP 주소인 호스트 C는 ARP 응답을 통해 자신의 MAC 주소를 알려준다.

  • source MAC 주소: C의 MAC 주소
  • dest MAC 주소: A의 MAC 주소

 

A는 ARP 프레임을 확인하여 C의 MAC 주소를 ARP 테이블에 기록한다.

라우팅 + ARP 과정

이번에는 라우팅과 ARP가 함께 어떻게 동작하는지 알아보자. A가 D에게 데이터를 보내는 상황이라고 가정하자.

  • A는 DNS를 통해 D의 IP 주소(4.4.4.2)를 알 수 있다.
  • A는 포워딩 테이블을 참고하여 4.4.4.2로 가기 위한 다음 목적지의 IP 주소(1.1.1.1)를 알아낸다. 
  • A는 ARP 테이블에서 1.1.1.1에 해당하는 MAC 주소가 있는지 찾고, 없으면 ARP를 통해 1.1.1.1의 MAC 주소를 알아낸다.
  • 프레임을 생성하고 전송한다.
    • source MAC 주소: AA:::::AA
    • dest MAC 주소: EE:::::EE
    • source IP 주소: 1.1.1.2
    • dest IP 주소: 4.4.4.2

  • 프레임을 받은 라우터는 프레임의 헤더를 뜯고, 그 내용물인 패킷을 받는다. 
  • 라우터는 라우팅 테이블을 참고하여 패킷의 dest IP 주소인 4.4.4.2로 가기 위한 다음 목적지의 IP 주소(3.3.3.2)를 알아낸다.
  • 라우터는 ARP 테이블에서 3.3.3.2에 해당하는 MAC 주소가 있는지 찾고, 없으면 ARP를 통해 3.3.3.2의 MAC 주소를 알아낸다.
  • 프레임을 생성하고 전송한다.
    • source MAC 주소: EE:::::EE
    • dest MAC 주소: HH:::::HH
    • source IP 주소: 1.1.1.2
    • dest IP 주소: 4.4.4.2

  • 목적지인 D가 있는 네트워크의 게이트웨이 라우터까지 전송되었다. 이제 라우터는 프레임을 뜯어 패킷을 받는다.
  • 라우터는 ARP 테이블에서 패킷에 적힌 dest IP 주소인 4.4.4.2에 해당하는 MAC 주소가 있는지 찾고, 없으면 ARP를 통해 4.4.4.2의 MAC 주소를 알아낸다.
  • 프레임을 생성하고 전송한다.
    • source MAC 주소: HH:::::HH
    • dest MAC 주소: DD:::::DD
    • source IP 주소: 1.1.1.2
    • dest IP 주소: 4.4.4.2
  • 프레임을 받은 D는 프레임 헤더의 dest MAC 주소와 패킷 헤더의 dest IP 주소가 자신인 것을 확인하고, 최종적으로 애플리케이션 계층으로 데이터를 올린다. 

결과적으로 A가 생성한 IP 패킷의 source IP 주소와 dest IP 주소는 변하지 않는다. IP 패킷을 담는 프레임의 source MAC 주소와 dest MAC 주소만 수시로 변하면서 목적지로 전송된다.

무선 네트워크

무선 네트워크에서의 충돌과 CSMA/CA

유선에서는 케이블을 통해 전기기파가 보호되기 때문에 외부 노이즈로부터 보호받고, 전기기파의 세기가 일정하다. 반면 무선에서는 케이블로부터 보호받지 못하기 때문에 외부 노이즈로부터 취약하고, 전기기파의 세기도 점점 약해진다. 

 

따라서 무선 상황에서는 다양한 문제가 발생할 수 있다.

  • CSMA를 제대로 못할 수 있다. C가 신호를 보내기 전에 전송 중인 전자기파가 있는지 확인하는데, C 입장에서 A의 전기기파의 세기가 매우 약하기 때문에 전송 중인 전자기파가 없다고 판단할 수 있다.
  • CD를 제대로 못할 수 있다. C 입장에서 A의 전자기파의 세기가 매우 약하기 때문에 충돌 감지를 못할 수 있다.

따라서 와이파이 상황에서는 이더넷과 다른 충돌 감지 프로토콜이 필요한데, CSMA/CA가 사용된다. CSMA/CA 과정은 다음과 같다.

  1. 전송 중인 전기 신호가 있는지 확인하고, 없으면 프레임을 전송한다.
  2. 프레임을 받은 AP는 이에 대한 ACK을 보낸다. 이때 ACK을 보내는 이유는 무선 상황에서는 충돌을 감지하지 못하기 때문이다. 유선에서는 충돌이 나지 않았으면 프레임이 제대로 전송되었다고 확신할 수 있다. 그러나 무선에서는 충돌이 나도 충돌을 감지하지 못할 수 있기 때문에 추측할 수 없고, 따라서 AP가 프레임을 제대로 받았다는 ACK을 전송하는 것이다. (이때의 ACK은 링크 계층의 ACK이다.)
  3. 만약 호스트가 ACK을 받지 못하면, 충돌이 발생했다고 생각하여 재전송한다. 즉, 유선에서는 충돌이 나지 않을 때까지 재전송하지만, 무선에서는 ACK을 받을 때까지 재전송한다. 

RTS-CTS(Request To Send - Clear To Send)

무선 네트워크에서의 충돌 문제를 효율적으로 해결하기 위해 RTS-CTS가 등장했다. RTS-CTS의 동작 방식은 다음과 같다.

  1. A와 B는 각각 프레임을 전송하기 전에 RTS 프레임을 전송한다. 이는 실제 데이터는 실리지 않은 작은 크기의 프레임이다.
  2. 충돌이 발생하면 어떠한 응답도 오지 않는다. 따라서 A와 B는 충돌이 났다고 생각하여, 랜덤한 시간만큼 대기했다가 RTS 프레임을 재전송한다.
  3. 충돌이 발생하지 않아 AP가 RTS를 정상 수신했으면, CTS라는 응답을 보낸다. 이는 네트워크 대역으로 퍼지게 되고 A가 얼만큼 사용할 것이니 나머지는 데이터를 보내지말라는 의미이다.
  4. A는 CTS를 듣고, 프레임을 전송한다. 그 동안 다른 호스트는 프레임을 전송하지 않는다. 
  5. A의 프레임이 정상 수신되면 AP는 ACK을 보낸다. 

와이파이 프레임

다음은 와이파이에서 사용하는 프레임이다. 

이더넷 프레임과 다른 점은 헤더에 들어가는 주소 필드가 2개가 아닌 3개라는 것이다. (Address 4는 잘 사용되지 않음)

  • Address 1: 프레임을 받는 디바이스의 MAC 주소 (dest  MAC 주소)
  • Address 2: 프레임을 전송하는 디바이스의 MAC 주소 (source MAC 주소)
  • Address 3: AP와 연결된 라우터의 MAC 주소

그리고 2바이트 크기의 Frame Control 필드는 16비트의 필드들로 구성되어 있다. 이때 Type 필드는 해당 프레임이 RTS, CTS, ACK, data 중 어떤 정보의 프레임인지를 나타낸다.

예를 들어 H1이 프레임을 보낼 때, 와이파이로 통신하므로 이더넷 프레임이 아닌 와이파이 프레임을 생성하여 전송한다. 이때 와이파이 프레임에 들어가는 정보는 다음과 같다.

  • Address 1: AP의 MAC 주소
  • Address 2: H1의 MAC 주소
  • Address 3: R1(라우터)의 MAC 주소

그리고 AP는 이 와이파이 프레임을 받아서 이더넷 헤더로 바꾸어 R1(라우터)로 전송한다. 

 

그러면 이더넷 프레임과 달리 와이파이 프레임에서 라우터의 MAC 주소를 적어야 하는 이유는 무엇일까?

➡️ 이는 AP라는 디바이스의 특징때문이다. 네트워크 계층의 디바이스인 라우터와 달리, AP는 링크 계층의 디바이스이다. 따라서 AP는 포워딩하는 기능이 없다. 즉, 수신받은 프레임의 헤더를 뜯어서 패킷을 해석하고, dest IP 주소를 기반으로 다음 목적지로 포워딩하는 기능을 할 수 없다. 따라서 H1에서 AP로 프레임을 전송할 때 AP가 다음으로 갈 목적지인 R1(라우터)의 MAC 주소를 함께 알려주는 것이다.

 

그리고 스위치는 MAC 주소를 갖지 않는데, 왜 AP는 MAC 주소를 갖는 것일까? 

➡️ 스위치는 유선으로 연결되어 있기 때문에 MAC 주소로 지정할 필요 없이 케이블을 통해 전기 신호가 전달된다. 반면, AP는 무선이기 때문에 MAC 주소를 집어주어야 한다.

공유기

그러면 우리가 가정에서 사용하는 공유기는 어떤 디바이스일까? 공유기는 위 그림에서 AP와 R1이 하나로 합쳐진 장비라고 할 수 있다. 따라서 만약 핸드폰으로 데이터를 보낼 때 프레임에 담기는 정보는 다음과 같다. 

  • Address 1: 공유기의 MAC 주소
  • Address 2: 핸드폰의 MAC 주소
  • Address 3: 공유기의 MAC 주소

그리고 공유기는 링크 계층뿐만 아니라 애플리케이션 계층까지 다 구현된 디바이스이다. 따라서 공유기 내에는 항상 NAT, DHCP 등이 동작하고 있다.

 

공유기를 사용한 통신 흐름은 다음과 같다.

  1. 노트북을 열면 공유기의 DHCP 서버를 통해 DHCP 통신 과정을 거친다.
  2. DHCP 통신 후에는 게이트웨이 라우터의 IP 주소를 받게 되는데 이것이 공유기의 IP 주소이다. 그리고 노트북은 내부적으로 포워딩 테이블에 게이트웨이 라우터의 IP 주소를 기록한다. (ex, "외부로 나가기 위해서는 1.1.1.1(게이트웨이 라우터 IP 주소)로")
  3. 노트북에서 공유기로 프레임이 전송된다.
    • source IP: 노트북의 IP 주소
    • dest IP: 구글의 IP 주소
    • source MAC: 노트북의 MAC 주소
    • dest MAC: 공유기의 MAC 주소
  4. 프레임을 받은 공유기는 dest IP 주소와 포워딩 테이블을 참고하여 다음 목적지의 IP 주소를 알아낸다. 그리고 ARP 테이블을 통해 다음 목적지의 MAC 주소를 알아낸다. 이때 다음 목적지가 skt의 게이트웨이 라우터라고 가정하자.
    • source IP: 공유기의 IP 주소(NAT으로 인해 노트북의 IP 주소가 아닌 공유기의 IP 주소이다. 그리고 공유기 내의 NAT 테이블에 그 정보가 기록된다.)
    • dest IP: 구글의 IP 주소
    • source MAC: 공유기의 MAC 주소
    • dest MAC: skt 게이트웨이 라우터의 MAC 주소

Mobility, 이동통신(LTE)

디바이스를 이동시키면 TCP 연결이 여전히 유지될까? 

  • TCP 연결은 클라이언트의 소켓과 서버의 소켓이 일대일로 매핑된 상태이다. 그리고 이 TCP 소켓은 다음 4가지 정보를 기반으로 전세계적으로 유니크하다.
    • 클라이언트의 IP 주소
    • 클라이언트의 포트 번호
    • 서버의 IP 주소
    • 서버의 포트 번호
  • 같은 서브넷 안에서 움직이면 클라이언트의 IP 주소가 변하지 않는다. 따라서 TCP 연결이 유지된다.
    • 만약 하나의 스위치에 AP1, AP2가 연결되어 있다고 가정하자.
    • 디바이스 D를 AP1에서 AP2로 이동하더라도 같은 네트워크 내에서 이동하는 것이기 때문에 IP 주소가 변하지 않는다.
    • 단지 스위치 내의 스위치 테이블의 정보만 업데이트하면 된다(ex, D로 가기 위한 인터페이스를 기존의 1에서 2로 변경). 그리고 이 스위치 테이블의 업데이트는 D에서 데이터를 전송할 때 self-learning을 통해 이뤄진다. 
  • 반면 아예 다른 네트워크로 이동하면 클라이언트의 IP 주소가 변하기 때문에 TCP 연결이 끊기고 새로운 연결이 맺어진다. 
    • 예를 들어 스타벅스의 와이파이를 사용하다가 이디야 와이파이로 변경하면, 서로 다른 네트워크이므로 클라이언트의 IP 주소가 변경되어 기존의 TCP 연결도 끊긴다.
    • 반면 skt LTE를 사용하여 지하철을 타면서 이동하는 경우에는 TCP 연결이 유지된다. LTE는 이동통신으로 그 네트워크의 범위가 전국이기 때문이다. 그리고 이동통신은 와이파이와는 다른 또 다른 충돌을 피하기 위한 프로토콜을 사용한다.

와이파이의 전송 속도

와이파이에서 전송 속도는 고정되어 있지 않다.

  • AP와 물리적으로 가까이 있는 디바이스에서 데이터를 보내면 그 속도가 상대적으로 빠르다.
  • 반면 AP와 물리적으로 멀어지면, 충돌 발생이나 외부 노이즈로부터 영향이 있을 확률이 높다. 따라서 내부적으로 에러에 강한 인코딩 기법으로 변경한다. 그리고 이로 인해 전송 속도가 느려지는 것이다. (에러에 강한 인코딩 기법은 같은 양을 전송하더라도 100%를 데이터로 채워 보내지 않고, 50%는 데이터로, 50%는 에러 발생시 처리와 관련된 정보들로 담아서 보내기 때문이다.)

Reference

'CS > Network' 카테고리의 다른 글

네트워크 계층: IP  (0) 2024.03.28
전송 계층: UDP, TCP  (1) 2024.03.26
소켓(Socket)  (0) 2024.03.26
애플리케이션 계층: DNS  (1) 2024.03.26
애플리케이션 계층: HTTP  (0) 2024.03.26