
Physical Layer & Datalink Layer
Datagram Switching, Packet Switching, Virtual Circuit,…
… Message-Switched 방식은 Waiting이 있을 수 있고, Circuit-Switched 방식은 시간에 따라 보내기 때문에 Waiting이 없었다. 대화 트래픽에서 Waiting이 있으면 안되기 때문에 대화 트래픽은 Circuit로, 파일 트래픽과 같은 데이터 통신에서는 Message로 많이 사용한다.
이런 Message switching에는 단점이 존재하는데, 보내는 데이터의 크기를 제한하지 않았다는 것이다. 데이터의 크기가 너무 크다면, 스위치의 buffer에 데이터가 들어가지 않을 수 있고, 이 데이터를 전송하는 과정에서 transmission delay가 너무 길다보니 다른 데이터들을 전송하기 힘들다는 점이 존재한다.
이것을 해결하기 위해서 Packet이라는 개념을 도입하여 해결…Message Switching
여기서 Packet은 Layer별로 구분하면 Physical Layer에서는 Frame, Datalink Layer에서는 Packet 혹은 Datagram이라고 칭한다.
이후 Transport Layer에서 배울 Packet은 Segment라고 명명한다.
Network Layer가 하는 일은 상위 단에서 받은 Segment를 Receive host, 즉 리시버에게 전달하는 것이 목적이다.
이때, 네트워크 프로토콜에 따르면 엔드 호스트들은 Physical Layer부터 Application Layer까지 모두 구현이 되어있는데, 라우터와 같은 중간 장치들은 Physical Layer부터 Network Layer까지만 구현되어있다.
라우터에서 Datagram을 받으면 Network Layer에서 하는 일은 이 Packet을 어느 인터페이스로 보낼 것인가를 결정한다. 이것을 라우팅이라고 한다.
Network Layer에서는 두 가지 기능이 존재한다.
데이터가 Sender에서 Receiver까지 이동하는 것을 말한다. 이 Forwarding을 다루는 곳이 Data Plane이라는 곳에서 관장하는데, 여기서는 실제 데이터를 전송하는 역할을 한다.
Sender에서 Receiver로 가는 최적의 경로를 선택하는 것을 말한다. 라우팅이 가능해지기 위해서는 각 라우터마다 이 주소로 가는 패킷은 어느 인터페이스로 나가야 한다! 라고 알고 있어야 한다. 이 각 하나하나를 Routing Table Entry라고 한다고 했다. 이 Routing Table을 보고 어느 길이 더 좋은 지를 판단한다.
이 Routing Table이 어떻게 만들어지는가에 대해서는 추후에 배울 예정이다. 하나는 일반적인 Routing Algorithm을 사용하는 것이고, 또 하나는 SDN(software-defined networking)이라는 서버를 사용하는 방법이 있다.
이 Routing Table이 만들어지는 과정은 실제 데이터를 보내는 과정이 아니기 때문에 Overhead로 분류된다. 이 Overhead인 라우팅을 다루는 것은 Control Plane에서 담당한다.
Packet이 여러 개가 전송되어 Channel을 통해 Sender에서 Receiver로 이동할 때, 어떤 서비스가 필요할까? 에 대한 고민이 필요하다. 여기서 서비스란 어떤 점이 필요할까? 라는 관점으로 보면 쉽다. 더 쉽게 표현하면 희망 사항 정도로 인식하면 되겠다.
먼저 Packet 하나가 잘 도착하는 지에 대한 관점과 그 Packet 하나가 잘 갈 수 있다고 할 때, 여러 Packet들을 보낼 때는 이 흐름이 잘 도착할 수 있는가를 고려해야 한다.
in-order packet delivery
guaranteed minimum bandwidth to flow
restrictions on changes in inter-packet spacing
Jitter는 데이터 전송에 있어서 시간적인 변동성을 나타내는 용어이다. 통신 네트워크에서 데이터 패킷이 전송되는 시간 간격의 변동을 의미하는데, 이 시간 간격의 변동이 크면 클수록 Jitter가 높다고 표현힌다.
ex) 데이터를 순차적으로 보냈는데, 순서가 일정하게 도착하지 않거나, 도착 시간이 제각각 걸려서 도착한다면, 화면이 깨지거나 음성 신호가 변조되는 등의 오류가 생긴다.
`발신자가 보낸 순서대로 수신자가 받지 못하는 경우 혹은 데이터를 보낸 시간 간격과 받는 시간 간격이 달라질 때`
그러나, 실제로 인터넷에서 제공하는 서비스는 Best effort 서비스이다.
놀랍게도 이 서비스는 앞서 말했던 Service들을 하나도 지원하지 않는다. 즉, 보내려고 노력하지만, 내가 못 보내면 어쩔 수 없다 라는 개념이다.
❌ 패킷이 성공적으로 리시버까지 도착하는 것을 보장하지 못함.
❌ 일정 시간 내에 패킷이 도달하는 것도 보장해주지 못함.
❌ 순서에 맞게 패킷이 도착하는 것도 제공하지 못함.
❌ 일정 수준 이상의 Bandwidth도 보장해주지 못함.
❌ Jitter도 발생할 수 있다. Jitter가 발생하지 않는다는 것을 보장하지 못함.
그래서 이 서비스에 부가 기능들을 두어 위에서 보장해주지 못하는 서비스들을 제공하는 방향으로 네트워크는 진화되고 있다.
ps) 5G, 6G에서는 네트워크에서 부가적으로 해줘야 되는 기능들, 요구사항 등을 쭉 정해놓고 그것에 대한 프로토콜 정의, 라우터에 대한 정의들을 하는데 이것을 TSN(Time Sensative Network)라고 한다.
Mac address라고도 불리며 Physical Layer과 Datalink Layer에서 사용하는 주소이다. 이 Physical Layer과 Datalink Layer를 묶어 Underlying physical networks라고 한다.

