[Netwhat] Network

24siefil·2022년 4월 2일
0

42 SEOUL

목록 보기
5/18
post-thumbnail

Created: May 14, 2021 9:47 PM

본 페이지는 다음의 학습목표를 기준으로 작성 하였다.

  • 학습 주제
    • What is an IP address
    • What is a Netmask
    • What is the subnet of an IP with Netmask
    • What is the broadcast address of a subnet
    • What are the different ways to represent an ip address with the Netmask
    • What are the differences between public and private IPs
    • What is a class of IP addresses
    • What is TCP
    • What is UDP
    • What are the network layers
    • What is the OSI model
    • What is a DHCP server and the DHCP protocol
    • What is a DNS server and the DNS protocol
    • What are the rules to make 2 devices communicate using IP addresses
    • How does routing work with IP
    • What is a default gateway for routing
    • What is a port from an IP point of view and what is it used for when connecting
      to another device

1. IP address


우리가 친구와 전화를 하기 위해서는 친구의 전화번호를 알아야 한다. 컴퓨터 네트워크 통신에서 전화번호에 해당하는 IP 주소는 어떠한 형식을 가지고 있는지 알아보자. IP 주소는 네트워크 주소와 호스트 주소로 이루어져 있다. 네트워크 주소와 호스트 주소를 나누는 규칙인 클래스의 개념에 대해서도 알아보자.

1. 네트워크

네트워크란 다수의 컴퓨터가 논리적 또는 물리적으로 연결되어 통신이 가능한 상태이다.

1.1. 규모에 따른 네트워크

  1. PAN(Personal Area Network): 가장 작은 규모의 네트워크
  2. LAN(Local Area Network): 근거리 영역의 네트워크. 좁은 범위 내에서 고속 통신이 가능.
  3. MAN(Metropolitan Area Network): 대도시 영역 네트워크
  4. WAN(Wide Area Network): 광대역 네트워크. 지역간, 지방간, 나라간 또는 대륙간을 연결하는 통신망

![]([Netwhat] Network.assets/Untitled-20220227173459388.png)

2. IP address란?

개별 네트워크 장비의 식별을 가능하게 하는 주소이다. 숫자 12개로 이루어진 고유한 값이다.

2.1. IPv4 address

  • IP version 4주소의 줄임말로 오늘날 일반적으로 사용하는 IP 주소이다.

  • 4개의 8비트(Octet) 숫자(총 32비트)로 이루어져 있으며, 각각은 .으로 구분되어 있다.

    → 2진수 표현: xxxx.xxxx. xxxx.xxxx. xxxx.xxxx. xxxx.xxxx

    → 10진수 표현: 0.0.0.0 ~ 255.255.255.255

  • 이론적으로 42억 9496만 7296개의 IP가 존재한다. 이중 일부 IP는 특별한 용도를 위해 예약되어있다.

2.2 IPv6 address

  • 폭발적으로 늘어나는 인터넷 사용에 대비하고자 IPv6가 개발되었다. (IPv4 address로는 할당 할 수 있는 IP가 부족)
  • IPv4에 비해 확장된, 8개의 16비트 숫자(총 128비트)로 이루어져 있으며, 각각은 :으로 구분되어 있다.
// IPv6 adress 예시
// 아래의 주소들은 모두 같은 주소를 나타낸다. (축약)

2001:0DB8:0000:0000:0000:0000:1428:57ab
2001:0DB8:0000:0000:0000::1428:57ab
2001:0DB8:0:0:0:0:1428:57ab
2001:0DB8:0::0:1428:57ab
2001:0DB8::1428:57ab
2001:DB8::1428:57ab

3. IP address의 클래스

  • IP address에서 공통적인 부분(중복 존재)은 네트워크 주소(영역), 유일무이한 부분은 호스트 주소(영역)라고 정의한다.
  • 클래스는 특정 IP address에서 네트워크 영역과 호스트 영역을 나누어 해석하는 규칙이다.
  • 하나의 네트워크에서 호스트 주소의 범위에 따라 클래스를 구분한다.
    • 클래스는 총 5개가 있다. 일반적으로 A, B, C 3개의 클래스가 사용되며 D, E 클래스는 각각 멀티캐스트용, 연구용으로 사용된다.
    • 네트워크 영역이 커질 수록 호스트 영역 작아지는 반비례 관계를 가진다.
  • 하나의 네트워크 안에서 네트워크 주소는 동일하고, 호스트 주소는 서로 달라야 통신이 가능하다.

3.1. A 클래스

  • 하나의 네트워크가 가질 수 있는 호스트 주소의 수가 가장 많은 클래스이다.

  • IP address를 32자리-2진수로 표현했을 때 첫 비트가 0으로 고정된다.

    0xxx.xxxx. xxxx.xxxx. xxxx.xxxx .xxxx.xxxx

    → 해당 범위를 10진수로 표현: 0.0.0.0 ~ 127.255.255.255

  • 하지만 실제 A클래스의 네트워크 주소는 1.0.0.0 ~ 126.0.0.0으로 규정되어있다. (이유는 🔗 링크를 참고)

  • 네트워크 주소 영역의 크기와 함께 결정되는 호스트 주소의 개수는 (2^24)-2개이다.

3.2. B 클래스

  • IP address를 32자리-2진수로 표현했을 때 첫 비트가 항상 10으로 고정된다.

    10xxxxxx. xxxxxxxx. xxxxxxxx. xxxxxxxx

  • 따라서 네트워크 주소 영역의 크기와 함께 결정되는 호스트 주소의 개수는 (2^16)-2개이다.

3.3. C 클래스

  • IP address를 32자리-2진수로 표현했을 때 첫 비트가 항상 110으로 고정된다.

    110xxxxx. xxxxxxxx. xxxxxxxx. xxxxxxxx

  • 따라서 네트워크 주소 영역의 크기와 함께 결정되는 호스트 주소의 개수는 (2^8)-2개이다.

3.4. 정리 - Classful IPv4

Class첫 고정 비트네트워크 주소 영역호스트 주소 영역
A08 bit24 bit
B1016 bit16 bit
C11024 bit8 bit
  • Class A: 1번째 Octet은 Network Part, 나머지 3개의 Octet은 Subnet / Host로 활용
  • Class B: 1, 2번째 Octet은 Network Part, 나머지 2개의 Octet은 Subnet / Host로 활용
  • Class C: 1, 2, 3번째 Octet은 Network Part, 나머지 1개의 Octet은 Subnet / Host로 활용
  • Class D: Multicasting을 위한 IP 주소
  • Class E: 특정하게 목적이 정해져 있는 활동을 위한 IP 주소

4. Unicast, Broadcast, Multicast of IPv4 Address

4.1. Unicast: MAC 주소를 기반으로 상대측 IP주소를 목적지로하는 1:1 통신

  • 현재 네트워크에서 가장 많이 사용되는 방식이다. Unicast 방식은 하나의 송신자가 다른 하나의 수신자로 데이터를 전송하는 방식으로, 일반적인 인터넷 응용 프로그램이 모두 Unicast 방식을 사용한다. Unicast 통신은 목적지를 제외한 다른 네트워크상의 PC들의 CPU성능을 저하시키지 않는다. 그 이유는 수신한 데이터가 자신에게 해당하지 않는다고 판단되면 해당 데이터를 폐기하기 때문이다.
  • 만약 동일한 데이터를 여러 수신자에게 보내고 싶다면, Unicast 통신을 사용하면 데이터를 여러번 전송해야 하며 동일한 데이터의 중복 전송으로 인해 네트워크 효율이 저하된다.

💡 MAC 주소, MAC Address란?

Media Access Control의 약자로 각 기기의 네트워크 카드(하드웨어)에 부여된 고유한 물리적 주소이다. 즉, 모든 네트워크 장비는 자신만의 고유한 MAC 주소를 가지고 있다. 48비트로 구성되어 있으며 16진수로 표시된다

윈도우에서는 터미널 → ipconfig 명령어
Mac에서는 터미널 → ifconfig 명령어

로 확인할 수 있다.

4.2. Broadcast: Local 상에 붙어있는 모든 네트워크 장비들에게 보내는 1: N(all) 통신

  • 여기서 Local이란 Router에 의해서 구분되어진 공간, 즉 Broadcast Domain이라고 하는 공간을 뜻한다. Broadcast 주소로 데이터가 오면 자신의 MAC 주소와 같지 않아도 무조건 읽어서 CPU로 전달한다.
  • 반드시 필요한 통신 방식이지만, 데이터 수신이 필요없는 Host들에게도 데이터가 전송되기 때문에 불필요한 인터럽트가 발생된다. 또한 자신이 속한 네트워크에만 한정된고, Router를 경유하지 못한다는 단점이 있다.
  • 라우터와 라우팅에 대해서는 이후의 Chapter에서 알아보자.

Broadcast를 사용하는 예시

  • ARP(Address Resolution Protocol): 처음 두 PC간에 통신을 하는 경우에, 상대 IP 주소는 알 수 있더라도 MAC 주소는 알 수가 없다. 이 때, 상대편의 MAC 주소를 알기 위해서 사용하는 Protocol이 바로 ARP이다.
  • Router끼리 정보를 교환하거나 다른 Router를 찾고 싶은 경우
  • Server가 자신이 어떤 서비스를 제공한다는 것을 모든 Client들에게 알릴 때
  • DHCP를 통해서 자신의 IPv4 주소 설정을 진행할 때
  • DHCP에 대해서는 이후의 Chapter에서 알아보자.

