[TCP/IP가 보이는 그림책] 5. 네트워크 계층

iMaeng·2022년 9월 1일
0

네트워크 계층은 인터넷 계층이라고도 부르며, TCP/IP 5계층 중에서 중간에 위치한다. 여러 개의 네트워크를 지나서 수신측의 컴퓨터에 데이터를 전달하는 역할을 수행한다.

네트워크 계층에서는 중심 역할을 하는 프로토콜이 하나밖에 없으며, IP(Internet Protocol)이 그것이다. 이전부터 사용되던 IPv4와 비교적 새로운 IPv6가 있으며 현재는 두 가지가 뒤섞여서 이용된다. IP 통신에서는 수신측의 기기를 지정하기 위해 IP 주소라는 고유의 숫자를 사용한다. 예를 들어 IPv4에서는 IP 주소를 32비트로 나타내는데, 해당 32비트를 8비트씩 피리어드로 구분하고, 10진수로 바꿔서 표기한다. 편지를 쓸 때 봉투에 수신측의 주소를 쓰는 것처럼 네트워크 계층에서는 헤더에 IP 주소를 기입한다. IP 주소에는 ‘네트워크부'와 ‘호스트부’가 존재하며, 이 둘의 경계를 나타내기 위해 서브넷 마스크라는 장치를 활용한다.

IP는 비커넥션형 프로토콜로, 트랜스포트 계층의 UDP와 유사하게, ‘일단 전송하고, 상대에게 전달되었는지 신경쓰지 않는’ 특징을 가진다. 그래서 네트워크 계층에는 신뢰성 있는 IP를 지원하기 위한 프로토콜로 ICMP(Internet Control Message Protocol)이 있다.

ICMP는 수신측에게 전달되지 않는 등의 문제가 발생할 때 송신측에게 해당 사실을 알려주는 메시지를 보내며, 특히 메시지만 단독으로 보내지는 것이 아니라 IP 헤더가 추가되어 보내진다. 즉, ICMP는 트랜스포트 계층의 TCP와 UDP처럼 병렬적인 관계가 아니라, IP를 도와주는 포로토콜이다. 이러한 이유로 네트워크 계층에서 ‘중심 역할을 하는 프로토콜은 하나밖에 없다'라고 할 수 있는 것이다.

트랜스포트 계층에서 ‘세그먼트'라고 불리던 것은 네트워크 계층에서는 ‘데이터'가 되며, 거기에 IP 헤더를 붙인 것을 ‘IP 데이터그램'이라고 한다. IP 데이터그램도 다음 계층인 데이터 링크 계층에 가면 ‘데이터'가 된다.

용어 정리

  • IP 주소
    인터넷 상의 컴퓨터들을 식별하기 위해 인터넷에 연결된 컴퓨터에 주어지는 숫자이며 일반적으로 32비트로 나타낸다. 인터넷 접속 시마다 바뀌는 유동 IP와 ISP로부터 부여받은 고정 IP가 있다. 숫자로 된 IP 주소를 알기 쉽게 만든 것이 도메인명이다.
  • IPv4
    IP version 4를 뜻하며 현재 인터넷 공인 IP 주소 체계이다. IP 주소를 32비트로 나타내며 약 42억 개를 표현할 수 있다. IP 주소는 전세계 컴퓨터마다 고유해야 하므로 IPv4가 고갈될 것을 대비해, 128비트를 사용하여 거의 무한대의 IP 주소를 가질 수 있는 IPv6를 검토하고 있다.
  • 서브넷 마스크
    IP 주소에서 네트워크부와 호스트부의 경계를 나타내기 위해 사용되는 32비트 숫자이다. 해당 설정에 따라 네트워크를 효율적으로 활용할 수 있다.
  • IP 헤더
    데이터를 누가 누구에게 보내는지 또한 어떤 경로로 보내는지 등과 같은 정보를 모아둔 것으로, 송신측 IP 주소와 수신측 IP 주소 등이 들어간다.
  • ICMP
    목적지로 가는 경로를 찾아주는 기능밖에 없는 IP 프로토콜을 도와서 목적지에 제대로 도착했는지 등과 같은 오류 메시지를 알려주는 역할을 하는 프로토콜이다. ICMP 메시지는 IP 패킷 안에 삽입되어 보내지는데, 이것을 캡슐화라고 한다.

