[Web/HTTP] 인터넷 네트워크(인터넷 통신, IP, TCP, UDP, PORT, DNS)
1. 인터넷 통신
클라이언트와 서버가 가까이 있으면 케이블로 두 PC를 연결하여 통신이 가능하다.
하지만, 클라이언트와 서버의 거리가 멀면 그 사이에 존재하는 인터넷망으로 통신해야 한다.
클라이언트에서 인터넷망은 내부의 수많은 중간 노드를 거쳐 목적지로 도착한다.
따라서 인터넷망은 매우 복잡하기 때문에 정해진 규칙과 목적지가 필요하다.
즉, 클라이언트(출발지)와 서버(목적지)의 IP 주소가 부여되어 있어야 한다.
클라이언트 IP : 100.100.100.1 → 서버 IP : 200.200.200.2
2. IP(인터넷 프로토콜, Internet Protocol)
- 지정한 IP 주소(IP Address)에 데이터를 전달한다.
- 패킷(Packet)이라는 통신 단위로 데이터를 전달한다.
IP 패킷 정보
IP 패킷 = 출발지 IP + 목적지 IP + 전송 데이터 + etc...
전송 데이터와 함께 출발지 IP와 목적지 IP를 함께 묶어서 패킷으로 만들어 전달한다.
IP 프로토콜의 한계점
- 비연결성 : 패킷을 받을 대상이 없거나 서비스가 불가능한 경우
- 비신뢰성 : 중간에 패킷이 사라지거나(패킷 소실), 패킷이 순서대로 오지 않는 경우(패킷 순서 문제)
- 패킷 소실 - 인터넷 망의 중간 노드의 문제 발생 시 패킷 소실 가능
- 패킷 순서 문제 - 패킷 용량이 클 때 분리해서 보내고 모두 같은 경로로 이동하는 것이 아님
- 프로그램 구분의 어려움 : 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 2개 이상인 경우
인터넷 프로토콜 스택의 4계층
애플리케이션 계층 - HTTP, FTP
전송 계층 - TCP, UDP
인터넷 계층 - IP
네트워크 인터페이스 계층
프로토콜 계층
만약, 채팅 프로그램에서 Hello, world! 를 전달한다고 가정해보자.
1. 채팅 프로그램이 Hello, world! 메시지 데이터를 생성한다.
2. 생성된 메시지를 SOCKET 라이브러리를 통해 OS 계층에 넘긴다.
3. OS 계층의 TCP 계층에서 메시지 데이터를 포함하여 TCP 정보를 생성한다.
4. OS 계층의 IP 계층에서 TCP 정보를 포함하여 IP 패킷을 생성한다.
IP 패킷 : [IP 관련 정보 + [TCP 관련 정보 + [메시지 데이터]]]
5. IP 패킷이 LAN 카드를 통해 나갈 때 Ethernet Frame이 포함되어 나간다.
Ethernet Frame : LAN 카드의 MAC 주소 등 물리적 정보가 포함된다.
TCP/IP 패킷 정보
IP 패킷 = 출발지 IP + 목적지 IP + etc...
TCP 세그먼트 = 출발지 PORT + 목적지 PORT + 전송 제어 + 순서 + 검증 정보 + etc...
TCP/IP 패킷 = IP 패킷 + TCP 세그먼트
즉, IP 패킷에 TCP 정보가 추가되면서 IP의 한계점이 해결되었다.
3. TCP(전송 제어 프로토콜, Transmission Control Protocol)
1. 연결 지향 TCP 3 way handshake (가상 연결)
먼저 연결(논리적인 연결)한 후, 메시지를 보낸다.
TCP 3 way handshake
SYN : 접속 요청
ACK : 요청 수락
(1) SYN : 클라이언트가 서버에게 접속을 요청하는 SYN 보낸다.
▶ (2) SYN + ACK : 서버가 SYN을 받으면 서버에서 클라이언트로 접속을 요청하는 SYN과 함께 ACK를 보낸다.
▶ (3) ACK : 클라이언트가 SYN을 받았으면, 서버로 ACK를 보낸다.
▶ (4) 데이터 전송 : 클라이언트가 서버로 데이터를 전송한다. (3단계에서 ACK와 함께 데이터를 보내기도 한다.)
2. 데이터 전달 보증
클라이언트가 데이터를 전송하면 서버가 데이터를 받았다고 응답을 해준다.
패킷 손실로 인해 서버가 메시지를 받지 못하면 클라이언트가 알 수 있다.
3. 순서 보장
클라이언트에서 패킷을 보낸 순서대로 서버로 오지 않으면 서버가 클라이언트에 다시 순서대로 패킷이 전송되도록 요청한다.
4. 신뢰 가능한 프로토콜
5. 현재는 대부분 TCP를 사용한다.
4. UDP(사용자 데이터그램 프로토콜, User Datagram Protocol)
1. 3 way handshake
2. 데이터 전달 보증이 되지 않음
3. 순서 보장이 되지 않음
4. 단순하고 빠름
5. IP와 거의 유사하다. (PORT와 checksum 정도만 추가되었다.)
체크섬(checksum)은 중복 검사의 한 형태로, 오류 정정을 통해 공간(전자 통신)이나 시간(기억 장치) 속에서 송신된 자료의 무결성을 보호하는 단순한 방법이다.
6. 애플리케이션에서 추가 작업이 필요하다.
5. PORT
만약 한 번에 2곳 이상 연결을 해야 하면 어떻게 해야 할까?
현재 클라이언트에서 게임, 화상 통화, 웹 브라우저 요청 이 3가지를 동시에 하고 있다고 해보자.
그럼 클라이언트 PC가 여러 개의 서버와 통신을 해야 하며, 서버가 클라이언트 IP로 패킷을 보내야 한다.
하지만, IP만 사용하면 클라이언트는 받은 패킷이 게임, 화상 통화, 웹 브라우저 요청 중 어떤 곳으로 온 패킷인지 알 수 없다.
즉, 이 프로그램을 구분하기 위해 PORT를 사용한다.
TCP/IP 패킷 정보
앞서 TCP/IP 패킷에는 출발지 IP, 목적지 IP, 출발지 PORT, 목적지 PORT가 함께 포함되어 있었다.
IP : 목적지 서버를 찾는 용도
PORT : 서버 내부에서 돌아가는 애플리케이션을 구분하는 용도
PORT 할당 범위
- 0 ~ 65535 : 할당 가능
- 0 ~ 1023 : 잘 알려진 PORT이므로 사용하지 않는 것이 좋다.
- FTP : 20, 21
- TELNET : 23
- HTTP : 80
- HTTPS : 443
6. DNS(Domain Name System)
IP 주소는 기억하기 어렵게 생겼다. 또한, IP는 변경될 수 있다. 이러한 단점을 보완하기 위해 DNS를 사용한다.
DNS는 Domain Name System으로 도메인 명을 IP 주소로 변환시켜주는 것이다. 마치 전화번호부와 같다.
도메인 명 | IP |
google.com | 200.200.200.2 |
aaa.com | 210.210.210.3 |
DNS 서버에 위 표처럼 도메인 명에 대한 IP 주소를 등록해둔다.
(1) 클라이언트가 DNS 서버에 도메인 명에 대한 IP 주소를 요청한다.
(2) DNS 서버는 해당 도메인 명에 대한 IP 주소를 클라이언트에 전달한다.
(3) 클라이언트는 해당 IP 주소로 서버에 접근한다.
따라서 DNS를 사용하여 IP 주소를 기억하기 어려운 점과 변경될 수 있는 문제를 해결해준다.
참고 자료
내용 참고 : 인프런 김영한 님의 강의 "모든 개발자를 위한 HTTP 웹 기본 지식"