4.3. Multicast: 하나 이상의 송신자들이 특정한 하나 이상의 수신자들에게 데이터를 보내는 통신

  • Multicast의 경우 자신이 데이터를 받기 원하는 특정 Host들에게만 보내는 것이 가능하지만, Switch나 Router가 이 기능을 지원해주어야 한다. Multicast 전송을 위한 그룹 주소는 D Class IP 주소 (224.0.0.0 ~ 239.255.255.255)로 실제 Host를 나타내는 주소가 아니며 그룹 주소를 이용한다.
  • 예를 들어, 네트워크 상에 200명의 사용자가 있을 때, 150명에게만 정보를 보내고 싶을 때 사용하는 통신이다. Broadcast를 사용하면 해당 데이터가 필요하지 않은 50명의 PC성능이 저하된다, Unicast를 사용하면 같은 데이터를 150번 전송해야 해서 비효율적이다. 즉, 이러한 문제를 해결하기 위한 통신 방법인 것이다.

4.4. MAC 주소의 전달

  • MAC 주소의 형태는 아래의 그림과 같다.

  • 이 때 16진수로 표현된 각 값들이 실제로 통신에서 전송될 때는 뒤집혀서 전달된다.

  • 이런 과정이 일어나는 것은 아래 그림과 같이 각 Octet별 표현이 있을 때, 각 Octet의 LSB(끝, 최하위 비트)부터 전송이 되기 때문이다.

2. 서브넷 마스크(Subnet mask)와 서브넷팅(Subnetting)


서브넷 마스크를 통해 서브넷팅을 진행하면 IP 주소의 네트워크 영역을 확장할 수 있다. 이의 목적은 브로드캐스트 주소의 수를 증가시켜 트래픽 문제를 해결하기 위함이다. 서브넷 마스크와 서브넷팅에 대해 알아보자.

1. 서브넷 마스크

  • 2진수로 표현된 네트워크 주소 부분의 비트를 모두 1로 나열한 것이 서브넷 마스크이다.
  • 서브넷 마스크는 IP 주소와 동일하게 32비트 숫자로 이루어져 있으며, 8비트 마다 .으로 구분되어 있다.
  • 서브넷 마스크를 IP주소와 bitwise AND연산을 수행하면 네트워크 주소를 얻을 수 있다.

💡 넷마스크는 기본 서브넷 마스크를 의미하는데, 현재는 기술적 효율성을 고려하여 서브넷 마스크만 사용된다. 따라서 넷마스크를 서브넷 마스크로 통칭할 수 있다.

IP Address Classes: the Definitive Guide - RouterFreak

2. 기본 서브넷 마스크

  • 기본 서브넷 마스크는 별개의 서브넷 마스크를 생성하지 않아도 기본적으로 적용되어 있는, 현재의 클래스에 해당하는 서브넷 마스크를 의미한다.

  • 예를들어, C클래스를 그대로 사용한다는 것은 C클래스 네트워크를 쪼개지 않고 2^8 -2개의 호스트 주소를 사용하겠다는 의미이고, 이때 255.255.255.0이 기본 서브넷 마스크가 된다.

  • 또한 이때 (기본) 서브넷 마스크로 쪼개진(AND 연산을 통해) 네트워크 주소를 서브넷(서브넷 네트워크)이라고 한다. 즉, IP 네트워크에 대한 논리적 분할의 결과물을 서브넷이라 한다.

  • IP 클래스별 기본 서브넷 마스크를 정리하면 다음 표와 같다.

  • /24와 같은 것들은 기본 서브넷 마스크의 비트 수(네트워크 영역)를 의미한다.

    → 192.168.0.3/24의 서브넷 마스크는 255.255.255.0이다.

A classOctet 1Octet2Octet3Octet4
IP(예시)16681978
IDNetwork IDHost IDHost IDHost ID
Subnet Mask(/8)255000
B classOctet 1Octet2Octet3Octet4
IP(예시)16681978
IDNetwork IDNetwork IDHost IDHost ID
Subnet Mask(/8)25525500
C classOctet 1Octet2Octet3Octet4
IP(예시)16681978
IDNetwork IDNetwork IDNetwork IDHost ID
Subnet Mask(/8)2552552550
📎 CIDR은 클래스 A, B, C의 Network Part 개념을 Classless한 Prefix로 바꾼 것을 말한다. (기존 클래스 A, B, C에 대해서 Class를 없애면 어디 부분까지가 Network Part이고, 어디 부분까지가 Host Part인지 구분이 불가능하므로 Subnet Mask에 대한 필요성이 등장하게 된다.) 이 때, Network Part는 특정 범주 내에서 사용되는 Endpoint 단말의 Network Part를 이용한다. (Subnet Mask는 다음 파트에서 다룬다.) CIDR 표기법에서 Prefix는 기존 IPv4 주소처럼 4개의 Octet으로 표기되며 그 뒤에 `/` 가 붙으면서 이어서 **특정 비트 수에 대해서 명시**한다. IPv4 주소의 경우 32 비트의 길이를 갖기 때문에, / 뒤에는 0 ~ 32 사이의 10진수 값이 표기 된다.

암묵적으로 255.255.0.0의 네트워크 주소 Mask를 이용하는 기존 클래스 B 네트워크의 172.16.0.0 IPv4 주소는 CIDR 표기법으로 172.16.0.0/16이 된다.

3. 서브넷팅 (Subneting)

  • 특정 IP address에 서브넷 마스크를 씌워서 효율적인 방향으로 네트워크를 수정(생성)하는것을 서브네팅 이라고 한다.
  • 세브넷팅의 의의는 A클래스, B클래스, C클래스의 기본 서브넷 마스크에서 가질 수 있는 네트워크 영역과 호스트 영역을 더 쪼개서, 여러개의 서브넷 네트워크로 분할(Host ID를 Network ID로 변환)하여 통신 효율성을 증가시키는 것이다. 즉, 네트워크 주소 부분의 비트를 연장하여, 그 나머지 호스트 주소 부분이 새로운 호스트 식별자가 된다.
📎 IP 클래스의 개념과 서브넷팅을 통해 궁극적으로는 Flexible한 Host Part 이용(Host Part 부분에 대한 유동적인 분할에 대한 명시)과 Hierarchical(계층적) Routing을 실현한다. 아래의 그림과 같은 형태의 IPv4 주소를 Hierarchical IPv4 Address라고 하는데, 이를 통해 Hierarchical Routing이 가능해진다면 목적지 대상이 되는 네트워크를 쉽게 인식할 수 있어 IP Routing에 도움이 된다.

3.1. 서브넷팅의 원리

  • IP에 클래스와 서브넷 마스크를 활용하는 예시는 다음과 같다.
    • 예를들어, A클래스 IP주소 1.1.1.1의 기본 서브넷 마스크인 255.0.0.0을 B클래스 서브넷 마스크인 255.255.0.0으로 변경한다면, B클래스 서브넷 마스크로 원래의 IP주소와 AND 연산을 하여 기존의 네트워크 ID가 1.0.0.0에서 1.1.0.0으로 확장된다!
    • 확장되며 새로 만들어진 2^8 - 2개의 네트워크를 서브넷 네트워크라 한다.
    • 반대로 호스트 ID의 범위는 기존의 0.0.0.0 ~ 0.255.255.255에서 0.0.0.0 ~ 0.0.255.255로 축소된다!
  • 서브넷팅과 정반대로 네트워크를 합쳐 네트워크를 축소하는 것을 슈퍼넷팅이라 한다.

3.1.1. 네트워크 주소

  • 네트워크 주소는 하나의 네트워크를 통칭하기 위한 주소이다.
  • IP 주소와 서브넷 마스크의 AND연산을 수행하여 구할 수 있다.
  • 해당 네트워크의 첫번째 IP주소이다. → 호스트 영역에 가장 작은 주소가 들어간다.
  • 아래의 예시를 보면 이해가 쉽다.

3.1.2. 브로드캐스트 주소

  • 브로드캐스트 주소는 특정 네트워크에 속하는 모든 호스트들이 갖게 되는 주소이다.
  • 이는 네트워크의 모든 클라이언트에게 데이터를 보내기 위해 활용된다.
  • 서브넷 마스크의 0을 모두 1로 바꾸어 구할 수 있다.
  • 해당 네트워크의 마지막 IP주소이다. → 호스트 영역에 가장 큰 주소가 들어간다.
  • 예를들어 C클래스 IP의 네트워크 주소가 192.168.2.0 이라고 한다면, 이때 브로드캐스트 주소는 192.168.2.255가 된다!

3.2. 서브넷팅의 목적

  • 서브넷팅의 최종목적은 네트워크 자원의 효율적 사용이다. 이를 위해 IP를 사용하는 네트워크 단말기들의 수에 따라 호스트 수를 효율적으로 할당할 수 있도록 한다.
  • 서브넷팅을 통해 네트워크 ID가 확장되므로 할당할 수 있는 네트워크의 수가 늘어난다.
  • 하지만 네트워크가 분리되며(하나의 네트워크에 대응되는 호스트 ID의 수 감소) 서로 다른 네트워크에 속하는 호스트간 통신은 라우터 등을 통해서만 가능하다. (하나의 네트워크에 속한 호스트들은 라우터까지 거치지 않고 통신가능)
  • 결과적으로 몇개의 특정 호스트에서 너무 많은 트래픽이 집중되어 통신속도가 저하되는 문제를 해결할 수 있다. 이는 근본적으로 네트워크가 분리되며 브로드캐스트 주소의 수가 늘어나기(다양해지기) 때문이다.
    • 하나의 브로드캐스트 주소를 너무 많은 다수의 호스트가 갖게 되면 트래픽 문제가 발생한다.