네트워크 계층의 역할

네트워크 계층에는 다른 계층과 달리 주된 프로토콜이 IP 하나밖에 없으며, 통신 방법의 차이를 흡수하는 기능이 있다. 이에 의해 통신 방법이 다른 네트워크 상에 있는 컴퓨터끼리도 주고받기가 가능하게 되는 것이다. 즉, 통신 방법의 차이를 흡수하는 완충재라고 할 수 있다.

네트워크 계층은 통신에 있어서 가장 중요한 정보인 ‘누가 누구에게 전달할지'를 다루고 있다. 통신 상대를 정하기 위해서 네트워크상에 존재하는 모든 기기에는 고유의 주소 같은 것이 할당되어 있다.

목적지까지의 경로가 여러 개 있는 경우, 적절한 경로를 사용하여 전달하는 것도 네트워크 계층의 역할이다.


IP 프로토콜

송신측에서는 트랜스포트 계층으로부터 데이터를 받아서 IP 주소 등을 기록한 IP 헤더를 붙여서 데이터 링크측에 전달한다. 데이터에 IP 헤더를 붙인 것을 IP 데이터그램(datagram)이라고 한다.

IP 데이터 전송은 Best Effort 방식이다. Best Effort란 ‘노력은 하지만 결과는 보장하지 않는다'라는 뜻이다. 헤더가 깨지지 않았는지 확인하거나 목적지의 주소가 존재하는지 아닌지 정도의 판단 처리는 하지만, 재전송 처리는 수행하지 않는다.

IP에는 목적지까지의 경로나 통신 상태를 보고 가장 빨리 목적지에 전달하기 위한 경로를 판단해서 보내는 기능이 있다.

수신측에서는 IP 헤더에 쓰여진 목적지의 주소(IP 주소)를 확인하고 자기 앞으로 온 것만 받는다. 그리고 트랜스포트 계층의 지정된 프로토콜에 전달한다.


IP 주소(IPv4)

IP 주소와 IPv4

IP 주소는 네트워크상의 기기를 구별하기 위한 번호이며, 기존에 사용하던 IPv4와 새로운 IPv6가 있다. IPv4는 32자리 비트열로 이루어지면, 기본적으로는 다음과 같은 구조를 갖는다.

[ 1 1 0 0 0 0 0 0 | 1 0 1 0 1 0 0 0 0 | 0 0 0 0 1 1 1 1 | 0 0 0 0 1 0 1 0 ]
= [ 192. | 168. | 15. | 10. ]

  • 네트워크부 (192. | 168.)
    네트워크 고유의 번호가 들어간다.
  • 호스트부 (15. | 10.)
    각각의 컴퓨터를 나타내는 번호가 들어간다. 기본적으로 자유롭게 할당할 수 있다.(모두 0또는 1은 제외)
    같은 네트워크 내라면 네트워크부는 동일하다.
    cf) 8비트로 0~255까지의 수를 나타낼수 있다.
    cf) 라우터는 접속되어 있는 네트워크의 수만큼 IP 주소를 갖고 있다.

완전히 똑같은 주소를 갖고 있는 컴퓨터가 여러 대 존재한다면 ‘컴퓨터를 지정한다'는 목적을 이룰 수 없기 때문에, 번호의 중복을 피하기 위해 ICANN이라는 기관이 중심이 되어 전 세계의 IP 주소를 관리하고 있다.

네트워크부와 호스트부의 경계

IP 주소만으로는 네트워크부와 호스트부의 경계를 알 수 없기에, 서브넷 마스크(또는 넷마스크)라는 값을 사용하여 경계를 나타낸다.

IP 주소(192.168.15.10)
[ 1 1 0 0 0 0 0 0 | 1 0 1 0 1 0 0 0 0 | 0 0 0 0 1 1 1 1 | 0 0 0 0 1 0 1 0 ]

⇒ 네트워크부(192.168.)에 대응하는 비트를 1로 만든다.

서브넷 마스크(255.255.0.0)
[ 1 1 1 1 1 1 1 1 | 1 1 1 1 1 1 1 1 1 | 0 0 0 0 0 0 0 0 | 0 0 0 0 0 0 0 0 ]

경계는 8비트 구분과 일치하지 않는 경우도 있다.

