개발자는 평생 HTTP기반 위에서 개발
언젠가 한 번은 HTTP 정리해야 함
인터넷에서 컴퓨터 둘은 어떻게 통신할까?
인터넷망을 통해서 전달되야하는 데이터들은
수많은 노드(서버)를 거쳐서 이동해야 함
[IP(인터넷 프로토콜, IP프로토콜)]
복잡한 인터넷 망을 거칠 규칙 필요
IP 주소를 통해 가능해짐
클라이언트가 주소 있어야함.
받을 서버도 주소 있어야 함.
인터넷 프로토콜 역할
• 지정한 IP 주소(IP Address)에 데이터 전달
• 패킷(Packet)이라는 통신 단위로 데이터 전달
출발지 IP주소, 도착지 IP주소, 메세지 넣고(패킷) 노드끼리 던지면서 전달
노드들이 서로 목적지 어딘지 물어가면서 던지면서 전달
클라이언트의 패킷 전달 루트와
서버의 패킷 전달 루트가 서로에게 보내는 거라도 다를 수 있어
(인터넷망은 복잡하므로)
IP 프로토콜의 한계
• 비연결성
• 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송
• 비신뢰성
• 중간에 패킷이 사라지면?
• 패킷이 순서대로 안오면?
• 프로그램 구분
• 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이면?
(서버가 꺼져있든지 말든지 그냥 일단 보냄)
친구가 이사갔든지 말든지 우편보내듯이 일단 보냄
광케이블이 끊긴다든지 해서 패킷이 소실되도 모름
1500byte가 넘으면 끊어서 보통 보냄
내부적으로 컨택하면서 무수히 타다보면 이 노선이 더 빠르겠는데 등의 상황이 펼쳐져서
패킷들이 서로 다른 노선을 탈 수도 있어.
순서가 바뀌어서 갈 수 있어.
IP프로토콜만으로는 이 문제를 해결할 수 없어
[TCP UDP]
<인터넷 프로토콜 스택의 4계층>
애플리케이션 계층 - HTTP, FTP
전송 계층 - TCP, UDP
인터넷 계층 - IP
네트워크 인터페이스 계층
패킷이란?
패키지(수화물)와 버킷(덩어리)의 합성어
택배박스에 데이터 넣는 것과 비슷한 것.
TCP/IP 패킷 정보
IP패킷 : 출발지 IP, 목적지 IP, 기타...
TCP 세그먼트 : 출발지 PORT, 목적지 PORT, 전송 제어, 순서, 검증 정보...
TCP 특징 : 전송 제어 프로토콜(Transmission Control Protocol)
크게 3가지 특징
• 연결지향 - TCP 3 way handshake (가상 연결)
ㄴ쟤랑 나랑 연결이 됐나 연결확인. 연결 먼저하고 통신
• 데이터 전달 보증
ㄴ누락된 걸 내가 알 수 있음(1.데이터 전송, 2.데이터 잘 받았음)
• 순서 보장
그 결과 TCP는
• 신뢰할 수 있는 프로토콜
• 현재는 대부분 TCP 사용
TCP 3 way handshake
클라 -1.SYN(접속요청)-> 서버
클라 <-2.SYN+ACK(요청수락)- 서버
클라 -3.ACK-> 서버
연결 확인 되면 4. 데이터 전송
(요즘은 최적화 되서 3.ACK와 함께 데이터 전송 가능)
TCP연결이 됐어요, 소켓연결이 됐어요라고 하는데
실제 물리적으로 연결된다는 게 아님. 가상 연결임.
우리끼리만 논리적으로 연결된 거고 중간의 수많은 노드들은 우리가 연결됐는지 안됐는지 모름
나를 위한 랜선이 보장된 게 아님.
UDP는 TCP랑 같은 계층에 있는 IP위에 계층의 프로토콜
UDP 특징
사용자 데이터그램 프로토콜(User Datagram Protocol)
• 하얀 도화지에 비유(기능이 거의 없음)
• 연결지향 - TCP 3 way handshake X
• 데이터 전달 보증 X
• 순서 보장 X
• 데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠름
• 정리
• IP와 거의 같다. +PORT(하나의 ip에서 여러 어플사용시 어느 패킷이 어느 어플껀지 구분) +체크섬 정도만 추가
• 애플리케이션에서 추가 작업 필요
TCP는 다 좋은데 3 way handshake오래 걸림
전송했어. 잘받았어 등등
데이터도 크고 전송속도도 더 빠르게 만들기 어렵
이미 이만큼 구축되어있기 때문에 내가 더 최적화 할 수 없어
인터넷이 요즘 다 TCP 기반으로 사용하고 있기 때문에 TCP는 그대로 쓰고(TCP 프로토콜이 90프로 이상 점유)
UDP는 아무것도 안되어있기 때문에 그 위에 어플리케이션 레벨에서 내가 하고 싶은대로 하면 만들어 내면됨
다시 시대가 바뀌면서 요즘 UDP가 각광받고 있어
웹브라우저에서 http통신할 때
http3 나왔는데 여기서 3 way handshake도 줄여보자고 UDP프로토콜 사용하면서 굉장히 각광
[PORT]
IP는 목적지 서버를 찾는 것
PORT는 서버 안 어플리케이션을 구분하는 것.
TCP/IP 패킷 : 출발지 IP, PORT, 목적지 IP, PORT, 전송 데이터...
PORT-같은 IP내에서 프로세스 구분
IP가 아파트, PORT가 몇동 몇호
• 0 ~ 65535 할당 가능(어플리케이션 만들 때 열어서 사용하면 됨)
• 0 ~ 1023: 잘 알려진 포트, 사용하지 않는 것이 좋음
• FTP - 20, 21
• TELNET - 23
• HTTP - 80
• HTTPS - 443(HTTP에 보안이 추가된)
[DNS]
IP는 기억하기 어렵다.
IP는 변경될 수 있다.
도메인 네임 시스템(Domain Name System)
• 전화번호부
• 도메인 명을 IP 주소로 변환
'인프런 강의 > 모든 개발자를 위한 HTTP 웹 기본 지식' 카테고리의 다른 글
4. HTTP 메서드 (0) | 2023.01.04 |
---|---|
3. HTTP 기본 (0) | 2023.01.04 |
2. URI와 웹 브라우저 요청 흐름 (0) | 2023.01.03 |