모든 개발자를 위한 HTTP 웹 기본 지식 - 김영한 | 섹션1
📌 인터넷 통신
- 클라이언트와 서버가 케이블로 연결되어있으면, 바로 메시지를 주고받으면 된다.
- 그런데 중간매체로 인터넷이 껴있으면, 인터넷망 상의 수많은 노드를 거쳐 목적지로 보내야한다. 이를 위해 사용하는 것이 IP.
📌 IP(인터넷 프로토콜)
- 서버와 클라이언트 각각에는 고유의 IP주소가 있다.
- IP의 역할
- 지정한 IP 주소에 데이터 전달
패킷이란?
- 서버와 클라이언트가 정보를 주고 받기 위한 단위
- 패킷에 저장되어있는 정보: 출발지 IP | 목적지 IP | 기타... | 전송 데이터
- 노드에서 노드로 패킷을 보내면서 최종 목적지에 도달한다.
- 목적지 또한 잘받았다는 응답을 패킷으로 보낸다. 이때의 경로와
IP 프로토콜의 한계
비연결성 패킷을 받을 대상이 없는데도 패킷이 전송될 수 있음
비신뢰성 패킷 소실이나 패킷 전달 순서 문제 발생
프로그램 구분 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상일 수 있음
=> 이러한 문제를 해결하기 위해 등장한 것이 바로 TCP!
📌 TCP, UDP

- IP의 문제를 그 위 계층인 TCP가 보완해줌
- APPlication Layer에서 프로그램이 Hello, world! 메시지 생성 -> 라이브러리를 통해 OS Layer의 TCP에게 전달 -> TCP 정보 생성 -> TCP 데이터를 포함한 IP 패킷 생성 -> 네트워크 인터페이스 Layer의 LAN 장비를 통해 서버에 전달
TCP 특징
- IP 패킷 { TCP 세그먼트 { 출발지 PORT, 목적지 PORT, 전송 제어, 순서, 검증 정보 등 { 전송 데이터 } } }
- 이렇게 해서 보내기 때문에 전송 제어 문제 등이 해결 되기 때문에
전송 제어 프로토콜(Transmission Control Protocol) 이라고 한다!
- 현재는 대부분의 애플리케이션에서 TCP를 사용한다
TCP의 연결 지향성: 3 way handshake
- 클라이언트에서 서버로 SYN(접속 요청)을 보낸다.
- 서버에서 클라이언트로 SYN+ACK(요청 수락)으로 응답한다.
- 마지막으로, 클라이언트 또한 서버에 ACK를 보냄으로써 연결이 완성된다.
- 1~3 way를 모두 성공해야 비로소 데이터 전송 가능.
- But 가상적인 연결이지 진짜 실질적인 연결을 의미하는 것은 아님! 그 사이에 수많은 노드들이 있음을 잊어서는 안됨.
순서 보장
- 클라이언트에서 패킷1, 2, 3의 순서대로 보냈음에도 서버에는 1, 3, 2의 순서대로 도착했다면, 서버는 클라이언트에 패킷2부터 다시 보낼 것을 요청한다.
UDP
- 사용자 데이터 그램 프로토콜
- TCP와 같은 계층에 속하지만, 기능이 거의 없음
- IP와 오히려 더 비슷함. 다만, PORT 체크섬이 추가 됨.
- 하나의 IP에서 여러 Application 요청을 보낼 경우, UDP로 구분함.
- TCP는 더이상 최적화 불가능. UDP는 커스텀할 수 있는 하얀 도화지로 생각하면 됨.
- 최근에는 UDP가 뜨고 있음. HTTP3는 UDP를 사용한 최적화를 노리고 있음
📌 PORT

- 예를들어, 내 PC에서 게임도 하고 있고, 화상통화도 하고 있다면? 응답으로 오는 패킷들이 게임에 대한 응답 패킷인지, 화상통화에 대한 응답 패킷인지 알 수가 없음.
- 패킷에는 IP도 있고 PORT도 있는데, 전자는 목적지를 구분할 때 쓰이고, 후자는 같은 목적지 내에서도 프로세스를 구분할 때 쓰인다. (IP는 아파트, PORT는 몇동 몇호!)
- 0 ~ 1023까지는 잘 알려진 포트이므로 사용하지 않는 것이 좋음
- FTP 20, 21
TELNET 23
HTTP 80
HTTPS 443
📌 DNS
- IP의 단점: 기억하기 어렵고, 바뀔 가능성이 있다.
- DNS(도메인 네임 시스템)을 통해 도메인 네임을 사서 등록하면, DNS 서버에 IP주소 별칭을 등록할 수 있다.