본문 바로가기
야미스터디/Network

[Network] IP, TCP/UDP, HTTP

by 의정부핵꿀밤 2023. 3. 24.
728x90

🤔 IP

IP 패킷

  • Internet Protocol 의 약자
  • IP는 클라이언트와 서버 간의 원활한 통신을 위한 규칙이다
  • 클라이언트와 서버가 통신하기 위해 IP 주소를 컴퓨터에 부여한다
  • 이후 지정한 IP 주소에 패킷(Packet)이라는 통신 단위로 데이터를 전달한다
  • IP 패킷에는 출발지 IP, 목적지 IP와 같은 정보가 포함되어 있어, 전송 데이터를 무사히 목적지까지 보낸다
  • 클라이언트에서 전송한 데이터가 무사히 서버에 전달되면, 서버도 IP 패킷을 이용해 클라이언트에 응답한다

 

IP의 한계

1) 비연결성

  • 클라이언트는 서버의 상태를 파악할 수 없다
  • 따라서 클라이언트는 패킷을 받을 대상이 없거나, 서버가 서비스 불능 상태여도 패킷을 전송한다

 

2) 비신뢰성

  • 전달하는 데이터의 용량이 큰 경우, 이를 패킷 단위로 나눠 전송하게 되는데 해당 패킷들은 전달 과정에서 각각 다른 노드를 통해 전달될 수 있다
  • 위와 같은 전송 과정에서 중간에 패킷이 사라질 수도 있고, 서버가 전달받는 패킷의 순서를 보장할 수 없다

 


🤔 TCP / UDP

OSI 7계층, TCP/IP 4계층

  • IP는 OSI 7계층에서는 네트워크 계층에 위치하고, TCP/IP 4계층에서는 인터넷 계층에 위치하고 있다
  • OSI 7계층의 네트워크 계층의 상위 계층으로 전송 계층이 있다
  • 전송 계층에 TCP와 UDP가 존재한다
  • 전송 계층(Layer 4)은 송신자와 수신자를 연결하는 통신 서비스를 제공하고 IP에 의해 전달되는 패킷의 오류를 검사하며 재전송 요구 제어 등의 데이터의 전달을 담당한다
  • 따라서 IP의 한계는 전송 계층의 TCP와 UDP를 통해 보완할 수 있다!

 

TCP

TCP 패킷

  • TCP는 전송 제어 프로토콜(Transmission Control Protocol)이다
  • TCP 프로토콜을 사용하는 경우, 네트워크에서 데이터를 송수신할 수 있도록 IP 패킷을 사용하기 전에 TCP 데이터를 소켓에 담는다
  • 여기서 소켓(Socket)은 네트워크 환경에 연결할 수 있게 만들어진 연결부이다
  • 데이터는 TCP 데이터가 담긴 소켓(TCP 세그먼트) 에 먼저 담기고, 그 데이터를 IP 패킷에 담아 LAN 카드와 같은 물리적 계층을 지나기 위해 이더넷 프레임워크에 포함하여 서버로 전송한다
  • TCP 세그먼트에는 IP 패킷의 출발지 IP와 목적지 IP 정보를 보완할 수 있는 출발지 PORT, 목적지 PORT, 전송 제어, 순서 등의 정보를 포함하고 있다
  • 위의 정보가 IP 패킷과 함께 전송되기 때문에 IP의 한계였던 데이터 전달과 순서를 보장한다
  • 또한 TCP는 TCP 3way Handshake를 통해 통신하기 때문에 연결 지향적이고 신뢰성 있는 프로토콜이다
💡 TCP는 연결을 수립할 때는 3way-Handshake, 연결을 종료할 때는 4way-HandShake를 사용한다

 

TCP 3 way Handshake

연결 순서

  1. 클라이언트는 서버에 접속을 요청하는 SYN(Synchronize) 패킷을 보낸다
  2. 서버는 SYN 패킷을 받고, 클라이언트에게 접속 요청을 수락한다는 ACK(Acknowledgement)와 SYN 가 설정된 패킷을 발송한다
  3. 클라이언트가 서버에게 ACK 요청을 보내면 이후 클라이언트와 서버 간의 연결이 성립되어 데이터를 주고받는다

 

장점

  • 위의 과정을 통해 클라이언트와 서버 간에 연결을 위한 응답을 주고받기 때문에 IP의 한계인 비연결성을 보완할 수 있다
  • 만약 패킷이 순서대로 도착하지 않으면 TCP 세그먼트에 있는 정보를 토대로 다시 패킷 전송을 요청하기 때문에 IP의 한계인 비신뢰성을 보완할 수 있다

 


UDP

  • UDP는 사용자 데이터그램 프로토콜(User Datagram Protocol)이다
  • UDP는 IP에 PORT, 체크섬 필드 정보만 추가된 TCP보다 단순한 프로토콜이다
  • 체크섬(checksum)은 중복 검사의 한 형태로, 오류 정정을 통해 공간(전자 통신)이나 시간(기억 장치) 속에서 송신된 자료의 무결성을 보호하는 단순한 방법이다
  • TCP와 비교했을 때, 3way Handshake를 사용하지 않고 추가되는 것이 적기 때문에, 신뢰성은 낮지만 빠른 속도를 보장한다
  • HTTP3도 UDP를 사용하는데, 이미 다양한 기능이 구현된 TCP보다 커스터마이징이 쉽다는 장점이 있기 때문이다

 

TCP vs UDP

TCP UDP
연결 지향 프로토콜 비 연결 지향 프로토콜
전송 순서 보장 O 전송 순서 보장 X
데이터 수신 여부 확인 O 데이터 수신 여부 확인 X
신뢰성 높음 신뢰성 낮음
속도 느림 속도 빠름
  • TCP는 신뢰성이 더 요구될 때, UDP는 서비스의 연속성(ex. 실시간 스트리밍)이 더 요구될 때 사용된다

 


