본 게시물은 이석복 교수님의 네트워크 강의를 수강하며 작성한 강의노트와 추가 공부한 내용을 바탕으로 작성하였습니다.
- 참고 강의 및 사이트
호스트가 서버로 패킷을 보내려면 가장 먼저 Gateway Router에게 보내게 된다. 그동안 상위 계층을 살펴보며 패킷을 라우터로 보내는 것을 개념적으로 다루다보니, 마치 host와 gateway를 연결하는 전용선이 있는 것처럼 느껴질 수 있었으나 이런 전용선은 존재하지 않는다.
broadcast medium이 존재해서 연결된 host들이 패킷을 보내면 마치 한 공간에서 사람이 말하면 모두가 들을 수 있듯, 이 매체를 통해 전체에게 전달되며 dest address에 부합하는 대상만 패킷을 수용하게되는 것이다.
같은 공간에서 여러 명이 동시에 이야기를 하는 상황을 떠올려보자. 여러 명의 이야기가 섞이면 어느 한 명의 말도 제대로 듣고 이해할 수 없다. Link Layer에서도 마찬가지다. 같은 broadcast medium에 연결된 Host들이 동시에 전달하고자 하는 내용(frame이라 한다)을 medium에 보낸다면 충돌(collision)이 발생하여 어느 frame도 제대로 사용할 수 없게 된다.
따라서 링크 계층의 핵심은 이러한 충돌이 발생하지 않게, 또 충돌이 발생했을 때 해결하는 것이다.
Multiple Access Protocol
링크 계층에서 주 목적은 frame을 주고 받을 때 같은 domain에 있는 host들이 동시에 frame을 보내지 않도록 하는 것, 즉 충돌이 나지 않게 하는 것이다.
이상적인 multiple access protocol이란?
- 한사람만 쓰려고 할 때, broadwidth를 모두 사용해야 한다.
- m개의 host가 사용하려 할 때, broadwidth/m을 사용해야 한다.
- 분산적으로 컴퓨팅이 되어야 한다.
- 동작이 단순해야 한다.
위 조건들을 충족하기 위해 많은 MAC 프로토콜이 제안되었으며 그 중 크게 3가지 종류를 아래에서 살펴볼 것이다.
Channel Partiioning
TDMA : time division multiple access
host별로 전송할 수 있는 시간을 할당해서 그 host의 시간이 돌아왔을 때만 전송할 수 있게 한다.
FDMA : Frequency division multiple access
주파수를 분할 배정하여 해당 주파수만 이용하는 방법이다.
⇒ Channel Partioning에 해당하는 두 방법 모두 충돌은 안나지만 자원이 낭비되는 문제점 발생한다.
Random Access
현실에서 많이 쓰이는 방법으로 랜덤하게 필요한 연결이 있을 때 연결하는 방식이다. 충돌을 어떻게 탐지하고 처리할 것인지가 이 방법의 핵심이다.
CSMA : Carrier sense multiple access
Listen Before Transmit : 전송 전 다른 frame이 전송 중인지 들음으로써 확인 후 전송한다.
먼저 전송했지만 다른 host가 아직 도달 전인 frame을 듣지 못하고 frame을 전송하는 경우가 발생한다. 이는 proportion delay로 인해 발생하는 문제로, 빛의 속도는 조절할 수가 없어 충돌이 불가피하다. 따라서 충돌로 인한 피해를 줄이기 위해 아래의 “CSMA/CD”가 나오게 됐다.
CSMA/CD
충돌이 감지되면 binary backoff방식을 이용해 충돌에 대처한다. 즉, 충돌이 감지되면 잠시 전송을 멈추고 다시 frame을 전송하는 것이다. 여기서 재전송을 할 때의 규칙은 다음과 같다.
binary backoff
m번의 충돌이 발생했다면 {0, 1, 2 , …. , 2^m-1} 중의 랜덤하게 숫자를 골라 그 시간만큼 대기 후 재전송을 한다.
충돌이 많을 수록 대기 시간이 길어질 확률이 높아지는 방식으로, 충돌이 여러번 났다는 것은 그만큼 frame을 전송 중인 host의 수가 많다는 의미이므로 많이 기다리도록 하기 위함이다.
이러한 backoff로 인해 실제 사용자가 체감하는 지연시간이 길어진다는 단점이 있다.
Taking Turns
polling(여론조사)
master node를 통해 관리한다. master node에서 오류가 날 경우 전체가 피해를 보는 문제가 발생할 수 있어 현실에서는 사용되지 않는다.
token passing
token을 소유한 host가 보낼 frame이 있다면 전송하고 없다면 다른 host에게 token을 넘기는 방식이다. token을 소유한 host만 frame을 전송할 수 있어 충돌은 없지만 이 token을 분실하는 경우 전체에 피해가 가므로 사용되기 어렵다.
Ethernet
이더넷은 Physical topology로 유선 상황이며 위에서 살펴본 CSMA/CD를 사용한다. 충돌이 발생하지 않으면 전송이 성공했다고 봐도 무방하다고 보며 Collision detect 상황 외에는 재전송에 대한 피드백이 따로 없다. 따라서 Collision Detection가 100%가 되어야 한다.
네트워크 강의를 들으며 재전송은 TCP에서도 다뤘었다. 그렇다면 이더넷에서의 재전송과 TCP에서의 재전송은 어떤 차이가 있을까?
TCP의 재전송은 Source와 Server 사이의 관계에서 재전송을 하는 것으로 보냈는데 ack가 오지 않았을 때 발생한다.
이더넷에서의 재전송은 Link Layer에서 하나의 홉 사이의 문제를 다룬다. 이왕이면 Link에서 재전송이 발생하는 것이 유리하다. 따라서 Collision Detection이 완전하게 이뤄지는 것이 매우 중요한 것이다.
지금까지 살펴본 Collision Detection 방식으로는 충돌을 감지하지 못하고 놓치는 상황이 발생할 수 있다. 아래와 같은 상황에서 어떻게 하면 충돌을 감지할 수 있을지 고민해보자.
상대편으로 도달하기 직전에 충돌이 발생하였으나 이미 Frame을 모두 보내어 더이상 Frame 전송을 하고 있지 않은 상황을 가정해보자. 이럴 경우 이미 보내고 있던 Frame이 종료되어 충돌을 감지하지 못하게 된다.
이럴 경우, Frame을 조금만 더 길게 보냈다면 충분히 충돌을 감지할 수 있었을 것이다. 따라서 Minimum Frame Size를 지정(64byte)해서 위와 같이 Proportion Delay로 인해 감지를 실패하는 상황을 방지하고 있다.
MAC (Medium Access Control)
앞 24bit : 제조사 번호
뒤 24bit : 제조사의 고유번호
MAC 주소는 사람의 정보에 비유하자면 주민번호에 해당된다. 언제 어디서도 바뀌지 않는 다는 면에서 공통점이 있다. 그 외에 Host name은 이름, IP address는 주소에 비유할 수 있다.
ARP(Address Resolution Protocol)
전송계층에서 Gateway의 IP주소를 DHCP를 통해 알 수 있었던 걸 다뤘었다. 예를 들어 구글과 통신한다면 구글로 향하는 IP 패킷을 만든다. 이 IP패킷의 Source Address는 자기 자신의 IP주소, Destination Address는 DNS가 알려준 구글의 IP주소를 적게 된다. 이렇게 완성한 IP 패킷이 MAC frame의 data부분에 들어오고 frame의 Source는 자기 자신의 MAC주소, Dest는 gateway의 MAC주소를 적어야 한다. 이 때 Gateway 라우터의 MAC주소를 어떻게 알까?
현재까지 다룬 방식 내에서는 MAC주소를 알 방법이 없다. 따라서 IP주소를 활용해 MAC주소를 찾는 과정이 필요하며 이를 위해 ARP Table이라는 것을 활용한다.
ARP Table이란 IP주소와 그에 해당하는 MAC주소를 mapping하여 적어놓은 Table이다. 이 테이블은 다음과 같은 과정으로 채우게 된다.
- ARP Request Frame을 Broadcast(모두에게)로 전송한다.
- ARP Request를 받은 Gateway가 IP패킷을 열어보고 자기 자신이면 MAC주소로 응답한다.
- 2번의 응답을 받은 Host는 ARP테이블을 채운다.
- 위 과정으로 채운 테이블은 2시간 이내에 사라지며 다시 통신이 필요해지면 위 과정 반복한다.
Addressing: routing to another LAN
- Forwarding table을 통해 출력 포트 확인
- ARP table을 통해 MAC주소 확인
- frame의 헤더(MAC src, MAC dest)를 떼어내고 새로운 주소를 붙이는 과정을 반복하며 이동
- packet에서 변화는 것은 TTL 뿐
Switch
Switch는 링크 계층 프레임을 수신해 이 프레임을 수신받아야할 출력 링크로 전달한다. Collision Domain을 분리시키는 역할을 한다. 단, Host들은 이 스위치의 존재를 인식하지 못한다. 따라서 원래 하던 방식대로 CSMA를 실행하게 된다.
그럼 이 Switch는 프레임의 도착지가 존재하는 링크가 어디인지, 어떤 링크로 해당 프레임을 보내야 하는지 어떻게 알까?
바로 Switch에 있는 switching table을 통해 dest mac주소를 보고 outport를 알아낸다.
또한 이 switching table은 아래와 같이 자가학습(self-learning)을 통해 구축한다.
- 인터페이스로 수신한 각 프레임에 대해 아래 정보를 기록한다.
- 프레임의 출발 주소 필드에 있는 MAC 주소
- 프레임이 도착한 인터페이스
- 현재 시간
- 해당 프레임의 목적지(A’)와 연결된 출력 포트를 모르므로 모든 포트에 해당 프레임을 보낸다.
- 이후 A’이 보내는 프레임이 오면 스위칭 테이블에 기록해두고 이후 A’으로 보내는 프레임이 또 오면 그 때는 해당 포트로만 보낸다.
Switch vs Router
Router
네트워크 계층 주소를 사용해서 패킷을 전달하는 store and forward 패킷 스위치이다.
- 장점
- 네트워크에 중복된 경로가 있어도 패킷이 순환하지 않는다.
- 출발지와 목적지 간의 최상의 경로를 사용한다.
- 브로드캐스팅 폭주에 대한 방화벽 보호 기능이 있다.
- 단점
- 플러그 앤 플레이가 아니다.
Switch
MAC 주소를 사용해서 패킷을 전달하는 store and forward 패킷 스위치이다.
- 장점
- 플러그 앤 플레이 장치이다.
- 라우터는 3계층까지 프레임을 처리해야 하는 반면, 스위치는 2계층까지만 프레임을 처리하면 되므로 높은 패킷 여과 및 전달율을 가진다.
- 단점
- 한 호스트가 문제가 생겨 브로드캐스팅 폭주 시 대비할 수 없다.
- 프레임이 순환할 수 있다.
'Learning-log -CS > Network' 카테고리의 다른 글
(컴퓨터와 네트워크 / 이석복) 멀티미디어 네트워크 (Streaming Stored 방식, DASH) (0) | 2024.03.27 |
---|---|
(컴퓨터와 네트워크 / 이석복) 무선이동네트워크 (IEEE 802.11, LAN, AP, BSS, CSMA/CA, RTS, CTS, Frame, SNR) (1) | 2024.03.01 |
(컴퓨터와 네트워크) 네트워크 계층 - 라우터 알고리즘(Link State, Distance Vector) (1) | 2024.02.25 |
(컴퓨터와 네트워크) 네트워크 계층(IP, DHCP, ICMP) (1) | 2024.02.15 |
(컴퓨터와 네트워크) TCP (특징, 구조, 흐름제어, 혼잡제어) (1) | 2024.01.23 |