이 글은 김영한님의 인프런 강의인 모든 개발자를 위한 HTTP 웹 기본 지식 강의를 요약한 것입니다.
패킷(Packet)
단위로 데이터를 전달한다. (패킷에는 출발지 IP, 목적지 IP 등의 정보가 있다)비연결성
: 패킷을 받을 대상이 없거나 서비스가 불능 상태여도 패킷을 전송한다. (클라이언트는 서버가 패킷을 받을 수 있는 상태인지 모른다)비신뢰성
: 중간에 패킷이 사라질 수도 있고(중간에 서버가 문제가 발생해 전달이 안될 수 있음), 여러 개의 패킷을 보내면 순서대로 도착하지 않을 수 있다(먼저 전송된 패킷이 늦게 도착할 수 있음).프로그램 구분
: 같은 IP를 사용하는 애플리케이션이 둘 이상이면? 구분할 수 없다.(참고) 인터넷 프로토콜의 4계층
TCP 세그멘트에는 출발지 PORT, 목적지 PORT, 전송 제어, 순서, 검증 정보 등에 대한 내용이 있다.
연결 지향
: TCP 3-way handshake(가상 연결, 옛날에 전화선을 물리적으로 연결하는 것은 아니다)데이터 전달 보증
: 클라이언트에서 데이터를 전송하면 서버에서 잘 받았다고 응답을 보내줌SYN
: 접속 요청, ACK
: 요청 수락
SYN
(클라이언트 -> 서버)SYN + ACK
(클라이언트 <- 서버)ACK
(클라이언트 -> 서버)위 3에서 ACK와 함께 데이터를 같이 보낼 수도 있다.
(참고) HTTP3에서 UDP를 사용하는 중!
한 번에 둘 이상 연결해야 한다면? 예를 들어 게임을 하면서 디스코드로 통화를 한다면? IP로는 응답이 게임에 필요한 것인지, 디스코드에 필요한 것인지 분간할 수 없다. 여기서 PORT는 같은 IP 내에서 프로세스를 구분하기 위해 필요하게 된다. 따라서 TCP/IP 패킷에는 출발지 IP, 목적지 IP와 더불어 출발지 PORT, 목적지 PORT가 존재한다.
아파트로 구분하면 IP는 A동, PORT는 A동에 사는 각 호수들이다.
PORT는 0~65535
에 할당이 가능하고, 0~1023
는 흔히 잘 알려진 포트라 사용하지 않는 것이 좋다.
예를 들어)
20
, 21
23
80
443
IP는 숫자로 이루어져 있고, 변경될 여지가 있어서 기억하기 어렵다. 그래서 일종의 전화번호부 역할을 하는 DNS 서버
에 IP를 등록해 사용할 수 있다. 변경될 시 DNS 서버에 등록된 IP를 변경하면 된다.