00. IP (인터넷 프로토콜)
인터넷은 복잡한 망으로 연결되어있다. 그럼 여기서 'Hello World'를 보내려면 어떻게 해야할까? 인터넷망은 규칙을 통해 서로 통신을 진행한다.
(1) IP(인터넷 프로토콜의 역할)
- 지정한 IP 주소(IP Address)에 데이터 전달
- 패킷(Packet) [덩어리 + 수하물의 합성어] 이라는 통신 단위로 데이터 전달
- 패킷에는 (출발지IP, 목적지IP, 기타 전송 데이터)가 들어간다.
(2) IP(인터넷 프로토콜의 한계)
- 비연결성
👉 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송
- 프로그램 구분
👉 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이면?
- 비신뢰성
👉 중간에 패킷이 사라지면?(패킷 소실) 혹은 패킷이 순서대로 안오면?(Hello / World!)
01. TCP, UDP
(1) 인터넷 프로토콜 스택의 4계층
애플리케이션 계층 - HTTP, FTP |
전송 계층 - TCP, UDP |
인터넷 계층 - IP |
네트워크 인터페이스 계층 |
(2) TCP 전송 제어 프로토콜 (Transmission Control Protocol)
- 연결지향 (TCP 3 way handshake(가상연결)) : 쟤랑 나랑 연결 했어?
- 데이터 전달 보증 : 1. 데이터 전송 2. 데이터 잘 받았음
- 순서 보장 : 1. 패킷 1,2,3 순서로 전송 2. 패킷1, 패킷3, 패킷2 순서로 도착 3. 패킷2부터 다시보내
- 신뢰할 수 있는 프로토콜
- 현재는 대부분 TCP 사용
(3) TCP 3 way handshake
- 물리적이 아닌 가상연결임에 유의하자.
(4) UDP 사용자 데이터그램 프로토콜(User Datagram Protocol)
- 하얀 도화지에 비유(기능이 거의 없음)
- 연결지향 -
- 데이터 전달 보증 X
- 순서 보장 X
- 데이터 전달 및 순서가 보당되지 않지만, 단순하고 빠름
- IP와 거의 같고, +PORT+ 체크섬 정도만 추가
- 애플리케이션에서 추가작업 필요
TCP는 연결, 데이터 넣고 양도 크고 전송속도도 빠르게 만들기 어려움
그래서 최적화 하고 싶으면 UDP를 건들이자
UDP는 내 컴퓨터에 여러개가 구동 중일때 각 상황에 맞는 애플리케이션을 찾아주는 프로토콜 IP
02. PORT
- Ip: 목적지 서버를 찾는것 (아파트)
- port : 서버안에서 돌아가는 애플리케이션을 찾는 것(몇동 몇호)
- PORT 란 같은IP 내에서 프로세스를 구분하는 것이다.
- 0 ~ 65535 : 할당가능
- 0 ~ 1023 : 잘 알려진 포트, 사용하지 않는 것이 좋음
👉 FTP - 20, 21
👉 TELNET - 23
👉 HTTP - 80
👉 HTTPS - 443
03. DNS 도메인 네임 시스템(Domain Name System)
- IP는 변경될 수 있다.
- IP는 기억하기 어렵다.
- 그래서 DNS를 사용한다. 도메인 명을 IP 주소로 변환(ex.전화번호부)
04. URL(Uniform Resource Identifier)
- URI는 로케이터(Locator), 이름(name) 또는 둘다 추가로 분류 될 수 있다.
- URI는 리소스를 식별한다 : 주민번호를 식별한다.
- URL(Uniform Resource Locator) : 리소스가 있는 위치를 지정
- URN(Uniform Resource Name) : 리소스에 이름을 부여
- 위치는 변할 수 있지만 이름은 변하지 않는다.
- URN 이름만으로 실제 리소스를 찾을 수 있는 방법이 보편화 되지 않았음
(1) URI 단어 뜻
- Uniform : 리소스 식별하는 통일된 방식
- Resource : 자원, URI로 식별할 수 있는 모든 것(제한 없음)
- Identifier : 다른 항목과 구분하는데 필요한 정보
(2) URL 전체 문법
- scheme://[userinfo@]host[:port][/path][?query][#fragment]
- https://www.google.com:443/search?q=hello&hI=ko
- 프로토콜(https)
- 호스트명(www.google.com)
- 포트 번호(443)
- 패스(/search)
- 쿼리 파라미터(q=hello&hI=ko)
hello - Google 검색
HELLO! brings you the latest celebrity & royal news from the UK & around the world, magazine exclusives, fashion, beauty, lifestyle news, celeb babies, ...
www.google.com:443
(3) scheme - scheme://[userinfo@]host[:port][/path][?query][#fragment]
- 주로 프로토콜을 사용한다.
👉 프로토콜이란? 어떤 방식으로 자원에 접근할 것인가 하는 약속 규칙 (ex. http, https, ftp 등등)
- http는 80 포트 https는 443 포트를 주로 사용, 포트는 생략 가능
- https는 http에 보안 추가(HTTP Secure)
(4) userinfo - scheme://[userinfo@]host[:port][/path][?query][#fragment]
- URL에 사용자정보를 포함해서 인증
- 거의 사용하지 않음
(5) port - scheme://[userinfo@]host[:port][/path][?query][#fragment]
- 포트(PORT)
- 접속포트
- 일반적으로 생략, 생략시 http는 80 https는 443
(6) path - scheme://[userinfo@]host[:port][/path][?query][#fragment]
-리소스 경로(path), 계층적 구조
- ex) /home/file1.jpg (파일의 계층적 구조)
- /members
- /members/100, /items/iphone12
(7).Query - scheme://[userinfo@]host[:port][/path][?query][#fragment]
- key= value 형태
- ?로 시작, &로 추가 가능 ?keyA=valueA&B=valueB
- query parameter, query string등으로 불림, 웹 서버에 제공하는 파라미터, 문자형태
(7).fragment - scheme://[userinfo@]host[:port][/path][?query][#fragment]
- fragment
- html 내부 북마크 등에 사용
- 서버에 전송하는 정보 아님
05. 웹 브라우저 요청 흐름
(1) HTTP 요청 메세지
GET /search?q=hello&hI=ko HTTP/1.1 HOST: www.google.com |
(2) HTTP 메세지 전송
(3) HTTP 응답 메시지
HTTP/1.1 200 OK Content-Type: text/html; charset= UTF-8 Content-Length:3423 <html> <body></body> </html> |
출처 : 모든 개발자를 위한 HTTP웹 기본지식_김영한
'Computer Systems' 카테고리의 다른 글
🖥[CSAPP] 11장. 네트워크 프로그래밍(0) (0) | 2022.11.06 |
---|---|
🖥[CSAPP] 11장(5). 네트워크 프로그래밍_ 웹서버 (0) | 2022.11.04 |
🖥[CSAPP] 9장. 분리 가용리스트 (Segregated Free List) (1) | 2022.11.02 |
🖥[CSAPP] 9장. Malloc Lab 명시적 가용(Explicit Free List)리스트 구현하기 (0) | 2022.11.01 |
🖥[CSAPP] 9장. Malloc Lab 묵시적 가용 리스트 구현하기 (0) | 2022.10.30 |
댓글