네트워크 계층이란?
지금까지 살펴본 전송 계층에서의 관점에서 생각해보면, 네트워크란 복잡한 시스템이기 때문에 이 시스템을 잘 디자인하고 관리할 필요성이 있어 계층화시켜놓은 것이 네트워크 계층이라고 볼 수 있습니다. 따라서 상위 계층으로 갈수록 개념적이고 하위 계층으로 갈수록 디테일합니다.
애플리케이션 계층을 고려할 땐 Client와 Server가 request와 response를 주고 받는다고 할 때 데이터 유실을 고려하지 않았습니다. 이후 전송 계층에서 패킷 유실 상황에 대한 대처를 다루었습니다. 마찬가지로 전송 계층까지는 어떤 경로로 세그먼트가 가는지에 대해서는 다루지 안았습니다. 그 부분에 대해 네트워크 계층에서 살펴볼 수 있습니다.
네트워크 계층은 패킷을 목적지까지 배송시키는 일을 책임집니다. 네트워크 계층에서 이러한 일을 하는 프로토콜은 IP 인터넷 프로토콜이 있습니다.
네트워크 계층에서는 이 IP 프로토콜과 라우터들에서 어떤 방식으로, 어떤 경로로 패킷을 전달할 지에 대해 논하는 라우팅 알고리즘을 핵심적으로 살펴볼 것입니다.
네트워크 계층이 하는 일
네트워크 계층의 역할을 간단히 말하자면, source 부터 destination 까지 어떤 경로로 데이터를 보낼 것인지에 대한 것을 다룹니다.
그리고 네트워크 계층에는 라우터라는 장비가 있습니다.
라우터에서 하는 일
라우터를 쉽게 말하자면, 패킷이 들어오면 목적지의 방향으로 전달해주는 역할을 수행하는 장비입니다. 실제적으로 라우터에서 하는 일은 포워딩과 라우팅의 두 가지가 있습니다.
1. 포워딩
특정 목적지를 향하게 하기 위해서, 어디로 가야하는 지에 대한 정보가 적혀있는 local forwarding table을 보고 판단해서 목적지의 방향으로 전달하게 됩니다. 이 작업을 포워딩이라고 합니다. 들어온 패킷의 목적지 주소와 포워딩 테이블의 entry를 비교해서 entry의 link로 보내는 것을 말합니다.
2. 라우팅
포워딩을 위해서 포워딩 테이블이 필요합니다. 라우팅 알고리즘을 통해 포워딩 테이블을 만들어 주는 것을 라우팅이라고 합니다. 포워딩 테이블을 모든 목적지별로 관리하면 너무 테이블이 커지므로 주소 범위로 포워딩 테이블을 관리하게 됩니다.
라우터에서 패킷을 처음 받았을 때 하는 과정이 processing delay (패킷의 목적지를 보고 어디로 가야할 것이며, 헤더를 분석해서 에러 여부를 판단)이라는 작업입니다. 패킷을 받아서 Network 계층까지 끌어 올려 이 작업을 계속 반복하는 것입니다.
IP : Internet Protocol
Internet Protocol 은 송신 호스트와 수신 호스트가 패킷 교환 네트워크에서 정보를 주고받는 데 사용하는 규약이며, 네트워크 계층에서 가장 널리 사용되는 Protocol 입니다. 보편적으로 사용되는 체계는 IPv4, IPv6 가 있습니다.
IP datagram format
IP Datagram이란, Network Layer에서 교환되는 각각의 패킷 구성을 의미합니다. Datagram의 통신은 다음과 같은 Network Layer의 특성을 따르게 됩니다.
- 사전에 경로가 설정되는 것이 아니라, 각 노드에서 Routing 과정을 통해서 경로가 설정
- 각 패킷들은 독립적으로 처리, 순서에 무관하게 전달
- 패킷의 목적지가 같더라도, 항상 같은 경로는 보장되지 않음.
이 특성을 유지하기 위한 Datagram의 몇 가지 중요한 헤더를 살펴볼 수 있습니다.
IP 프로토콜 헤더 정보
1. source IP address, destination IP address
메세지를 생성해서 보내는 사람의 IP주소, 받는 사람의 IP 주소를 나타냅니다.
2. Time To Live (TTL)
처음에 값을 주고 하나의 라우터를 거쳐갈 때마다 -1씩 감소하는 값입니다. 만약 TTL 값이 0이 되면 UDP는 해당패킷을 바로 버리고, TCP는 송신자에게 재전송을 요청합니다.
TTL은 간혹 패킷이 무한루프에 빠지는 상황 방지하기 위함입니다. Network Layer의 3번 특성상, 항상 같은 경로를 따르지 않기 때문에, 운이 나쁘면 어떤 패킷은 계속 라우터들을 돌고 있을 수도 있습니다. 이런 불필요한 트래픽을 줄이기 위해서 TTL을 Header에서 사용하는 것입니다.
3. upper layer
수신자가 받은 패킷이 TCP인지 UDP인지 판별하여, TCP 혹은 UDP 중 어디의 Transport Layer로 올릴지 결정하기 위해 필요한 Header입니다.
4. data
data 부분엔 TCP 혹은 UDP 세그먼트가 들어갑니다.
5. Checksum
매 Router 마다 Checksum 을 계산해, 에러를 검출하기 위함입니다.
6. Ver
IP protocol의 버전을 나타냅니다. (IPv4 or IPv6)
7. length
패킷 총 길이를 나타냅니다.
packet의 최소 단위는 40byte: packet header(20byte) + segment header(20byte) 입니다. 그래서, TCP/IP 프로토콜은 기본적으로 40바이트의 오버헤드가 발생합니다. 실제로 떠돌아 다니는 패킷의 대다수를 차지하는 ACK 같은 경우는 40바이트씩만을 가지고 있습니다.
IPv4 Address
IP Address는 쉽게 말해 컴퓨터들이 다른 컴퓨터로 데이터를 전송하고 주고 받기 위한 HOST를 지칭하는 주소입니다. 이론적으로는 HOST가 아니라, 머신의 interface NIC(네트워크 인터페이스)를 지칭합니다.
IPv4는 32비트 주소 체계를 가지기 때문에 이론상으로 2^32승의 IP 주소를 사용할 수 있습니다.
위 그림처럼, 사람이 읽기 쉽도록 8비트씩 끊어서 10진수로 바꿔서 표현합니다. 이것이 우리가 흔히 보는 IP 주소입니다.
IPv4는 32bit로 이루어져 있기 때문에 약 40억개라는 주소를 가질 수 있습니다. 하지만 이것은 인류가 사용하기에 충분한 양은 아닙니다.
위에서 말했듯 IP Address는 NIC를 지칭한다고 했습니다. 그리고 Router는 여러 개의 NIC를 가지고 있기 때문에, IP Address도 다양합니다.
그럼 이 IP 주소는 어떤 식으로 배정되었는지 궁금해집니다.
IP 주소를 규칙없이 배치할 경우 편하기는 하지만, 주소를 찾아갈 때 참조되는 포워딩 테이블이 복잡해지는 문제가 있습니다. 그런 이유로 IP 주소는 계층화 되어있습니다.
Hierarchical Addressing
IP 주소를 네트워크 아이디(prefix, Subnet ID)와 호스트 ID로 나눈 것입니다.
위 그림의 Address 중, 앞에서부터 24bit 범위를 가지는 Network ID 는 인터넷 상에서 네트워크를 구분하는 역할을 하고, 뒤의 8bit를 가지는 Host Address는 특정 네트워크 안에 존재하는 기기들을 구분하는 역할을 해줍니다. (127.581.112.0 이면 앞의 3개가 네트워크 아이디, 뒤에 1개가 호스트)
그리고 Mask는 Subnet Mask(서브넷마스크)를 나타냅니다. 서브넷 마시크는 어디까지가 네트워크ID인지, 어디까지가 Host인지를 알려줍니다. 그래서 IP주소와 서브넷 마스크는 항상 같이 다니는 형태입니다.
이와 같은 방식은 계층별로 보내는 방향을 설정하면 되기 때문에, router의 forwarding table이 단순해질 뿐 아니라 새로운 host를 추가할 때도 해당 네트워크에서 마음대로 host id를 지정해도 상관 없게 해주는 강점이 있습니다.
Subnets
서브넷은 같은 Subnet ID(Prefix)를 가진 디바이스의 집합입니다. 즉, Router들을 거치지 않고도 접근이 가능한 host들의 집합을 말합니다.
Router는 IP주소를 여러 개 갖는데 IP주소들의 Prefix가 다 다를 수 있습니다. 즉, Router는 여러 Subnet에 걸쳐있으며 각각 다른 Subnet에서 서로 이동하려면 router를 거쳐야하는 것입니다.
참고자료
[컴퓨터 네트워크 - 한양대학교 이석복 교수님]
http://www.kocw.net/home/cview.do?cid=6166c077e545b736
https://the-square-of-y.tistory.com/217
https://blog.naver.com/ds4ouj/222305263776
https://broship.tistory.com/164
Computer Networking _ A Top Down Approach, 7th
'CS > Network' 카테고리의 다른 글
[네트워크] DHCP (0) | 2024.02.21 |
---|---|
[네트워크] NAT(Network Address Translation) (0) | 2024.02.20 |
[네트워크] TCP Congestion Control (0) | 2024.02.17 |
[네트워크] TCP의 Flow control, 3 / 4 - Way Handshake (0) | 2024.02.16 |
[네트워크] 전송 계층 : TCP (0) | 2024.02.15 |