이 글은 이화여자대학교 이미정 교수님의 2014년 2학기 컴퓨터 네트워크 강의를 기반으로 재구성한 것입니다. 삽화는 링크를 출처로, 저작권은 J.F Kurose and K.W. Ross에게 있다는 것을 밝힙니다.
network layer에서는 다음과 같은 내용들을 살펴본다.
- network layer principles
- virtual circuit, datagram network
- router의 내부
- IP
- datagram format
- IPv4 addressing
- ICMP
- IPv6
- routing algorithm
- link state
- distance vector
- hierarchical routing
- routing in the internet
- RIP
- OSPF
- BGP
- broadcast, multicast
Network Layer Principles
- host to host delivery : network layer는 transport layer에서 받은 segment를 sending host부터 receiving host까지 전달한다.
- encapsulation : transport layer에서 segment를 받으면 header를 붙여 datagram을 만든다
- decapsulation : link layer(network layer 아래의 layer)에서 datagram을 받으면 header에서 segment를 추출해 transport layer로 보낸다.
- network layer protocol은 모든 host와 router에 탑재된다.
- end system들의 network layer protocol과 core에 있는 router network layer protocol은 조금 차이가 있다. end system network layer protocol은 첫 router(gateway)까지만 전달하기 때문에 routing 기능이 약한 반면 core router network layer protocol은 routing table로, destination IP address를 읽어 어디로 보낼지 경로를 결정한다.
Network Layer의 기능
2가지가 있다.
- routing : 목적지까지 packet을 옮길 때 경로를 결정하는 기능
- forwarding : input port로 들어온 IP datagram을 어떤 output port로 보낼지 선택하고 보내는 기능을 말한다.
- routing algorithm은 destination IP address로 경로에 대한 값을 결정하고, 이를 forwarding table에 저장한다. 그러면 forwarding table을 보고 input port로 들어온 IP datagram의 IP address를 보고 적당한 output port로 내보낸다.
Network Service Model
network layer service는 개별적인 datagram에 대해 정의하냐, flow of datagram에 따라 정의하냐에 따라 달라진다. 각각의 service에서도 여러 종류가 있다.
- 개별 datagram에 정의하는 경우 : datagram delivery를 guarantee, 또는 특정 시간 내에 delivery guarantee 등.
- flow of datagram : inorder delivery guarantee, minimum bandwidth guarantee, datagram 도착 간격 guarantee 등.
Virtual Circuit & Datagram Network
network layer가 제공하는 2가지 service인 virtual circuit과 datagram network는 둘 다 packet switching 방식이다.
- virtual curcuit : network layer에서 connection service를 제공한다. 그러나 circuit switching처럼 작동한다.
- datagram network : network layer에서 connectionless service를 제공한다.
하향식 접근 네트워크 - 1. Introduction 포스팅에서 packet switching과 circuit switching에 대해 살펴봤었다.
transport layer에서 TCP는 connection service, UDP가 connectionless service였던 것처럼, network layer에서도 connection/connectionless service가 있다. 다만 transport layer의 connection/connectionless와는 조금 다르다.
- host to host service : transport layer에서는 양 끝점이 connection/connectionless를 만들었는데, network layer에서는 [network의 모든 router와 end system들의 network layer]들이 협력해서 connection/connectionless를 만든다.
- no choice : application은 TCP를 사용할지 UDP를 사용할지 결정할 수 있다. 반면 network layer의 경우 virtual circuit를 사용할지 datagram network을 사용할지 사용자가 선택할 수 없다. 구입한 network의 구현을 따라야 한다.
Virtual Circuit
source to desination path가 circuit switching처럼 작동하는 방식이다. 인터넷에서는 virtual circuit을 사용하지 않기에 크게 집중하지는 않아도 되지만 간략하게나마 살펴보자.
virtual circuit에서는 data를 내보내기 전에 call setup하고, data를 주고받은 이후에는 teardown한다.
- call setup은 경로를 결정하는 과정인데, 어떤 목적지로 call setup하는지 요청을 router로 보내면 network가 call setup의 목적지를 보고 경로를 결정해 준다.
- virtual circuit number를 할당한다. 경우에 따라 router가 resource를 할당하기도 하는데, 이러한 상황에서 virtual circuit ID가 필요하다. virtual circuit number에 state를 저장해 어떤 resource를 사용했고, 얼만큼 썼는지 저장한다.
Virtual Circuit에서 Datagram 운송 과정
virtual circuit을 사용했을 때 어떤 과정으로 datagram이 옮겨지는지 보자. 일단 virtual circuit는 아래 3가지로 이루어진다.
- path : source부터 destination까지 path
- virtual circuit number : 각 path의 모든 link에 대해 virtual circuit ID를 붙인다.
- forwarding table : [path, virtual circuit number]가 저장된다. resource를 할당하는 경우 할당한 resource와 state도 저장한다.
virtual circuit는 datagram을 전송할 때 header에 있는 full address를 사용하지 않고 virtual circuit number를 사용한다. 사용하는 이유는 full address보다 더 간단하고 빠르기 때문이다. (이 때, virtual circuit number는 link에 따라 바뀌는 것이 일반적이다.)
그러면 virtual circuit에서 어떤 과정으로 datagram이 옮겨지는지 보자.
- source host가 call setup을 하면 network layer는 첫 번째 router로 datagram을 옮긴다.
- 이후에는 network를 따라 hop to hop으로 datagram을 옮긴다.
- hop이 datagram을 받으면 이전 단계의 hop에게 "앞으로 이 virtual circuit에 속한 datagram을 보낼 때는 내가 지정한 [virtual circuit number x]로 보내라."고 한다.
- 이후 routing table을 보고, 다음 router를 결정한다.
- 2. 과정을 반복한다.
이 때, link가 바뀔 때 마다 virtual circuit number를 바뀐다. 바뀌는 이유는 다음과 같다.
하나의 virtual circuit(source부터 destination까지 path)에 대해 모두 같은 virtual circuit number를 사용하는 경우 path에 있는 모든 link가 communication해서 사용하지 않는 link 번호를 하나 뽑아야 한다. 또한 각 link가 unique해야 하므로 data의 길이가 길어지므로 overhead가 매우 커진다. 때문에 link마다 virtual circuit number를 따로따로 할당한다.
router는 [port, virtual circuit number]로 정보를 식별하기에, 어떤 port로 어떤 virtual circuit number에 해당하는 정보가 들어오는지 판별할 수 있다. 또한, 이전 단계의 router에게 virtual circuit number를 알릴 때 해당 port에서 사용하지 않는 virtual circuit number를 알려주면 된다.
Virtual Circuit Forwarding Table
virtual circuit이 동작하기 위해서는 forwarding table이 꼭 필요하다. 내부적으로는 총 4개, [incoming port, incoming virtual circuit number, outgoing port, outging virtual circuit number] column이 있다. 추가적으로 resource를 할당하는 경우 state를 보관해야 하기 때문에 이것도 forwarding table에 저장한다.
위 예시에서는 incoming port 1번으로 virtual circuit number가 12로 들어온 경우, 3번 port로 virtual circuit number를 22로 설정하고 보내는 식이다.
Virtual Circuit Signalling Protocol
virtual circuit는 call setup, maintain, teardown을 위해 ATM, frame-relay, X.25 등 router 간의 signalling protocol이 필요하다. 이 protocol들은 전화회사에서 만든 protocol이다. protocol 순서는 위 그림과 같다.
Datagram Network
virtual circuit의 경우 call setup을 걸고, ... 복잡한 과정을 거쳤다. 그러나 datagram network의 경우 call setup이 없고, router들은 segment를 받으면 destination address와 forwarding table의 내용에 따라 다음 router에게 그대로 전달하기만 한다.
protocol 순서는 위 그림과 같다. call을 걸고, 받고, 연결되면 전송하는 virtual circuit과 달리 훨씬 간단하다.
Datagram Forwarding Table
datagram forwarding table은 [destination address, output port] 2개의 정보만 있다.
앞에서도 언급했듯 routing algorithm이 destination IP address로 경로에 대한 값을 결정하고, 이를 forwarding table에 저장한다. 그러면 forwarding table과 input port로 들어온 IP datagram의 IP address를 보고 해당하는 output port로 내보낸다.
range of addresses
현재 IP address는 40억개가 넘어간다. 모든 IP address와 output link를 1:1로 매칭시킨다면 모든 router에 [모든 IP address - output link] mapping을 넣어야 한다. 그럴 만한 용량도 없고, 탐색 시간도 턱없이 부족하다. 때문에 비슷한 거리에 있는 router들을 하나로 묶어 그쪽으로 보낸다. 이 방식을 사용해 큰 주소부터 찾아갈 수 있고, 목적지에 가까울수록 더 detail한 정보로 따라가는 방법이다.
위 예시는 어떤 router의 forwarding table의 address range이다. 제일 윗줄은 200.23.16.0 ~ 200.23.23.255에 해당하는 IP address를 묶은 것을 보여준다.
Virtual Circuit vs Datagram Network
internet은 datagram network를 사용하고, 전화 등은 virtual circuit을 사용한다. 이 둘의 차이점은 end system이 다르다는 점이다.
- internet(datagram network)의 경우 : internet의 end system은 컴퓨터이므로 복잡한 일을 network edge에서 처리할 수 있다. 때문에 core에서는 packet delivery만 신경쓴다. 또한 application들의 요구사항이 전화보다는 훨씬 느슨하다.
- 전화(virtual circuit)의 경우 : end system은 전화기이므로 복잡한 일을 처리할 수 없다. 따라서 이러한 일을 network에서 직접 처리한다. 또한, 전화는 돈을 내고 사용하기 때문에 일관된 service를 제공해야할 뿐만 아니라, internet application들보다 delay나 속도 측면에서 더 엄격한 요구사항을 가진다.
network에서는 core packaging을 최소화할수록 더 빠르다. internet의 경우 속도와 초기 철학을 유지하기 위해 core에서는 packet의 전달을, edge에서는 부가적인 기능을 수행한다.
잘못된 내용이나 오탈자에 대한 지적, 질문 등은 언제나 환영합니다.
'CS > Network' 카테고리의 다른 글
[Network] 하향식 접근 네트워크 - 4. Network Layer - (3) Internet Protocol (0) | 2023.07.30 |
---|---|
[Network] 하향식 접근 네트워크 - 4. Network Layer - (2) Router의 내부 (0) | 2023.07.30 |
[Network] 하향식 접근 네트워크 - 3. Transport Layer - (2) TCP (0) | 2023.07.29 |
[Network] 하향식 접근 네트워크 - 3. Transport Layer - (1) Principles & UDP (0) | 2023.07.29 |
[Network] 하향식 접근 네트워크 - 2. Application Layer - (6) Socket Programming (1) | 2023.07.27 |