네트워크 부수기
[Network] 네트워크 관점에서의 웹 동작 방식
인터넷이란? 컴퓨터들이 서로 통신할 수 있는 거대한 네트워크로 물리적/무선으로 연결되어야 한다.
하나씩 연결이 복잡해지는 것을 해결하기 위해 라우터 사용, 모든 것을 라우터에 보내고 라우터로부터 받는다. 라우터들도 추가해 라우터간 연결, 라우터를 통한 컴퓨터 연결이 된다.
네트워크를 ISP에 연결, ISP는 라우터를 관리하고, 다른 ISP에도 접근할 수 있다. 우리가 보내는 네트워크의 메시지는 ISP 네트워크의 네트워크를 통해 전달
- 브라우저는 dns로 접속을 요청한다.
- 인터넷 서비스 제공업체(ISP)가 관리하는 DNS 해석기로 라우팅
라우팅이란? 라우터, 브릿지, 게이트웨이, 방화벽, 스위치와 같은 중간 지점을 거쳐 출발지부터 목적지까지 효율적으로 패킷의 전달을 하는 것
라우터란? 서로 다른 네트워크 간의 경로를 정해 패킷을 전달하는 장치, 네트워크 계층
브릿지란? 세그멘트를 연결하고 패킷을 전송하는 장비, LAN 간 전송, MAC, 데이터 링크 계층
스위치란? 허브처럼 포트에 들어온 것을 잘 나눠서 다른 포트로 전송하는 장치, IP+MAC, 데이터 링크 계층
게이트웨이란? 네트워크가 어디로 전송해야할지 연결해주는 장치, OSI 전계층 - ISP의 DNS 해석기가 요청을 DNS 루트 이름 서버에 전달해서 IP 주소 확보
도메인명은 트리 구조로 되어있다.
호스트명.제 3레벨 도메인(도메인명).제 2레벨 도메인.제 1레벨 도메인 DNS 서버는 LAN 안에 있는 클라이언트로부터 조회 받아 클라이언트 대신 인터넷에 조회해주는 캐시 서버, 외부 호스트로부터 자신이 관리하는 도메인(zone 파일이란 db에서 관리) 조회받는 콘텐츠 서버로 나뉜다. 캐시서버가 트리의 오른쪽부터 도메인명 관리하는 서버 찾아 ip주소 알려주는 것이이름 해결
이 dns 서버는 tcp, udp 둘 다 사용
- 인터넷 서비스 제공업체(ISP)가 관리하는 DNS 해석기로 라우팅
- 브라우저는 서버에게 웹사이트 사본을 달라는 HTTP 요청 메시지 만든다.
- http 요청 헤더
GET / HTTP/1.1 : HTTP전송 방법과 프로토콜 버전
Host: 요청하는 서버 주소
User-Agent: OS/브라우저 정보
Accept: 클라이언트 이해 가능한 컨텐츠 타입
Accept-Language: 클라이언트 인식 언어
Accept-Encoding: 클라이언트 인코딩 방법
Connection: 전송 완료후 접속 유지 정보 (keep-alive)
Upgrade-Insecure-Requests:신호를 보낼때 데이터 암호화 여부
Content-Type: 클라이언트에게 반환되어야하는 컨텐츠 유형
Content-Length: 본문크기
- http 요청 헤더
- 메시지를 서버로 전송, 이 때 브라우저는 서버와 TCP 커넥션을 맺는 것과 같은 TCP/IP 연결을 통해 전송됨
참고
패킷 구경-
TCP/IP란?
OSI 계층에서 통용적으로 사용되는 계층
인터넷과 관련된 다양한 프로토콜의 집합(IEEE, DNS, HTTP, TCP, IP, ICMP …)으로 일반적인 네트워크를 동작시킨다. -
application layer
File Transfer Protocol, DNS, HTTP와 같이 유저에게 제공되는 어플리케이션에서 사용하는 통신의 움직임을 제어하는 계층
HyperText Transfer Protocol + Domain Name System: 클라이언트(웹 브라우저) <-> 서버 - transport layer
Transmission Control Protocol, User Data Protocol과 같이 어플리케이션 계층에 네트워크로 접속되어 있는 두 대의 컴퓨터 사이의 데이터 흐름 제공
TCP: 큰 데이터를 보내기 쉽게 TCP 세그먼트란 단위 패킷으로 작게 분해해 관리하는 것(바이트 스트림 서비스)을 제공하는 것으로 데이터를 분해해 보내고 잘 갔는지 확인하는 역할
three way handshaking이라는 방법을 사용해 데이터를 전송하고 이중 하나라도 실패하면 다시 전송송신측은 SYN 플래그로 상대에게 접속함과 동시에 패킷을 보냄 수신측은 SYN/ACK 플래그로 송신측에 접속함과 동시에 패킷 수신 송신측이 ACK 플래그를 보내 완료 확인
-
network layer
네트워크 상에서 이동 경로를 포함해 패킷(전송하는 데이터의 최소 단위)의 이동 제어
Internet Protocol(IP): 패킷을 상대방에게 전달(Media Access Control Address는 각 네트워크 카드에 할당된 고유의 주소)
IP 통신은 다음 중계할 곳인 MAC 주소를 찾아가며 이루어진다. MAC은 변하지 않는다.
목적지를 찾아가면서도 Address Resolution Protocol이 사용되는데 이는 수신지의 IP 주소를 바탕으로 MAC 주소 찾는다. - link layer
하드웨어 측면으로 디바이스 드라이버, Network Interface Card와 같은 물리적인 부분
-
송신 계층을 거칠 때마다 헤더를 더해 캡슐화 하고, 수신 계층을 거칠때마다 헤더를 삭제하며 데이터 전달
송신 ---HTTP message---> HTTP data ---TCP segment---> +TCP header ---IP datagram---> +IP header ---network frame---> +Ethernet header
- World Wide Web을 구성하는 HyperText Markup Language
-
Uniform Resource Identifier
는Uniform Resource Locator
의 서브셋으로 차례대로스키마, 자격정보, 서버주소, 서버포트, 계층적 파일 경로, 쿼리 문자열, 프래그먼트 식별자
전달 - HTTP 요청
HTML 문서 같은 리소스들을 가져올 수 있도록 해주는 프로토콜(데이터 교환 방식을 정하는 규칙의 집합, 헤더, 메서드, 바디 등등)- response 헤더
HTTP/1.1 200 ok : 프로토콜 버전과 응답상태
Access-Control-Allow-Origin: 서버에 타 사이트의 접근을 제한하는 방침
Connection: 전송 완료후 접속 유지 정보 (keep-alive)
Content-Encoding: 미디어 타입을 압축한 방법
Date: 헤더가 만들어진 시간
ETag: 버전의 리소스를 식별하는 식별자
Keep-Alive: 연결에대한 타임아웃과 요청 최대 개수 정보
Last-Modified: 웹 시간을 가지고 있다 수정되었을때만 데이터 변경 ( 캐시연관 )
Server: 웹서버로 사용되는 프로그램 이름
Set-Cookie: 쿠키 정보
Transfer-Encoding: 인코딩 형식 지정
X-Frame-Options: frame/iframe/object 허용 여부 - 바디
- response 헤더
- 서버는 클라이언트의 요청을 받아 처리하고, 그에 따른 HTTP 응답 메시지를 작성한다.
- 데이터 처리 과정
Controller <-> Service <-> Repository <-> DB
- 데이터 처리 과정
-
서버는 클라이언트와 TCP 연결을 맺는다.
-
메시지를 전송한다.
- 연결을 close하면 클라이언트는 http 바인딩
[Network] Application layer
응용계층 프로토콜과 그 역할
원격 접속, 파일 전송, 전자 메일, 네트워킹 지원, 호스트 초기화, 원격 호스트 관리
- socket programming
소켓은 프로세스가 데이터를 보내거나 받기 위해 데이터를 쓰거나 읽는 것
protocol, ip 주소, port number로 정의
떨어져있는 server socket, client socket의 통신
application layer에서 socket을 통해 tcp/udp로 가는 것
SOCK_STREAM: TCP 소켓
SOCK_DGRAM: UDP 소켓
server의
socket(): socket 생성 ->
bind(): ip와 port번호 설정 ->
listen(): 수신 대기열을 만들어 몇 개의 클라이언트 대기시킬지 결정 ->
accept(): client connection 올떄까지 block
client의
socket(): 소켓을 연다 ->
connect(): 통신할 서버의 설정된 ip와 port 번호에 통신 시도 ->
accept(): 서버가 클라이언트의 socket descriptor 반환 ->
write() -> read() -> close()
통신할때 다 사용
-
HTTP
http는 서버와 클라이언트 간 통신을 한다.
request와 response는 상호 교환된다.
request: 메서드, uri, 프로토콜 버전, 옵션 리퀘스트 헤더필드, 엔티티
response: 프로토콜 버전, 상태 코드, 옵션 리스펀드 헤더필드, 바디
http는 상태를 유지하지 않는 프로토콜
리퀘스트 uri로 리소스를 식별- GET: 리소스 획득
- POST: 엔티티 전송
- PUT: 파일 전송
- HEAD: 메시지 헤더 취득
- DELETE: 파일 삭제
- OPTIONS: 제공하고 있는 메서드의 문의
- TRACE: 경로조사
리퀘스트 보낸 곳에 어떤 리퀘스트가 가공되어 있는지 조사(크로스 사이트 트레이싱 보안 문제) -
CONNECT: 프록시에 터널링 요구
서버에서 클라이언트 직접 연결되면 http, tls 이용한 연결되면 https, https를 위한 프록시를 통하는 것을 CONNECT 메서드를 통함 -
지속 연결로 접속량 절약
하나 보낼때마다 tcp 연결과 종료를 하여 통신량 증가
지속 연결이란 어느 한쪽이 명시적으로 연결을 종료하지 않는 이상 tcp 연결을 유지하는 것
tcp 연결과 종료를 반복하지 않아 서버에 대한 부하 경감 -
파이프라인화
리퀘스트 송신 후에 리스폰스까지 기다리다가 리퀘스트를 발행하던 것을 리스펀스를 기다리지 않고 다음 리퀘스트를 보낼 수 있도록 한다. - 쿠키를 통한 상태 관리
stateless 프로토콜은 cpu나 메모리 같은 리소스의 소비 억제
상태를 기록하기 위한 쿠키가 만들어짐
-
TELNET
인터넷, 로컬 영역 네트워크 연결에 사용
23번 포트를 사용하는 것
터미널 에뮬레이션 프로토콜인 NVT 사용
보안이 추가된 것이 SSH -
FTP
TCP/IP 프로토콜을 가지고 서버와 클라이언트 사이의 파일 전송 담당
20번 포트(데이터), 21번 포트(제어)를 사용하는 것
Active : client가 21번 포트에 요청 전송 -> server가 요청 수신 -> 답신 -> server가 20번 채널에서 데이터 전송 -> client가 요청 수신 -> 답신
Passive : client가 21번 포트에 요청 전송 -> server가 요청 수신 -> 답신 -> client가 임시 채널에 데이터 전송 -> server가 요청 수신 -> 답신
더 간단하게 UDP 기반으로 파일 전송하는 것이 TFTP, 69번 포트 사용 - SMTP
TCP 25번 포트를 이용해 이메일을 보내기 위한 간이 전자 우편 전송 프로토콜
모든 문자가 7bit ASCII로 되어 있어야 한다.
POP3, IMAP와 함께 사용되어 서버 메일함에 저장하고 서버에서 주기적으로 메시지 다운로드
POP3 서버에 등록된 계정이 있어야 한다.(이메일주소)S: 220 smtp.example.com ESMTP Postfix C: HELO relay.example.org S: 250 Hello relay.example.org, I am glad to meet you C: MAIL FROM:<bob@example.org> S: 250 Ok C: RCPT TO:<alice@example.com> S: 250 Ok C: RCPT TO:<theboss@example.com> S: 250 Ok C: DATA S: 354 End data with <CR><LF>.<CR><LF> C: From: "Bob Example" <bob@example.org> C: To: "Alice Example" <alice@example.com> C: Cc: theboss@example.com C: Date: Tue, 15 January 2008 16:02:43 -0500 C: Subject: Test message C: C: Hello Alice. C: This is a test message with 5 header fields and 4 lines in the message body. C: Your friend, C: Bob C: . S: 250 Ok: queued as 12345 C: QUIT S: 221 Bye {The server closes the connection}
-
DNS
DNS 리커서: 애플리케이션을 통해 클라이언트 컴퓨터로부터 쿼리를 받도록 고안된 서버
루트 이름 서버: 호스트 이름을 IP 주소로 변환하는 첫 단계, 특정 위치에 대한 참조로 사용
TLD(최상위 도메인) 이름 서버: 호스트 이름의 마지막 부분 호스팅
권한 있는 이름 서버: 최종 IP 주소를 dns 리커서에 반환
참고 -
RARP
BOOTP보다 이전에 사용하던 것으로 MAC 주소로부터 IP 주소 추출 -
BOOTP
TCP/IP에서 자동 부팅을 위한 최초의 표준프로토콜
IP주소, 부트 파일이 있는 서버 이름, 부트 파일 이름 세 정보를 제공받는다.
진보된 DHCP를 더 많이 사용한다.
IP address, subnet mask address, DNS address, gateway address 와 같은 네트워크 그룹에 가입하기 위해 필요한 정보나, domain상에서 통용되는 터미널의 이름을 전달해 준다. - SNMP
라우터, 스위치, 서버 등을 이용해 IP 네트워크 장치로부터 정보를 수집, 관리, 수정하는 데에 사용되는 프로토콜
컴퓨터 네트워크에서 호스트나 장치들의 그룹을 관리하는 일 수행
managed device(노드에 특화된 정보에 대한 접근 허용), agent(네트워크 관리 소프트웨어 모듈), Network management Station(디바이스 감시하고 제어하는 어플리케이션 실행)
Remote host management: Simple Network Management Protocol (SNMP), Common Management Information Protocol over TCP (CMOT)
소켓 vs http?
포트의 역할?
subnet mask??
HTTPS
http에 tls 보안을 추가한게 https
-
Secure Sockets Layer
웹사이트와 브라우저 사이에 전송된 데이터를 암호화하여 보안을 유지하는 표준 기술(프로토콜)이었는데 이제 TLS로 더 많이 불리운다. -
Trasport Layer Security
Application Layer <—-TLS Layer—-> Transport Layer
Tranfer Layser Security로 전송 계층에서 보안을 설정하는 것을 이야기한다. SSL이라고 웹 사이트와 브라우저 간 데이터를 암호화하여 유지하는 기술을 사용한다.
패킷 스니핑을 하면 전송계층에서 보내지는 패킷이 무엇인지 볼 수 있는데 tcp/ip는 이 데이터가 평문이라 중요한 정보를 탈취하기 쉽다.
이를 피하기 위해 tls라는 설정을 사용해 데이터를 암호화한다.
tls는 데이터를 암호화하여 주고받는다. 이 과정에서 클라이언트와 서버 간의 인증이 유효한지, 세션키가 존재하는지 등의 확인을 handshake로 하는 과정이 존재한다.
[핸드셰이크 과정](https://namu.wiki/w/TLS#s-1.3.5)
1. Client Hello: 클라이언트는 서버에게 지원 가능한 방식(암호, 키교환, 서명 등)을 서버에 알려준다.
2. Server Hello: 서버는 클라이언트에게 지원 가능한 방식을 응답
3. Certificate Message: 서버는 공개키(RSA 암호)가 포함된 서버 인증서 클라이언트에 발송
4. Server Hello Done: 서버의 전송 끝나면 메시지 전달
5. Client Certificate: 서버가 클라이언트 인증서를 요구할 때 클라이언트가 서버에 인증하기 위한 SSL 인증서 전송
6. 클라이언트는 전송받은 서버 인증서가 유효한지 확인하고, 세션키로 사용될 `Pre-Master Key`를 랜덤으로 생성해 공개키로 암호화해 서버로 전송, ClientKeyExchange 메시지에 Pre-Master Key가 포함된다.
7. 서버는 자신의 개인키로 클라이언트에게 전송받은 세션키(대칭키) 복호화해서 `Pre-Master key`를 알아낸뒤 이를 이용해 master secret 생성
이후로 master secret에서 세션 키 생성해내고 서버-클라이언트 간 통신을 암호화하는 데에 사용한다.
8. 서로에게 `ChangeCipherSpec` 메시지를 보내고, `Finished` 메시지를 보내 과정이 끝남을 알린다.
이렇게 설정된 tls와 같이 비즈니스 로직이 아닌 과정에서 문제를 일으키고 싶지 않은 경우 reverse proxy를 사용한다. 대표적으로 nginx와 같은 기술로 구현되는 리버스 프록시는 지역끼리 연결된 것을 wan으로 관리되도록 도와주는 포워드 프록시와 다르게 wan을 lan으로 옳겨준다.
사용자가 접근하면 자신과 lan으로 연결된 비즈니스 로직에 요청을 전송하는데 이 과정에서 tls가 적용되어 암호화 된 것이 proxy로, 프록시에서 그 암호를 풀어 비즈니스 로직으로 전송하는 과정이 이루어진다.
포워드 프록시는 여러 클라이언트에 대해 적용되고, 리버스 프록시는 여러 서버에 대해 적용된다.
리버스 프록시를 통해 보안성, 성능, 확장성 등이 상승될 수 있다.
공개키를 보내고 인증을 받으면 공유키로 http 전송을 하도록 하는 것
- Reverse Proxy
Client <–> Internet <–> Proxy <–> Web server
was가 비즈니스 로직만 담당하도록 하고 TLS와 같은 부수적인 기능으로 영향을 주고 싶지 않을 때 사용
load balancing, 보안성(백엔드 infra 숨김), 확장성, 웹 속도 향상, 압축/ssl 처리로 백엔드 자원 확보/캐싱
Reverse Proxy
는 클라이언트로부터 요청을 받아서 적절한 웹 서버로 요청 전송 -> 웹 서버는 요청 받아 처리 후 reverse proxy
로 반환 -> reverse proxy
는 응답을 클라이언트로 반환
- (foward) proxy: LAN -> WAN 요청 대리 수행, 여러 클라이언트에 대한 프록시로 클라이언트에 더 가깝다.
- reverse proxy: WAN -> LAN 요청 대리 수행, 여러 서버에 대한 프록시로 서버에 더 가까이 존재한다.
ex) nginX
-
nginX http로 들어오면 httpsㄹ redirect하는 역할
http 서버의 역할: 정보를 웹 브라우저에 전송하는 역할
리버스 프록시 역할: 가짜 서버에 클라이언트가 요청하면 프록시 서버가 reverse 서버로부터 데이터 가져오는 역할
참고 -
load balancer
하나의 서버의 성능을 높이는 것을 scale up
여러 대의 서버가 분산 처리할 수 있도록 작업을 나눠주는 서비스
서버에 접근하는 작업량을 특정 알고리즘에 의해 분산시켜 부하를 분산해주고, 서버상태를 체크하고, 세션 관리를 해준다.
l4, l7이 존재하는데 전송계층, 표현 계층에서 적용되는 차이가 있다.
사용 알고리즘
- round robin: 요청을 순서대로 각 서버에 배분
- Least Connection: 서버에 연결되어 있는 수가 가장 적은 서버에 연결
- Weighted Least Connection: 서버의 처리 능력에 가중치를 두어 가중치와 least conneciton을 종합 판단해 적절한 서버에 연결
- Fastest Response Time: 가장 빨리 응답하는 서버에 연결
- Hashing: 사용자의 IP를 해싱해 연결, 동일한 사용자는 동일한 서버에 연결
종류
- L4: Transport layer에서 수행, 패킷 레벨에서 밸런싱해 빠르고 안전, 저렴, 섬세한 라우팅 불가능, 연속적인 서비스 제공 불가
- L7: Application layer애서 수행, 캐싱 기능, 섬세한 라우팅, 비정상적인 트래픽 사전 필터링 가능, 비쌈, 보안 상 위험
이점
- 비용 절감
- SPOF 해결: 단일 서버 에러 발생 시 모든 동작 불가능한 것 해결
- 확장 용이성: 더 많은 사용자에 대해 서버 확장 시 용이
HTTP 책 정리
- 서버 인증: 위조된 서버 아님
- 클라이언트 인증: 진짜 사용자
- 무결성: 데이터 위조로부터 안전
- 암호화: 탈취 걱정 없이
- 효율: 빨라야 함
- 편재성: 모든 클라이언트, 서버에서 지원
- 관리상 확장성: 어디서든, 누구든 보안 통신
- 적응성: 최선의 보안
https는 ssl 또는 tls라고 불리우는 보안 계층이 더해진 것
디지털 서명
메시지에 붙어있는 특별한 암호 체크섬
서명은 메시지의 작성자를 알려주고 메시지 위조를 방지한다.
디지털 인증서
신뢰할 수 있는 기관(letsencrypt)으로부터 보증 받은 사용자나 회사에 대한 정보 갖고 있음
서버의 인증을 위해 인증서가 사용된다.
웹 사이트의 이름과 호스트 명, 웹 사이트의 공개키, 서명 기관의 이름, 서명 기관의 서명을 서버 인증서가 갖고 있다.
브라우저가 인증서를 받으면 서명 기관을 검사한다. 신뢰할 만한 서명 기관이면 브라우저는 임 ㅣ공개키를 알고 있다.(인증서가 설치된 채로 출하된다.)
모르는 기관이면 신뢰할 수 없는 ~~입니다. 하고 클라이언트에 보여주고 확인받는다.
https:// -> 443 연결 -> 서버와 핸드셰이크 -> 암호화된 http 명령 주고받는다.
사이트 인증서 검사(날짜 검사, 서명자 신뢰도 검사, 서명 검사, 사이트 신원 검사)
[Network] Network layer
데이터 링크에서 MAC 주소를 기반으로 한 같은 네트워크에 있는 통신을 지원한다면,
네트워크 계층은 IP 주소를 기반으로 서로 다른 네트워크의 소통을 가능하게 한다.
인터넷에 접속할 때는 IP주소의 설정이 필요하다.
DHCP로 공유기에서 자동으로 IP 설정을 해주면 문제가 없지만 서버로 사용하거나 고정 IP 설정을 하려 하면 넷마스크나 게이트웨이같이 정확한 주소를 알아야 한다.
IP
네트워크 환경에서 패킷 교환을 위해 네트워크를 찾아가는 주소로 컴퓨터(노드) 간 통신하기 위해 각 컴퓨터에게 부여된 네트워크 상 주소로 변화할 수 있다.
네트워크 주소와 호스트 주소로 나뉜다.
- 네트워크 주소
네트워크 고유의 번호 - 호스트 주소
각각의 컴퓨터를 나타내는 번호로 자유롭게 할당할 수 있다.
IPv6
- source 와 destination 주소가 128 bit (16 bit씩 8개의 블럭)
- 예시
2001:0db8:0000:0000:8a2e:0370:7334
- IP주소 고갈 문제의 해결을 위한 미래를 위한 주소체계
- 고속 전송 & 멀티미디어 트래픽을 지원
- 상용화 X, 근래에는 스마트폰에서 내부적으로 사용(핫스팟)
- 패킷 크기 확장, 흐름제어 기능 지원, 인증 및 보안 기능, 이동성(물리적인 위치에 제한받지 않음)
IPv4
- source 와 destination 주소가 32 bit
- 32자리로 이루어진 2진수, 하나의 10진수는 8자리의 2진수로 대체되고 이를
옥텟
이라고 부르고, ip 주소는 4개의 옥텟으로 구성된다. 192.168.1.2
:192.168.1
까지가 네트워크 주소(공통부분)이고2
는 나만의 호스트 IP(식별할 수 있는 부분)- 인터넷을 사용할 때 공유기나 라우터는 공인 IP를 할당받는다.
- 공인 IP가 사설 IP로 변환해주며 통신을 가능하게 해준다.
- 이렇게 하는 이유는 IPv4 자원의 고갈을 막기 위해서이다.
- 모든 인터넷을 IP로 하기에는 부담이 되므로 사실은 서로 다른 사설망에서는 같은 IP주소를 사용할 수 있도록 하는 것이다.
- 공유기는 인터넷에 접속하려는 장비에게 랜덤으로 한정된 수량의 사설 IP주소를 할당하고 이 장비들이 하나의 IP로 통신하도록 하는 것이다.
- 사설 IP로는 실제 인터넷에 접속할 수 없다.
IP주소의 클래스
네트워크의 크기에 따라 하나의 네트워크에서 몇 개의 호스트 IP를 가질 수 있을지 구분하는 것이다.
- A 클래스
네트워크 128개, 한 네트워크 당 발생할 수 있는 아이피 개수는 16777216개
첫 옥텟이 네트워크 부분, 0으로 시작, 나머지가 호스트 부분으로 0.0.0.0 ~ 127.255.255.255 - B 클래스
네트워크 16384개, 아이피 개수 65536개
첫번째, 두번째가 네트워크, 10으로 시작, 나머지가 호스트, 128.0.0.0 ~ 191.255.255.255 - C 클래스
네트워크 2097152개, 256개
첫번째, 두번째, 세번째가 네트워크, 110으로 시작, 나머지가 호스트, 192.0.0.0 ~ 223.255.255.255 - D 클래스, E 클래스
멀티캐스트, 연구용으로 잘 사용되지 않음
사설 IP
외부에서 접속할 수 있는 공인 IP만 공유기에 할당하고 공유기에 연결된 기기들은 내부에서만 사용할 수 있는 사설 IP를 할당한다.
사설 IP는 내부에서만 사용할 수 있어 외부 IP와 중복되어도 상관없다.
- NAT
공인 IP와 사설 IP를 변환해준다.
아래 과정을 통해 동작한다.- 호스트가 자신의 IP와 출발지 포트번호와 함께 패킷을 전송
- NAT 라우터는 패킷을 받아서 패킷에 대한 출발지 포트번호 생성, IP 주소 변경하고 포트번호 변경
- 웹 서버는 NAT 라우터 IP와 포트번호 응답
- 패킷이 NAT 라우터에 도착했을때 라우터는 사설망 IP 주소와 포트번호로 응답 패킷 전송
포트포워딩
공유의 특정 포트로 들어온 접속을 사설 IP의 특정 포트로 전달하도록 설정하는 것
사설 IP를 할당받은 기기를 웹서버로 활용해 외부에서 사설 IP에 접근이 필요한 경우 공유기로 들어온 요청을 해당 기기로 전달한다.
서브넷
하나의 네트워크를 나누어 효율적으로 사용하기 위한 네트워크 안의 네트워크
서브넷 마스크를 이용해 서브넷에 마스크를 씌워 필요없는 IP는 가림으로써 네트워크를 나눔
네트워크를 운영 중인 서비스의 규모에 맞게 분할해 낭비되는 IP주소 자원을 최소화하는 것이 주된 목적
연결된 디바이스가 많아지면 오는 성능의 저하를 서브넷을 통해 사용 가능한 네트워크의 규모를 줄여 부하를 줄일 수 있다.
IP 주소에서 네트워크 영역을 부분적으로 나눈 부분 네트워크이다.
네트워크 장치 수에 따라 효율적으로 IP를 사용하기 위해 만들어진 것이다.
서브넷 마스크
- IP주소와 같이 32비트로 구성
IP 주소와 서브넷 마스크 주소를 AND 연산하면 네트워크 주소를 구할 수 있다.
서브넷을 만들 때 사용하는 것으로 서브넷 마스크를 통해 IP의 Network ID와 Host ID를 분리한다.
IP 주소 = Network Prefix + Subnet Number + Host Number
Subnet mask는 IP 주소와 AND 연산해 Network의 정보를 걸러내려 하는 것으로 32bit의 이진수이다.
32비트로 구성된 IP주소에서 1은 네트워크 영역, 0은 호스트 영역으로 구분된다.
넷마스크 주소가 255.255.255.0으로 표시되고 IP 주소가 192.158.5.20이면 네번째 부분인 256개의 호스트를 하나의 네트워크로 묶는다는 의미를 가진다.
네트워크주소는 192.168.5.0으로 최하위값을 할당하고, 브로드캐스트는 192.168.5.255로 최상위 값을 할당한다.
여기서도 네트워크를 더 나누고 싶으면 서브넷 마스크 주소를 바꾸면 된다. 마스크 주소가 255.255.255.128이 되면 0~127, 128~255로 나누어진다.
CIDR(Class InterDomain Routing)
클래스 주소보다 유연하게 IP 주소를 나눠주는 라우팅 기법
IP 주소를 a.b.c.d/x로 표현
x는 처음 나오는 주소의 prefix로 비트 수를 의미
서브넷 마스크를 개수로 표현하는 것으로 /<개수>
를 보고 이를 통해 CIDR로 서브넷을 나눈다.
DHCP(Dynamic Host Configuration Protocol)
클라이언트-서버 프로토콜로 동적으로 IP 주소를 할당해주는 것이다.
IP 주소는 수동으로 할당받을 수도 있다.
다음과 같은 과정을 통해 동작한다.
- DHCP 서버 발견: 새롭게 도착한 호스트는 브로드캐스팅을 통해 DHCP에 메시지 전송
- DHCP 서버 제공: DHCP가 제공 메시지를 호스트에 전송
- DHCP 요청: 호스트가 DHCP 요청 메시지 전송
- DHCP ACK: 서버는 DHCP 요청 메시지에 대한 응답 전송
브로드캐스트
특정 네트워크에 속하는 모든 호스트들이 보는 주소
할당된 호스트가 192.168.12.0부터 192.168.12.255라면 브로드캐스트주소는 192.168.12.255dlek.
네트워크 주소에서 서브넷마스크의 0으로 된 비트를 모두 1로 바꾸면 브로드캐스트
게이트웨이
서로 다른 통신망, 프로토콜을 사용하는 네트워크가 연결해주기 위해 지나는 네트워크 포인트. 1번이나 254번을 할당한다.
종류가 다른 네트워크 간의 통로 역할로, 외부와 내부 네트워크를 연결하는 인터페이스가 될 수도 있다.
- 컴퓨터1에서 컴퓨터6에 접속하려면 라우터의 IP주소(기본 게이트웨이)를 설정해야 한다.
- 컴퓨터1은 다른 네트워크로 어디로 전송해야할 지 몰라 네트워크의 출입구(기본 게이트웨이)를 지정하고 라우터로 전송한다.
- 라우터가 IP를 확인해 목적지까지 보낸다.