모든 개발자를 위한 HTTP 웹 기본지식(김영한)를 보고 정리한 내용입니다
함께보기 - 모두의 네트워크 정리
복잡한 인터넷 망에서 데이터는 어떻게 안전하게 넘어갈 수 있나?
데이터 전달 순서
1. 프로그램이 'hello, world' 메시지 생성
2. socket 라이브러리를 통해 전달
3. TCP 정보생성(=TCP 세그먼트) + 메시지
4. IP 패킷생성 + TCP세그먼트 + 메시지
5. Ethernet frame생성 + 패킷 + TCP 세그먼트 + 메시지
(하위계층으로 내려오면서 캡슐화)
6. LAN 카드로 전기신호로 변환해 데이터 전달
IP
- Internet Protocol
- 네트워크 계층에서 동작하며 지정한 IP주소에 데이터를 전달한다
- packet 단위
IP packet
: 출발지 ip,목적지 ip,기타정보 + 메세지
한계
- 비연결성: 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송
- 비신뢰성:패킷 소실이나 패킷전달 순서가 안 맞을 가능성이 있음
- 프로그램 구분 불가 :같은 ip를 사용하는 서버에서 통신하는 애플리케이션이 다를 때를 대응할 수 없음
DNS
- Domain Name System
- ip는 기억하기 어렵고 변경될 수 있음
- 호스트의 도메인 이름을 호스트의 네트워크 주소로 바꾸거나 그 반대의 변환을 수행할 수 있도록 하기 위해 개발되었다. 특정 컴퓨터의 주소를 찾기 위해, 사람이 이해하기 쉬운 도메인 이름을 숫자로 된 식별 번호로 변환해 준다. 위키백과 - DNS
TCP/UDP
- 전송제어 프로토콜
TCP segment
: 출발지 port, 목적지 port, 전송 제어, 순서, 검증 정보, ...
특징
TCP 3way handshake
- 연결이 되었다는 것을 확립
- syn : 접속요청
- syn+ack : 요청 수락+접속요청
- ack : 수락
- 데이터 전송
UDP
- IP와 거의 같은데 포트정보와 체크섬 정보가 더해짐
- 데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠르다
- 성능 최적화를 하고싶으면 UDP를 이용하면 되지만, 애플리케이션에서 추가 작업이 필요하다.
- HTTP3.0에서 UDP를 사용해 최적화 시도. 최근 부각되는 추세.
함께보기 - HTTP/3는 왜 UDP를 선택한 것일까?
PORT
- TCP, UDP에 포트 정보가 들어간다
- ip는 목적지의 서버 주소
- port는 ip 안에서 돌아가는 애플리케이션. 같은 ip 내에서 프로세스를 구분한다.
웹 브라우저 요청 흐름
- uri 입력 -> DNS조회
- 웹 브라우저가 HTTP 메시지 생성
- SOCKET 라이브러리를 통해 전달
- TCP/IP 연결 및 패킷생성(ip,port)+HTTP 메시지 포함
- 요청 패킷 서버로 전달
- 서버에 요청 패킷 도착
- 서버에서 HTTP 응답 메시지 생성
- 클라이언트로 응답 패킷 도착
- 브라우저 HTML 렌더링
📑 reference