인터넷 통신에 필요한 것들
- IP (Internet Protocol)
- TCP, UDP
- PORT
- DNS
IP(인터넷 프로토콜)
복잡한 인터넷 망에서 컴퓨터 둘은 어떻게 통신할까? 이를 위한 규칙으로 인터넷 프로토콜이란 규칙이 있다.
인터넷 프로토콜의 역할은
- 지정한 IP주소에 데이터 전달
- 패킷(Packet)이라는 통신 단위로 데이터 전달
IP 패킷은 출발지 IP, 목적지 IP, 전송 데이터 등의 정보를 담고 있다.
IP 프로토콜의 한계는
- 비연결성
- 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷을 전송함
- 비신뢰성
- 중간에 패킷이 사라지는 문제
- 패킷이 순서대로 오지 않는 문제
- 프로그램 구분
- 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상일때의 문제
IP 프로토콜만으로는 이런 문제들을 해결할 수 없기 때문에 TCP 프로토콜을 사용한다.
TCP
인터넷 프로토콜 스택의 4계층은 다음과 같다.
- 애플리케이션 계층 - HTTP, FTP
- 전송 계층 - TCP, UDP
- 인터넷 계층 - IP
- 네트워크 인터페이스 계층
만약, 프로그램이 메시지를 생성해서 보낸다면 SOCKET 라이브러리를 통해 TCP로 전달한 뒤 TCP에서 출발지/목적지 PORT, 순서 등의 정보를 생성한다. 그리고 IP로 전달되어 출발지/목적지 IP 등의 정보를 담은 패킷이 생성되어 LAN 카드를 통해 나가게 된다.
TCP/IP 패킷은 출발지 IP, 목적지 IP에 더하여 출발지 PORT, 목적지 PORT, 전송제어, 순서, 검증정보 등의 정보가 포함되어 있다.
TCP 특징으로는
- 전송 제어 프로토콜이다.
- 연결지향 -> TCP 3 way handshake (가상 연결)
- 데이터 전달 보증
- 순서 보장
- 신뢰할 수 있는 프로토콜
- 현재는 대부분 TCP 사용
TCP 3 way handshake에서는 클라이언트가 SYN 연결 요청을 보내고, 서버에서 SYN과 ACK로 요청을 수락하면서 연결 요청을 받는다. 그리고 클라이언트가 ACK를 보내 수락하며 데이터를 보내는 것이다.
TCP 프로토콜은 클라이언트가 데이터를 전송했을때 잘 받았다는 응답을 하기 때문에 데이터 전달을 보증한다. 그리고 클라이언트가 패킷을 1, 2, 3 순서로 보냈는데 1, 3, 2 순서로 받았다면 서버는 패킷2부터 다시 보내라는 요청을 하기 때문에 순서를 보장한다. TCP/IP 패킷에는 전송제어, 순서, 검증 정보가 추가되어 있기 때문에 이런 기능들이 가능한 것이다.
UDP
- 사용자 데이터그램 프로토콜
- 하얀 도화지에 비유한다. (기능이 거의 없음)
- 연결지향, 데이터 전달 보증, 순서보장 모두 X
- 데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠르다.
- IP와 거의 같다. PORT, 체크섬이 추가됨
- 애플리케이션에서 추가 작업 필요
PORT
컴퓨터에서 게임, 화상통화, 웹브라우저 요청을 한번에 해야한다면? 서버와 어떻게 연결해야 할까. IP만 가지고 요청들을 구분하기는 어려울것이기 때문에 PORT를 사용한다. IP는 목적지 서버를 찾는것이고, 그 서버 안에서 돌아가는 애플리케이션들을 구분하는게 PORT다. (IP가 아파트라면 PORT는 X동 X호)
PORT는 같은 IP 내에서 프로세스를 구분한다.
클라이언트가 서버에 웹브라우저 요청을 위해 200.200.200.3의 80포트로 요청을 보낸다. 그리고 서버는 패킷에 있는 IP, PORT정보를 보고 100.100.100.1의 10010포트로 응답하는것이다.
PORT 번호
- 0 ~ 65535 : 할당 가능
- 0 ~ 1023 : 잘 알려진 포트, 사용하지 않는 것이 좋음
- FTP - 20, 21
- TELNET - 23
- HTTP - 80
- HTTPS - 443
DNS
IP는 긴 숫자로 이루어져 있기 때문에 기억하기 어렵다. 그리고 새롭게 변경될 수도 있다. 그래서 전화번호부처럼 IP 주소를 도메인 명으로 이름매긴 DNS(Domain Name System)를 사용한다.
DNS 서버에 도메인을 등록하면, 도메인명으로 IP 주소를 응답해주고 이 주소로 서버에 접속한다. IP 주소가 바뀐다면 DNS 서버에 있는 IP를 바꾸기만 하면 된다. 그래서 DNS를 사용한다면 주소를 기억하기 쉽고, IP가 변경되어도 그대로 접근이 가능하다.
* 인프런 모든 개발자를 위한 HTTP 웹 기본 지식(김영한) 강의를 듣고 정리한 내용입니다.
'Spring > HTTP 강의' 카테고리의 다른 글
[HTTP] URI와 웹 브라우저 요청 흐름 (0) | 2021.12.28 |
---|