🤔 HTTP

  • HTTP는 하이퍼텍스트 전송 프로토콜(HyperText Transfer Protocol)이다
  • HTTP의 구조는 클라이언트 - 서버 구조이다
  • 클라이언트가 서버에 Request 요청을 보내고, 서버는 클라이언트에게 Response 응답을 보낸다
  • HTTP는 서버가 클라이언트의 상태를 보존하지 않는 무상태(Stateless) 프로토콜이다
    • 무상태성의 장점으로는 서버가 클라이언트의 상태를 보존하지 않으므로, 서버를 확장하기 용이하다
    • 서버가 클라이언트의 상태를 보존하는 경우, 서버를 확장할 때에도 그 상태를 같이 포함해야 하기 때문에 확장이 어렵다
    • 단점으로는 클라이언트가 이미 전송한 요청을 반복적으로 추가적인 데이터를 전송해야 한다
  • HTTP는 무상태성과 함께 비연결성을 가진다
    • HTTP 1.0 기준으로, HTTP는 연결을 유지하지 않는 모델이다
    • 비연결성을 가지는 HTTP에서는 실제로 요청을 주고받을 때만 연결을 유지하고 응답을 주고나면 TCP/IP 연결을 끊는다
    • 이를 통해 최소한의 자원으로 서버 유지를 가능하게 한다
    • 트래픽이 많지 않고 빠른 응답을 제공할 수 있는 경우, 비연결성의 특징은 효율적으로 작동한다
    • 하지만 트래픽이 많고 큰 규모의 서비스를 운영하는 경우에는 매번 연결하는데 많은 시간이 소요되기 때문에 한계를 보인다
  • 지금은 HTTP 지속 연결(Persistent Connections)로 문제를 해결한다
  • HTTP 종류에는 TCP와 UDP 방식이 있으며 80 포트를 사용한다

 

HTTP의 역사

  • HTTP/0.9
    • 1991년에 출시됐으며, GET 메서드만 지원하고 HTTP 헤더는 없었다
  • HTTP/1.0
    • 1996년에 업그레이드되면서 POST 등 메서드가 추가됐고, 헤더가 추가되었다
  • HTTP/1.1
    • 1997년에 출시되었으며, 현재까지도 이 버전을 주로 사용한다
  • HTTP/2
    • 2015년에 출시되었으며, HTTP/1.1에 성능이 개선된 버전이다
  • HTTP/1.1과 HTTP/2는 TCP 기반이며, HTTP/3은 UDP 기반 프로토콜이다

 


HTTP 메시지 구조

Request Message

  • 클라이언트가 서버에게 보내는 메시지
  • Header
    • GET /HTTP/1.1 : HTTP 전송 방법과 프로토콜 버전
    • Host : 요청하는 서버 주소
    • User-Agent : OS/브라우저 정보
    • Accept : 클라이언트가 이해 가능한 컨텐츠 타입
    • Accept Language : 클라이언트 인식 언어
    • Accept-Encoding : 클라이언트 인코딩 방법
    • Content-Type : 클라이언트에게 반환되어야 하는 컨텐츠 유형
    • Content-Length : 본문 크기
  • Body
    • 본문은 요청의 마지막 부분에 들어간다
    • 모든 요청에 본문이 들어가지는 않는다

 

Response Message

  • 서버가 클라이언트에게 보내는 메시지
  • Header
    • HTTP/1.1 200 OK : 프로토콜 버전과 응답상태
    • Access-Control-Allow-Origin : 서버에 타 사이트의 접근을 제한하는 방침
    • Connection : 전송 완료 후 접속 유지 정보 (keep-alive)
    • Content-Encoding : 미디어 타입을 압축한 방법
    • Date : 헤더가 만들어진 시간
    • ETag : 버전의 리소스를 식별하는 식별자
    • Keep-Alive : 연결에 대한 타임아웃과 요청 최대 개수 정보
    • Last-Modified : 웹 시간을 가지고 있으며, 수정되었을 때만 데이터를 변경한다 (캐시와 연관됨)
    • Server : 웹 서버로 사용되는 프로그램 이름
    • Set-Cookie : 쿠키 정보
    • Transfer-Encoding : 인코딩 형식 지정
    • X-Frame-Options : frame/iframe/object 허용 여부
  • Body
    • 본문은 응답의 마지막 부분에 들어간다
    • 모든 응답에 본문이 들어가지는 않는다

 


💡 DNS

  • Domain Name System
  • 인터넷에서는 컴퓨터를 식별하기 위해 IP 주소를 사용하는데, 이 숫자만으로는 무엇에 사용되고 있는지 알 수 없다
  • 따라서 인터넷에서는 IP 주소에 도메인명 이라는 이름을 붙혀 알기 쉽게 한다
  • IP 주소와 도메인명을 서로 교환하는 장치를 DNS라고 한다
  • DNS 서버는 트리구조로 되어 있다

 


참고)

https://velog.io/@shitaikoto/CS-IP-TCP-UDP-HTTP

 

[CS] IP / TCP / UDP / HTTP

[CS] IP / TCP / UDP / HTTP

velog.io

 

728x90

'야미스터디 > Network' 카테고리의 다른 글

[Network] 로드밸런스  (0) 2023.03.30
[Network] DNS  (0) 2023.03.16
[Network] OSI L4  (0) 2023.03.16
[Network] OSI 7계층  (0) 2023.03.15
[Network] HTTP Status code 📌  (0) 2022.11.19

댓글