Search

[네트워크] 외워서 끝내는 네트워크 핵심이론 - 기초

강의

수강에 앞서 기초지식

1.
bit, byte 등 정보 표현의 단위를 알고 있다.
2.
1byte는 8bit임을 알고 있다.
3.
bit단위 논리연산을 할 수 있다.
4.
2진수를 16진수로 변환할 수 있다.
5.
1024MB가 1GB임을 알고 있다.
6.
Process와 Program의 차이를 알고 있다.
7.
OSI 7 Layer라는 말을 알고 있다.
8.
범용 운영체제는 User mode와 Kernel Mode가 존재한다는 것을 알고 있다.
9.
Buffer의 의미를 알고 있다.
10.
개념(Abstraction)과 구현(Implementation)의 차이를 안다.
11.
나는 ‘외워서’라도 네트워크를 잘 알고 싶다.

Section0. 들어가기에 앞서

Layer와 Layerd 구조

Layer라는 것은 다시 말하면 의존적이라는 말이다.
ex) 4는 3에 의존적이다.
의존적이라는 것에서 더 나아가서 존립의 문제이다.
ex) 3은 4의 전제 조건이고 3이 없다면 4도 없다.

Network와 Networking

네트워크는 관계이고 계층을 가진다.
네트워킹은 상호작용이고 네트워크 계층들을 통해 이루어진다.
네트워크 계층별로 프로토콜이라는 규칙을 정한다.

개념과 구현

연예인은 개념이다.
개념에 대한 실제적 사례를 구현이라고 한다.
개념과 구현의 관계를 상속관계라고 한다.
관계를 그리는 규칙은 UML(Unified Modeling Language)라고 한다.

User mode와 Kernel mode

User mode, Kernel mode 관점에서의 네트워크 작동방식
네트워킹을 하기 위해선 LAN 카드라고 부르는 NIC(Network Interface Card) 하드웨어가 필요하다.
하드웨어를 제어하고 작동시키기 위한 소프트웨어로 Driver가 필요하다.
Driver 위엔 kernel mode를 이루고 있는 OS(운영체제)가 존재하고 프로토콜(TCP/IP)이 구현된 소프트웨어가 들어있다.
user mode엔 application이 있고 kernel mode의 구성요소에 접근하기 위해 kernel에서 정의한 Socket이라는 인터페이스를 사용해야한다.
OSI 7 Layer에 대입한 네트워크 작동방식
L7(Application), L6(Presentation), L5(Session) : User mode의 application에 해당한다.
L4(Transport) : TCP에 해당한다.
L3(Network) : IP에 해당한다.
L2(Data Link) : NIC의 일정 펌웨어를 포함한 Driver에 해당한다.
L1(Physical) : NIC에 해당한다.
Socket이란?
네트워킹을 추상화한 인터페이스이며 FILE이다.
네트워킹을 하고자 하는 Process에 의해 FILE이 열리고 Socket을 열었다고 표현한다.

Section1. Internet 기반 네트워크 입문

OSI 7 Layer와 식별자

각 Layer별 식별자
L2 : NIC마다 할당되는 MAC 주소
L3 : 인터넷을 사용하는 컴퓨터(host)에 할당되는 IP 주소 (v4/v6)
L4 : Port 번호
L2의 관점에서는 유선 케이블을 꽂는 단자에 해당하는 인터페이스 식별자
L3, L4의 관점에서는 특정 포트를 개방한 웹 서비스 식별자
L5, L6, L7의 관점에서는 프로세스 식별자
미국 방위성 DoD(Department of Defense)가 나눈 OSI 7 Layer
Network Access 계층 : L1, L2를 합친 하드웨어 계층
Internet 계층 : L3 계층
Host to Host 계층 : L4 계층
Application 계층 : L5, L6, L7를 합친 계층

Host란?

Host : Network에 연결된 Computer
Switch : Network 자체를 이루는 Host
ex) Router, IPS, Tab Switch, Aggregation Switch 등
End-Point : Host에서 Network를 사용하는 이용 주체(단말기)
ex) Client, Server, Peer