📎 "네트워크 관리자가 네트워크 성능을 향상시키기 위해, 자원을 효율적으로 분배하는 것입니ㅓ다. 여기서 자원을 효율적으로 분배한다는 것은 네트워크 영역과 호스트 영역을 분할 하는 것이라고 생각하면 됩니다." 네트워크적인 측면에서 말하자면, 너무 큰 브로드캐스트 도메인은 네트워크 환경에서 패킷전송을 느리게하고 성능저하를 발생시킵니다. 따라서 네트워크를 쪼개서 통신 성능을 보장하는 것입니다. 또한 IP는 32자리 2진수로 표현할 수 있는데 이 말은 결국 최대 2의 32승만큼의 표현만 가능하다는 뜻 입니다. 즉, 자원의 한계가 존재한다는 뜻이고 결국 제한적인 자원으로 인해 주소에 낭비 없이 아껴써야 합니다. 그래서 등장하는 것이 서브넷마스크라는 녀석입니다. 서브넷 마스크는 필요한 네트워크 주소만 호스트 IP로 할당 할 수 있게 만들어 네트워크 낭비를 방지합니다. 이를 전문용어로 서브네팅이라 하며 그 반대는 슈퍼네팅이라고 합니다.

하나의 IP는 네트워크 부분 + 호스트 부분으로 구성되어 있습니다. 하나의 네트워크 즉 하나의 브로드캐스트 도메인에 있는 IP끼리 통신하기 위해선 네크워크 영역이 같아야하며, 호스트 IP는 달라야합니다. 호스트 IP가 다르지 않다면 IP 충돌이 나겠죠? 당연히 통신하기 위해선 네트워크 영역이 같아야 합니다. 그런데 잠깐! 네트워크 영역이 다르다고 해서 통신할 수 없을까요? 아닙니다. 네트워크 영역이 달라도 라우터나 게이트웨이와 같은 통신장비를 통해 통신할 수 있습니다!. 다만 라우터와 네트워크장비 없이 통신할 수 있는 영역을 우리는 브로드캐스트 도메인이라고 하고 하나의 네트워크 영역에는 당연히 네트워크 영역은 같고, 호스트 IP는 자신의 노드를 식별할 수 있도록 다른 호스트 IP와 달라야 하겠죠? 호스트 IP는 마치 주민번호와 같은겁니다. 중복할 될 수 없는 유일무이한 것이지요..

예를 들어 192.168.0.3 과 192.168.0.4 를 보면 192.168.0 은 네트워크 영역이고 3과 4는 호스트 IP입니다. 이를 해석하면 192.168.0 이라는 네트워크 영역에서 서로 통신할 수 있는 3과 4가 존재한다고 보면 됩니다.

[Network] 서브넷마스크(Subnet Mask)란?

3.3. 서브넷팅 계산 절차

  • 서브넷 마스크는 2진수로 표현하였을 때 네트워크 ID 부분은 1이 연속적으로 있어야 하며, 호스트 ID 부분은 0이 연속적으로 있어야 한다.

  • 서브넷 마스크를 IP주소와 bitwise AND연산을 수행한다.

  • 결과적으로 서브넷 마스크가 네트워크 ID를 확장하면서 1비트씩 확보하게 되면, 할당가능한 네트워크 수가 2배로 증가하고, 반대로 할당 가능한 호스트 수는 1/2로 줄어들게 된다. 예시는 다음과 같다.

    11111111. 11111111. 111111111. 00000000(225. 225. 225. 0)

    → 마지막 옥텟에 1비트 확보

    11111111. 11111111. 111111111. 10000000(225. 225. 225. 128)

  • 201.222.5.0 C클래스 IP를 사용자가 지정한 서브넷 마스크(기본 서브넷 마스크X) 255.255.255.248 를 활용하여 서브넷팅 하는 예시는 다음과 같다.

    11001001 11011110 00000101 00000000 = 201.222.5.0 (기존 IP 주소)

    11111111 11111111 11111111 11111000 = 255.255.255.248 (서브넷마스크)

    11111111 11111111 11111111 (C 클래스 네트워크 영역)

    11111 (사용자 지정한 네트워크영역) ⇒ 서브넷 네트워크의 범위: 00000 ~ 11111 → 2^5개

    000 (사용자가 지정한 호스트영역) ⇒ 각 서브넷 네트워크가 가질 수 있는 호스트 ID의 갯수 → 2^3 - 2개

3. Public & Private IP


IP는 Public과 Private 그리고 고정과 유동으로 그 종류를 나눌 수 있다. 각각의 종류에 대해 알아보자.

📎 IPv4 주소 체계는 크게 2가지, Public IP 주소와 Private IP 주소로 나누어져있다. 그렇다면 IP 주소를 Public과 Private로 나눈 이유는 무엇일까? 가장 큰 이유는 바로 할당 가능한 IPv4주소의 고갈이다. IPv4 주소 체계에서 이론상으로 약 43억 개의 단말을 식별할 수 있다. 하지만 점점 인터넷 사용자도 늘어나고 통신이 가능한 기계들이 점점 생겨나면서 43억 개의 주소가 부족한 시대가 왔다. 그래서 Public IP 주소와 Private IP 주소로 나누어 IP 주소를 절약하는 시스템을 만들었다.

1. Public IP

  • 인터넷 사용자의 로컬 네트워크를 식별하기 위해 ISP(인터넷 서비스 공급자)가 제공하는 IP이다.
  • 공인, 공용 IP 라고도 불리며, 외부에 공개되는 IP이다.
  • 전세계에서 유일한 주소이다.
  • 외부에 공개되어 있기 때문에 인터넷에 연결된 다른 PC로 부터의 접근이 가능하다. → 적절한 보안대책을 강구

2. Private IP

  • 일반 가정이나 회사 등에 할당된 네트워크를 식별하기 위한 IP 이다.
  • 로컬, 가상 IP 라고도 불린다.
  • IPv4의 IP 수 부족으로 인해 서브넷팅된 IP로, 라우터 등에 의해 로컬 네트워크상의 PC 등의 단말에 할당된다.
  • Private IP 주소는 특정한 네트워크 내에서 유일한 IP 주소이므로 해당 네트워크 내에서 중복되지 않게 할당된다. 따라서 Private IP 주소는 다른 네트워크 상에선 같은 주소가 존재할 수 있다.

이름Public IPPrivate IP
할당 주체ISP(인터넷 서비스 공급자)라우터(공유기)
할당 대상개인 또는 회사의 서버(라우터)개인 또는 회사의 단말기
고유성인터넷 상에서 유일하나의 네트워크 안에서 유일
공개여부내/외부 접근 가능외부 접근 불가능

Range of Private IP, Public IP

Private IP와 Public IP의 변환과정 개요

💡 Private IP 만으로는 인터넷에 직접 연결할 수 없다. **라우터를 통해 1개의 Public IP를 할당하는것이 선행된 뒤, 라우터에 연결된 개인 PC에 Private IP가 할당되어야 인터넷에 접속할 수 있다.**
  • Private IP를 할당받은 개인 PC, 스마트폰 등으로 데이터(패킷)을 인터넷으로 전송하기 위해서는 라우터(공유기)가 해당 Private IP를 Public IP로 바꾸어 전송한다.
  • 반대로 인터넷을 통해 받은 데이터(패킷)는 라우터(공유기)가 해당 Public IP를 Private IP로 바꾸어 개인 PC, 스마트폰 등으로 전송한다.

3. NAT(Network Address Translation)

  • 위와 같이. Private, Public IP 주소를 활용해서 네트워크를 구성하였을 경우, Public IP 주소를 가지고 있으면 어디서든 나의 주소로 찾아올 수 있지만 Private IP 주소는 해당 IP 주소가 포함된 사설망 내에서만 찾을 수 있다.(외부 네트워크에서는 찾을 수 없다.)
  • 여기서 중요한 것이 사설망 역시 Public IP 주소를 가진 Host와 통신할 수 있어야 한다. 사설망의 IP 주소를 가진 Host도 외부 네트워크에 접근할 수 있어야 인터넷의 의미가 있다. 따라서 Public IP 주소와 Private IP 주소 간 Host와 통신할 수 있도록 만든게 바로 NAT이다.
  • NAT는 주로 Private IP 주소를 사용하는 네트워크 망에서 Public IP 주소를 사용하는 네트워크 망으로의 통신을 위해 네트워크 주소를 변환하는 것이다.
  • 즉, 사설망에서는 Private IP 주소를 이용해서 통신을 하고, 외부 네트워크와 통신할 때에는 NAT를 거쳐서 Public IP 주소로 자동 변환된다.
💡 정리하자면 NAT란 외부에 공개된 Public IP 주소와 내부에서 사용하는 Private IP 주소가 다른 경우 네트워크 전송 수행 시 두 IP 주소를 맵핑하여 통신을 원활하게 해주는 기술이다. 보통 Router 혹은 방화벽에 설치되어 동작한다.

3.1. NAT의 장점

  • IP 주소 부족 문제 해결할 수 있다.
  • 보안성이 좋다. (외부에서 사설망의 정보를 쉽게 알 수 없기 때문이다.)

