(인프런) 김영한님의 모든 개발자를 위한 HTTP 웹 기본 지식을 공부하고 리뷰한 글입니다.
인터넷 통신
클라이언트 와 서버 사이에서 안전하게 데이터들이 안전하게 도착할까 ?
이를 알기 위해서 다음 개념들을 알아야한다.
1. IP (인터넷 프로토콜)
= ( IP 주소를 부여하고 목적지를 찾아가는 방식)
클라이언트와 서버에는 IP adrress 가 주어진다.
IP 패킷 : 출발지 IP, 도착지 IP, 메세지 ...
ex) 클라이언트 IP 주소가 100.100.100.1 이고 서버 IP 주소가 200.200.200.1인 경우
IP 패킷은 100.100.100.1 200.200.200.1 "Hello world" ... 로 구성되어 있음.
이 IP 패킷이 클라이언트로 부터 서버에 가기 까지 여러 노드들을 거친다.
IP 프로토콜의 한계
• 비연결성
- 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송 (즉, 받을 대상이 패킷을 받을 수 있는지 여부 모름)
• 비신뢰성
- 중간에 패킷이 사라지면?
- 패킷이 순서대로 안오면? ( 데이터가 크면 끊어서 n개로 보내는 경우 : 의도되지 않은 데이터 순서 )
• 프로그램 구분
- 같은 IP를 사용하는 서버에서 통신하는 어플리케이션이 둘 이상이라면?
TCP & UDP
1. 프로그램에서 "Hello, world!" 메세지를 보내고자 함.
2. SOCKET 라이브러리를 통해서 OS 계층에다가 메세지를 보냄.
3. 메세지에다가 TCP 정보를 씌움.
4. 그 위에다가 IP에 관련된 정보를 또 씌움. => ip 패킷 생성
5. 네트워크 인터페이스 계층의 LAN 카드를 통해서 ip 패킷이 나갈 때 이더넷 프레임이 포함되서 나감.
TCP/IP 패킷 안에는 출발지 port, 목적지 prot 전송 제어, 순서( -> 순서 보장이 되는 이유), 검증 정보 등이 들어감.
➕TCP 특징 = 전송 제어 프로토콜
1. 연결 지향 - TCP 3 way handshake (가상 연결 = 물리적 연결이 아니다. )
2. 데이터 전달 보증 ( = 서버가 데이터를 받으면 받았다고 응답해줌 )
3. 순서 보장 ( = 순서가 잘못된 패킷부터 다시 요청 )
4. 신뢰할 수 있는 프로토콜
5. 현재는 대부분 TCP 사용중
SYN : 접속 요청 / ACK : 요청 수락 / 3. ACK 와 함께 데이터 전송 가능
1. 클라이언트 에서 서버로 SYN (접속 요청 ) 보냄.
2. 서버에서 클라이언트로 ACK ( 요청 수락 )을 보내면서 본인도 연결해달라고 SYN 보냄.
3. 그 SYN 에 해당되는 ACK 보내면서 데이터도 같이 보냄.
➔UDP 특징 = 사용자 데이터그램 프로토콜 ( User Datagram Protocol)
1. 하얀 도화지 ( 기능 거의 없음 )
2. 연결 지향 X
3. 데이터 전달 보증 X
4. 순서 보장 X
5. 데이터 전달과 순서가 보장되지 않지만, 빠르고 단순함.
PORT
클라이언트가 한 서버에서 여러 개의 어플리케이션을 수행하는 경우, 서버로 부터 온 패킷이 어디로 부터 요청된 패킷인지 알 수 없다. 이를 위해 존재하는 개념.
즉, 각 프로세스마다 다른 PORT가 부여된다.
IP : 목적지 서버를 구분함.
PORT : 그 서버 안에서 돌아가는 목적지 어플리케이션을 구분함.
< PORT 번호 > 0~ 65535 할당 가능
0~1023 : 잘 알려진 포트번호( 사용하지 않는 것이 좋음 )
FTP - 20,21 / TELNET - 23 / HTTP - 80 / HTTPS - 443
DNS
"IP 번호를 기억하기 어렵다. IP 주소는 변경될 수 있다. "는 문제점.
DNS ( = Domain Name System ) 도메인 네임 시스템
- 비유 : 전화번호부 와 같은 역할
- 도메인 명을 IP 주소로 변환
1. 도메인과 해당하는 IP 주소를 DNS 서버에 등록해놓는다. ( 전화번호부 처럼)
2. 클라이언트가 도메인 명 google.com 을 찾으면 DNS 서버에서 해당되는 IP 주소를 클라이언트로 보낸다.
3. 받은 IP 주소로 접근한다.
'백엔드 공부 > HTTP 기본 지식' 카테고리의 다른 글
HTTP 상태코드 (0) | 2024.02.28 |
---|---|
HTTP 메서드 활용 : HTTP 기본 지식 (0) | 2024.02.28 |
HTTP 메서드 : HTTP 기본 지식 (0) | 2024.02.28 |
HTTP 기본 : HTTP 기본 지식 (3) | 2024.02.28 |
URI와 웹 브라우저 요청 흐름 : HTTP 기본 지식 (0) | 2024.02.28 |