김영한님의 모든 개발자를 위한 HTTP 웹 기본 지식 강의 내용을 정리한 노트입니다. 블로그에 있는 자료를 사용하실 때에는 꼭 김영한님 강의 링크를 남겨주세요!
1. 패킷
1-1. 패킷의 전송 과정

(패킷의 전달 과정, 이미지 출처 : 강의 교재 자료)
- 클라이언트와 서버 사이의 수 많은 노드를 거쳐 클라이언트의 요청이 서버로 넘어감
- 이러한 수많은 노드들을 거치는 과정을 이해하기 위해서는 ip 프로토콜에 대한 이해 필요
IP(인터넷 프로토콜)
- 지정한 IP 주소에 데이터 전달 → 이 때 패킷이라는 통신 단위로 전달
1-2. 패킷 개요
패킷
- 출발지 IP(위의 예시 이미지에서 클라이언트)
- 목적지 IP(위의 예시 이미지에서 서버)
- 출발지와 목적지 IP가 있는 것은 우리가 편지 쓸 때와 같다고 생각
- 이 패킷이 목적지 IP에 갈 수 있는 노드들을 에게 던져지고 이를 거쳐서 목적지에 도착, 답신이 필요하다면 다시 처음 보낸 녀석을 목적지로 패킷이 던져짐.

(서버 → 클라이언트 패킷 전달 과정 : 강의 교재 자료)
2. TCP와 UDP
2-1. 인터넷 프로토콜 4계층
인터넷 프로토콜의 4계층
- 애플리케이션 - HTTP, FTP
- 전송계층 - TCP, UDP
- 인터넷 계층 - IP
- 네트워크 - 인터페이스 계층

- 위 사진에서 웹브라우저, 네트워크 게임, 채팅 프로그램은 어플리케이션 계층, 그 아래 TCP와 UDP(전송 계층)이 있고 그 아래 인터넷 계층인 IP가 있음. 대표적인 네트워크 인터페이스 계층으로는 LAN에 관련된 장비들이 있음.
2-2. TCP 개요
TCP 전송 과정

- 애플리케이션 계층에서 전송 데이터 생성 → 전송 데이터를 TCP 정보로 감쌈 → 그 후 IP 정보로 한 번 더 감싸서 IP 패킷 생성 → 네트워크 인터페이스 (LAN 카드 등)을 통해 최종적으로 나갈 때 이더넷 프레임으로 한 번 더 감싸짐(이더넷 프레임은 물리적 주소 정도로 생각하자. 우리가 다룰 건 네트워크 수준이기 때문에 이더넷 프레임은 깊게 다루진 않음. 공부 해두면 좋음)
TCP
-
전송 제어 프로토콜
-
포함 정보 : 출발지 port, 목적지 port, 전송 제어, 순서, 검증 정보 등...

-
연결 지향(출발지와 목적지의 연결 상태 여부 체크) → 3 way handshake

- syn 메시지 전송 → 받는 쪽에서 syn + ack 메시지 응답 → syn + ack 응답을 받는 쪽에서 다시 ack 전송
- 클라이언트와 서버간 서로 살아 있다는 것을 앎(서로가 신뢰할 수 있음)
- 최적화를 위해 3번째 ack가 나갈 때 같이 데이터를 전송하는 경우도 있음
- 단, 3 way handshake로 연결이 되었다고 해서 물리적으로 연결된 것이 아님 → 개념적으로 연결만 된 것(논리적 연결이 되었다고 보는데 이는 서버와 클라이언트가 서로 살아있구나 정도만 알고 그 사이에 존재하는 노드 서버의 상태는 모르는 상태를 말함)
-
데이터 전달 보증
-
순서 보장

- 패킷이 1, 2, 3 순서로 나가고 받는 쪽에서 1, 3, 2로 받음 → TCP에는 순서에 대한 정보가 있기 때문에 보낸 쪽에게 다시 틀린 순서부터 보내라고 요청을 전송
-
신뢰할 수 있는 프로토콜로 현재 대부분 TCP 사용
2-3. UDP 개요
UDP
- 사용자 데이터그램 프로토콜
- TCP와 같은 계층
- 기능은 거의 없음 → IP와 거의 똑같지만, UDP에는 port 정보가 추가 되어 있음
- 단순하고 빠름
- TCP는 이미 구축이 다 되어 있기 때문에 사용자가 추가 최적화를 할 수 없음 → UDP를 사용해 애플리케이션 레벨에서 최적화를 할 수 있음
- 최근에 UDP가 뜨고 있는데 바로 그 이유가 자유로운 최적화
2-4. Port 개요
port
- 하나의 IP가 여러 서버와 통신 ⇒ 이걸 구분할 필요가 있음
- ex) 내 컴퓨터의 IP는 하나지만, 롤도 하고, 로아도 하고, 레오룬도 하고, poe도 함 → 여러 게임 서버와 통신해야 하는데 하나의 IP로는 통신에 대해 구분할 수 없음
- 하나의 IP에 여러 패킷이 오는데, 각각의 애플리케이션이 받을 수 있는 창구라고 생각!
- TCP에 출발지, 도착지의 port 정보가 있음
- 더 쉬운 비유를 하면 IP는 아파트, port는 동호수를 의미
- 0 ~1023은 잘 알려진 포트로 안 쓰는 게 좋음

2-5. DNS
DNS
- 도메인 네임 시스템
- IP는 기억하기 어려울 뿐만 아니라 변경, 변조될 여지가 있음
- DNS는 중간에 전화번호부 같은 서버를 둠
- 도메인명으로 DNS 서버에 접근 → DNS 서버는 도메인 이름에 해당하는 IP를 응답함 → 받은 IP 주소로 패킷을 만들어서 서버에 쏴줌.
블로그에 있는 자료를 사용하실 때에는 꼭 김영한님 강의 링크를 남겨주세요!
(강의 링크 : https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard)
글이 강의 자료를 그대로 가져온 것 같아 보여서 질문 드립니다.
내용을 자신만의 방식으로 재해석을 하여 기고하는 것은 괜찮다고 알고있습니다. 강의자료에서 일부 발췌를 하는 것은 저자에게 허락을 받으면 가능하다고 알지만 위 내용은 전체를 다 발췌하는 것 같아보입니다. 이는 저작권상에 문제가 되는 것으로 알고 있는데요. 혹시 저자분께는 승인 받으신 걸까요?