Swtich가 하는 일

Network는 고속도로망과 유사하다.
출발지에서 목적지까지 가다가 만나는 교차로는 Swtich이다.
교차로에서 경로를 선택했다는걸 Switching했다고 한다.
Switching의 근거를 IP 주소를 통해서 하면 L3 Switching(Router)이 된다.
Switching 가능한 IP 주소를 표로 만든 것이 Routing Table이다.
Switching의 근거를 MAC 주소를 통해서 하면 L2 Switching이 된다.
Switching의 근거를 HTTP 프로토콜을 통해서 하면 L7 Switching이 된다.
Network에서의 단위. 즉, 고속도로망에서 자동차는 Packet이다.
Switching을 할 때 드는 비용을 Matric이라고 한다.

Section2. L2 수준에서 외울 것들

NIC, L2 Access Switch, L2 Distribution Switch

NIC(Network Interface Card)란?
흔히 LAN(Local Area Network) 카드이다.
네트워크 망 규모 : WAN > MAN > LAN
유/무선 NIC이 있지만 굳이 구별하지 않고 NIC이라고 할 때가 많다.
NIC은 H/W이며 MAC 주소를 갖는다.
NIC이 해당되는 L2에서 사용하는 데이터 단위는 Frame이다.
L2 Access Switch란?
End-Point와 직접 연결되는 스위치
L2 스위치이기 때문에 MAC 주소를 근거로 스위칭
이 스위치의 단자를 Port라고 부르기도 한다.
L2 Access Switch까지의 연결 유무를 Link-up/Link-down 이라고 부른다.
L2 Access Switch에서 Route까지의 연결 유무를 Up-link/Down-link라고 부른다.
L2 Distribution Switch란?
L2 Access Switch를 위한 스위치
VLAN(Virtual LAN) 기능을 제공하는 것이 일반적이다.

LAN과 WAN의 경계 그리고 Broadcast

Broadcast
Broadcast 범위를 생각해보자.
Broadcast는 광역으로 송출하는 방송과 유사하다.
Unicast는 Broadcast의 반대말로 특정 주소로 송출한다.
Broadcast는 네트워크 효율을 떨어트리므로 범위를 최소화해야한다.
Broadcast 주소라는 매우 특별한 주소가 존재한다. (MAC, IP 모두 존재)
네트워크에서는 AND 연산을 하기 때문에 목적지의 식별자 값이 모두 1인 경우가 Broadcast이다.
LAN과 WAN
논리적인 것인지 아니면 물리적인 것인지로 구분하는 것도 방법이다.
L1, L2에 해당하는 H/W 부분인 Physical 계층을 LAN으로 인식하라.
L3부터 해당하는 S/W 부분인 Logical 계층을 WAN으로 인식하라.
위처럼 인식하면 이해하는데 도움이 된다.
일단 MAN(Metropolitan Area Network)은 제외하자.

Section3. L3 수준에서 외울 것들

IPv4 주소의 구조

L2의 식별자인 MAC 주소는 48bit 체계를 갖는다.
L3의 식별자인 IP 주소는 32bit(8bit * 4) 체계를 갖는다.
8bit는 0000 0000(0) ~ 1111 1111(255) 까지의 값을 갖는다.
앞의 24bit는 Network ID이고 뒤의 8bit는 Host ID를 나타낸다.

L3 IP Packet으로 외워라

Packet은 단위 데이터이다.
Packet이라는 말은 L3 IP Packet으로 외워라
Header와 Payload로 나뉘며 이는 상대적인 분류이다.
Header엔 source, destination(IP or MAC or Port) 정보가 포함된다.
최대 크기는 MTU(Maximum Transmission Unit)이고 1500bytes(1.4kb)이다.

Encapsulation과 Decapsulation

