📗 self-study/📗 inflearn

[HTTP] 섹션 1. 인터넷 네트워크

천재강쥐 2023. 8. 29. 23:00

 

 

 

🔥 모든 개발자를 위한 HTTP 웹 기본 지식


섹션1. 인터넷 네트워크

 

 

 

 

📍 인터넷 통신

👉🏻  컴퓨터 2대가 서로 케이블에 연결되어 있다면 바로 메시지를 보낼 수 있음

👉🏻 하지만 컴퓨터 2대가 물리적으로 아주 먼 곳에 존재한다면, 인터넷을 사이에 두고 통신을 할 때 아주 많은 서버를 거쳐야 함

 

 

 

 

🤔 바로 인터넷 프로토콜(IP)를 이용해서!

 

 

 

📍 IP(인터넷 프로토콜)

👉🏻 IP 주소를 이용한 인터넷 규칙

👉🏻 클라이언트(보내는 사람)도 IP 주소가 있어야 하고, 서버(받는 사람)도 IP 주소가 있어야 함

 

👉🏻 패킷(packet)이라는 통신 단위로 데이터를 전달함

 

Client(요청) 👉🏻 전송할 메시지를 IP 패킷 정보(출발지 IP, 목적지 IP, 기타...)에 감싸서 보냄

Server(응답) 👈🏻 전송할 메시지를 IP 패킷 정보(출발지 IP, 목적지 IP, 기타...)에 감싸서 보냄

➡️ 응답, 요청을 할 때 해당 요청에 대한 응답이라도 서로 타고 오는 서버가 다를 수 있음

 

 

 

 IP 프로토콜의 한계

1) 비연결성: 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송

 

➡️ 대상 서버가 패킷을 받을 수 있는 상태인지 모름

       컴퓨터가 꺼져 있어도 전송함! 마치 이사 갔는지 안 갔는지 몰라도 해당 주소에 우편물 보내듯

 

2) 비신뢰성: 중간에 패킷이 사라지거나 순서대로 오지 않을 수 있음

 

 

➡️ 서버를 타고 오고 가다가 해당 서버가 꺼지면 패킷이 소실될 수 있음

 

➡️ 패킷의 크기가 매우 클 경우, 보통 1500byte 이상 정도가 되면 한 패킷을 잘라서 보내게 되는데 해당 순서가 지켜진다는 보장이 없음

1 packet: Hello,
2 packet: world!

// 패킷이 꼭 같은 서버를 타지는 않음!
// 나는 Hello, world! 로 보냈으나 상대방은 world! Hello, 로 받을 수도 있음

 

3) 프로그램 구분: 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상일 수 있음

➡️ 같은 컴퓨터로 음악과 게임을 같이 한다면 어떻게 구분?

 

 

 

 

🤔 이 문제점들을 해결하기 위해 나온 것들이 TCP, UDP!

 

 

📍 TCP

👉🏻 인터넷 프로토콜 스택의 4계층

애플리케이션 계층    -   HTTP, FTP     -   웹 브라우저, 네트워크 게임, 채팅 프로그램
					[SOCKET 라이브러리]
                                    
전송 계층          -   TCP, UDP      -  

인터넷 계층         -   IP

네트워크 인터넷 계층                    -   LAN 드라이버, LAN 장비

1. 프로그램이 Hello, world! 메시지 생성

2. SOCKET 라이브러리를 통해 전달

3. TCP 정보 생성, 메시지 데이터 포함

4. IP 패킷 생성, TCP 데이터 포함

 

👉🏻 패킷(packet) = package + pocket의 합성어

 

 

 

 

 TCP/IP 패킷 정보

IP 패킷 + TCP 세그먼트(출발지, 도착지의 port / 전송 제어 / 순서 / 검증 정보 등) 

 

 

 

 TCP(Transfer Control Procotol, 전송 제어 프로토콜) 특징

1) 연결지향: TCP 3 way handshake(가상연결) - 먼저 연결을 한 뒤에 메시지를 보냄

 

➡️ TCP 3 way handshake

Client 👉🏻 Server (1) SYN: 접속 요청

Client 👈🏻 Server (2) SYN + ACK: 접속요청 + 요청 수락

Client 👉🏻 Server (3) ACK: 요청 수락

Client 👉🏻 Server (4) 데이터 전송

(참고! 3. ACK와 함께 데이터 전송 가능)

 

 

✏️ 단, 이때의 연결은 물리적인 연결이 아닌 논리적인 연결을 뜻함!

 

2) 데이터 전달 보증

 

➡️ 클라이언트가 데이터 전송 시 서버가 데이터를 전달받았다는 응답을 주기 때문에 해당 데이터가 제대로 전달되었는지 알 수 있음

 

3) 순서 보장

 

➡️ 큰 메시지를 잘라서 보낼 경우, 순서가 엉킨 채로 도착한다면 서버에서 잘못된 순서의 패킷부터 모두 버리고 다시 요청함 

 

 

➡️  신뢰할 수 있는 프로토콜

 

➡️ 현재는 대부분 TCP 사용

 

 

 

📍  UDP(User Datagram Protocol, 사용자 데이터그램 프로토콜) 특징

👉🏻 하얀 도화지에 비유(기능이 거의 없음)

👉🏻 연결지향 TCP 3 handshake 없음

 

👉🏻 순서 보장 없음

 

👉🏻 데이터 전달 보증 없음

 

👉🏻 데이터 전달 및 순서가 보장되지 않지만 단순하고 빠름

 

➡️  즉, IP에서port, 체크섬(해당 데이터가 맞는지 검증) 정도만 추가

 

 

🤔 그럼 얘를 왜 써요?

 

➡️ TCP에 비해서 속도가 빠르고 애플리케이션 레벨에서 다양한 커스텀이 가능함!

 

➡️ 최근 매우 활발히 사용 중

 

 

 

 

📍 PORT: 같은 IP 내에서 프로세스를 구분

👉🏻 컴퓨터 1대로 게임/화상통화/웹 브라우저를 함께 사용한다면 각 서비스와의 요청과 응답 패킷이 누구의 것인지 알 수 있을까? 

👉🏻 TCP/IP패킷을 이용하면 출발지와 도착지의 port를 알 수 있기 때문에 가능함!

 

▶️ 아파트가 IP라면, port는 몇 동 몇 호!

 

 

 

▶️ 0 ~ 65535: 할당 가능
▶️ 0 ~ 1023: 잘 알려진 포트이므로 사용하지 않는 것이 좋음

▶️ FTP - 20, 21
▶️ telnet - 23
▶️ HTTP - 80
▶️ HTTPS - 443

 

 

 

📍  DNS(Domain Name System)

 

👉🏻 IP는 기억하기 어렵고 변경될 수 있음!

👉🏻 전화번호부와 같은 도메인명을 IP 주소로 변경할 수 있음

도메인명 IP
google.com 100.100.100.1
aaa.com 200.200.200.2

 

▶️ 내가 도메인명으로 찾으면 해당 도메인에 연결된 IP를 찾아줌