Post

network 5강 - Link layer

  • 지금까지 패킷을 라우터를 통해 어떻게 dest로 보내는지에 대해 설명했다.
  • 실제로 우리가 패킷을 만들어서 통신하기 위해서는 처음 네트워크 밖으로 보내는 라우터인 게이트웨이 라우터에게 패킷을 보내거나 라우터에서 라우터로 패킷을 보낼 때 어떤 방식으로 보낼까?
  • 네트워크 안에서는 라우터와 라우터 간 1대1로 매칭되어 연결되어있는 것이 아니라 하나의 라우터에 여러 라우터가 연결되어있다.
  • 그럴 상황에서 라우터가 라우터에게 패킷을 보내고자 할 때 결국 이 패킷이란 것은 파장이므로 연결되어있는 모든 곳에 퍼지게 된다. (우리가 말할 때 공기에 퍼지듯)
  • 근데 여기서 한 라우터에 패킷을 보내는 도중에 또 다른 라우터가 패킷을 보내면 어떻게 될까? 패킷은 파장이라 모든 곳에 퍼진다고 했다.
  • 첫번째 보낸 패킷과 다른 라우터에서 보낸 두번째 패킷이 서로 섞이면서 알아볼 수 없게 된다. 이런 현상을 collision이라고 하며 이 링크 레이어에서 가장 중요하게 하는 일은 collision을 발생하지 않게 하고, 발생했다면 해결하는 일을 한다.

Medium Access Control(MAC)

  • 여러명이 한 매체를 공유하는 상황(multiple access)에서 패킷을 전송할 때 충돌이 안 나게 컨트롤하는 것을 MAC이라고 한다.

Time Division multiple access(TDMA)

  • MAC protocol 중 하나로 시간을 쪼개서 multiple access 상황을 해결

    image

  • slot의 수보다 사용자가 적으면 리소스가 낭비

  • 이와 비슷한 MAC protocol로 FDMA가 있는데 TDMA와의 차이는 시간 대신 전자파를 이용한 방식으로 비슷한 장단점을 가진다.

Random access protocol

image

  • TDMA와 다르게 보내고 싶을 때 보내는 방식
  • Random access protocols는 충돌이 발생하는데 이 충돌을 어떻게 감지하고 해결하는 것이 핵심이다.

CSMA

  • Random access protocol로 패킷을 전송하기 전에 누군가 전송하고 있는지 확인하고, 없다면 전송을 시작하는 프로토콜이다.
  • 하지만 CSMA도 충돌이 발생하는 경우가 있다.

image

  • 위 그림과 같은 상황에서 collision이 발생한다. propagation delay때문에 발생하는데 이 delay는 해결할 수 없는 문제이기 때문에 CSMA를 사용하면 충돌은 피할 수 없다고 결론이 났다.

  • 이런 문제를 완화하기 위해 충돌이 감지되는 순간 전송을 멈추는 방식이 CSMA를 업그레이드한 CSMA/CD이다. (CSMA는 멈추지 않고 끝까지 전송)

  • 하지만 이 CSMA/CD도 애매한 부분이 있다. 바로 충돌을 감지해서 전송을 멈춘 뒤 누가 먼저 전송을 시작할 것 인가이다.

  • 이를 이해 도입한 방법이 binary backoff 이다.

    image

    • 충돌이 m번 발생했을 때 2^m-1 만큼의 수열 중 랜덤한 숫자를 고르고 그 수만큼 기다린 후 전송하는 방식이다.
    • 첫번째 충돌 : {0, 1} 중 선택, 2번째 충돌 : {0, 1, 2, 3} 중 선택
  • 주변에 같은 네트워크를 쓰는 사람이 많으면 인터넷 속도가 느려지는 이유가 바로 binary backoff 때문이다. (사람이 많으면 많을 수록 길어짐)

  • 우리가 평소에 사용하는 Ethernet은 이 CSMA/CD를 사용한다.

Local Area Network(LAN)

  • 같은 서브넷을 가진 라우터를 거치지 않고 접근이 가능한 host들의 집합

Ethernet

  • 유선을 사용해 LAN을 구현한 방식