3.2. NAT의 종류

Static NAT

  • Public IP 주소와 Private IP 주소를 1 : 1 로 Mapping하여 변환한다.
  • 가장 쉬운 변환 방식이지만 이렇게 구성할 경우 Public IP 주소와 Private IP 주소의 개수가 같아야 하기 때문에 Public IP 주소를 효율적으로 쓰고자 하는 목적에 맞지 않는다.
  • 일반적으로 해당 사설망의 IP 주소를 Public IP 주소로 Mapping하는 방식으로 사용한다.

Dynamic NAT

  • Public IP 주소와 Private IP 주소를 N : N 으로 Mapping하여 변환한다.
  • 현재 사용중이지 않은 Public IP 주소에 Private IP 주소를 동적으로 Mapping한다.
  • 보통 Public IP 주소가 Private IP 주소보다 적을 경우에 사용된다.

NAPT

  • Public IP 주소와 Private IP 주소를 1 : N 으로 맵핑하여 변환한다.
  • 사설망 내 각 Host마다 Port를 지정해주어, Private IP + Port를 하나의 Public IP + Port로 Mapping한다.
  • 현재는 NAPT 통신을 많이 이용한다.

4. 고정 IP와 유동 IP

  • 고정 IP는 특정 컴퓨터에 고정적으로 부여된 IP로, 한번 부여되면 IP를 반납하기 전까지는 다른 장비에 부여될 수 없는 IP를 의마한다 .
  • 유동 IP는 특정 컴퓨터에 고정적으로 IP를 부여하는것이 아닌, IP의 모집합에서 일련의 규칙에 따라 선택되어 부여되는 IP를 의미한다.
  • 인터넷에서 서버를 운영하고자 할때는 Public IP를 고정 IP로 부여해야 한다.
  • 반면 가정에서 사용하는 PC에는 일반적으로 인터넷 서비스 업체에 의해 Public IP가 유동 IP로 부여되고, 공유기에 의해 Private IP 또한 유동 IP로 부여된다.

4. 데이터의 전달의 원리 - OSI 7계층, TCP/IP 모델


지금까지 전화번호와 유사한 개념인 IP 주소에 대해 알아보았다. 전화번호를 알고있는 친구에게 전화를 걸면 나의 음성 데이터가 친구에게까지 전달된다. 이때 데이터의 전달과정에서 음성데이터는 0과1로 이루어진 2진수의 집합 형태일 것이다. 이러한 데이터는 어떤 약속(표준화된 규약)에서 따라 통신되어 친구의 전화까지 전달될 것이다. 컴퓨터 네트워크 통신에서 이에 해당하는 개념인 데이터 전달의 원리와 이를 설명하기 위한 몇가지 모델에 대해 알아보자.

1. 데이터의 개념

컴퓨터가 통신 과정에서 처리하는 데이터는 이진법 숫자 0과 1의 집합이다. 데이터의 통신은 결국 케이블을 통해전달되는 On, Off의 반복으로 이루어진 전기 신호를 통해 이루어진다. 이러한 전기신호를 해석하는 표준화된 기술적 규칙(규약)을 프로토콜이라 한다. 컴퓨터 네트워크에 대해 공부하는 것은 프로토콜에 대해 공부하는 것이라 생각해도 무방하다. 프로토콜에 대해 지금부터 이어지는 내용에 해당하는 몇몇 모델들에 대해 공부함으로써 이해해보자.

2. 프로토콜 (Protocol)

  • 프로토콜의 엄밀히 정의는 Sender와 Reciver 상호간의 특정 목적을 효율적으로 달성하기 위해 명시된 규약이다.

  • 해당 규약은 Format, Order, Action으로 구성된다.

    • Format: 통신에 있어서 메세지의 형식이 어떠한지

      (메세지에 대해 정확한 형식을 지키지 않으면 해석 자체가 불가능하다.)

    • Order: 네트워크 개체 간에 해당 메세지를 어떤 순서로 받을 것인지

      (형식을 준수한 메시지도 올바른 순서를 지키지 않으면 프로토콜에 대한 행동 수행이 불가능하다.)

    • Action: 특정 매세지를 받거나 전달하게 되면 어떤 행동을 수행할 것인지

      (메세지에 대한 행동이 명확하지 않으면 형식과 순서를 준수해도 그에따른 행동을 예측할 수 없으면 무용지물이 된다.)

3. 계층구조

  • 네트워크 상에서 다수의 컴퓨터가 원활하게 데이터 통신을 하기 위해서는 OSI 7계층 모델, TCP/IP 모델 등의 표준화된 프로토콜을 사용해야 한다.
  • 이를 이해하기 위해서는 먼저 계층구조(Layered)에 대한 이해가 필요하다. 계층화(Layering)의 목적은, 공학 문제를 해결하는 일반적 원칙인, 분할정복(Devide and Conquer)이다.
  • 분할정복이란 복잡한 문제를 해결하기 위해 문제를 세분화 하여 정의하고 각각의 문제에 대한 해(Solution)에 대해 고찰하는것이다.
  • 결과적으로 각 프로토콜간에 상호독립적인 기능만을 둠으로서 각 프로토콜에 독립적인 수정을 가할 수 있다.
  • 계층구조의 특징은 위, 아래 층으로만 이동할 수 있다는 점이다. 즉, 층을 건너뛰며 한번에 맨 위 또는 아래로 이동할 수 없다. 다음 단계로 진행되기 위해서는 반드시 이전 계층으로의 이동이 전제되어야 한다.

3.1. 계층구조의 원칙

1) 양방향성 (Bidirectional): 통신을 해야하는 경우 각 계층은 송신과 수신 두가지에 대해서 역할을 수행할 수 있어야 한다.

2) 두 객체 아래의 계층들은 동일하게 쌓여 있어야 한다.

4. OSI 7계층 모델

OSI 7 model은 컴퓨터 네트워크 통신 과정을 7개의 계층으로 구분한 산업표준참조모델이다. 송, 수신 시에 송신 측에서는 7 ~ 1 계층을 거쳐, 수신 측에서는 1 ~ 7 계층을 지나서 메세지(데이터)가 전달된다.

1계층: 물리계층 (Physical Layer)

최하위 계층에 속하며, 상위 계층에서 전송된 데이터를 물리매체(허브, 라우터, 케이블 등)를 통해 다른 시스템으로 전기신호를 전송하는 역할을 한다.

  • PDU: Bit
  • 프로토콜: Modem, Cable, Fiber, RS-232C
  • 장비: 허브, 리피터
💡 PDU란 Protocol Data Unit의 약자로, 데이터 통신에서 상위 계층이 전달한 데이터에 붙이는 제어 정보를 뜻한다. 해당 내용은 이후 5. **[PDU](%5BNetwhat%5D%20%20e6218.md)** Chapter에서 상세히 알아보자.

네트워크 기기들 사이의 데이터를 전송하는 역할을 한다. 시스템간 통신오류를 방지하기 위해 패킷을 프레임으로 구성하여 물리계층으로 전송한다.

💡 패킷은 pack과 bucket를 합친 단어이다. 우체국에서 화물을 일련의 기준에 따라 적당히 나누어 행선지를 표시하는 꼬리표를 붙이는 개념을 데이터 통신에 접목한 것이다. **즉, 정보를 보낼 때 특정 형태를 맞추어 보낸 다는 것이며, 패킷이란 제어 정보와 사용자 데이터로 이루어진 데이터의 형식화된 블록이다.** (앞으로 계속해서 이어지는 개념이니 꼭 기억하자.) 한편, 전반적인 네트워킹에서의 packet의 의미는, 회선교환(circuit switching)이 아닌 모든 데이터 교환을 일컬어 packet switching이라고 할 수 있다.
  • PDU: 프레임
  • 프로토콜: 이더넷, MAC, PPP, ATM, LAN, Wifi
  • 장비: 브릿지, 스위치

3계층: 네트워크 계층 (Network Layer)

네트워크 기기에서 데이터그램(Datagram, 인터넷을 통해 전달되는 정보의 기본단위) 전송의 경로를 설정해주는 역할을 한다. 라우팅 알고리즘을 사용하여 최적의 경로를 산정하고, 송신측에서 수신측으로 전송한다. 이때, 전송되는 데이터는 패킷 단위로 분할하여 전송되며, 전송이 후에 다시 합쳐진다. 2계층이 노드 대 노드간 전송을 감독한다면, 3계층은 각 패킷의 목적지까지 전송을 감독한다.

💡 Routing, 라우팅이란? 상호 작용이 가능한 네트워크들을 구성하기 위해 독립적으로 운영되는 네트워크를 묶게 되면, Source에서 Destination까지 도달하기 위한 여러 경로(Multiple Routes)들이 생긴다. 이 때, Source에서 Destination까지 데이터를 보내는데 있어서 가장 좋은 경로를 결정하게 된다. 이러한 길찾기 기능을 Routing이라고 한다.
  • PDU: 패킷(Packet)
  • 프로토콜: IP, ICMP 등
  • 장비: 라우터, L3 스위치

4계층: 전송계층 (Transport Layer)

발신지에서 목적지간(End to End) 제어와 에러를 관리한다. 패킷의 전송이 유효한지 확인하고 전송에 실패한 패킷을 재전송 하는것과 같이 통신의 신뢰성을 보장한다. 헤드에는 세그먼트가 포함된다. 또한 주소설정, 오류 및 흐름제어, 다중화를 수행한다.

  • PDU: 세그먼트(Segment)
  • 프로토콜: TCP, UDP, ARP, RTP
  • 장비: 게이트웨이, L4 스위치