일반적으로 IP 주소(192.168.15.10)와 서브넷 마스크(255.255.0.0)는 쌍으로 사용한다. 또는 IP 주소와 서브넷 마스크를 {IP주소}/{네트워크부의 비트수} 형태로 묶어서 쓸 수도 있다.(192.168.15.10/16)


IP 주소(IPv6)

IPv4로 나타낼 수 있는 IP 주소는 약 43억개이며 인터넷의 보급에 따라 그걸로도 부족해지기 시작하면서 해결책으로 제시된 것이 IPv6이고 128비트로 이루어져있다. (IPv4와 IPv6 사이에 호환성은 없음)

IPv4IPv6
주소의 길이32비트128비트
주소의 개수2322^{32} = 약 43억21282^{128} = \infin
표기 방법10진법16진법
암호화 기능옵션기본
멀티캐스트비대응대응

cf) 멀티캐스트: 복수의 특정인에게 동시에 데이터를 보내는 것

IPv6는 주소값을 16비트마다 콜론(:)으로 구분하며, 16진수(0~f숫자)로 표기한다. IPv6는 생략해서 짧게 표기할 수도 있으며 규칙은 다음과 같다.

  • 필드 선두부터 연속되는 ‘0’은 생략할 수 있다.
    ’:’ 사이의 각 부분(필드)의 선두부터 연속되는 ‘0’은 생략할 수 있다. 단, 필드 안이 모두 0인 경우는 적어도 0이 하나는 필요하다.
    ex) 2001:2df6:1ee9:05f0:0000:0000:0000:0019
    → 2001:2df6:1ee9:5f0:0:0:0:19
  • 0인 필드가 연속되는 경우는 0을 생략할 수 있다.
    모두 0인 필드가 연속되는 경우는 0을 생략하고 ‘::’로 표기할 수 있다. 해당 규칙은 하나의 주소 내에서 한 번만 이용할 수 있다.
    ex) 2001:2df6:1ee9:05f0:0000:0000:0000:0019
    → 2001:2df6:1ee9:5f0:0:0:0:19
    → 2001:2df6:1ee9:5f0::19

IPv6도 IPv4와 같은 표기 방법으로({IPv6주소}/{네트워크부의 비트수}) 서브넷 마스크를 나타낼 수 있으나, 일반적으로는 ‘/64’가 사용되므로 별도로 신경 쓸 필요는 없다.


목적지까지 길 안내

대부분의 통신 서비스에서는 송신측에서 수신측 컴퓨터에 도달하기까지 여러 개의 네트워크를 경유한다.

라우터

라우터(router)는 네트워크간을 연결해서 패킷이 목적지에 전달될 때까지 길 안내를 하는 기기이다. 라우터의 네트워크 계층에서는 IP헤더에 기록된 목적지의 IP 주소를 보고 그 다음 전송처를 결정한다. ‘라우터의 역할 = 네트워크 계층의 역할'이라고 해도 과언이 아니다.

라우터 속에서 일어나는 일

  • 네트워크 계층
    목적지까지의 경로를 결정하거나 패킷의 크기를 조정한다.
  • 데이터 링크 계층
    길 안내를 하기 위해서 일단 패킷을 회수한다. 네트워크로 가는 출입구에는 각각의 IP 주소가 있다.

cf) 경로(route)를 결정하므로 라우터(router)라고 한다.

통신 세계에서는 컴퓨터 사이의 거리를 통과한 라우터의 개수로 나타내며, 이때 사용하는 단위를 (hop)이라고 한다.


수신측의 처리

수신측의 네트워크 계층에서는 IP 헤더를 보고 데이터가 깨졌는지, 자기 앞으로 온 것인지를 확인하고 트랜스포트 계층의 지정된 프로토콜로 전달한다. 헤더의 정보를 보고 원래 형태로 다시 맞춘뒤, 조합한 데이터를 트랜스포트 계층의 지정된 프로토콜에 전달한다.

IP 헤더는 기록하는 순서와 크기가 정해져 있으며, IPv4 헤더에 비해 IPv6의 헤더가 단순한 구조이다.