image

  • 최근에는 보통 star 형식으로 사용
  • Ethernet은 CSMA/CD MAC protocol을 사용

  • 근데 이더넷에서 collision이 발생했을 때 100% collision을 detect할 수 있을까? 답은 아니다.
    • A가 전송 시작
    • A가 전송한 프레임이 E에게 닿기 직전에 E가 listen -> 전송 중이 없어서 E가 전송 시장
    • A가 보낸 frame과 collision 발생 -> E 전송 멈춤
    • E가 보낸 frame이 A가 frame 전송 중에 A에게 도착해야 collision detect 완료
    • 하지만 E가 보낸 frame이 들어오기 전에 A가 전송을 끝냄
    • detect 실패
  • 위와 같은 시나리에서 detect를 실패하게 된다.
  • 이 때문에 이더넷에서는 frame의 최소 크기를 정해놓았다. 그 크기는 64byte이다. 64byte 이상 보내야 위와 같은 상황이 발생하지 않는다.

MAC address

image

  • 링크 레이어의 헤더에는 dest, source address를 가지고 있는데, 이 address는 MAC address를 뜻 한다.
  • MAC address는 네트워크 인터페이스를 식별할 수 있는 주소로, 48 bit를 가진 주소이다.
  • MAC address는 제조사를 식별하는 24 bit와 나머지 24 bit는 제품 번호를 뜻 한다. 이 MAC address는 주민번호와 같이 바꿀 수 없는 번호이다.

image

ARP

  • 결국 처음 사용자가 다른 네트워크로 요청을 보내고 싶다면 게이트웨이 라우터로 보내야한다.
  • 그렇다면 DHCP를 통해 게이트웨이 라우터의 IP는 알고 있지만 frame을 만들라면 dest address에 게이트웨이 라우터의 MAC address를 넣어야하는데 이걸 어떻게 알 수 있을까?
  • 그 방법은 다음과 같다.
  • 각 컴퓨터 내부에는 ARP(address resolution protocol) table이 존재한다. 이 ARP table를 확인하면 Ip address로 MAC address를 찾을 수 있다.
  • 하지만 ARP table에 게이트웨이 라우터의 정보가 없다면 어떻게 할까?
  • 그럴 때는 ARP request를 통해 게이트웨이 라우터의 MAC address를 찾아온다.
  • ARP request는 브로드캐스트로 요청을 보내고 data 부분에 MAC address를 찾고 있는 장치의 IP address를 담아서 보낸다. 그 후 IP address에 해당하는 장치는 응답을 보낸다.
  • 이런 방식으로 MAC address를 찾게 된다.

Switch

  • 최근 이더넷은 중간에 switch라는 장치를 두고 사용한다.

image

  • Switch는 collision domain을 분리 시켜주는 역할을 한다.

  • 기존의 bus 방식은 2명 이상이 동시에 전송하면 무조건 collision이 발생했는데 switch를 쓰는 star 방식은 switch가 중간에 관리를 해줘 collision이 발생하지 않도록 해준다.

  • switch는 switch table을 통해 어떤 MAC address는 몇번 포트에 연결되어있는지 찾아서 switching 해준다.

    image

    • 이때 A -> A’, B -> A’ 으로 전송했을 때 bus에서는 collision이 발생했겠지만, switch를 이용하면 switch가 중간에서 collision이 발생하지 않게 조절해서 전송해준다.
  • switch table은 self-learning을 통해 table을 채운다.

    image

    • flood = 다른 모든 포트에 다 보냄

무선 / 이동 Networks

  • 무선 network 또한 공기라는 공유 매체를 사용하기 때문에 개념적으론 이더넷과 거의 같다.
  • 하지만 무선이기 때문에 발생하는 특징들이 있다.

image

  • 무선 통신의 종류로는 wireless와 mobility로 나뉜다.
    • Wireless : wi-fi와 같은 무선 통신
    • Mobility : 모바일 휴대폰과 같이 네트워크를 넘나드는 이동 통신
  • 무선 통신은 사용자에서 게이트웨이 라우터로 나가는 첫 전송만 무선이고 나머지는 유선으로 통신하기 때문에 그 첫 부분만 신경쓰면 된다.
  • 무선 통신의 경우 외부로부터 보호해 줄 케이블과 같은 장치가 없기 때문에 외부로부터 간섭이 매우 심하다.
  • 또 거리에 반비례해 신호 세기가 떨어지는 특징이 있다.

image

  • 이런 특징 때문에 기존의 이더넷에서 쓰던 CSMA/CD는 사용하지 못한다. (그림에서 A는 C가 보내는 신호가 약해 collision detected가 안 됨)