5계층: 세션계층 (Session Layer)

통신 세션을 구성하는 계층으로 포트(Port) 번호를 기반으로 연결한다. 통신장치간 상호작용을 설정하고 동기화하며 유지한다. 동시수신(Duplex), 반이중(Half-Duplex), 전이중(Full-Duplex) 방식의 통신과 함께 체크 포인팅과 유후, 종료, 재시작 등을 수행한다.

  • 프로토콜: NetBIOS, SSH, TLS

6계층: 표현계층 (Presentation Layer)

송신측과 수신측 사이에서 데이터의 형식(png, jpg, jpeg...)을 정해준다. 근본적으로는 데이터에 대한 Translate, Encrypt (Decrypt), Compress (Decompress) 등을 수행한다. 받은 데이터를 코드변환, 구문검색, 암호화, 압축의 과정을 통해 표준방식으로 변환한다. 예를 들어서 송신 시에 Encoding, Compressing을 작업 했다면, 수신 측에서는 Decoding, Decompressing 작업을 수행한다.

  • 프로토콜: JPG, MPEG, SMB, AFP

7계층: 응용계층 (Application Layer)

사용자와 바로 연결되어 있으며 응용 소프트웨어를 돕는다. 사용자로부터 정보를 입력받아 하위계층으로 전달하고 하위 계층에서 전송한 데이터를 사용자에게 전달한다. 파일 전송, DB, 메일 전송 등 여러가지 응용 서비스를 네트워크에 연결해주는 역할을 한다. 다시말해, 네트워크 자원에 접근할 수 있기 때문에, 송신과 수신을 위한 데이터를 네트워크에 제공하는 역할을 수행한다. 예를 들면 Internet Explorer 혹은 Google Chrome과 같은 Browser가 있을 수 있고, Gmail과 같은 Email Client가 있다.

  • 프로로토콜: DHCP, DNS, FTP, HTTP

OSI 7 계층 모델의 장점

  • 한 계층에서의 수정이 다른 계층에 대한 수정을 야기하는 것을 방지할 수 있다.
  • 산업적으로 표준화를 이끌어 낼 수 있다.
  • 네트워크 통신 과정을 여러 작은 요소로 쪼갬으로써 개발, 디자인, 문제 해결 등을 용이하게 한다.
  • 네트워크 구성 요소의 표준화를 통해 네트워크에 대한 여러 공급 업체를 개발할 수 있다.
  • 네트워크 관리자에게 네트워크 관리를 용이하게 할 수 있다. (문제가 생겼을 때 전체를 탐색하는 것이 아니라 해당 Layer만 찾아보는 식으로 빠르고 효율적으로 대처를 할 수 있다.)

5. TCP/IP 모델

  • 지금까지 살펴본 OSI 7계층 모델은 참조모델에 불과하다. 실제로 사용되는 인터넷 프로토콜은 7계층 구조를 완벽하게 따르지는 않는다. 현재 대부분의 인터넷 프로토콜은 TCP/IP 모델을 따른다.
  • TCP/IP는 인터넷 프로토콜중 가장 중요한 역할을 하는 TCP와 IP의 합성어로, 데이터의 흐름관리, 정확성 확인, 패킷의 목적지 보장을 담당한다.
  • 데이터의 정확성 확인은 TCP가, 패킷을 목적지까지 전송하는 작업은 IP가 담당한다.
  • TCP/IP는 7계층이 아닌 4계층으로 이루어져있다. TCP/IP의 응용계층에서 OSI 7의 응용계층, 표현계층, 세션계층의 역할을 모두 구현하고 있다고 이해하자.

  • 실제 데이터의 전송은 단계별로 헤더(Data → Segment → Datagram → Frame)를 붙여 전송하며 이를 데이터의 캡슐화(Data Encapsulation)라고 한다.

5. 계층간 데이터 전달과 제어정보 - PDU


앞서 OSI 7, TCP/IP 모델을 통해 계층구조로 구현된 데이터 통신의 원리에 대해 알아 보았다. 계층구조에서 데이터는 계층간 이동을한다. 이때 데이터의 본질적인 내용은 동일하지만 각 계층을 거치면서 헤더 정보가 추가되고 이름이 달라진다. 이와 관련하여, 데이터 통신에서 상위 계층이 전달한 데이터에 붙이는 제어정보==PDU(Protocol Data Unit)에 대해 알아보자. 이후 이어지는 Chapter에서는 구체적으로 전송계층, 응용계층에서 특정 프로토콜에 의해 데이터가 어떻게 가공되고 전달되는지 알아보자.

1. PDU (Protocol Data Unit)

계층구조에서 제어정보를 추가한 계층에 따라 PDU를 지칭하는 이름과 포함하는 내용이 달라진다. 아래의 그림을 요약하면, 사용자는 PDU를 Data라 부르고, TCP(전송계층)는 Segment, IP(네트워크 계층)는 Packet, MAC(데이터링크 계층)은 Frame이라 부르고, 컴퓨터 하드웨어는 그것을 Bit로 연산하고 처리한다.

1.1. Segment (전송 계층)

상위계층에서 전달받은 데이터를 전송계층에서는 아래의 정보들을 추가해서 그룹화 한다. 이때부터는 PDU가 세그먼트라 불리게 된다.

  • 발신지 포트: 발신하는 application의 포트
  • 목적지 포트: 수신해야할 application의 포트
  • 순서 번호: 순차적 전송을 하는 경우 인덱싱하여 순서가 어긋나는 경우 목적지 프로토콜이 이를 바로잡는다.
  • 오류검출 코드: 발신지와 목적지 프로토콜은 세그먼트를 연산하여 오류검출 코드를 각각 만든다. 만약 발신지에서 전송한 세그먼트에 포함된 오류검출 코드와 목적지에서 만든 오류검출 코드가 다르다면 전송되는 과정에서 오류가 발생한 것이다. 이러한 경우, 수신측은 해당 세그먼트를 폐기하고 복구 절차를 수행한다. 오류검출 코드는 체크섬, 프레임 체크 시퀀스 라고도 불린다.

1.2. Packet (네트워크 계층)

상위계층에서 전달받은 세그먼트는 네트워크계층 에서는 아래의 정보를 추가해서 그룹화 한다. 이때부터 세그먼트가 패킷이라 불리게 된다.

  • 발신지 컴퓨터 주소(Destination IP): 패킷의 발신자 주소
  • 목적지 컴퓨터 주소(Source IP): 패킷의 수신자 주소
  • 서비스 요청: 네트워크 접속 프로토콜은 우선순위가 같은 서브 네트워크의 사용을 요청할 수 있다.

6. 전송계층의 프로토콜 TCP, UDP


앞서 OSI 7, TCP/IP 모델을 통해 계층구조로 구현된 데이터 통신의 원리에 대해 알아 보았다. 구체적으로 전송계층의 프로토콜(표준화된 통신 규약)인 TCP, UDP에 대해 알아보자.

1. 전송계층

전송계층의 역할을 요약하면 전달되는 패킷의 오류를 검사하고 재전송 요구 등의 제어를 담당한다.

2. TCP, UDP의 개요와 차이점

  • TCP는 Transmission Control Protocol의 약자이고, UDP는 User Datagram (oriented) Protocol의 약자이다.
  • 두 프로토콜 모두 패킷을 한 컴퓨터에서 다른 컴퓨터로 전달하는 IP 프로토콜을 기반으로 구현되어 있다.
  • 포트번호(Port Number)를 이용하여 주소를 지정하는것과 데이터 오류 검사를 위한 체크섬(Check Sum)이 존재한다는것은 공통점이지만 몇몇 특징은 서로 다르다.
💡 포트번호는 컴퓨터 안에서 작동하는 애플리케이션을 식별하기 위해 사용하는 숫자이다. 소프트웨어 입장에서는 자신의 Process를 특정하는 Logical Identifier라고 볼 수 있다. 포트번호는 0~65535 까지 숫자로(2바이트로 표현) 범위에 따라 용도가 정해져 있다.
  1. System Ports (Well-Known Ports) → 0(0x0000) ~ 1023(0x03FF)
  2. User Ports (Registered Ports) → 1024(0x0400) ~ 49151(0xBFFF)
  3. Dynamic or Private Ports (Ephemeral Ports) → 49152(0xC000) ~ 65535(0xFFFF)

체크섬은 네트워크를 통해 전달된 값이 네트워크 오류에 의해 변경 되었는지 검사하는 값으로, 송신된 자료의 무결성을 보장하는것을 목적으로 한다.

  • 여러번 확인을 거치는 TCP와 달리 UDP는 일방적으로 데이터를 송신한다. 아래의 그림을 참고하자.

  • 따라서 신뢰성이 요구되는 에플리케이션에서는 TCP를 사용하고, 간단한 데이터를 빠른 속도로 전송하고자 하는 에플리케이션에서는 UDP를 사용한다. 둘의 차이를 표로 정리하면 다음과 같다.
TCPUDP
연결이 성공해야 통신 가능 (연결형 프로토콜)연결없이 통신 가능 (비연결형 프로토콜)
데이터의 경계를 구분하지 않음 (Byte Stream)데이터의 경계를 구분 (Datagram Service)
신뢰성 높은 데이터 전송 (데이터의 재전송 존재)신뢰성 없는 데이터 전송 (데이터 재전송 없음)
일대일 통신 (Unicast)일대일, 일대다(Broadcast), 다대다(Multicast) 통신
💡 TCP: 목적지가 꼭 특정되어야 하고, 상호 확인해야하므로 broadcast 할 수 없다. UDP : 목적지와 관계없이 일괄적으로 LAN에서 전송가능하므로 broadcast 가능하다.