LAN의 경우에서 각각의 네트워크에 접속하기 위해서는 네트워크 인터페이크 카드 안에 있는 MAC address라는 것이 들어가있다. 이 주소는 48비트로 이루어져있고, 데이터를 보낼 때 Destination MAC address와 Source MAC address를 넣어 자신의 주소가 아니라면 무시하고 자신의 주소와 일치하면 데이터를 받는다.

Network Layer에서 사용하는 주소이다.
위에서 설명한 MAC address의 경우, Physical 단에서 사용되는 주소이기 때문에, 다른 네트워크들과는 상호작용하지 않는다. 다른 네트워크와 상호작용할 때는 우리가 전화번호를 사용하여 멀리 있는 사람과 전화하듯 네트워크에서 사용하는 주소를 사용해야 한다.
이때, 서로 다른 네트워크끼리의 통신이 가능하려면 네트워크들을 연결해주는 장치가 있어야 한다. 이 장치를 Router라고 하는 것이고, 이 네트워크 단에서 사용하는 주소가 Internet address, 즉 IP이다. IP는 인터넷에 접속된 host들을 정의하기 위한 주소이며, 전세계에서 유일해야 한다는 특징이 있다.
IP는 32 bit로 구성되어있다.
Mac Address는 48bit, IP Address는 32bit
정리해보자면, IP는 다른 네트워크로 데이터를 보내기 위해 인터넷에 접속하기 위한 주소이고, 같은 네트워크 안에서는 Physical address를 사용하여 찾아간다.
Transport Layer에서 사용하는 주소이다. 자세한 내용은 추후에 다룰 예정이다.


Bridge : Data link layer에서 사용하는 서로 다른 비슷한 특성을 갖고 있는 네트워크를 연결하기 위해 사용함.

Router : 서로 다른 네트워크를 연결하기 위한 장치로 보통 하드웨어로 구성하여 속도를 빠르게 만든다.


IP address는 각각의 호스트나 라우터의 인터페이스를 고유하게 정의한 32bit의 id이다. 즉, 인터페이스마다 다른 주소를 가진다는 말과 같다. 이렇기 때문에 장치들은 하나 이상의 주소를 가질 수 있다. 하지만, IP는 고유한 값이기 때문에 두 개의 장치가 같은 주소를 가질 순 없다.

이때 host와 router는 분명한 차이를 가진다. Router는 인터페이스가 있으면 한 인터페이스로 들어온 데이터를 다른 인터페이스로 전달해주는 기능이 있고, host는 이러한 기능이 없다.
IP는 다음과 같은 구조를 가지며, 두 부분으로 나뉜다.

Netid : 접속되어 있는 네트워크를 정의하기 위한 부분이다.
Hostid : 네트워크 내에서 특정 host를 정의하기 위해 사용하는 부분이다.
이 주소는 32 bit로 이루어진다고 했다. 하지만, 1000101001010011010001… 이런 식으로 정의되어 있다면 읽기에 어려움이 생길 것이다. 이걸 해결하기 위해 10진수로 바꾸어 가시성을 높인다.

