Created: May 14, 2021 9:47 PM
본 페이지는 다음의 학습목표를 기준으로 작성 하였다.
우리가 친구와 전화를 하기 위해서는 친구의 전화번호를 알아야 한다. 컴퓨터 네트워크 통신에서 전화번호에 해당하는 IP 주소는 어떠한 형식을 가지고 있는지 알아보자. IP 주소는 네트워크 주소와 호스트 주소로 이루어져 있다. 네트워크 주소와 호스트 주소를 나누는 규칙인 클래스의 개념에 대해서도 알아보자.
네트워크란 다수의 컴퓨터가 논리적 또는 물리적으로 연결되어 통신이 가능한 상태이다.

개별 네트워크 장비의 식별을 가능하게 하는 주소이다. 숫자 12개로 이루어진 고유한 값이다.
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는 특별한 용도를 위해 예약되어있다.
:
으로 구분되어 있다.// 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
하나의 네트워크가 가질 수 있는 호스트 주소의 수가 가장 많은 클래스이다.
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개이다.
IP address를 32자리-2진수로 표현했을 때 첫 비트가 항상 10
으로 고정된다.
→ 10xxxxxx. xxxxxxxx. xxxxxxxx. xxxxxxxx
따라서 네트워크 주소 영역의 크기와 함께 결정되는 호스트 주소의 개수는 (2^16)-2개이다.
IP address를 32자리-2진수로 표현했을 때 첫 비트가 항상 110
으로 고정된다.
→ 110xxxxx. xxxxxxxx. xxxxxxxx. xxxxxxxx
따라서 네트워크 주소 영역의 크기와 함께 결정되는 호스트 주소의 개수는 (2^8)-2개이다.
Class | 첫 고정 비트 | 네트워크 주소 영역 | 호스트 주소 영역 |
---|---|---|---|
A | 0 | 8 bit | 24 bit |
B | 10 | 16 bit | 16 bit |
C | 110 | 24 bit | 8 bit |
💡 MAC 주소, MAC Address란?
Media Access Control의 약자로 각 기기의 네트워크 카드(하드웨어)에 부여된 고유한 물리적 주소이다. 즉, 모든 네트워크 장비는 자신만의 고유한 MAC 주소를 가지고 있다. 48비트로 구성되어 있으며 16진수로 표시된다
윈도우에서는 터미널 →
ipconfig
명령어
Mac에서는 터미널 →ifconfig
명령어로 확인할 수 있다.
서브넷 마스크를 통해 서브넷팅을 진행하면 IP 주소의 네트워크 영역을 확장할 수 있다. 이의 목적은 브로드캐스트 주소의 수를 증가시켜 트래픽 문제를 해결하기 위함이다. 서브넷 마스크와 서브넷팅에 대해 알아보자.
.
으로 구분되어 있다.bitwise AND
연산을 수행하면 네트워크 주소를 얻을 수 있다.💡 넷마스크는 기본 서브넷 마스크를 의미하는데, 현재는 기술적 효율성을 고려하여 서브넷 마스크만 사용된다. 따라서 넷마스크를 서브넷 마스크로 통칭할 수 있다.
IP Address Classes: the Definitive Guide - RouterFreak
기본 서브넷 마스크는 별개의 서브넷 마스크를 생성하지 않아도 기본적으로 적용되어 있는, 현재의 클래스에 해당하는 서브넷 마스크를 의미한다.
예를들어, C클래스를 그대로 사용한다는 것은 C클래스 네트워크를 쪼개지 않고 2^8 -2개의 호스트 주소를 사용하겠다는 의미이고, 이때 255.255.255.0
이 기본 서브넷 마스크가 된다.
또한 이때 (기본) 서브넷 마스크로 쪼개진(AND 연산을 통해) 네트워크 주소를 서브넷(서브넷 네트워크)이라고 한다. 즉, IP 네트워크에 대한 논리적 분할의 결과물을 서브넷이라 한다.
IP 클래스별 기본 서브넷 마스크를 정리하면 다음 표와 같다.
/24
와 같은 것들은 기본 서브넷 마스크의 비트 수(네트워크 영역)를 의미한다.
→ 192.168.0.3/24의 서브넷 마스크는 255.255.255.0이다.
A class | Octet 1 | Octet2 | Octet3 | Octet4 |
---|---|---|---|---|
IP(예시) | 166 | 81 | 97 | 8 |
ID | Network ID | Host ID | Host ID | Host ID |
Subnet Mask(/8) | 255 | 0 | 0 | 0 |
B class | Octet 1 | Octet2 | Octet3 | Octet4 |
---|---|---|---|---|
IP(예시) | 166 | 81 | 97 | 8 |
ID | Network ID | Network ID | Host ID | Host ID |
Subnet Mask(/8) | 255 | 255 | 0 | 0 |
C class | Octet 1 | Octet2 | Octet3 | Octet4 |
---|---|---|---|---|
IP(예시) | 166 | 81 | 97 | 8 |
ID | Network ID | Network ID | Network ID | Host ID |
Subnet Mask(/8) | 255 | 255 | 255 | 0 |
📎 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이 된다.
📎 IP 클래스의 개념과 서브넷팅을 통해 궁극적으로는 Flexible한 Host Part 이용(Host Part 부분에 대한 유동적인 분할에 대한 명시)과 Hierarchical(계층적) Routing을 실현한다. 아래의 그림과 같은 형태의 IPv4 주소를 Hierarchical IPv4 Address라고 하는데, 이를 통해 Hierarchical Routing이 가능해진다면 목적지 대상이 되는 네트워크를 쉽게 인식할 수 있어 IP Routing에 도움이 된다.
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
으로 확장된다!0.0.0.0 ~ 0.255.255.255
에서 0.0.0.0 ~ 0.0.255.255
로 축소된다!192.168.2.0
이라고 한다면, 이때 브로드캐스트 주소는 192.168.2.255
가 된다!📎 "네트워크 관리자가 네트워크 성능을 향상시키기 위해, 자원을 효율적으로 분배하는 것입니ㅓ다. 여기서 자원을 효율적으로 분배한다는 것은 네트워크 영역과 호스트 영역을 분할 하는 것이라고 생각하면 됩니다." 네트워크적인 측면에서 말하자면, 너무 큰 브로드캐스트 도메인은 네트워크 환경에서 패킷전송을 느리게하고 성능저하를 발생시킵니다. 따라서 네트워크를 쪼개서 통신 성능을 보장하는 것입니다. 또한 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)란?
서브넷 마스크는 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개
IP는 Public과 Private 그리고 고정과 유동으로 그 종류를 나눌 수 있다. 각각의 종류에 대해 알아보자.
📎 IPv4 주소 체계는 크게 2가지, Public IP 주소와 Private IP 주소로 나누어져있다. 그렇다면 IP 주소를 Public과 Private로 나눈 이유는 무엇일까? 가장 큰 이유는 바로 할당 가능한 IPv4주소의 고갈이다. IPv4 주소 체계에서 이론상으로 약 43억 개의 단말을 식별할 수 있다. 하지만 점점 인터넷 사용자도 늘어나고 통신이 가능한 기계들이 점점 생겨나면서 43억 개의 주소가 부족한 시대가 왔다. 그래서 Public IP 주소와 Private IP 주소로 나누어 IP 주소를 절약하는 시스템을 만들었다.
이름 | Public IP | Private IP |
---|---|---|
할당 주체 | ISP(인터넷 서비스 공급자) | 라우터(공유기) |
할당 대상 | 개인 또는 회사의 서버(라우터) | 개인 또는 회사의 단말기 |
고유성 | 인터넷 상에서 유일 | 하나의 네트워크 안에서 유일 |
공개여부 | 내/외부 접근 가능 | 외부 접근 불가능 |
💡 Private IP 만으로는 인터넷에 직접 연결할 수 없다. **라우터를 통해 1개의 Public IP를 할당하는것이 선행된 뒤, 라우터에 연결된 개인 PC에 Private IP가 할당되어야 인터넷에 접속할 수 있다.**
💡 정리하자면 NAT란 외부에 공개된 Public IP 주소와 내부에서 사용하는 Private IP 주소가 다른 경우 네트워크 전송 수행 시 두 IP 주소를 맵핑하여 통신을 원활하게 해주는 기술이다. 보통 Router 혹은 방화벽에 설치되어 동작한다.
지금까지 전화번호와 유사한 개념인 IP 주소에 대해 알아보았다. 전화번호를 알고있는 친구에게 전화를 걸면 나의 음성 데이터가 친구에게까지 전달된다. 이때 데이터의 전달과정에서 음성데이터는 0과1로 이루어진 2진수의 집합 형태일 것이다. 이러한 데이터는 어떤 약속(표준화된 규약)에서 따라 통신되어 친구의 전화까지 전달될 것이다. 컴퓨터 네트워크 통신에서 이에 해당하는 개념인 데이터 전달의 원리와 이를 설명하기 위한 몇가지 모델에 대해 알아보자.
컴퓨터가 통신 과정에서 처리하는 데이터는 이진법 숫자 0과 1의 집합이다. 데이터의 통신은 결국 케이블을 통해전달되는 On, Off의 반복으로 이루어진 전기 신호를 통해 이루어진다. 이러한 전기신호를 해석하는 표준화된 기술적 규칙(규약)을 프로토콜이라 한다. 컴퓨터 네트워크에 대해 공부하는 것은 프로토콜에 대해 공부하는 것이라 생각해도 무방하다. 프로토콜에 대해 지금부터 이어지는 내용에 해당하는 몇몇 모델들에 대해 공부함으로써 이해해보자.
프로토콜의 엄밀히 정의는 Sender와 Reciver 상호간의 특정 목적을 효율적으로 달성하기 위해 명시된 규약이다.
해당 규약은 Format, Order, Action으로 구성된다.
Format: 통신에 있어서 메세지의 형식이 어떠한지
(메세지에 대해 정확한 형식을 지키지 않으면 해석 자체가 불가능하다.)
Order: 네트워크 개체 간에 해당 메세지를 어떤 순서로 받을 것인지
(형식을 준수한 메시지도 올바른 순서를 지키지 않으면 프로토콜에 대한 행동 수행이 불가능하다.)
Action: 특정 매세지를 받거나 전달하게 되면 어떤 행동을 수행할 것인지
(메세지에 대한 행동이 명확하지 않으면 형식과 순서를 준수해도 그에따른 행동을 예측할 수 없으면 무용지물이 된다.)
1) 양방향성 (Bidirectional): 통신을 해야하는 경우 각 계층은 송신과 수신 두가지에 대해서 역할을 수행할 수 있어야 한다.
2) 두 객체 아래의 계층들은 동일하게 쌓여 있어야 한다.
OSI 7 model은 컴퓨터 네트워크 통신 과정을 7개의 계층으로 구분한 산업표준참조모델이다. 송, 수신 시에 송신 측에서는 7 ~ 1 계층을 거쳐, 수신 측에서는 1 ~ 7 계층을 지나서 메세지(데이터)가 전달된다.
최하위 계층에 속하며, 상위 계층에서 전송된 데이터를 물리매체(허브, 라우터, 케이블 등)를 통해 다른 시스템으로 전기신호를 전송하는 역할을 한다.
💡 PDU란 Protocol Data Unit의 약자로, 데이터 통신에서 상위 계층이 전달한 데이터에 붙이는 제어 정보를 뜻한다. 해당 내용은 이후 5. **[PDU](%5BNetwhat%5D%20%20e6218.md)** Chapter에서 상세히 알아보자.
네트워크 기기들 사이의 데이터를 전송하는 역할을 한다. 시스템간 통신오류를 방지하기 위해 패킷을 프레임으로 구성하여 물리계층으로 전송한다.
💡 패킷은 pack과 bucket를 합친 단어이다. 우체국에서 화물을 일련의 기준에 따라 적당히 나누어 행선지를 표시하는 꼬리표를 붙이는 개념을 데이터 통신에 접목한 것이다. **즉, 정보를 보낼 때 특정 형태를 맞추어 보낸 다는 것이며, 패킷이란 제어 정보와 사용자 데이터로 이루어진 데이터의 형식화된 블록이다.** (앞으로 계속해서 이어지는 개념이니 꼭 기억하자.) 한편, 전반적인 네트워킹에서의 packet의 의미는, 회선교환(circuit switching)이 아닌 모든 데이터 교환을 일컬어 packet switching이라고 할 수 있다.
네트워크 기기에서 데이터그램(Datagram, 인터넷을 통해 전달되는 정보의 기본단위) 전송의 경로를 설정해주는 역할을 한다. 라우팅 알고리즘을 사용하여 최적의 경로를 산정하고, 송신측에서 수신측으로 전송한다. 이때, 전송되는 데이터는 패킷 단위로 분할하여 전송되며, 전송이 후에 다시 합쳐진다. 2계층이 노드 대 노드간 전송을 감독한다면, 3계층은 각 패킷의 목적지까지 전송을 감독한다.
💡 Routing, 라우팅이란? 상호 작용이 가능한 네트워크들을 구성하기 위해 독립적으로 운영되는 네트워크를 묶게 되면, Source에서 Destination까지 도달하기 위한 여러 경로(Multiple Routes)들이 생긴다. 이 때, Source에서 Destination까지 데이터를 보내는데 있어서 가장 좋은 경로를 결정하게 된다. 이러한 길찾기 기능을 Routing이라고 한다.
발신지에서 목적지간(End to End) 제어와 에러를 관리한다. 패킷의 전송이 유효한지 확인하고 전송에 실패한 패킷을 재전송 하는것과 같이 통신의 신뢰성을 보장한다. 헤드에는 세그먼트가 포함된다. 또한 주소설정, 오류 및 흐름제어, 다중화를 수행한다.
통신 세션을 구성하는 계층으로 포트(Port) 번호를 기반으로 연결한다. 통신장치간 상호작용을 설정하고 동기화하며 유지한다. 동시수신(Duplex), 반이중(Half-Duplex), 전이중(Full-Duplex) 방식의 통신과 함께 체크 포인팅과 유후, 종료, 재시작 등을 수행한다.
송신측과 수신측 사이에서 데이터의 형식(png, jpg, jpeg...)을 정해준다. 근본적으로는 데이터에 대한 Translate, Encrypt (Decrypt), Compress (Decompress) 등을 수행한다. 받은 데이터를 코드변환, 구문검색, 암호화, 압축의 과정을 통해 표준방식으로 변환한다. 예를 들어서 송신 시에 Encoding, Compressing을 작업 했다면, 수신 측에서는 Decoding, Decompressing 작업을 수행한다.
사용자와 바로 연결되어 있으며 응용 소프트웨어를 돕는다. 사용자로부터 정보를 입력받아 하위계층으로 전달하고 하위 계층에서 전송한 데이터를 사용자에게 전달한다. 파일 전송, DB, 메일 전송 등 여러가지 응용 서비스를 네트워크에 연결해주는 역할을 한다. 다시말해, 네트워크 자원에 접근할 수 있기 때문에, 송신과 수신을 위한 데이터를 네트워크에 제공하는 역할을 수행한다. 예를 들면 Internet Explorer 혹은 Google Chrome과 같은 Browser가 있을 수 있고, Gmail과 같은 Email Client가 있다.
앞서 OSI 7, TCP/IP 모델을 통해 계층구조로 구현된 데이터 통신의 원리에 대해 알아 보았다. 계층구조에서 데이터는 계층간 이동을한다. 이때 데이터의 본질적인 내용은 동일하지만 각 계층을 거치면서 헤더 정보가 추가되고 이름이 달라진다. 이와 관련하여, 데이터 통신에서 상위 계층이 전달한 데이터에 붙이는 제어정보==PDU(Protocol Data Unit)에 대해 알아보자. 이후 이어지는 Chapter에서는 구체적으로 전송계층, 응용계층에서 특정 프로토콜에 의해 데이터가 어떻게 가공되고 전달되는지 알아보자.
계층구조에서 제어정보를 추가한 계층에 따라 PDU를 지칭하는 이름과 포함하는 내용이 달라진다. 아래의 그림을 요약하면, 사용자는 PDU를 Data라 부르고, TCP(전송계층)는 Segment, IP(네트워크 계층)는 Packet, MAC(데이터링크 계층)은 Frame이라 부르고, 컴퓨터 하드웨어는 그것을 Bit로 연산하고 처리한다.
상위계층에서 전달받은 데이터를 전송계층에서는 아래의 정보들을 추가해서 그룹화 한다. 이때부터는 PDU가 세그먼트라 불리게 된다.
상위계층에서 전달받은 세그먼트는 네트워크계층 에서는 아래의 정보를 추가해서 그룹화 한다. 이때부터 세그먼트가 패킷이라 불리게 된다.
앞서 OSI 7, TCP/IP 모델을 통해 계층구조로 구현된 데이터 통신의 원리에 대해 알아 보았다. 구체적으로 전송계층의 프로토콜(표준화된 통신 규약)인 TCP, UDP에 대해 알아보자.
전송계층의 역할을 요약하면 전달되는 패킷의 오류를 검사하고 재전송 요구 등의 제어를 담당한다.
💡 포트번호는 컴퓨터 안에서 작동하는 애플리케이션을 식별하기 위해 사용하는 숫자이다. 소프트웨어 입장에서는 자신의 Process를 특정하는 Logical Identifier라고 볼 수 있다. 포트번호는 0~65535 까지 숫자로(2바이트로 표현) 범위에 따라 용도가 정해져 있다.
- System Ports (Well-Known Ports) → 0(0x0000) ~ 1023(0x03FF)
- User Ports (Registered Ports) → 1024(0x0400) ~ 49151(0xBFFF)
- Dynamic or Private Ports (Ephemeral Ports) → 49152(0xC000) ~ 65535(0xFFFF)
체크섬은 네트워크를 통해 전달된 값이 네트워크 오류에 의해 변경 되었는지 검사하는 값으로, 송신된 자료의 무결성을 보장하는것을 목적으로 한다.
TCP | UDP |
---|---|
연결이 성공해야 통신 가능 (연결형 프로토콜) | 연결없이 통신 가능 (비연결형 프로토콜) |
데이터의 경계를 구분하지 않음 (Byte Stream) | 데이터의 경계를 구분 (Datagram Service) |
신뢰성 높은 데이터 전송 (데이터의 재전송 존재) | 신뢰성 없는 데이터 전송 (데이터 재전송 없음) |
일대일 통신 (Unicast) | 일대일, 일대다(Broadcast), 다대다(Multicast) 통신 |
💡 TCP: 목적지가 꼭 특정되어야 하고, 상호 확인해야하므로 broadcast 할 수 없다. UDP : 목적지와 관계없이 일괄적으로 LAN에서 전송가능하므로 broadcast 가능하다.
💡 연결지향(CO: Connection-Oriented) 네트워크 서비스란 논리적 경로설정 후에 사용자 데이터를 전송하는 방식을 뜻한다. 양측 가입자 사이에 긴 메시지를 긴 시간 동안 교환하는 경우 유리한 방식이다.
📎 TCP가 개발된 배경은 군사적인 목적으로 어느 환경에서도 정상적으로 동작되는 네트워크 개발하기 위함이다. 이를 위해 사용된 것이 Pacekt 교환(Packet Switching) 방식으로 목적지에 따른 경로가 하나라도 존재한다면 통신이 끊어지지 않고 계속될 수 있도록 하였다. 다만 이 방식은 어떻게든 통신을 유지하는 것이 목적이므로 네트워크 환경의 안정성은 떨어질 수 밖에 없다. 이로 인해 중간에 데이터가 유실되거나 너무 늦게 전달되는 등 신뢰성이 떨어지는 문제가 있었는데, 이러한 문제점들을 해결하고자 신뢰성을 보장할 수 있는 통신 Protocol을 연구하게 됐고, 이에 따라 나온 것이 TCP이다.
ACK
(Acknowledgement, 확인응답)값이 연속적으로 전송되어야 한다.ACK
값의 중복이 발생한 경우 패킷 이상을 감지하고 재전송을 요청한다.일정시간동안 ACK
값을 수신하지 못한경우 재전송을 요청한다.
open()
을 실행한 클라이언트가 SYN(syncronize)
을 보내고 SYN_SENT
상태로 대기한다. SYN_RCVD
상태를 변경하고 SYN
과 응답 ACK
를 보낸다.SYN
과 응답 ACK
를 받은 클라이언트는 ESTABLIED
로 상태를 변경하고, 서버에게 응답 ACK
를 보낸다.ACK
를 받은 서버는 ESTABLISHED
로 상태를 변경한다.close()
를 실행한 클라이언트가 FIN
을 보내고 FIN_WAIT1
상태로 대기한다.CLOSE_WAIT
로 상태를 변경하고 응답 ACK
를 전달한다. 동시에 해당 포트에 견결되어 있는 어플리케이션에게 close()
를 요청한다.ACK
를 받은 클라이언트는 상태를 FIN_WIAT2
로 변경한다.close()
요청을 받은 서버 어플리케이션은 종료 프로세스를 진행하고 FIN
을 클라이언트에 보내 LAST_ACK
로 상태를 변경한다.FIN
을 받은 클라이언트는 ACK
를 다시 서버에 전송하고 TIME_WAIT
으로 상태를 변경한다. TIME_WAIT
에서 일정 시간이 지나면 CLOSED
된다. ACK
를 받은 서버도 포트를 CLOSED
한다.FIN
을 보내 종료를 요청할 수 있다. 즉, 어떤 측에서 먼저 close
를 요청하느냐에 따라 이후 일련의 과정이 진행된다!응용계층으로부터 데이터를 받은 TCP는 데이터에 TCP 헤더를 추가하여 데이터를 세그먼트(Segment)로 가공한다. 헤더에 어떠한 정보가 담겨있는지 알아보자.
📎 TCP는 앞서 말했던 것 처럼 데이터 신뢰성을 보장하기 위한 방식이기 때문에, 누락된 데이터를 모두 받기위한 메커니즘이 정의되어 있다. 그래서 이메일, 파일 전송과 같은 100% 데이터 보장이 필요한 분야에서 필수라고 할 수 있다. 하지만 만약 넷플릭스를 보는데 픽셀 한칸 데이터를 못받아서 버퍼링을 하며 모든 데이터를 정확하게 받기 위해서 멈추게 된다면 어떨까. 이처럼 실시간 스트리밍 서비스에선 TCP가 상당히 불편할 수 있기 때문에 통신의 최소 기능만을 수행하는 UDP를 이용한다.UDP는 간단하게 TCP의 모든 신뢰성 메커니즘 기능이 없다고 보면 된다. 수신 측과 접속했고 48Kbps로 전송 속도를 설정했으면 무조건 48Kbps로 데이터를 일방적으로 전송하기만 한다. 받는 쪽에서 모든 데이터를 정확하게 받았는지는 고려하지 않는다. 그래서 어느정도의 데이터 손실이 있을 수 있으나 통신 속도가 빠르다.
UDP 헤더는 TCP의 그것과 비교하여 정보의 양이 매우 적다. 결과적으로 신뢰성을 보장하지 못하지만 빠른 속도를 달성한다.
앞서 OSI 7, TCP/IP 모델을 통해 계층구조로 구현된 데이터 통신의 원리에 대해 알아 보았다. 구체적으로 응용계층의 프로토콜(표준화된 통신 규약)인 DHCP, DNS에 대해 알아보자.
📎 DHCP는 Host에게 TCP/IP 네트워크에서 사용되는 설정 정보들을 넘겨주는 Framework라고 볼 수 있다. **DHCP는 네트워크 관리자 (Network Administrator) 관리의 중앙화를 할 수 있게 해주고, 조직 네트워크에 대해서 IPv4 주소 할당을 자동화 할 수 있게 해준다.**
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서버에 IP주소를 요청한다. DHCP 서버로부터 IP주소를 할당 받으면 TCP/IP 설정이 초기화되고, 다른 호스트와 TCP/IP를 사용해서 통신을 할 수 있게 된다.
- 어떤 Host든 DHCP Server인척할 수 있다. 이는 곧 DNS Spooffing 공격으로 이어질 수 있다.
네트워크의 각 컴퓨터에는 고유한 IP 주소가 있고, 이는 인터넷에서도 마찬가지이다. 인터넷에 연결된 모든 네트워크 또는 컴퓨터 서버에도 고유한 주소가 있다. 우리가 자주 방문하는 사이트의 각 IP 주소를 매번 기억하는 것은 불편하고 불가능하다. 그래서 우리는 도메인 이름(www.으로 시작하는 주소)을 사용한다. 사용자가 입력한 도메인 이름을 숫자 xxx.xxx.xxx.xxx 형태의 IP 주소로 변환해주는 일을 바로 DNS가 수행하는 것이다. 결과적으로 우리는 특정 사이트의 IP 주소를 기억하는 대신 www.youtube.com 처럼 URL을 기억함으로서 편리하게 접근할 수 있다.
📎 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)이다.
www.intra.42.fr
과 같은 주소가 있다고 하자. intra
아래에 있는 42
와 fr
들이 Name Space라고 생각할 수 있다.sshin.first.co.kr
지금까지 데이터 전송의 원리와 프로토콜에 대해 알아보았다. 마지막으로 데이터(패킷)를 어떻게 전송하는지 즉, 라우터가 데이터를 라우팅 하는 과정에 대해 알아보자.
💡 라우터(길찾기, 길안내)는 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이라고 한다.
라우터는 전용회선을 통해 LAN(근거리 통신망)에 연결된 컴퓨터들이 동시에 인터넷을 사용할 수 있게 하는 장비이다. 데이터를 목적지까지 전달하는 기능을 수행하며 또한, 2개 이상의 서로 다른 네트워크를 접속하고 이들간에 데이터를 주고 받게 하는 중계의 기능도 수행한다.
랜테이블을 검사한다. 이곳에서는 패킷의 목적지가 같은 네트워크에 있는지 아니면 다른 네트워크에 있는지를 확인한다.
(랜테이블: 라우터에 연결되어 있는 랜 세그먼트 내 장치의 주소를 관리하고 있으며, 필터링 작업에 사용된다.)
네트워크 테이블을 검사하여 패킷을 전달할 네트워크 주소를 찾아낸다.
( 네트워크 테이블: 네트워크상의 모든 라우터의 주소를 보관하며, 패킷의 수신지 라우터를 식별하는데 사용된다.)
라우팅 테이블을 검색하여 가장 적합한 경로를 탐색하여 패킷을 보낸다.
( 라우팅 테이블: 각각의 라우터에 구축되어 있으며, 각 경로에 대한 정보를 유지하고 있어서 다른 세그먼트로 전송되는 패킷의 가장 효율적인 경로를 결정하는데 사용된다.)
물리적으로 직접 연결되어 있는 장비의 IP주소를 자동으로 검색한다. 이때 IP는 네트워크 주소로 라우팅 테이블에 저장된다.
관리자가 직접 라우팅 경로를 선택해서 보낸다.
각 라우터들이 갖고 있는 정보를 서로에게 공유하여 라우팅 테이블에 저장한다. 주기적으로 최적경로를 계산하여 라우팅 테이블의 정보를 유지하는 방식이다.
정보 교환이 이루어지지 않는 장비들을 대상으로 관리자가 강제로 교환하는 방식이다.
네트워크 이해(Feat. Netwhat 시험 대비하기)
[네트워크📶] Tracert 작동원리 / Traceroute 작동 방식 ✨
[네트워크📶] ICMP란 / ICMP Type / ICMP에 대해 ✨
[NAT] NAT란? Static NAT, Dynamic NAT, PAT 비교
[네트워크 - NAT(Network Address Translation)]
공인 IP와 사설 IP, 쉽게 이해하기_ IPv4와 IPv6
모듈화, End-to-end 원칙, 그리고 Fate-sharing