1 . 인터넷 통신
인터넷에서 컴퓨터 둘은 어떻게 통신할까.
만약, 클라이언트와 서버의 거리가 가까울 경우, 아래와 같이 케이블로 연결을 해서 쉽게 통신 가능하다.
반면, 클라이언트와 서버의 거리가 멀면 아래와 같이 그 사이에 인터넷망을 이용해서 통신을 해야한다.
이때 클라이언트의 메시지가 수많은 중간 노드들을 거쳐서 서버에 도달하는 방법을 알기 위해서는 IP를 알아야 한다.
2 . IP (인터넷 프로토콜)
메시지를 전달하기 위해서는 우선 클라이언트와 서버에 IP주소를 부여해야 한다.
IP(인터넷 프로토콜)는 지정한 IP 주소(IP Adress)에 패킷(Packet)이라는 통신 단위로 데이터를 전달한다.
패킷은 전송 데이터(보낼 메시지)와 함께 출발지 IP, 목적지 IP 등으로 이루어져 있다.
- IP 프로토콜의 한계
1) 비연결성
- 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷을 전송한다.
(클라이언트는 대상 서버가 패킷을 받을 수 있는 상태인지 모르기 때문이다)
2) 비신뢰성
- 중간에 패킷이 사라져도 해결할 수 없다.
- 패킷이 순서대로 오지 않아도 해결할 수 없다.
(패킷 용량이 클 결우, 패킷을 분리해서 보내게 된다. 이때 패킷들이 다른 노드로 이동하게 되면, 패킷 전달 순서가 보장되지 않을 수 있다)
3) 프로그램 구분
- 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이어도 구분할 수 없다.
3 . TCP, UDP
TCP는 위와 같은 IP 프로토콜의 한계점들을 해결해준다.
- 인터넷 프로토콜 스택의 4계층
- 프로토콜 계층
OS 계층의 TCP 계층에서 메시지 데이터를 포함해 TCP 정보를 생성한다.
그 후 IP 계층에서 TCP 정보를 포함해 IP 패킷을 생성한다.
- IP 패킷: (IP 관련 정보 + (TCP 관련 정보 + (메시지 데이터)))
- TCP (전송 제어 프로토콜) 특징
1) 연결지향
- TCP 3 way handshake (가상 연결)
- 먼저 연결을 한 다음 메시지를 보낸다.
- 물리적 연결이 아닌, 논리적인 연결을 의미한다.
2) 데이터 전달 보증
- 패킷이 손실되어 서버가 메시지를 받지 못하는 경우, 클라이언트가 알 수 있도록 한다.
3) 순서 보장
- TCP 3 way handshake
위와 같은 3단계를 거쳐, 클라이언트와 서버는 서로 연결되었다는 것을 알 수 있다.
- 데이터 전달 보증
클라이언트가 데이터를 전송하고 이를 서버가 받으면, 클라이언트에게 데이터가 전달되었음을 응답한다.
- 순서 보장
순서대로 패킷이 서버에 도달하지 않으면, 서버가 클라이언트에게 잘못된 패킷을 전송하여 다시 순서대로 패킷이 전송되도록 요청한다.
cf) UDP(사용자 데이터그램 프로토콜) 특징
- IP와 거의 유사(Port, 체크섬 추가)
- 단순하고 빠르다
- 3 way handshake x, 데이터 전달 x, 순서 보장 x
4 . PORT
위와 같이 클라이언트 PC가 여러 개의 서버와 통신을 해야 하는 상황에서 IP만 사용을 하면, 요청 중 어떤 프로그램으로 온 패킷인지 알 수 없는 문제가 발생한다. 이 경우 프로그램을 구분하기 위해 사용하는 것이 PORT이다.
- IP : 목적지 서버를 찾는 용도
- PORT : 서버 내부에서 돌아가는 애플리케이션을 구분하는 용도
- 0 ~ 65535 할당 가능
- 0 ~ 1023: 잘 알려진 포트, 사용하지 않는 것이 좋다
• FTP - 20, 21
• TELNET - 23
• HTTP - 80
• HTTPS - 443
5 . DNS (Domain Name System)
IP는 기억하기 어렵고, 변경될 수 있다는 단점이 있다.
이를 해결하기 위해 사용하는 것이 도메인 명을 IP 주소로 변환시켜주는 'DNS'이다.
DNS 서버에 도메인 명에 대한 IP 주소를 등록해둔다.
1) 클라이언트가 DNS 서버에 도메인 명에 대한 IP를 요청한다.
2) DNS 서버는 해당 도메인 명에 대한 IP 주소를 클라이언트에 전달한다.
3) 클라이언트는 해당 IP주소로 서버에 접근한다.
'Spring > HTTP 웹 기본 지식' 카테고리의 다른 글
인프런 HTTP 강의 정리 #6 (1) | 2023.12.23 |
---|---|
인프런 HTTP 강의 정리 #5 (1) | 2023.12.23 |
인프런 HTTP 강의 정리 #4 (0) | 2023.12.23 |
인프런 HTTP 강의 정리 #3 (1) | 2023.12.22 |
인프런 HTTP 강의 정리 #2 (1) | 2023.12.22 |