-
<모든 개발자를 위한 HTTP 웹 기본 지식 정리>
IP (인터넷 프로토콜)
-지정한 IP주소 ( IP Address)에 데이터 전달
-패킷(Packet)이라는 통신 단위로 데이터 전달
-패킷 : 출발지 IP, 목적지 IP, 메세지 등을 가지고
클라이언트가 - 패킷을 -> 인터넷에 보내면 인터넷망에서 목적지 IP에 도달하도록 노드를 타고타고 가서 도착한다.
IP 포로토콜의 한계
1. 비연결성 : 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷이 전송됨 (그냥 던지는거)
2. 비신뢰성 : 중간에 패킷이 사라질수도.. 순서대로 안올수도..
3. 프로그램 구분 : 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상일수도..
=> 해결은 TCP!
: IP프로토콜의 문제점인 패킷소실과 순서꼬임을 해결함
🌵인터넷 프로토콜 스택의 4계층
1.애플리케이션 계층 - HTTP, FTP (웹 브라우저, 네트워크 게임, 채팅 프로그램 - socket 라이브러리)
2.전송 계층 - TCP(IP보완), UDP : OS
3.인터넷 계층 - IP : OS
4.네트워크 인터페이스 계층 (LAN 드라이버, LAN 장비)
1. 채팅 프로그램으로 Hello, World! 메시지를 생성하면
2. SOCKET 라이브러리를 통해서 OS계층에 이 메시지를 전달해
3. 그러면 OS계층에서 메시지를 받아 TCP정보를 추가 포장하고 전달
4. 그리고 그걸 받아서 IP 관련된 정보를 씌워서 IP 패킷을 생성 (메시지, TCP, IP 내용이 다 있어)
5. 이게 네트워크 인터페이스를 통해 (LAN카드를 통해) 나갈때 Ethernet frame이 포함되어 나가
(Ethernet frame에는 물리적인 정보들이 포함됨.. 알아서 찾아보기)
-> 이렇게 된다
TCP에 전송 제어, 순서가 들어가니까 앞서 말한 IP의 문제가 해결되는거
TCP(전송 제어 프로토콜 : Transmission Control Protocol)
특징을 보면
1. 연결지향 - TCP 3 way handshake (가상 연결) : 연결을 하고 메시지 보내기
(1) 클 -> 서 : SYN (접속 요청) : connect, 연결 과정(연결됐냐)
(2) 서 -> 클 : SYN + ACK(요청 수락) : 연결됨. 나도 연결해줘
(3) 클 -> 서 : ACK + 데이터 : OK
2. 데이터 전달 보증
(1) 클 -> 서 : 데이터 전송
(2) 서 -> 클 : 데이터 잘 받았음 (클라이언트가 인지 가능)
3. 순서 보장
(1) 클 -> 서 : 패킷1, 2, 3 순서로 전송
(2) but, 패킷1, 3, 2 순서로 도착
(3) 서 -> 클 : 패킷2부터 다시 보내
이건 다 TCP에 전송 제어, 순서, 검증 정보 등이 들어 있기때문에 가능함
-> 신뢰할 수 있는 프로토콜
=> 현재는 대부분 TCP 사용
UDP (사용자 데이터그램 프로토콜 - User Datagram Protocol)
- 기능이 거의 없음
- 연결지향 - TCP 3 way handshake X
- 데이터 전달 보증 X
- 순서 보장 X
- 데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠름
-> IP와 거의 같다. +PORT(패킷 구분) +체크섬(메시지 제대로 맞는지) 정도만 추가
=> 애플리케이션에서 추가 작업이 필요함
-> 완전 도화지 그래서, 요즘은 UDP를 최적화해서 (TCP의 3 way handshake 도 줄여보자!) 사용하는 방식이 유행
PORT
한번에 둘 이상 연결해야 하면?
클 - 1. 게임 2. 화상통화 3. 웹 브라우저 요청
내 아이피로 패킷들이 들어올텐데 이게 게임인지, 화상통화껀지, 웹브라우저껀지 모름.
-> PORT는 애플리케이션 구분하는거로 생각하기
그니까 패킷에는 출발지 IP와 PORT, 도착지 IP와 PORT, 전송 데이터 등이 있는거
- 0 ~ 65535 : 할당 가능
- 0 ~ 1023 : 잘 알려진 포트, 사용하지 않는 것이 좋음
- FTP - 20, 21
- TELNET - 23
- HTTP - 80
- HTTPS - 443
DNS 도메인 네임 시스템(Domain Name System)
IP의 문제점
-IP는 기억하기 어렵다.
-IP는 변경될 수 있다. (접근 못함)
그래서, DNS는
전화번호부 같은 서버를 제공 -> 도메인명을 IP 주소로 변환해줌
1. DNS 서버에 도메인 명(google.com)을 (사서) 등록
도메인 명 IP google.com 200.200.200.2 aaa.com 210.210.210.3 2. 클라이언트는 DNS 서버에 google.com IP를 주세여ㅐ
3. DNS -> 클라이언트에게 응답 : 200.200.200.2
4. 클라이언트는 200.200.200.2 접속!
따라서 DNS 서버를 통해
IP의 문제점 해결 가능!