3. TCP의 특징 (Transmission Control Protocol)

  • 네트워크 통신에서 장치들 사이에 논리적인 접속을 성립(establish)하게 하기 위해 연결을 설정하여 신뢰성을 보장하는 연결형(연결지향) 네트워크 서비스이다.
  • 네트워크에 연결된 컴퓨터에서 실행되는 프로그램간에 일련의 옥텟(데이터, 메세지, 세그먼트 등 데이터의 블록단위)을 안정적으로, 순서에 맞게, 에러없이 교환할 수 있게 한다.
💡 연결지향(CO: Connection-Oriented) 네트워크 서비스란 논리적 경로설정 후에 사용자 데이터를 전송하는 방식을 뜻한다. 양측 가입자 사이에 긴 메시지를 긴 시간 동안 교환하는 경우 유리한 방식이다.
📎 TCP가 개발된 배경은 군사적인 목적으로 어느 환경에서도 정상적으로 동작되는 네트워크 개발하기 위함이다. 이를 위해 사용된 것이 Pacekt 교환(Packet Switching) 방식으로 목적지에 따른 경로가 하나라도 존재한다면 통신이 끊어지지 않고 계속될 수 있도록 하였다. 다만 이 방식은 어떻게든 통신을 유지하는 것이 목적이므로 네트워크 환경의 안정성은 떨어질 수 밖에 없다. 이로 인해 중간에 데이터가 유실되거나 너무 늦게 전달되는 등 신뢰성이 떨어지는 문제가 있었는데, 이러한 문제점들을 해결하고자 신뢰성을 보장할 수 있는 통신 Protocol을 연구하게 됐고, 이에 따라 나온 것이 TCP이다.

3.1. 흐름제어 (Flow Control)

  • 데이터 처리 속도를 조절하여 수신자의 버퍼 오버플로우를 방지한다.
  • 송신측에서 지나치게 많은 데이터를 빠르게 보내 수신측에서 문제가 발생하는것을 방지한다.
  • 수신자가 윈도우크기(Window Size) 값을 조절하여 수신량을 제어할 수 있다.

3.2. 혼잡제어 (Congestion Control)

  • 네트워크 내의 패킷수가 지나치게(넘치게) 증가하지 않도록 방지한다.
  • 정보의 소통량이 과다하게 되면 패킷의 전송량을 줄여 혼잡붕괴현상이 발생하는 것을 방지한다.

3.3. 높은 신뢰성 (Reliable Transmission)

Dupack-based retransmission (Duplicate ACK → Dupack)

  • 정상적인 상황에서는 ACK(Acknowledgement, 확인응답)값이 연속적으로 전송되어야 한다.
  • 만일 ACK 값의 중복이 발생한 경우 패킷 이상을 감지하고 재전송을 요청한다.

Timeout-based retransmission

일정시간동안 ACK값을 수신하지 못한경우 재전송을 요청한다.

3.4 TCP의 Connection, Disconnection 과정

TCP Connection (3-way handshake)

  1. 먼저 open()을 실행한 클라이언트가 SYN(syncronize)을 보내고 SYN_SENT 상태로 대기한다.
  2. 서버는 SYN_RCVD 상태를 변경하고 SYN과 응답 ACK를 보낸다.
  3. SYN과 응답 ACK를 받은 클라이언트는 ESTABLIED로 상태를 변경하고, 서버에게 응답 ACK를 보낸다.
  4. 응답 ACK를 받은 서버는 ESTABLISHED로 상태를 변경한다.

TCP Disconnection (4-way handshake)

  1. 먼저 close()를 실행한 클라이언트가 FIN을 보내고 FIN_WAIT1 상태로 대기한다.
  2. 서버는 CLOSE_WAIT로 상태를 변경하고 응답 ACK를 전달한다. 동시에 해당 포트에 견결되어 있는 어플리케이션에게 close()를 요청한다.
  3. ACK를 받은 클라이언트는 상태를 FIN_WIAT2로 변경한다.
  4. close() 요청을 받은 서버 어플리케이션은 종료 프로세스를 진행하고 FIN을 클라이언트에 보내 LAST_ACK로 상태를 변경한다.
  5. FIN을 받은 클라이언트는 ACK를 다시 서버에 전송하고 TIME_WAIT으로 상태를 변경한다. TIME_WAIT에서 일정 시간이 지나면 CLOSED된다. ACK를 받은 서버도 포트를 CLOSED한다.
  6. 서버와 클라이언트는 상대적으로 서버측이 먼저 FIN을 보내 종료를 요청할 수 있다. 즉, 어떤 측에서 먼저 close를 요청하느냐에 따라 이후 일련의 과정이 진행된다!

3.5 TCP의 Header 정보

응용계층으로부터 데이터를 받은 TCP는 데이터에 TCP 헤더를 추가하여 데이터를 세그먼트(Segment)로 가공한다. 헤더에 어떠한 정보가 담겨있는지 알아보자.

TCP헤어더의 제어비트의 ACK 제어비트

  • ACK 제어비트의 ACK 번호를 통해 패킷의 정상도착 여부를 확인한다.
  • 송신한 패킷이 제대로 도착하지 않았으면 재송신을 요구한다.

4. UDP의 특징(User Datagram Protocol)

  • 비연결형 서비스
  • 신뢰성 없음
  • 빠른 전송 속도
📎 TCP는 앞서 말했던 것 처럼 데이터 신뢰성을 보장하기 위한 방식이기 때문에, 누락된 데이터를 모두 받기위한 메커니즘이 정의되어 있다. 그래서 이메일, 파일 전송과 같은 100% 데이터 보장이 필요한 분야에서 필수라고 할 수 있다. 하지만 만약 넷플릭스를 보는데 픽셀 한칸 데이터를 못받아서 버퍼링을 하며 모든 데이터를 정확하게 받기 위해서 멈추게 된다면 어떨까. 이처럼 실시간 스트리밍 서비스에선 TCP가 상당히 불편할 수 있기 때문에 통신의 최소 기능만을 수행하는 UDP를 이용한다.

UDP는 간단하게 TCP의 모든 신뢰성 메커니즘 기능이 없다고 보면 된다. 수신 측과 접속했고 48Kbps로 전송 속도를 설정했으면 무조건 48Kbps로 데이터를 일방적으로 전송하기만 한다. 받는 쪽에서 모든 데이터를 정확하게 받았는지는 고려하지 않는다. 그래서 어느정도의 데이터 손실이 있을 수 있으나 통신 속도가 빠르다.

4.1. UDP의 헤더

UDP 헤더는 TCP의 그것과 비교하여 정보의 양이 매우 적다. 결과적으로 신뢰성을 보장하지 못하지만 빠른 속도를 달성한다.

UDP 헤더

7. 응용계층의 프로토콜 DHCP, DNS


앞서 OSI 7, TCP/IP 모델을 통해 계층구조로 구현된 데이터 통신의 원리에 대해 알아 보았다. 구체적으로 응용계층의 프로토콜(표준화된 통신 규약)인 DHCP, DNS에 대해 알아보자.

1. DHCP 프로토콜 (Dynamic Host Configuration Protocol)

  • DHCP란 PC에 자동으로 IP주소, 서브넷 마스크, 기본게이트웨이 IP주소, DNS서버 IP주소를 자동으로 일정시간 할당해주는 프로토콜이다.
  • DHCP를 통한 IP주소 할당은 임대(Lease)의 개념을 가지고 있는데 이는 DHCP 서버가 IP주소를 영구히 단말에 할당하는 것이 아니고 임대기간(Lease Time)을 명시하여 그 기간 동안만 단말이 IP 주소를 사용하도록 하는것이다. 단말인 임대기간이 종료된 이후 계속 IP 주소를 사용하고자 한다면 임대기간 갱신(Renewal)을 DHCP 서버에 요청해야 하고 또한 단말은 임대 받은 IP 주소가 더이상 필요하지 않게 되면 반납절차(Release)를 수행한다.
  • 즉, 유동 IP를 할당한다는 것은 IP를 DHCP 서버에서 임대기간만큼 임대한다는 의미이다.
📎 DHCP는 Host에게 TCP/IP 네트워크에서 사용되는 설정 정보들을 넘겨주는 Framework라고 볼 수 있다. **DHCP는 네트워크 관리자 (Network Administrator) 관리의 중앙화를 할 수 있게 해주고, 조직 네트워크에 대해서 IPv4 주소 할당을 자동화 할 수 있게 해준다.**

1.1 DHCP의 구성

DHCP 서버

DHCP서버는 인터넷 서비스 공급자의 서버에서 실행되는 프로그램을 통해, 일정한 범위의 IP주소를 클라이언트들에게 자동으로 할당(설정)한다.

정보결과
IP 주소192.168.0.4
서브넷 마스크255.255.255.0
기본 게이트웨어192.168.0.1
DNS 서버 IP 주소210.220.163.82 / 219.250.363.130

DHCP 클라이언트

시스템이 시작되면 DHCP서버에 IP주소를 요청한다. DHCP 서버로부터 IP주소를 할당 받으면 TCP/IP 설정이 초기화되고, 다른 호스트와 TCP/IP를 사용해서 통신을 할 수 있게 된다.

