IP, TCP, UDP, URI 간단 정리

 

인터넷 네트워크 (http를 위한 기본학습)

- 클라이언트와 서버 그 사이엔 복잡한 인터넷이 있다.

- 그 규칙을 IP라고 함


IP (인터넷 프로토콜)

- 지정한 IP 주소에 데이터를 전달

- 패킷이라는 통신 단위로 데이터를 전달

 

IP 패킷 정보

- (출발IP, 목적IP, 기타 ...) 으로 구성되어 있음

- 근데 이 정보만으로는 한계가 있다.

 

IP 프로토콜의 한계

- 비연결성 : 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷을 전송

- 비신뢰성 : 중간에 패킷이 사라지면? 패킷이 순서대로 안오면?

- 프로그램 구분 : 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이면??

- 이런것들을 해결해주는 것이 TCP, UDP


TCP (전송 제어 프로토콜)

- 연결지향 : TCP 3 way handshake (가상연결)

- 데이터 전달 보증

- 순서 보장 (잘못된 순서부터 다시 보내라고 서버에서 응답함)

- 신뢰할 수 있는 프로토콜 - 대부분 TCP 사용

 

TCP 3 way handshake

1. SYN : 클라이언트 → 서버

2. SYN + ACK : 서버 → 클라

3. ACK : 클라 → 서버 ( 연결이 됐구나! )

4. 데이터 전송 (요새는 최적화되서 3번일때 전송하기도함)

근데 사실 진짜 연결된 게 아니라 가상으로 연결된거임 (중간에 수많은 노드는 생략)

 

TCP/IP 패킷 정보

- (출발PORT, 목적PORT, 전송제어, 순서, 검증정보 등 ) 으로 구성되어 있음


UDP (사용자 데이터그램 프로토콜)

- 기능이 거의 없음

- 연결지향 X, 데이터 전달보증 X, 순서보장 X

- 대신 단순하고 빠름

- 하나의 IP에서 구분하기 위한 'PORT' 추가됨

- 메세지 제대로 검증해주는 '체크섬' 추가됨

- 그 외 IP 와 거의 같음

- 애플리케이션에서 추가 작업이 필요(원하는 대로)

- 최근에 각광을 받는 중


PORT

- 한번에 둘 이상 연결해야 하면? (게임하면서 통화한다던가)

- 하나의 IP에서 구분하기 위함

- 0 ~ 65535 할당 가능

- 0 ~ 1023 잘알려진 포트, 사용ㄴㄴ

20, 21 : FTP

23 : TELNET

80 : HTTP

443 : HTTPS


DNS

- IP는 기억하기 어렵고 변경이 될 수 있음

- 도메인 네임 시스템, 전화번호부 느낌

- 도메인 명을 IP주소로 변환 (google.com → 200.200.200.2)


URI

- Uniform Resource Identifier

- Uniform : 리소스 식별하는 통일된 방식

- Resource : 자원, URI로 식별할 수 있는 모든 것 (제한없음)

- Identifier : 다른 항목과 구분하는데 필요한 정보 (주민번호 같은)

- URI는 로케이터(locator), 이름(name) 또는 둘 다 추가로 분류될 수 있다 (URL + URN = URI)

- URL (Locator) : 리소스가 있는 '위치'를 지정한

- URN (Name) : 리소스에 '이름'을 부여.

 

 

URL 기본 구조 

scheme://[userinfo@]host[:port][/path][?query][#fragment]
scheme userinfo host  port  path  query  fragment
https   www.google.com (https→443) /search q=hello&hl=ko  
https://www.google.com/search?q=hello&hl=ko 

 

(1) scheme

scheme에는 주로 프로토콜을 사용한다

프로토콜 : 어떤 방식으로 자원에 접근할 것인가 하는 규칙 (http, https, ftp 등)

 

(2) userinfo

URL에 사용자정보를 포함해서 인증 거의 사용안함

 

(3) host

호스트명 도메인명 또는 IP 주소를 직접 사용 가능

 

(4) port

접속 포트는 일반적으로 생략

생략하면 http는 80, https는 443

 

(5) path

리소스 경로 계층적 구조 (/home/file2.jpg)

 

(6) query

key=value 형태 ?로 시작, &로 추가 가능 query parameter, query string 등으로 불림

웹 서버에 제공하는 파라미터 (문자형태)

 

(7) fragment

html 내부 북마크 등에 사용 서버에 전송하는 정보가 아님

 


 

참고 강의 : https://taylog.tistory.com/203

 

[강의리뷰] “모든 개발자를 위한 HTTP 웹 기본 지식” 후기 | 인프런

모든 개발자를 위한 HTTP 웹 기본 지식김영한님의 실무에 필요한 HTTP 핵심 기능에 대한 강의다. 강의의 총 길이는 5시간 40분, 강의 구성은 아래와 같다.인터넷 네트워크URI와 웹 브라우저 요청 흐

taylog.tistory.com