Header와 Payload#1 까지 전체를 L2의 단위 데이터인 Frame이라고 한다.
L2의 Payload 안엔 또 Header와 Payload가 존재하며 이는 L3의 단위 데이터인 IP Packet이다.
L3의 Payload 안엔 또 Header와 Payload가 존재하며 이는 L4의 단위 데이터인 TCP Segment이다.
L4의 Payload부턴 Steam 형식을 가진다.
Header와 Payload를 하나의 Payload로 감싼 후 Header를 붙이는 것을 Encapsulation이라고 한다.
Payload안에 Header와 Payload 쌍을 꺼내는 것을 Decapsulation이라고 한다.

패킷의 생성과 전달

철수(Process)가 영희(Process)한테 책(Data)를 보낸다.
책(Data)는 택배박스(Packet)에 포장되어 있다.
택배박스(Packet)는 현관(Interface)을 통해 택배기사(Gateway)에게 전달된다.
택배기사(Gateway)는 물류체계(Routing)에 의해 영희(Process)네 집(Host)에 배달한다.
영희 엄마는 택배박스(Packet)의 이름(Port)를 보고 영희(Process)에게 택배박스(Packet)를 준다.
Process에서 Data는 Socket을 통해서 send된다.
TCP에서 Data에 TCP Header를 붙여서 Segment를 만든다.
IP에서 Segment에 IP Header를 붙여서 Packet을 만든다.
Driver에서 Packet에 Frame Header를 붙여서 Frame을 만든다.
이 Frame은 L2 Access Switch, Router Gateway 등을 타고 Internet으로 나가게 된다.

계층별 데이터 단위

Socket의 데이터 단위는 Steam이다.
Steam은 시작은 정해져 있지만 끝은 application 단위에서 정한다.
Steam은 크기의 제한이 없다.
TCP의 데이터 단위는 Segment이다.
Segment는 MSS(Maximum Segment Size)가 존재하고 1460bytes이다.
Segment를 만드는 과정에서 MSS 단위로 Steam을 분할하고 이것을 Segmentation이라고 한다.
UDP에선 Datagram이라는 단위를 사용한다.
IP의 데이터 단위는 Packet이다.
Packet은 MTU(Maximum Transmission Unit)가 존재하고 1500bytes이다.
L1~L2의 데이터 단위는 Frame이다.

TCP/IP 송수신구조

IPv4 Header 형식

IP Packet
IP Packet의 MTU(Maximum Transmission Unit) 크기는 1500bytes이다.
IP Header의 크기는 20bytes이다.
IP Header
Version : 4bit면 IPv4를 의미한다.
IHL : Internet Header Length로 IP Header의 길이를 의미한다.
TOS : Type of Service를 의미한다.
Total Length : IP Packet의 길이를 의미한다.
Identification, Flags, Fragment offset : Segmentation과 관련있는 정보들을 의미한다.
TTL : Time to Live로 인터넷 유통 과정에서 HOP이라는 단위를 지날 때마다 감소하며 0이되면 소멸
Protocol : Header의 Payload를 어떤 형태로 해석해야하는지를 의미하며 고유 번호를 갖는다.
Header Checksum : Packet에 대한 손상을 검사하기 위한 체크섬 값이다.
Source address : 출발지
Destination address : 도착지

Subnet Mask와 CIDR

Mask 연산
Net Mask와 IP를 비트 AND 연산하는 것
네트워크 장비에서 Packet이 우리 네트워크로 유입되는건지 확인하기 위한 것
IP Class
A class : Network ID를 8bit까지 보는 것
B class : Network ID를 16bit까지 보는 것
C class : Network ID를 24bit까지 보는 것
Subnet Mask
IP Class를 가려내기 위한 방법론
CIDR 도입 배경
IP Class를 가려내기 위해 Subnet Mask를 통해 Mask 연산을 효율적으로 하기 위한 과거의 방법
현대는 컴퓨터 성능이 좋아져 IP Class를 가려낼 필요가 없어짐
CIDR이란
Classless Inter-Domain Routing으로 클래스 개념이 없는 것
Subnet Mask 대신 ‘192.168.0.10/24’ 같이 ‘/’ 뒤에 Network ID로 간주할 bit를 명시
Subnetting이란
Host ID를 줄이고 Network ID를 늘려서 네트워크를 더 잘라내는 것