IPv4 헤더

  1. 버전(4비트)
    IP의 버전이며, IPv4의 경우 ‘4’가 들어간다.
  2. 헤더 길이
    IP 헤더의 크기이다.
  3. 서비스 타입(8비트)
    서비스의 품질이다.
  4. 패킷 길이(16비트)
    IP 헤더와 IP 데이터의 합계 바이트수이다.
  5. 식별자(16비트)
    분할된 IP 데이터그램을 복원할 때 사용하는 값이다.
  6. 서비스 타입(3비트)
    패킷 분할과 관련된 정보이다.
  7. 플래그먼트 오프셋(133비트)
    분할된 데이터의 순서이다.
  8. 생존 시간(8비트)
    통과할 수 있는 라우터의 수이다.
  9. 프로토콜(8비트)
    상위 프로토콜이다.
  10. 헤더 체크섬(16비트)
    IP 헤더가 무사한지 아닌지를 확인하기 위한 값이다.
  11. 송신측 IP 주소(32비트)
  12. 수신측 IP 주소(32비트)
  13. 옵션
    보통은 사용하지 않는다.
  14. 패딩
    헤더가 32비트의 정수배가 되지 않을 때 0을 붙여서 조정한다.

IPv6 헤더

  1. 버전(4비트)
    IP의 버전이며, IPv6의 경우 ‘6’이 들어간다.
  2. 트래픽 클래스(8비트)
    전송시 우선도를 나타낸다.
  3. 플로우 레이블(20비트)
    통신 경로의 품질을 확보하거나 경로의 우선적인 선택을 위해 사용한다.
  4. 페이로드 길이(16비트)
    IP 헤더를 제외한 확장 헤더와 데이터의 합계 크기이다.
  5. 넥스트 헤더(8비트)
    다음에 이어지는 확장 헤더와 상위 프로토콜의 타입을 나타낸다.
  6. 홉 제한(8비트)
    통과할 수 있는 라우터 수이다.
  7. 송신측 IP 주소
  8. 수신측 IP 주소

이후로는 ‘페이로드'로 불리는 ‘확장 헤더’나 ‘데이터'가 계속된다.


네트워크 계층의 신뢰성

IP는 UDP와 동일하게 비커넥션형 통신을 수행하므로 데이터가 상대에게 전달됐는지 아닌지는 전혀 관여하지 않는다. 그래서 네트워크 계층에는 신뢰성 면에서 IP를 도와주는 프로토콜인 ICMP(Internet Control Message Protocol)가 있다(IPv6에서는 ICMPv6). ICMP, ICMPv6는 IP 데이터그램의 통신 상태 등을 필요에 맞게 송신측에 알려준다.

ICMP 메세지
ICMP 헤더와 ICMP 데이터에 IP 헤더를 붙인 형태로 송신측에 보내진다.

ICMP 헤더의 기본적인 구성은 ICMP, ICMPv6 모두 다음과 같이 구성되어 있으며, 이 이외의 헤더 항목 및 데이터의 내용은 메시지에 따라 달리진다.

  1. 타입(8비트): 메시지의 종류를 나타내는 숫자이다.
  2. 코드(8비트): 오류의 원인 등을 나타내는 숫자이다.
  3. 체크섬(16비트): 데이터가 무사한지 아닌지를 확인하기 위한 값이다.

cf) 주요 타입 목록

헤더의 기본적인 구성은 ICMP, ICMPv6 공통이지만, 타입은 ICMPv6에서 다시 규정됐기에 달라진다.

ICMP 타입ICMPv6 타입메시지의 종류의미
31도달 불능IP 데이터그램을 목적지에 전달할 수 없습니다.
5137리다이렉트현재 경로보다 최적의 경로를 찾았습니다.
113시간 초과일정 개수 이상의 라우터를 경유한 IP 데이터그램을 파기했습니다.
8128에코 요청이 메시지가 전달되면 답장해주세요.
0129에코 응답메시지가 무사히 도착했습니다.

접속 상태를 조사하는 명령인 ‘ping’이나 목적지까지의 경로를 조사하는 명령인 ‘tracert’(UNIX에서는 ‘traceroute’)는 ICMP 메시지를 사용해서 결과를 반환한다.


IP 주소의 설정