AP(BSS)

  • 무선 연결을 위한 장치로 주변의 무선 통신들을 switch나 라우터 등에게 보내는 역할을 한다.
  • AP와 switch, router는 이더넷 케이블로 연결되어있다.

image

  • AP들은 주기적(초당 10번)으로 주변에 자기 정보를 비컨에 담아서 브로드캐스트를 한다.
  • 만약 범위 안에 들어와있는 Host들은 그 정보를 가지고 어떤 AP에 접속할지 결정하게 된다. (wifi 목록에서 하나를 선택하는 것)

image

Multiple Access

  • 무선의 특징 때문에 CSMA/CD는 사용하지 못한다.
  • CSMA/CD는 collision이 일어났다는 것을 혼자 감지할 수 있기 때문에 ACK를 사용하지 않고 통신이 가능했다.
  • 하지만 무선의 경우 collision이 일어났다는 것을 혼자 감지할 수 없기 때문에 receiver에게 ACK를 받아 잘 갔는지 확인하는 것이 필요하다.

CSMA/CA

image

  • Sender는 DIFS라는 정해진 시간만큼 전송하는 사람이 있는지 기다린다. 없다면 전송한다.
  • Receiver도 SIFS라는 정해진 시간만큼 기다린 후 ACK를 보낸다.
  • 여기서 DIFS/SIFS는 정해진 시간으로 특별히 신경 X
  • 만약 ACK가 안 오면 재전송
  • CSMA/CD의 경우 충돌이 감지되면 전송을 멈추는데, CSMA/CA의 경우 충돌을 감지할 수 없기 때문에 멈추지 않고 전송한다.
  • 이렇듯 CSMA/CD보다 CSMA/CA가 충돌이 일어날 경우 낭비하는 리소스가 더 크기 때문에 충돌에 대해 더 조심해야한다. 그렇기 때문에 CSMA/CA에는 충돌을 피하기 위해 아래의 개념을 도입했다.

RTS-CTS

  • RTS(Ready To Send) : 보낼 준비가 완료되었다는 프레임
  • CTS(Clear To Send) : 보내라는 프레임
  • CSMA/CA는 충돌이 발생해도 용량이 큰 데이터를 멈추지 않고 보내기 때문에 그 전에 먼저 작은 단위를 보내서 확인한 뒤 데이터를 전송하는 방식이다.

image

  • A와 B가 AP에게 전송하는 시나리오다.
  • A와 B가 동시에 RTS를 보냄 -> 충돌 -> AP는 가만히 있고 A와 B는 CTS가 오지 않았기 때문에 랜덤한 시간동안 기다림
  • A가 랜덤한 시간이 먼저 끝나 RTS 전송 -> AP가 잘 받음
  • AP가 A로부터 전송 받는다는 CTS(A)를 보냄 -> A가 CTS를 받은 뒤 데이터 전송 -> 전송이 끝나면 ACK를 받음
  • 여기서 A가 RTS를 보낼 때와 AP가 CTS를 보낼 때 각 디바이스 주변의 있는 디바이스들도 모두 이 frame을 받게 된다. -> 이를 통해 A가 전송을 끝날 때까지 주변의 디바이스들은 전송을 시작하지 않음
  • 하지만 만약 B로 가는 CTS(A)가 중간에 collision이 발생했다고 가정해보자.
  • 이럴 때 B는 A가 전송을 시작했다는 사실을 모르기 때문에 다시 랜덤한 시간동안 기다린 후 RTS를 보내게 된다.
  • 이때 만약 A가 데이터를 보내는 중이였다면, B가 보낸 RTS가 collision을 일으키고 AP는 쓰레기를 받게 된다.
  • 그런 뒤 당연히 AP는 ACK를 보내지 않고, A는 ACK를 못 받았기 때문에 다시 RTS를 전송해 AP의 채널을 가지기 위해 경쟁하게 된다.
  • 이때 만약 특정 프레임을 보낼 때 7번 이상 실패한다면 다음 프레임으로 넘어가게 설계되어있다. 이 넘어간 프레임은 결국 TCP에서 재전송하게 된다.

frame addressing

image

출처)

[컴퓨터네트워크 - 한양대학교KOCW 공개 강의](http://www.kocw.net/home/search/kemView.do?kemId=1169634)
This post is licensed under CC BY 4.0 by the author.