1.2 DHCP의 IP주소 임대 절차

1) DHCP Discover

  • 패킷 방향 : 클라이언트 -> DHCP 서버
  • 브로드캐스트 메세지 : Destination MAC = FF:FF:FF:FF:FF:FF
  • 의미 : 클라이언트가 DHCP 서버를 찾기 위한 메시지이다. 자신이 속한 네트워크에 "거기 혹시 DHCP 서버 있으면 내게 응답 좀 해 주세요"라고 단말이 메세지를 보낸다. 이 Discover 패킷에는 IP 주소가 필요한 호스트의 MAC 주소가 담겨져 있어서 DHCP 서버가 응답할 때 패킷을 수신할 수 있게 된다.
  • 주요 파라미터(패킷 내용) :
    • Client MAC : 클라이언트의 MAC 주소

2) DHCP Offer

  • 패킷 방향 : DHCP 서버 -> 클라이언트
  • 브로드캐스트 메시지 : Destination MAC = FF:FF:FF:FF:FF:FF 혹은 유니캐스트.
    • 클라이언트가 보낸 DHCP Discover 메시지 내의 Broadcast Flag의 값에 따라, Flag=1이면 DHCP 서버는 DHCP Offer 메시지를 Broadcast로, Flag=0이면 Unicast로 보낸다.
  • 의미: DHCP 서버가 "저 여기 있어요~"라고 응답하는 메시지이다. 단순히 DHCP 서버의 존재만을 알리지 않고, 클라이언트에 할당할 IP 주소 정보를 포함한 다양한 네트워크 정보를 함께 실어서 클라이언트에 전달한다.
  • 주요 파라미터(패킷 내용) :
    • Client MAC: 단말의 MAC 주소
    • Your IP: 단말에 할당(임대)할 IP 주소
    • Subnet Mask (Option 1)
    • Router (Option 3): 단말의 Default Gateway IP 주소
    • DNS (Option 6): DNS 서버 IP 주소
    • IP Lease Time (Option 51): 단말이 IP 주소(Your IP)를 사용(임대)할 수 있는 기간(시간)
    • DHCP Server Identifier (Option 54): 본 메시지(DHCP Offer)를 보낸 DHCP 서버의 주소. 2개 이상의 DHCP 서버가 DHCP Offer를 보낼 수 있으므로 각 DHCP 서버는 자신의 IP 주소를 본 필드에 넣어서 단말에 보낸다.

3) DHCP Requeset

  • 패킷 방향: 클라이언트 -> DHCP 서버
  • 브로드캐스트 메시지 : Destination MAC = FF:FF:FF:FF:FF:FF
  • 의미: 단말은 DHCP 서버(들)의 존재를 알았고, DHCP 서버는 단말에 제공할 네트워크 정보(IP 주소, subnet mask, default gateway 등)를 알았다. 이제 단말은 DHCP Request 메시지를 통해 하나의 DHCP 서버를 선택하고 해당 서버에게 단말이 사용할 네트워크 정보를 요청한다.
  • 주요 파라미터(패킷 내용) :
    • Client MAC: 단말의 MAC 주소
    • Requested IP Address (Option 50): 난 이 IP 주소를 사용하겠다. (DHCP Offer의 Your IP)
    • DHCP Server Identifier (Option 54): 2대 이상의 DHCP 서버가 DHCP Offer를 보낸 경우, 단말은 이 중 하나의 DHCP 서버를 선택하고, 그 서버의 IP 주소가 여기에 들어간다. 즉, DHCP Server Identifier에 명시된 DHCP 서버에게 DHCP Request 메시지를 보내어 단말 IP 주소를 포함한 네트워크 정보를 얻는 것.

4) DHCP ACK

  • 패킷 방향: DHCP 서버 -> 클라이언트
  • 브로드캐스트 메시지 : Destination MAC = FF:FF:FF:FF:FF:FF 혹은 유니캐스트.
    • 단말이 보낸 DHCP Request 메시지 내의 Broadcast Flag=1이면 DHCP 서버는 DHCP ACK 메시지를 Broadcast로, Flag=0이면 Unicast로 보낸다.
  • 의미: DHCP 절차의 마지막 메시지로, DHCP 서버가 단말에게 "네트워크 정보"를 전달해 주는 메시지. 앞서 설명한 DHCP Offer의 네트워크 정보와 동일한 파라미터가 포함된다.
  • 주요 파라미터(패킷 내용) : DHCP Request 패킷의 파라미터와 동일하다.

1.3 DHCP의 특징

DHCP의 기능

  • Automatic Allocation: Client에게 Permanent IP 주소를 할당한다.
  • Dynamic Allocation: 제한된 기간동안 살아 있는 Non-Permanent IP 주소를 Client에게 할당한다. (혹은 Client가 명시적으로 주소에 대해서 포기하기 전까지 유효한 IP 주소를 할당할 수도 있다. 최근에 자주 쓰는 것은 제한된 기간동안 살아 있는 IP 주소이다.)
  • Manual Allocation: Client의 IP 주소를 네트워크 관리자로부터 할당 받는 방식이다. 이 때 DHCP는 네트워크 관리자로부터 받은 IP 주소를 그저 나르는 용도로만 사용된다.

DHCP에서 지켜져야 하는 사항

  • Unique한 Network Address를 할당하는 것을 보장해야 한다.
  • Client 재부팅 시 DHCP에 대한 Client 설정을 유지해야 한다.
  • 새로운 Client에게는 설정 값들에 대한 자동 할당을 해줘야 한다.
  • 특정 Client에게는 설정 값에 대한 고정 값 할당을 지원해야 한다.

DHCP의 핵심적인 장점

  • IP 주소 설정의 중앙화된 관리
  • Dynamic한 Host 설정
  • 끊어짐 없이 아주 매끄러운 IP Host 설정
  • Flexibility, Scalability

DHCP의 단점

  • DHCP Server가 이용 불가능한 상태라면, Client 측에서는 기업들이 제공해주는 네트워크에 대해서 접근 자체를 할 수 없는 상태가 된다.
  • 새로운 IP 주소를 할당 받았다면, 내 기기의 이름은 변경이 불가능하다.
  • DHCP는 Unreliable 하고 Insecure한 UDP를 이용한다.
  • 2가지의 주요 보안 문제가 있다. (DHCP는 Unauthenticated Protocol이다.)
    • 네트워크에 연결할 때 사용자는 Lease (임차권)을 얻기 위해 어떤 자격 증명도 하지 않아도 되는 형태이므로, DHCP DISCOVER 메세지에 대해서 검증이 이뤄지지 않게 된다. 따라서 이는 DHCP Starvation(고갈) 공격으로 이어질 수 있다.

- 어떤 Host든 DHCP Server인척할 수 있다. 이는 곧 DNS Spooffing 공격으로 이어질 수 있다.

2. DNS 프로토콜 (Domain Name Server)

네트워크의 각 컴퓨터에는 고유한 IP 주소가 있고, 이는 인터넷에서도 마찬가지이다. 인터넷에 연결된 모든 네트워크 또는 컴퓨터 서버에도 고유한 주소가 있다. 우리가 자주 방문하는 사이트의 각 IP 주소를 매번 기억하는 것은 불편하고 불가능하다. 그래서 우리는 도메인 이름(www.으로 시작하는 주소)을 사용한다. 사용자가 입력한 도메인 이름을 숫자 xxx.xxx.xxx.xxx 형태의 IP 주소로 변환해주는 일을 바로 DNS가 수행하는 것이다. 결과적으로 우리는 특정 사이트의 IP 주소를 기억하는 대신 www.youtube.com 처럼 URL을 기억함으로서 편리하게 접근할 수 있다.

2.1. DNS의 특징

  • 도메인 네임과 IP 주소의 대응 관계를 데이터베이스로 구축해 사용하는 인터넷 프로토콜이다.
  • 클라이언트에게 DNS를 제공하는 것은 DHCP 서버의 책임이다. 따라서, DNS는 브라우징을 단순화하는 매우 특별한 목적을 수행하는 인터넷 상의 또 다른 컴퓨터라고 볼 수 있다.
  • 이러한 DNS를 운영하는 서버를 네임서버(Name Server)라고 한다.
📎 DNS란 Domain Name System의 약어이다. 인터넷 상의 사용자가 어떤 것을 참조하려고 할 때 인터넷 상에서 정해진 이름으로 참조할 수 있도록 해주는 시스템이다. 이 시스템은 특정 이름을 주소로 변환해주는 메커니즘을 사용한다. **따라서 이는 곧 Domain 이름을 IP 주소로 Mapping 시키는 것이 가능하다는 것을 의미한다.** 즉, DNS는 Names과 Numbers 사이에 Mapping 기능을 제공해준다. (일반적으로 사용자들은 Names → Numbers에 대한 변환을 더 많이 이용하고, 컴퓨터는 Numbers → Names를 더 많이 이용한다.)

DNS를 구성하는 3가지 요소는 Domain Name Space (DNS Name Space), Name Server (DNS Name Server), Resolver (DNS Resolver)이다.