각 컴퓨터에 고정 IP 주소를 할당하는 경우, 개별적으로 설정해야 하며 큰 네트워크에서는 관리하기 어렵다. 필요할 때만 자동으로 IP 주소를 할당하는 프로토콜 DHCP(Dynamic Host Configuration Protocol)를 사용하는 방법도 존재하며, 네트워크에 접속함과 동시에 필요한 설정이 자동으로 수행된다.

  • DHCP 클라이언트
    DHCP 서버에게 IP 주소를 요청하고, 일시적으로 할당 받는다.
  • DHCP 서버
    클라이언트의 요청에 대한 응답으로 IP 주소를 빌려주거나 서브넷 마스크의 설정 정보를 제공한다.

DHCP 클라이언트는 요청을 할 때, 수신 IP 주소를 ‘255.255.255.255’로 만드는데, 이를 브로드캐스트 주소라고 하며 동일한 LAN 안의 모든 기기에 송신하기 위한 특수한 주소이다. 해당 요청에 대해서는 DHCP 서버만 응답한다. 요청을 하는 시점에서의 클라이언트의 IP 주소는 ‘0.0.0.0’이다.

IP 주소를 부여받은 DHCP 클라이언트는 다시 ‘255.255.255.255’ IP 주소 앞으로 확인 메시지를 보낸다. 이에 대해 DHCP 서버가 응답하면 주고받기가 완료된다.


네트워크의 세분화

회사 내부나 비교적 큰 네트워크 등을 관리할 때 서브넷을 이용해 편리하게 관리할 수 있다. 예를 들어, ‘127.15.4.0~127.15.4.255/24’라는 IP 주소를 사용하는 네트워크가 있다면, ‘127.15.4’라는 네트워크 주소를 갖고 있는 하나의 네트워크에 254대의 기기를 접속할 수 있다.(0과 255는 고유 주소이므로 사용 불가)

그러나 실제로 이런 대규모의 네트워크가 필요한 경우는 많지 않으므로 서브넷(subnet)이라는 장치를 사용하여 가상으로 작은 네트워크들을 만들어 네트워크 모음으로 처리할 수 있게 하고 있다. 각 네트워크들은 라우터를 연결되어 있다. 회사 등 네트워크의 규모가 큰 경우, 서브넷을 사용하여 부서나 계층 단위로 세분화하면 관리하기 쉬워진다.

서브넷을 만드려면 서브넷 마스크(subnet mask)를 사용하는데, 서브넷 마스크를 사용하여 가상으로 네트워크부를 늘임으로써 관리를 수행한다.

ex) ‘127.15.4.0~127.15.4.255/24’‘127.15.4.0~127.15.4.255/28’
: 254개의 기기에 접속할 수 있는 하나의 네트워크 → 16개의 기기를 접속할 수 있는 네트워크 16개
- 늘이고 싶은 비트 수를 더한다.(24 → 28)
- 증가한 네트워크부(4비트)는 관리자가 자유롭게 설정할 수 있다.
- 다만 서브넷은 네트워크 내에서만 정한 규칙이기에, 밖에서 보면 하나의 큰 네트워크로 보인다.


LAN 내에서의 주소

회사 내나 가정 내 등 한정된 네트워크 안에서만 유효한 IP 주소를 사설 주소(private address)라고 하며, 중복될 수 없는 공인 IP 주소와는 다르게, 사절 주소는 네트워크가 다르면 중복되어도 문제가 없다. 사설 주소는 다른 네트워크에서는 통용되지 않으며, 사설 주소를 사용하면 IP 주소를 절약할 수 있다.

사설 주소는 다음의 범위 내에서 선택하도록 정해져 있으며, 해당 범위 안의 주소는 공인 주소로 사용할 수 없다.

10.0.0.0 ~ 10.255.255.255
172.16.0.0 ~ 172.31.255.255
192.168.0.0 ~ 192.168.255.255

사설 주소 그대로는 인터넷에 접속할 수 없으므로 다음과 같은 별도의 장치를 사용하며, 대부분의 라우터에 해당 기능이 들어있다.

  • NAT(Network Address Translation)
    사설 주소와 공인 주소(global address)를 일대일로 대응시켜 변환하는 장치이며, 확보하고 있는 공인 주소의 개수 이내라면 여러 개의 컴퓨터를 동시에 인터넷에 접속시킬 수 있다.
  • NAPT(Network Address Port Translation)
    하나의 공인 주소를 사용하여 여러 대의 컴퓨터를 동시에 접속할 수 있는 장치이며, 포트 번호에 의해 각각의 컴퓨터를 식별하므로 같은 공인 주소를 동시에 사용할 수 있다. NAPT를 IP 메스커레이드(masquerade)라고도 한다.