다음과 같이 8bit씩 나누어 4개의 10진수로 IP 주소를 나타낸다. 이렇게 사용하는 것을 Doted Decimal notation이라고 한다. 이걸 좀 더 직관적으로 사용하는 것이 www.google.com 과 같은 방식의 Domain Name을 사용하는 방식이 된다.
이런 IP address들을 무분별하게 사용할 수 없으니 좀 더 그룹화하여 몇 개의 군으로 나누었다. 설계 당시 회사들을 생각해봤을 때, 대기업은 기업의 수는 적지만, 사원의 수가 많고, 소기업은 기업의 수가 많고 사원의 수가 적다는 특징을 고려하여 주소 체계를 만들었다. 이걸 토대로 대기업을 위한 IP 군, 중소기업을 위한 IP군, 소기업을 위한 IP군 이렇게 나누어보았다.
이를 위해 기업의 수는 Netid로, 사원의 수는 hostid로 표현하여 군을 나누었다.
또한, Broadcast address(모든 대상의 주소), Unicast address(특정 대상의 고유한 주소)와 대비되는 Multicast address(특정 조건을 만족하는 host의 주소)들은 여러 개가 발생할 수 있기 때문에 이 많은 Multicast address들을 위한 군을 따로 만들고, 마지막으로 미래에 사용하게 될 IP 주소군을 따로 만들어두었다.
그러면 총 대기업, 중기업, 소기업, Multicast address, Future use address 이렇게 5개를 정의하기 위해서는 3bit로 이 5개를 구분할 수 있다. 그러나, 3bit로 5개를 표현해버리면 표현 가능한 수 8 중에 5까지만 사용되고 나머지 3개는 할당받지 못한다. 이러면 전체 비트(32bit 중 3비트를 빼고 29bit라고 했을 때) 2^29인 거의 4억 개 중에서 5/8만 사용 가능하고 3/8은 사용되지 못하고 낭비되게 된다.
이런 낭비가 발생하지 않도록 하는 방법은 3bit를 고정된 값으로 소비하는 것이 아니라, 즉 0이라는 수를 표현하기 위해 000을 사용하는 것이 아니라 그냥 0만 사용하고 나머지 31bit는 주소를 표현하는데 사용하면 낭비가 되지 않을 것이다. 그래서 0은 0, 1은 10, 2는 110, 3은 1110, 4는 1111로 표현하여 5개를 모두 낭비없이 구별할 수 있게 할 수 있다.

이렇게 되면 A 클래스는 대기업을 위한 군, B 클래스는 중기업을 위한 군, C 클래스는 소기업을 위한 군이 되고,
D 클래스는 Multicast address들을 위한 군, E 클래스는 미래를 위해 남겨둔 군이 된다.
이때, Class A는 0이라는 1bit로 시작한다. 때문에 Netid는 7bit만 사용하기 되어 2^7개의 네트워크와 2^24개의 host가 이 Class A에 접속할 수 있다.
이걸 정리해보면 다음과 같다.
| 클래스명 | 접속 가능한 네트워크의 수 | 접속 가능한 host의 수 | 사용 가능한 IP주소의 수 |
|---|---|---|---|
| A | 2^(8-1) = 2^7 | 2^24 | - |
| B | 2^(16-2) = 2^14 | 2^16 | - |
| C | 2^(24-3) = 2^21 | 2^8 | - |
| D | - | 2^(32-4)=2^28 | - |
| E | - | - | 2^(32-4)=2^28 |

여기 그림에서 2를 빼는 이유는 추후에 설명할 예정이다.
그래서 클래스는 다음과 같이 IP주소의 앞쪽 bit를 보고 구분할 수 있다.

이렇게 되면 Dotted Decimal notation으로 IP 주소를 표현했을 때,
| 클래스명 | 첫 부분의 숫자 | 범위 |
|---|---|---|
| A | 0~127 | 0.0.0.0 ~ 127.255.255.255 |
| B | 128~191 | 128.0.0.0 ~ 191.255.255.255 |
| C | 192~223 | 192.0.0.0 ~ 223.255.255.255 |
| D | 224~239 | 224.0.0.0 ~ 239.255.255.255 |
| E | 240~255 | 240.0.0.0 ~ 255.255.255.255 |
가 된다.