LocalHost IP 주소

127.0.0.1은 Loopback Address라고 한다.
Loopback Address를 목적지로 통신하면 L3 Layer까지만 가고 네트워크로 Packet이 전달되지 않는다.

TTL과 단편화

TTL(Time To Live)은 세포의 텔로미어 같은 역할을 한다.
Internet에서 Packet이 목적지까지 가기 위해 Router를 통과할 때마다 TTL을 1씩 감소시킨다.
Router를 통과하는 단위를 HOP이라고 한다.
Internet에 목적지를 잃은 좀비패킷들로 인한 네트워크 마비를 방지하고자 TTL을 사용한다.
단편화는 MTU 크기 차이로 발생한다.
MTU는 보통 1500bytes이고 MTU가 다른 Router를 위해 Packet을 자르는걸 단편화라고 한다.
단편화는 네트워크 통신의 효율성을 떨어트린다.
네트워크 장비들의 MTU를 일정하게 유지하든가 가장 낮은 MTU에 맞춰서 하향평준화 해야한다.
VPN, IPSec 같은 이유로 MTU가 낮아질 수 있다.
보통 단편의 조립은 수신측 Host의 TCP/IP에서 이루어진다.

인터넷 설정 자동화를 위한 DHCP

인터넷 사용 전에 해야 할 설정
IP 주소
Subnet Mask
Gateway IP 주소
DNS 주소
DHCP란?
Dynamic Host Configuration Protocol로 주소를 할당하는 서버와 할당 받으려는 클라이언트로 구성된다.
복잡한 인터넷 설정을 자동으로 해준다고 볼 수 있는데 핵심은 내가 사용할 IP 주소를 서버가 알려준다는 것에 있다.
DHCP 작동원리
IP를 할당 받으려는 PC가 DHCP 서버를 찾는 Broadcast Packet을 보낸다.
DHCP 서버가 아닌 경우 응답하지 않고 DHCP 서버면 응답한다.
기존에 사용했던 IP가 있다면 유효한지 물어보고 아니라면 새로운 IP를 할당받는다.
DHCP 서버는같은 Broadcast Domain에 묶여있어야 한다.

ARP(Address Resolution Protocol)

ARP란?
ARP는 IP 주소로 MAC 주소를 알아내려 할 때 활용된다.
보통의 경우 PC를 부팅하면 Gateway의 MAC 주소를 찾아내기 위해 ARP Request가 발생하며 이에 대응하는 Reply로 MAC 주소를 알 수 있다.
ARP가 필요한 이유
TCP/IP를 통해 Network 통신을 하는 과정에서 L2 Frame의 Soruce address는 해당 PC의 MAC Address이고 Destination address는 Gateway의 MAC Address이고 그 안에 IP Header에 실제 목적지의 IP Address가 존재한다.
DHCP Broadcast Packet을 통해서는 Gateway의 MAC Address를 알 수 없다.
그러므로 ARP Request를 통해 Gateway의 MAC Address를 알아내야한다.

Ping과 RTT

Ping 유틸리티(그냥 프로그램)는 특정 Host에 대한 RTT(Round Trip Time)을 측정할 목적으로 사용된다.
ICMP 프로토콜을 이용한다.
DoS(Denial of Service) 공격용으로 악용되기도 한다.

Section4. L4 수준 대표주자 TCP와 UDP

TCP와 UDP의 개요

TCP에만 연결(Connection, Session) 개념이 있다.
연결은 결과적으로 순서번호로 구현된다.
연결은 ‘상태(전이)’ 개념을 동반한다.
TCP는 배려, UDP는 배려가 없는 것에 비유할 수 있다.

TCP 연결과정 (3-way handshaking)

