◎ 이 글은 김영한 - 모든 개발자를 위한 HTTP 웹 기본 지식 강의를 수강 후 정리 목적으로 작성했습니다.
1. IP 프로토콜

클라이언트와 서버는 각 IP 주소를 가진다. IP는 인터넷 프로토콜 역할을 한다. (지정한 IP 주소에 패킷 이라는 통신 단위로 데이터를 전달)
클라이언트는 서버에서 전송하고자 하는 데이터를 출발지 IP, 목적지 IP 등의 정보로 구성된 IP 패킷으로 한 번 감싸서 서버로 전달하는 형식.
IP 프로토콜의 한계는 비연결성, 비신뢰성, 프로그램간의 구분이 어렵다 가 있다.
- 비연결성 : 패킷을 받을 대상이 없거나 서비스 불능 상태여도 무조건 패킷을 전송함.
- 비신뢰성 : 중간에 패킷이 사라지거나, 패킷이 순서대로 안 오는 문제가 발생할 수 있음.
- 프로그램 구분 : 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 2개 이상일 경우가 있음. 이 경우, IP 프로토콜은 서버 IP만 가지고 있으므로 어떤 프로그램에 요청을 하는건지 구분하기가 어렵다.
이러한 단점을 보완한 기술이 TCP와 UDP 방식이다.
2. TCP (Transfer Control Protocol)
TCP와 UDP는 각각 Transfer Control Protocol, User Datagram Protocol의 약자로, 인터넷 프로토콜 4계층 중 세 번째 계층인 전송 계층이다.

위 4계층에 따라 순서대로 메세지가 전송된다.
- [애플리케이션] 프로그램이 "Hello World" 메세지 생성
- [애플리케이션] Socket 라이브러리에서 OS 계층으로 메세지 전달
- [OS] Hello 메세지에 TCP 정보를 한번 씌움
- [OS] 그다음 IP 관련 데이터 정보를 한번 더 씌움 (= IP 패킷)
- [네트워크 인터페이스] 마지막으로 Ethernet Frame이 씌워져서 LAN 카드로 나감 (맥주소 등 물리적인 주소 포함)
- 인터넷으로 데이터 전달됨
TCP, UDP는 인터넷 프로토콜 스택의 4계층에서 전송계층 을 담당한다. 먼저 TCP에 대해서 정리해보자.

- 서버에 전송하고자 하는 데이터와 IP 패킷 사이에 TCP 세그먼트를 추가해서 전달하면서 IP 패킷의 한계점을 보완한다. (출발지 PORT, 목적지 PORT, 전송 제어, 순서, 검증 정보 등)
- 패킷은 수화물을 뜻하는 패키지와 덩어리를 뜻하는 버킷을 합친 용어로, 데이터를 넣는 박스를 담당.
- TCP/IP 패킷은 출발지 및 목적지 정보에 출발지 PORT, 목적지 PORT, 전송 제어, 순서, 검증 정보 등의 추가적인 내용을 담아서 IP에서 문제가 되었던 단점을 보완함.
TCP의 특징은 다음과 같다.

- 연결 지향 (TCP 3 way handshake, 가상연결) : 클라이언트와 서버가 서로 연결이 가능한 상태인지 확인하는 절차
- 데이터 전달 보증 : TCP 3 way handshake 과정에서 데이터 누락을 알 수 있기 때문에 데이터 전달이 보증된다.
- 순서 보장 : TCP 패킷에는 순서 관련 정보가 추가되기 때문에 패킷 순서를 보장
- 신뢰할 수 있는 프로토콜 ➡️ 그래서 현재는 대부분 TCP를 사용
TCP 3 way handshake 방식의 세 단계
- 클라이언트에서 SYN(synchronize) 메시지를 전달 (연결 요청)
- 서버에서 수락의 뜻으로 ACK(acknowledgement)와 연결 요청으로 SYN 메시지까지 총 두 개의 메시지를 전달
- 클라이언트에서 응답을 확인했다는 뜻으로 ACK를 전달
3. UDP (User Datagram Protocol)
UDP는 TCP에 비해 기능이 거의 없으며, 비연결성, 비신뢰성, 연결 지향 X, 데이터 전달 보증 X, 순서 보장 X, 데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠르다는 장점이 있다.
IP 프로토콜과 거의 비슷한 기능을 가지고 있지만, PORT와 체크섬이라는 속성이 추가된 비연결성 전송 프로토콜이다.
- PORT : 컴퓨터의 세부 주소. 내 PC는 하나의 IP를 가지고 있기 때문에 이것을 구분해주는 역할을 담당하는 것이 PORT(포트).
- 체크섬 : 메시지가 제대로 왔는지 검증해주는 데이터
TCP에 비해 UDP는 기능이 적기 때문에 사용자가 원하는 기능을 넣어 커스텀이 가능하다.
4. PORT
PORT(포트) 는 배가 도착하는 항구에서 유래한 용어로, 한 번에 두 개 이상 서버와 연결해야 할 때, 같은 IP 내에서 프로세스를 구분하기 위해 서버에 포트 정보를 함께 전달한다. 출발지 PORT와 목적지 PORT를 추가해서 서버에 전달한다.
PORT는 0~65535까지 할당 가능하다. 0~1023까지는 잘 알려진 PORT며 이미 할당된 경우가 많으니 사용하지 않는 것이 좋다.
PORT의 종류
- FTP : 20, 21
- TELNET : 23
- HTTP : 80
- HTTPS : 443
5. DNS (Domain Name System)

DNS는 Domain Name System의 약자로, IP 주소에 도메인 이름을 등록할 수 있게 해준다. DNS를 사용하는 이유는 IP 주소가 변경될 수 있고, IP 주소는 길기 때문에 접근하기 어려운 문제를 가지고 있어 이를 보완하기 위해 사용한다.
특정 도메인을 검색하면 DNS tjqjdptj goekdgksms ehapdlsdml IP 주소를 주고, 해당 IP로 접속한다. 전화번호부 같은 역할을 한다.
🍀
좋아하는 것을 계속 좋아하세요!
반드시 행복해집니다
백엔드 개발자가 되고 싶어서 열심히 헤딩 중인 재영입니다 :-)
[Github] https://github.com/chujaeyeong
[E-mail] chujy1224@gmail.com