이름 해석

IP 주소와 도메인명을 처리하는 서비스를 DNS(Domain Name System)라고 한다. 애플리케이션 프로토콜인 DNS를 사용해서 주고받게 된다.

지역 네임 서버(지역 DNS 서버)
DNS 서비스를 제공하며 IP 주소와 도메인의 대응표를 관리한다.

클라이언트와 직접 주고받기를 하는 것은 지역 네임 서버이지만 방대한 IP 주소를 한 대의 기기에서 관리할 수 없으므로 실제로는 여러 개의 네임 서버와 연계하여 서비스를 제공하고 있다.

지역 네임 서버는 자신의 대응표에 없는 도메인을 물어보면, 먼저 DNS를 총괄하는 루트 서버에게 조회한다.

ex) www.myeongu.co.kr IP 주소 조회

네임 서버는 도메인 계층에 맞춰서 존재한다.

  1. 지역 네임 서버로부터 조회 요청을 받아 ‘kr’을 담당하는 네임 서버가 있는 곳을 가르쳐준다.
    한국(kr), 영국(uk), 일본(jp), 미국(us), …
  2. 지역 네임 서버로부터 조회 요청을 받아 ‘co.kr’을 담당하는 네임 서버가 있는 곳을 가르쳐 준다.
    학교(ed), 기업(co), 정부 기관(go), 대학(ac), …
  3. 지역 네임 서버로부터 조회 요청을 받아 ‘www.myeongu.co.kr’을 담당하는 IP 주소를 가르쳐준다.

위와 같이 여러 개의 네임 서버를 따라가서 최종적으로 목정하는 도메인을 관리하고 있는 네임 서버까지 도달해서 IP 주소를 조사한다. 그렇기에 상위의 네임 서버에는 하나 아래 계층에 있는 네임 서버의 IP 주소가 등록되어 있다.


ipconfig와 ping 명령

ipconfig는 자신의 컴퓨터의 접속 상태를, ping은 통신하고 싶은 상대의 컴퓨터의 접속 상태를 조사하는 명령이다.

Windows 상에서 ipconfig 명령을 통해서 TCP/IP 설정에 관련된 정보를 얻을 수 있으며, 자신의 IP 주소나 서브넷 마스크 등을 알 수 있다. 네트워크에 접속할 수 없을 때 시험해 보면 유용하다. (UNIX, Linux에서는 ifconfig 명령)

ipconfig(ifconfig) 결과 예시

Windows IP 구성
이더넷 어댑터 이저넷:
    연결별 DNS 접미사 . . .: ## 사용할 수 있는 네트워크가 표시된다.
    링크-로컬 IPv6 . . .:
    IPv4 주소 . . . . .:
    서브넷 마스크 . . . .:
    기본 게이트웨이 . . .:

ping은 특정 컴퓨터가 네트워크상에 존재하고 있는지 조사하고, 존재하고 있다면 해당 통신 상태 등을 표시하는 명령이다. ICMP 메시지를 사용하며, 웹 페이지가 표시되지 않을 때 시험해 보면 유용하다. 종종 정보를 악용하는 경우가 발생하기도 하기에 ICMP의 주고받기를 금지하고 있는 경우도 있다.

ping 결과 예시 (>> ping {도메인명 또는 IP 주소})

Ping www.myeongu.co.kr [74.125.204.94] 32바이트 데이터 사용:
	## ICMP 메시지의 응답 결과를 표시한다.
	74.125.204.94의 응답: 바이트=32 시간=81ms TTL=43
	74.125.204.94의 응답: 바이트=32 시간=79ms TTL=43
	... ## 응답이 없을 때는 ‘요청 시간이 만료되었습니다.’라고 표시된다.

## 통신 상태를 나타낸다.
74.125.204.94에 대한 Ping 통계:
	패킷: 보냄=4, 받음=4, 손실=0
옹복 시간(ms):
	최소=79ms, 최대=81ms, 평균=80ms
profile
안녕하세요! 꾸준히 성장하고자하는 엔지니어 강면구입니다.

0개의 댓글