3-way handshaking은 TCP 연결을 위한 Client와 Server 간의 Sequence 번호 + 정책을 교환하는 과정이다.
각 연결마다 생성한 Sequence 번호와 MSS를 주고 받음으로써 연결을 성공했다고 판단한다.
전달하는 데이터는 Payload가 없는 Segment이다.
과정
1.
Client는 SYN_SENT를 통해 Sequence 번호를 전달
2.
LISTEN 상태의 Server는 SYN_RCVD를 통해 전달받은 Client의 Sequence 번호에 1을 더한 값과 Server의 Sequence 번호를 함께 응답
3.
Client는 Server의 ACK을 통해 연결이 성립됐다고 판단하고 전달받은 Server의 Sequence 번호에 1을 더한 값을 응답
4.
Server는 이 때 연결이 성립됐다고 판단

TCP 연결종료 (4-way handshaking) 및 상태변화

4-way handshaking은 TCP 연결을 종료하기 위한 Client와 Server 간의 과정이다.
과정
1.
Client는 FIN + ACK를 통해 Server에 연결종료를 알리고 FIN_WAIT1 상태로 변경
2.
Server는 CLOSE_WAIT 상태로 변경하고 ACK을 통해 연결종료를 시작하겠다고 알림
3.
Server의 ACK을 받은 Client는 FIN_WAIT2 상태로 변경
4.
Server가 연결 종료가 되면 FIN+ACK을 통해 연결종료가 완료됐다고 알리고 LAST_ACK 상태로 변경
5.
Client는 TIME_WAIT 상태로 변경하고 ACK을 통해 연결종료를 마무리하겠다고 알림
6.
일정 시간이 지나면 Client의 TIME_WAIT에서 CLOSED로 상태가 변경되고 소켓이 회수됨

TCP, UDP 헤더형식

Source Port : 출발지의 포트 번호
Destination Port : 도착지의 포트 번호
Sequence Number : 3-way handshaking에 사용하는 번호로 데이터의 bytes단위 길이만큼 증가한다.
Acknowledgment Number : 3-way handshaking에 사용하는 번호로 Sequence 번호에 + 1 한 값
Data offset : Payload 위치를 계산하기 위한 offset 값
Flag : TCP의 상태를 결정하기 위한 값
Window Size : Buffer의 여유공간 크기
Checksum : 데이터 손상 여부를 확인하기 위한 값
Source Port : 출발지의 포트 번호
Destination Port : 도착지의 포트 번호
Length : 전체 길이
Checksum : 데이터 손상 여부를 확인하기 위한 값

TCP ‘연결’ 이라는 착각

재전송 타이머의 기본 근사 값은 대략 3초이다. 하지만 대부분의 운영체제들은 1초 미만이다.
재전송 타이머 만료 후에도 확인 응답을 받지 못한 경우 세그먼트를 재전송하고 RTO(Retransmission Time-Out) 값은 두 배로 증가한다.
예를 들어 1초 > 2초 > 4초 > 8초 > 16초 간격으로 재전송한다.
보통 최대 5회 재전송을 시도하고 5회 이상 모두 실패할 경우 보통 전송 오류가 발생한다.
연결엔 보안의 3대 요소(기밀, 무결, 가용)이 존재하지 않는다.

Section5. 웹을 이루는 핵심기술

한 번에 끝내는 DNS

분산 구조형 데이터베이스
데이터베이스 시스템(DNS 네임서버)의 분산 구성
데이터의 영역별 구분(Domain Zone) 및 분산관리
도메인의 네임서버 및 도메인 데이터는 해당 관리주체에 의해 독립적으로 관리됨
트리 구조의 도메인 네임(Domain Name) 체계
Domain : 영역, 영토를 의미
도메인 네임의 자율적 생성
생성된 도메인 네임은 언제나 유일하도록 네임 체계 구성
www.naver.com
www는 naver에 속한 개념
www.naver는 com에 속한 개념
naver.com은 Domain Name이다.
www는 Host Name이다.
브라우저에서 www.naver.com에 접속하면 일어나는 일
DNS 주소에 접속하기 위해선 DNS 주소에 해당하는 IP 주소가 필요하다.
DNS 서버는 DNS 주소에 해당하는 IP 주소를 알고 있고 질의를 통해 알려준다.
KT, SKT 같은 ISP(Internet Service Provider) 회사들이 DNS 서버 역할을 해준다.
PC마다 DNS 서버를 통해 질의해 온 내용들은 Cache와 hosts 파일을 통해 관리되고 있다.
Cache를 통해 관리되는 DNS 주소와 IP 주소는 유효기간을 갖고 있다.
공유기가 DNS 서버의 포워딩 역할을 해주기도 한다.
ISP의 DNS 서버들 위에 Root DNS 서버가 존재하고 ISP도 Root DNS 서버에 질의하고 캐싱한다.
Root DNS 서버는 com. org 등의 계층형으로 존재하고 질의 또한 계층형으로 한다.

