HTTP 웹 기본 지식 - 인터넷 네트워크
인터넷 통신❓
클라이언트와 서버가 통신할 때 인터넷을 통해서 메세지를 주고받는다.
인터넷 망을 통해 메세지를 보내야 하는데 인터넷은 그냥 단순하지 않다.
인터넷망에 존재하는 수많은 노드들을 거쳐서 메세지가 전달되게 된다.
(여기서 노드는 클라이언트와 서버 사이에 존재하는 중계 서버(라우터)정도로 생각하면 된다.)
이 메세지가 전달될 때 어떤 규칙으로, 어떠한 방법으로 넘어가는지 알아야 한다.
이 규칙을 알기 위해 IP(인터넷 프로토콜)을 이해해야 한다.
IP(인터넷 프로토콜)❓
클라이언트와 서버가 통신을 하기 위해서 일단 IP주소를 할당받아야 한다❗
인터넷 프로토콜은 지정한 IP주소에 데이터를 전달할 수 있도록 하는 규칙(규약)이다. 이때 데이터는 패킷이라는 단위로 전달하게 된다.
IP 패킷에는 출발지IP, 도착지IP, 전달할 메세지 등을 가지고 있다.
출발지IP, 도착지IP와 전달할 메시지를 입력하고 전송하면, 인터넷망 안에 있는 노드들을 거쳐 목적지에 도달하게 된다.
IP 프로토콜에는 한계가 존재한다
1. 비연결성 - 대상이 없거나 서비스가 정상적이지 않더라도 무조건 패킷을 전송한다.
2. 비신뢰성 - 중간에 패킷이 사라질 수도 있고, 패킷을 여러 개 보냈을 때 패킷이 순서대로 전송되지 않을 수 도 있다.
3. 프로그램 구분 - 같은 IP에서 서로 다른 애플리케이션들이 통신을 하고 있을 때 이것들은 구분하는데 한계가 있다.
이런 문제점들을 해결해주는게 바로 TCP 프로토콜이다.
TCP, UDP❓
인터넷 프로토콜 스택의 4계층
애플리케이션 계층 - HTTP, FTP |
전송계층 - TCP, UDP |
인터넷 계층 - IP |
네트워크 인터페이스 계층 - LAN 카드, LAN 드라이버 |
TCP(전송 제어 프로토콜) 특징
1. 연결지향 - TCP 3 way handshake를 통해 연결 여부를 확인하고 메세지를 보낸다.
TCP 3 way handshake❓
TCP의 특징인 연결지향을 보장해주는 방식이다.
- 클라이언트가 서버에게 SYN(연결요청)를 보낸다.
- SYN를 받은 서버는 클라이언트에서 ACK(요청 수락)와 SYN(연결요청)를 보낸다.
- 마지막으로 서버에게 받은 SYN의 대답으로 ACK(요청 수락)를 서버에게 보내면 연결이 완료된다.
- 데이터를 전송한다❗
최근에는 최적화가 잘되어있어서 3번에서 ACK를 보낼때 데이터를 같이 전송한다고한다.
(학부생때 공부할때 이크 에크 싱크 막 이러면서 공부했었던게 떠오른다...)
2. 데이터 전달 보증 - 메세지를 보냈을때 이 패킷이 제대로 전달이 되었는지 확인할 수 있다.
클라이언트가 서버에 데이터를 전송이 제대로 완료되었으면, 서버에서 클라이언트에게 데이터를 받았다는 응답을 해준다.
3. 순서 보장 - 패킷의 도착 순서를 보장해 준다.
클라이언트가 보낸 패킷은 1, 2, 3번 으로 보냈는데, 서버는 1, 3, 2번의 순서로 받았다면😵😵
서버가 다시 클라이언트에게 2번부터 보내라고 요청을 전달하고, 클라이언트는 그에 맞게 다시 데이터를 전달한다.
이 모든것이 가능한 이유는 TCP/IP 패킷안에 출발지IP, 목적지IP, 전송제어, 순서, 검증 정보 등 모두 들어가져 있기 때문이다. 그래서 TCP를 신회할 수 있는 프로토콜이라고도 한다.
UDP(사용자 데이터그램 프로토콜) 특징
UDP는 거의 기능이 없다...
연결지향 - TCP 3 way handshake ( X )
데이터 전달 보증 ( X )
순서보장 ( X )
1. 데이터 전달 및 순서가 보장되지는 않지만, 빠르다.
2. IP와 거의 유사하지만 IP에 PORT와 체크섬가 추가된것과 비슷하다.
(PORT는 여러 패킷을 구분하기 위해 쓰이는 것이다. / 체크섬은 전달된 값이 변경되었는지를 검사하는 값이다.)
PORT❓
클라이언트가 한번에 여러개의 서버와 통신을 하게되면 어떻게 될까?
만약, 게임도하고, 노래도 듣고, 영화도 보고, 채팅도 하고, 웹 서핑도하고 있다면 각각의 서버에서 날라오는 패킷들을 IP만으로 구분하는것은 불가능해진다.
그래서 TCP/IP, UDP/IP 패킷안에는 출발지IP, 목적지IP 뿐만아니라 출발지 PORT와 목적지 PORT가 존재해 IP와 PORT를 결합하여 패킷들을 구분한다.
대표 PORT
- 0 ~ 65535 -> 할당가능
- 0 ~ 1023 -> 잘 알려진 포트라고해서 이 번호는 되도록 사용하지 않는 것이 좋다.
- FTP - 20, 21
- TELNET - 23
- HTTP - 80
- HTTPS - 443
DNS(도메인 네임 시스템)❓
IP는 기억하기도 너무 힘들고, 심지어 변경이 될 수도 있다.
클라이언트는 서버의 IP가 바뀌었는지 모른다😵😵
그래서 중간에 서버를 두어 IP를 도메인명으로 변경하여 사용하도록 도와준다❗
클라이언트가 도메인명을 입력하면 그에 맞는 IP를 반환해준다👍👍
출처
https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC