network 5강 - Link layer
Link layer
- 지금까지 패킷을 라우터를 통해 어떻게 dest로 보내는지에 대해 설명했다.
- 실제로 우리가 패킷을 만들어서 통신하기 위해서는 처음 네트워크 밖으로 보내는 라우터인 게이트웨이 라우터에게 패킷을 보내거나 라우터에서 라우터로 패킷을 보낼 때 어떤 방식으로 보낼까?
- 네트워크 안에서는 라우터와 라우터 간 1대1로 매칭되어 연결되어있는 것이 아니라 하나의 라우터에 여러 라우터가 연결되어있다.
- 그럴 상황에서 라우터가 라우터에게 패킷을 보내고자 할 때 결국 이 패킷이란 것은 파장이므로 연결되어있는 모든 곳에 퍼지게 된다. (우리가 말할 때 공기에 퍼지듯)
- 근데 여기서 한 라우터에 패킷을 보내는 도중에 또 다른 라우터가 패킷을 보내면 어떻게 될까? 패킷은 파장이라 모든 곳에 퍼진다고 했다.
- 첫번째 보낸 패킷과 다른 라우터에서 보낸 두번째 패킷이 서로 섞이면서 알아볼 수 없게 된다. 이런 현상을 collision이라고 하며 이 링크 레이어에서 가장 중요하게 하는 일은 collision을 발생하지 않게 하고, 발생했다면 해결하는 일을 한다.
Medium Access Control(MAC)
- 여러명이 한 매체를 공유하는 상황(multiple access)에서 패킷을 전송할 때 충돌이 안 나게 컨트롤하는 것을 MAC이라고 한다.
Time Division multiple access(TDMA)
MAC protocol 중 하나로 시간을 쪼개서 multiple access 상황을 해결
slot의 수보다 사용자가 적으면 리소스가 낭비
이와 비슷한 MAC protocol로 FDMA가 있는데 TDMA와의 차이는 시간 대신 전자파를 이용한 방식으로 비슷한 장단점을 가진다.
Random access protocol
- TDMA와 다르게 보내고 싶을 때 보내는 방식
- Random access protocols는 충돌이 발생하는데 이 충돌을 어떻게 감지하고 해결하는 것이 핵심이다.
CSMA
- Random access protocol로 패킷을 전송하기 전에 누군가 전송하고 있는지 확인하고, 없다면 전송을 시작하는 프로토콜이다.
- 하지만 CSMA도 충돌이 발생하는 경우가 있다.
위 그림과 같은 상황에서 collision이 발생한다. propagation delay때문에 발생하는데 이 delay는 해결할 수 없는 문제이기 때문에 CSMA를 사용하면 충돌은 피할 수 없다고 결론이 났다.
이런 문제를 완화하기 위해 충돌이 감지되는 순간 전송을 멈추는 방식이 CSMA를 업그레이드한 CSMA/CD이다. (CSMA는 멈추지 않고 끝까지 전송)
하지만 이 CSMA/CD도 애매한 부분이 있다. 바로 충돌을 감지해서 전송을 멈춘 뒤 누가 먼저 전송을 시작할 것 인가이다.
이를 이해 도입한 방법이
binary backoff
이다.- 충돌이 m번 발생했을 때 2^m-1 만큼의 수열 중 랜덤한 숫자를 고르고 그 수만큼 기다린 후 전송하는 방식이다.
- 첫번째 충돌 : {0, 1} 중 선택, 2번째 충돌 : {0, 1, 2, 3} 중 선택
주변에 같은 네트워크를 쓰는 사람이 많으면 인터넷 속도가 느려지는 이유가 바로 binary backoff 때문이다. (사람이 많으면 많을 수록 길어짐)
우리가 평소에 사용하는 Ethernet은 이 CSMA/CD를 사용한다.
Local Area Network(LAN)
- 같은 서브넷을 가진 라우터를 거치지 않고 접근이 가능한 host들의 집합
Ethernet
- 유선을 사용해 LAN을 구현한 방식
- 최근에는 보통 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
- 링크 레이어의 헤더에는 dest, source address를 가지고 있는데, 이 address는 MAC address를 뜻 한다.
- MAC address는 네트워크 인터페이스를 식별할 수 있는 주소로, 48 bit를 가진 주소이다.
- MAC address는 제조사를 식별하는 24 bit와 나머지 24 bit는 제품 번호를 뜻 한다. 이 MAC address는 주민번호와 같이 바꿀 수 없는 번호이다.
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라는 장치를 두고 사용한다.
Switch는 collision domain을 분리 시켜주는 역할을 한다.
기존의 bus 방식은 2명 이상이 동시에 전송하면 무조건 collision이 발생했는데 switch를 쓰는 star 방식은 switch가 중간에 관리를 해줘 collision이 발생하지 않도록 해준다.
switch는 switch table을 통해 어떤 MAC address는 몇번 포트에 연결되어있는지 찾아서 switching 해준다.
- 이때 A -> A’, B -> A’ 으로 전송했을 때 bus에서는 collision이 발생했겠지만, switch를 이용하면 switch가 중간에서 collision이 발생하지 않게 조절해서 전송해준다.
switch table은 self-learning을 통해 table을 채운다.
- flood = 다른 모든 포트에 다 보냄
무선 / 이동 Networks
- 무선 network 또한 공기라는 공유 매체를 사용하기 때문에 개념적으론 이더넷과 거의 같다.
- 하지만 무선이기 때문에 발생하는 특징들이 있다.
- 무선 통신의 종류로는 wireless와 mobility로 나뉜다.
- Wireless : wi-fi와 같은 무선 통신
- Mobility : 모바일 휴대폰과 같이 네트워크를 넘나드는 이동 통신
- 무선 통신은 사용자에서 게이트웨이 라우터로 나가는 첫 전송만 무선이고 나머지는 유선으로 통신하기 때문에 그 첫 부분만 신경쓰면 된다.
- 무선 통신의 경우 외부로부터 보호해 줄 케이블과 같은 장치가 없기 때문에 외부로부터 간섭이 매우 심하다.
- 또 거리에 반비례해 신호 세기가 떨어지는 특징이 있다.
- 이런 특징 때문에 기존의 이더넷에서 쓰던 CSMA/CD는 사용하지 못한다. (그림에서 A는 C가 보내는 신호가 약해 collision detected가 안 됨)
AP(BSS)
- 무선 연결을 위한 장치로 주변의 무선 통신들을 switch나 라우터 등에게 보내는 역할을 한다.
- AP와 switch, router는 이더넷 케이블로 연결되어있다.
- AP들은 주기적(초당 10번)으로 주변에 자기 정보를 비컨에 담아서 브로드캐스트를 한다.
- 만약 범위 안에 들어와있는 Host들은 그 정보를 가지고 어떤 AP에 접속할지 결정하게 된다. (wifi 목록에서 하나를 선택하는 것)
Multiple Access
- 무선의 특징 때문에 CSMA/CD는 사용하지 못한다.
- CSMA/CD는 collision이 일어났다는 것을 혼자 감지할 수 있기 때문에 ACK를 사용하지 않고 통신이 가능했다.
- 하지만 무선의 경우 collision이 일어났다는 것을 혼자 감지할 수 없기 때문에 receiver에게 ACK를 받아 잘 갔는지 확인하는 것이 필요하다.
CSMA/CA
- 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는 충돌이 발생해도 용량이 큰 데이터를 멈추지 않고 보내기 때문에 그 전에 먼저 작은 단위를 보내서 확인한 뒤 데이터를 전송하는 방식이다.
- 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
출처)
[컴퓨터네트워크 - 한양대학교 | KOCW 공개 강의](http://www.kocw.net/home/search/kemView.do?kemId=1169634) |