URL과 URI

URL은 URI에 포함되는 개념
URL (Uniform Resource Locator)
URI (Uniform Resource Identifier)
Protocol://Address:Port/Path(or Filename)?Parameter=Value

HTTP

HTTP는 HTML 문서를 전송 받기 위해 만들어진 응용 프로그램 계층(L7) 통신 프로토콜이다.
1996년에 1.0 스펙이 발표됐으며 1999년 6월에 1.1이 발표됐다.
기본적으로 클라이언트의 요청에 대응하는 응답형식으로 작동한다.
헤더는 다음과 같이 분류된다.
일반 헤더
요청 헤더
응답 헤더
엔티티 헤더
HTTP Method
GET
POST
HEAD
TRACE
PUT
DELETE
OPTIONS
CONNECT
요청에 사용되는 메서드는 주로 GET, POST이다.
HTTP 응답 코드
200 OK
요청이 정상적으로 처리됨
201 CREATED
요청에 대한 새로운 자원을 생성하는데 성공함
301 Moved Permanently
302 Found
400 Bad Request
HTTP 규약에 맞지 않는 요청
403 Forbidden
권한이 없거나 잘못된 파일 실행 접근시도
404 Not found
500 Internal server error

웹 서비스 기본 구조

웹 서비스의 발전
정적 웹
1.
HTTP Request GET을 통해 WEB 서버에 HTML 문서 or CSS or JPG 요청
2.
이미 만들어져있는 HTML 문서 or CSS or JPG 응답
3.
웹 브라우저는 HTML의 구문 분석 및 렌더링
동적 웹
1.
엔진과 JavaScript를 통한 웹 페이지의 동적 움직임
상태전이(기억)에 의한 웹
1.
HTTP Request POST를 통해 WEB 서버에 무언가 요청
2.
검증 혹은 무언가 로직을 거친 후 동적으로 생성된 HTML 문서 응답
웹 서버의 발전
WS 서버
단순한 송/수신 역할만 담당
WAS 서버
어떠한 로직에 대한 처리를 담당
Model, View, Controller의 MVC 패턴을 갖춘 서버
DB 서버
자료를 기억하는 역할을 담당
ODBC, JDBC 같은 인터페이스를 이용하여 SQL문을 통한 질의와 응답

WAS와 RESTful API 그리고 JVM

JVM
User Mode에서 돌아가는 Java를 위해 만들어진 CPU(Machine)
명령체계인 Java bytecode를 통해 작동
WAS
JVM을 기반으로 작동하는 TCP/IP, DB, File System 같은걸 처리해주는 Middleware가 존재
Servlet Container가 그것에 해당하고 대표적인 예로 Tomcat이 존재
RESTful API
UI, Data, 제어를 분리하자는 개발 설계원칙에 의해 UI에 해당하는 HTML과 Data가 분리
Data를 WAS를 통해 JSON, XML 형식으로 주고 받음
JavaScript를 통해 JSON, XML 형식의 Data로 HTML을 클라이언트측에서 생성
Data를 처리하기 위한 CRUD를 통틀어 API라고 부름
보안
WS 앞에는 IPS, SSL, WAF 같은 보안 시스템이 존재
클라이언트측에서 JavaScript를 받아서 실행하기 때문에 조작이 가능하며 검증은 서버에서 이뤄져야함