Network Layer의 기능은 2가지가 존재한다.
Forwarding
Routing
Data Plane 영역에서 Forwarding은 Routing Table에 적혀있는대로 작동한다.
Routing Table을 작성하는 것은 Control Plane 영역에서 담당한다.
Service Model
: 데이터 전송과 관련된 성능, 신뢰성 및 기타 품질 보증을 정의하는 규격
요구사항
각각의 Datagram에 대해서
일련의 Datagram flow에 대해서
아키텍쳐 | Service Model | Detail |
---|---|---|
internet | best effort | FIFO 방식을 사용한다. Bandwidth, Loss, Order 아무것도 보장 못함 |
internet | Intserv Guaranteed | Bandwidth, Loss, Order 모두 보장, but Router의 부담이 커진다. |
internet | Diffserv | Bandwidth, Loss, Order을 보장 할 수는 있음 |
ATM(Asynchronous Transfer Mode) | CBR(Constant Bit Rate) | Switch 사용. Bandwidth, Loss, Order 모두 보장 |
ATM(Asynchronous Transfer Mode) | ABR(Available Bit Rate) | 일부 보장 |
라우터는 다음과 같이 구성되어 있다.
Input Port의 기능
Destination-based VS Generalized
- Destination-based forwarding은 목적지의 IP 주소만 확인한다.
- Generalized forwarding은 IP 주소뿐만 아니라, 다른 필드의 값도 확인한다.
destination-based forwarding에서 사용하는 lookup 방식이다.
entry 가 들어왔을 때, prefix가 Destination address와 가장 길게 매칭되는 Output Port로 fowarding.
예시) 다음과 같이, 라우터에 Destination Address가 존재할 때
Entry: 11001000 00010111 00011000 10101010
Link 1,2와 둘 다 매칭되지만, 1이 더 길게 매칭된다.
➜ 1번 Output Port로 fowarding
Tenary Content Addressable Memories(TCAMs)를 사용해서 각 Destination Address 마다 비교 회로를 하나씩 넣을 수 있다.
Switching Fabric
: Input Port로 들어온 패킷을 Output Port로 switching한다.
Switching fabric 방식은 3가지 존재한다.
Interconnection network의 구현 방식은 다양하다.
⚠️ CRS Router처럼 MultiStage Switch를 다중으로 사용하는 형태도 있다.
Switching Fabric이 input port 속도보다 느리면 Input Port에 큐를 설치한다.
Switching Fabric을 통해 Forwarding 받은 패킷을 큐에 저장한 뒤, 다음 link로 내보낸다.
Transmission Rate보다 Fabric으로부터 수신하는 속도가 빠를 때 Output Port의 큐에서 Buffering 한다.
큐가 가득차면 데이터를 Drop한다.
Congestion을 알리기 위한 Marking 작업을 한다.
FCFS(First Come First Served)
multiple queue를 사용해서 우선순위를 구분한다.
Multiple Queue를 반복적으로 순환한다.
Generalized Round Robin 방식이다.
각 큐마다 가중치 Weight를 부여하고, Weight가 Priority 역할을 한다.
format | Detail |
---|---|
Version | IPv4: 0100 IP |
Head Leangth | Option + 고정헤더의 값을 나타낸다. 고정헤더는 20 Bytes 데이터의 시작이 언제인지 알려준다. |
TOS(Type Of Service) | Intserv. Diffserv 등 서비스 모델을 표기 |
Length | Datagram의 사이즈는 최대 2^16-1이다. Ethernet 프레임의 사이즈에도 제한이 있으므로 보통 크게 만들지는 않음 |
TTL | 데이터그램이 살아있을 수 있는 시간이다. hop 수로 카운팅한다. |
Upper Layer | 상위 계층의 프로토콜이 무엇인지를 알려준다. |
Header Checksum | Header의 에러를 체킹할 수 있는 비트이다. |
Options | time stamp, record, source route 등의 기능 |
Fragmentation 관련 bit들
Datagram의 사이즈가 큰 경우, 여러개로 나눠서 Fragment로 만든다.
각 Fragment는 독립된 Datagram으로 여겨진다.
- Fragment는 순서가 뒤바뀌어서 도착할 수 있고 다른 경로를 통해 이동할 수 있다.
- 하나의 Datagram을 나눈 Fragment들은 source IP가 같다.
- Fragment를 합칠 때 identifier 값이 필요하다.
- offset은 Fragment의 순서를 나타내기 위해 존재한다.
- flag에는 more라는 플래그가 존재하는데, more가 0인 Fragment는 가장 끝 Fragment임을 의미한다.
TTL
- 데이터그램이 살아있을 수 있는 시간이며, hops 수로 카운팅한다.
- Forwarding할 때 TTL 값을 감소시킨다.
- 0이 되었을 때도 목적지가 아니면 ICMP(Error를 source에 전송)
- 나한테 제일 가까운 서버를 찾을 때도 사용한다.
Upper Layer
- header 다음에 존재하는 데이터는 TCP segment 또는 UDP Segment이다.
- Upper Layer bit는, 상위 계층의 프로토콜이 무엇인지 알려준다.
Header Checksum
- 16 bit로 Header의 에러를 체킹할 수 있다.
- Data에 대해서는 Error Check를 하지 않는다!
- 라우터한테는 굉장히 Overhead가 큰 bit이다.
- TTL이 변경되면 Header Checksum을 Router가 바꾸어 줘야 한다.
➜ IPv6에서는 Header Checksum을 삭제했다.
Options
인터넷의 기본 routing은 hop-by-hop이지만, Option bit를 설정하여 바꿀 수 있다.
- 옵션에 source route을 지정하면, 특정 라우터를 반드시 거쳐가도록 설정할 수 있다.
- ex) a,b,c,d,가 있을 때 a와 c는 거쳐서 가라
- 또는 a,b,c,d를 모두 거쳐서 가라.
- IPv6에서는 없어졌다.
IP Address는 32 bit 식별자이다.
Original IP 주소 체계는 주소를 Network와 Host Portion으로 구분해서 classful 하게 사용했다.
Network Portion: 네트워크 구분
Host Portion: 동일 네트워크 내 디바이스 식별
이렇게 사용하다보니, class B의 IP 주소가 바닥나는 상황이 발생했다!
➜ 다른 방법을 찾자
CIDR(Classless InterDomain Routing)
: 클래스 대신 subnet을 사용하는 IP 주소 체계
현재의 IP 주소 체계: subnet + host
주소를 어떻게 부여받을 것인가?
host와 network는 각각 다른 방식으로 주소를 부여받는다.
host가 주소를 부여받는 방법
Network가 주소를 부여받는 방법
IP 주소 부여의 계층
host <- DHCP <- ISP <- ICANN
Route aggregation
aggregation 한 IP 주소를 상위 라우터에 전달한다.
상위 계층의 router에서는 목적지와 가장 길게 매치되는 IP 주소로 보낸다.
만약 ISP를 이동한다면 상위 Router에 정보를 보내줘야한다.
new Entry가 Routing Table에 생성된다.
NAT(Network Address Translation)
: 공인 IP로 들어온 패킷을 사설 IP 주소로 변환해서 전달하는 라우터의 기능
Globally Uniuqe IP address를 각 PC 마다 가지기에는 IP 주소가 부족하다.
➜ 라우터 하나만 Globally Unique address를 받고, locally Unique address를 각 PC에 할당한다.
그럼 외부에서 local PC로 데이터를 보낼 때 공인 IP를 가진 라우터로 패킷을 전송하는데, 라우터는 무엇을 보고 local PC를 특정하는가?
➜ Port 번호를 사용한다.
내부 ➜ 외부로 패킷을 보내는 경우
【 source IP address, source port number】 를
➜ 【 router IP address, new port number】 로 변경한다.
외부 ➜ 내부로 패킷을 보내는 경우
【 router IP address, new port number】 를
➜ 【 Dest(Network 내부) IP address, Dest port number】 로 변경한다.
라우터는 3계층까지만 보지만, Port 번호는 4계층에 존재한다.
➜ end-to-end violation이 발생한다.
∴ IPv6를 사용해야 한다.
IPv6
: IPv4의 주소공간 문제를 해결 + 헤더 사이즈 40Byte로 고정해서(Option 필드를 삭제해서) 속도 개선
format | Dtail |
---|---|
Version | IPv6: 0110 |
Flow Label | Speical handling을 요구하는 일련의 패킷들을 처리해준다. |
Priority(Traffic Class) | IPv4의 TOS Intserv. Diffserv 등 서비스 모델을 표기 |
Payload Length | PayLoad의 길이 |
next header | IPv4의 Upper Layer 상위 계층의 프로토콜이 무엇인지를 알려준다. |
Hop Limit | IPv4의 TTL |
payLoad에 extenstion header가 있으면 next header도 같이 들어있다.
고정 헤더의 크기는 IPv6가 크지만, IPv4의 field가 훨씬 많다.
즉 기능이 많다.
➜ 라우터가 할 일이 많다.
∴ IPv6에서는 크기가 커지고 속도가 빨라졌다.
하루아침에 모든 Router를 IPv6로 바꿀 수는 없다.
∴ 아직 대부분의 router들이 IPv4만 지원한다.
Tunneling
: IPv6로 들어온 Datagram을 IPv4 로 인식되도록 만드는 기술
SDN(Software Defined Network)
: 네트워크를 중앙에서 관리하고 제어할 수 있도록 하는 네트워크 아키텍처
SDN을 사용하면, Generalized Forwarding이 가능하다.
Original(Destination-based Forwarding): IP의 dest를 보고 루트 결정
Generalized Forwarding: header의 여러 필드를 보고 루트 결정
⚠️ 이때, header는 4계층 뿐만 아니라 어느 계층도 될 수 있다.
OpenFlow는 SDN을 구현한 프로토콜이다.
source host와 dest host사이의 path에서 Forwarding 뿐만 아니라 추가적인 기능을 수행하는 기기들
다음과 같은 기능들도 Middlebox의 예시로 볼 수 있다.
Computer Networking, A Top Down Approach - JAMES F.KUROSE