DNS Name Space

  • URL을 사용할 때 www.intra.42.fr 과 같은 주소가 있다고 하자. intra 아래에 있는 42fr들이 Name Space라고 생각할 수 있다.

  • 인터넷은 200개가 넘는 최상위 Domain들로 나뉘어져 있다. 여기서 나뉘어진 Domain들은 다시 Sub-Domain으로 나뉘어지기 때문에 모든 Domain들은 위 그림과 같이 Tree 형태로 나타낼 수 있다. 위에서 나타난 것처럼 최상위 Domain들은 Generic하거나 Country를 표현할 수 있어야 한다.
  • Leaf Domain은 하나의 Host만 갖고 있을 수도 있고, 매우 많은 Host들을 두고 있는 하나의 회사를 나타낼 수도 있다. 이 때 Leaf Domain이라 함은 더 이상의 Sub-Domain이 없는 Domain을 의미한다. (Sub-Domain은 없지만 Host에 해당하는 Machine은 존재할 수 있다.)

DNS Name Server

  • 어떤 Web Server가 있고, Web Client가 있을 때 두 Machine은 숫자로 이뤄진 IP 주소를 이용하여 통신하게 된다. 이게 가능하기 위해선, 문자로 표현된 Domain Name이 숫자로 이뤄진 IP 주소로 변환이 되어야 한다. 이 과정을 위해서 위에서 언급된 Tree 형태로 된 DNS Name Space 정보가 필요하며, 이 정보를 갖고 있는 DNS Name Server가 필요한 것이다. Name Space 정보를 통해서 DNS Name Server는 Domain Name과 IP 주소 간 변환을 수행해주고, 이렇게 변환된 IP 주소에 대한 정보를 해당 작업을 요청했던 Resolver (Client)에게 가져다 준다.
  • DNS Name Server의 경우 각 지역 별로 존재하는데, 각 지역 별로도 2개의 Name Server를 두어 주 Server (Primary Server)가 터지면 부 Server (Secondary Server)를 이용할 수 있도록 해두었다.
  • Secondary Server의 경우 주기적으로 Primary Sever로부터 정보들을 받아와서 Update를 수행한다.

DNS Resolver

  • DNS Resolver라고 하는 것은 End User System (Endpoint에 위치한 사용자의 시스템)과 DNS Name Server 사이에 위치한 Proxy (Intermediary Agent)로 중개자 역할을 수행한다.

  • Domain Name은 계층(Layer)별로 구분되며 각 계층을 Domain Level이라고 부른다. 각 Level에서의 Host는 자신을 지칭하는 Label Name을 갖고 있는데, 이 때의 Domain Name은 자신을 지칭하는 Label Name으로 시작하여 최상위 Host의 Label Name까지로 나타낸다. 이 때 각 Label Name은 .으로 구분된다. 아래의 그림을 통해 쉽게 이해할 수 있다.

  • 네임라벨이 다음과 같이 주어졌을때 각 라벨의 의미를 알아보자. → sshin.first.co.kr

각 Label의 의미

2.2. DNS의 절차

  1. 특정 사이트를 방문하기위해 사용자가 브라우저에 도메인 이름(URL)을 입력한다.
  2. 브라우저는 DNS에 접속하여, 입력한 도메인 이름과 관련된 IP 주소를 요청한다.
  3. 획득한 IP 주소를 사용하여 브라우저는 그 컴퓨터와 통신하고, 이후 사용자로부터 받은 특정 페이지에대한 요청을 전달한다.

8. 네트워크 계층의 프로토콜 IP와 라우팅 (Routing)


지금까지 데이터 전송의 원리와 프로토콜에 대해 알아보았다. 마지막으로 데이터(패킷)를 어떻게 전송하는지 즉, 라우터가 데이터를 라우팅 하는 과정에 대해 알아보자.

💡 라우터(길찾기, 길안내)는 IP 네트워크, 서브넷을 관리하면서, 다수의 네트워크를 연결하고, 다른 네트워크를 거쳐 데이터를 전송한다. 그래서 라우팅이란 어떤 네트워크 안에서 데이터를 보낼. 경로를 선택하는 과정이라고 할 수 있다.
💡 라우터의 엄밀한 정의는 OSI 7 계층 중 3계층에서 동작하며 Routing protocol을 사용하여 IP Packet이 원하는 목적지까지 원할하게 갈 수 있도록 경로를 정해주는 역할을 하는 장비이다. 이러한 기능을 비슷하거나 필요한 정도로 가지고 있을때 '게이트웨이의 역할을 할 수 있다'고 한다.
📎 **IP (Internet Protocol) 설계 목적** 현재 우리가 사용하는 네트워크처럼 Packet Switch가 가능한 컴퓨터 간의 네트워크 통신이 가능하도록 Internet Protocol이 설계되었다. Internet Protocol은 Source로부터 Destination까지 Datagram이라고 하는 데이터 블록들을 전송할 수 있게 해주게 해준다. (여기서 말하는 Source와 Destination은 특정 길이의 IP 주소로 명시된 Host를 의미한다.) 이 때 IP는 Network Layer에서 최소한의 기능만 수행하며, Small Packet만 지원하는 네트워크에서도 통신이 가능하도록 긴 Datagram에 대해서 Fragment 및 Reassemble를 지원한다.IP는 기본적으로 2가지 Function을 실행한다. 하나는 Addressing이고, 나머지 하나는 Fragmentation이다.

Internet Module들은 IP Header에 명시되어 있는 주소를 이용하여 Destination으로 Datagram을 전송하는데, 이 때 Destination으로 데이터를 보내기 위해 경로를 찾는 것을 Routing이라고 한다.

1. 라우터의 개념

라우터는 전용회선을 통해 LAN(근거리 통신망)에 연결된 컴퓨터들이 동시에 인터넷을 사용할 수 있게 하는 장비이다. 데이터를 목적지까지 전달하는 기능을 수행하며 또한, 2개 이상의 서로 다른 네트워크를 접속하고 이들간에 데이터를 주고 받게 하는 중계의 기능도 수행한다.

2. 라우터의 동작원리

  • 라우터는 패킷의 전송경로를 결정하기(라우팅) 위해 랜테이블, 네트워크테이블, 라우팅테이블을 사용한다. 라우터는 상기의 3가지 테이블을 관리함으로써 다른 네트워크에 연결된 장치를 비롯하여 네트워크에 연결된 모든 장치들의 주소를 인식하고 이것을 바탕으로 패킷의 전송경로를 결정한다.

동일 네트워크 상의 장치로 패킷을 전송하는 절차

  1. 랜테이블을 검사한다. 이곳에서는 패킷의 목적지가 같은 네트워크에 있는지 아니면 다른 네트워크에 있는지를 확인한다.

    (랜테이블: 라우터에 연결되어 있는 랜 세그먼트 내 장치의 주소를 관리하고 있으며, 필터링 작업에 사용된다.)

  2. 네트워크 테이블을 검사하여 패킷을 전달할 네트워크 주소를 찾아낸다.

    ( 네트워크 테이블: 네트워크상의 모든 라우터의 주소를 보관하며, 패킷의 수신지 라우터를 식별하는데 사용된다.)

  3. 라우팅 테이블을 검색하여 가장 적합한 경로를 탐색하여 패킷을 보낸다.

    ( 라우팅 테이블: 각각의 라우터에 구축되어 있으며, 각 경로에 대한 정보를 유지하고 있어서 다른 세그먼트로 전송되는 패킷의 가장 효율적인 경로를 결정하는데 사용된다.)

3. 라우터의 목적지 검색 방법

3.1. 연결 (Connected)

물리적으로 직접 연결되어 있는 장비의 IP주소를 자동으로 검색한다. 이때 IP는 네트워크 주소로 라우팅 테이블에 저장된다.

3.2. 정적 (Static)

관리자가 직접 라우팅 경로를 선택해서 보낸다.

  • 장정: 경로관리에 가장 효율적이다.
  • 단점: 네트워크 변화에 대한 대처가 느리다.

3.3. 동적 (Dynamic)

각 라우터들이 갖고 있는 정보를 서로에게 공유하여 라우팅 테이블에 저장한다. 주기적으로 최적경로를 계산하여 라우팅 테이블의 정보를 유지하는 방식이다.

  • 장점: 네트워크 변화에 대한 대처가 빠르다.
  • 단점: 주기적으로 경로를 계산해야하므로 리소스 관리(CPU 사용량)에 있어 비효율적이다.

3.4. 재분배 (Redistribution)

정보 교환이 이루어지지 않는 장비들을 대상으로 관리자가 강제로 교환하는 방식이다.

Reference


Network

netwhat

[Network 요약] 레이어 별 용어정리

네트워크 이해(Feat. Netwhat 시험 대비하기)

ChoiKanghun/netwhat

[Netwhat] 연습문제 정리

네트워크 ARP 란?

네트워크 ICMP 란?

[Network] 네트워크 용어 - ICMP 란?

[네트워크📶] Tracert 작동원리 / Traceroute 작동 방식 ✨

[네트워크📶] ICMP란 / ICMP Type / ICMP에 대해 ✨

NAT IP란?

[NAT] NAT란? Static NAT, Dynamic NAT, PAT 비교

[네트워크 - NAT(Network Address Translation)]

공인 IP와 사설 IP, 쉽게 이해하기_ IPv4와 IPv6

NAT와 NAPT의 개념과 원리

모듈화, End-to-end 원칙, 그리고 Fate-sharing

[리눅스커널] SoftIRQ: ksoftirqd 스레드란

[리눅스커널] Soft IRQ 소개

sk_buff 에서 Mac header, IP v4 and v6 header, TCP header 파싱

profile
프론트엔드 엔지니어가 되기 위해 공부한 것들을 정리하고 공유합니다.

0개의 댓글