[HTTP] 인터넷 네트워크
반응형
인터넷 네트워크
강의 모든 개발자를 위한 HTTP 웹 기본 지식 와 개인적으로 공부한 내용을 정리하였습니다.
웹이나 HTTP도 인터넷 네트워크 안에서 일어난다. 인터넷 망을 통해 두 컴퓨터가 통신하기 위해서 여러 노드를 거치는 데, 이 요청을 잘 전달하기 위한 방법에 IP(인터넷 프로토콜)이다.
IP 인터넷 프로토콜 역할
- 지정한 IP 주소(IP Address)에 데이터 전달
- 패킷(Packet)이라는 통신 단위로 데이터 전달
IP 패킷 정보
- 패킷 : 수화물을 뜻하는 패키지와 덩어리라는 의미의 버킷의 합성어
- 출발지IP, 목적지IP, 기타 정보
- 전송할 데이터
- 전송 데이터가 너무 많으면 1500 바이트 정도의 단위로 끊어서 보냄
IP 프로토콜의 한계
- 비연결성
- 클라이언트는 서버가 존재하는지, 서비스 가능 상태인지 모름 (일단 요청함)
- 비신뢰성
- 패킷 소실 : 결국 여러 서버를 거쳐서 전달되는 것. 중간 노드가 여러가지 이유로 작동하지 않는다면 내가 전달판 패킷 소실
- 패킷 전달 순서 문제 발생 : 1500 바이트가 넘으면 패킷 단위를 쪼개서 보내는데, 나뉜 패킷들이 모두 동일한 경로로 가지 않기 때문에 최종적으로 두번째 순서의 패킷이 먼저 도착할 수도 있음
- 이런 문제를 해결해주는게 바로 TCP 프로토콜이다.
- 프로그램 구분
- 같은 IP를 사용하는 서버에서 통신하는 어플리케이션이 둘 이상일 경우 어떤 어플리케이션인지 구분이 어렵다.
TCP와 UDP
IP 프로토콜의 문제(패킷의 소실, 순서 보장 X)을 TCP를 통해 해결할 수 있다. UDP는 이런 IP 프로토콜의 문제를 해결해주지는 않지만 도움되는 게 있으니 함께 정리한다.
TCP에는 언급한 것 보다 더 많은 기능이 있지만 일단 이 정도만 정리한다.
인터넷 프로토콜 스택의 4계층 인터넷 프로토콜 스택의 4계층
- 애플리케이션 계층 - HTTP, FTP
- 전송 계층 - TCP, UDP
- 인터넷 계층 - IP
- 네트워크 인터페이스 계층 - 랜 카드, 랜 드라이버 등 실제 물리적 네트워크 인터페이스도 포함
프로토콜 계층
- 내가 만든 메시지(=HTTP)을 OS 계층에서 TCP 정보를 넣어서 감쌈
- IP에서 패킷으로 다시 감쌈
- 네트워크 인터페이스 계층에서 진짜 물리적 랜 카드에 등록된 맥주소 등을 포함해서 이더넷 프레임이라는 걸로 감쌈
TCP(Transmission Control Protocol)
IP 프로토콜 위에 TCP를 얹어서 보완한 것을 TCP/IP
라고 표현하는 듯 하다.
이제 IP 패킷 내에 TCP 세그먼트(초록)이 포함된다.
TCP 정보에는 Port와 전송제어, 순서, 검증 정보를 포함하기 때문에 IP 프로토콜에서 발생했던 문제를 해결할 수 있다.
TCP 특징
- 전송 제어 프로토콜(Transmission Control Protocol)
-
- 먼저 연결을 한 후 데이터를 전송함
- 요즘에는 많이 최적화되서 3번 ACK를 보낼때 함께 데이터도 전송하기도 함
- 개념적으로만 연결된거지 실제로 연결된 것은 아님. 서로 살아있음을 점검하는 거고, 응답을 서로 주고받는 걸 성공하면 논리적으로 연결됐다고 가정하는 것연결지향 - TCP 3 way handshake (가상 연결)
- 데이터 전달 보증
- 패킷이 중간에 소실될 경우 클라이언트가 해당 사실을 인지할 수 있게 알려줌
- 요청을 정상적으로 받을 경우, 응답 서버에서 클라이언트에 데이터 잘 받았다고 알려줌
- 순서 보장
- 응답받는 곳에서 패킷이 순서대로 도착하지 않는다면, 클라이언트에 얽힌 곳부터 다시 순서대로 보내라고 요청함
- 서버에서 내부적으로 최적화도 가능하지만, 기본적으로는 클라이언트에 재요청하는 방식으로 함
- 이게 가능한 이유는 TCP 세그먼트 정보를 이용하기 때문임
UDP(User Datagram Protocol)
UDP 특징
- 사용자 데이터그램 프로토콜
- 하얀 도화지에 비유(기능이 거의 없음)
- 연결지향 - TCP 3 way handshake X
- 데이터 전달 보증 X
- 순서 보장 X
- 데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠름 정리
- IP와 거의 같다. +PORT +체크섬 정도만 추가 애플리케이션에서 추가 작업 필요
어떨 때 사용할까?
- 원래는 영상같은 데이터를 통신할 때 사용했는데, 요즘에는 영상조차 TCP/IP로 통신함(TCP 점유율 90%이상)
- TCP 계층은 이미 네트워크 표준이라 더 이상 최적화 불가. 하지만 UDP를 직접 어플리케이션 레벨에서 무언가 만들어내면 된다.
- 최근에 HTTP 3 통신할 때 더 최적화하고 비용을 줄이기 위해 UDP 프로토콜을 채택하게 되면서 각광을 받게 됨.
PORT
- TCP/IP 패킷 내 출발지 Port, 목적지 Port 정보가 있음.
- 같은 IP 내에서 프로세스 구분하기 위해 사용
- 0 ~ 65535 할당 가능
- 0 ~ 1023: 잘 알려진 포트, 사용하지 않는 것이 좋음
- FTP - 20, 21 TELNET - 23 HTTP - 80 HTTPS - 443 등...
DNS(Domain Name System)
왜 DNS(Domain Name System)?
- IP는 기억하기 어렵다.
- IP는 변경될 수 있다.
DNS(Domain Name System)
- 도메인 네임 시스템
[질문]
- 클라이언트는 어떤 DNS에 요청할 지 어떻게 알까? => 글로벌 DNS는 몇 개 없다.
반응형
'엔지니어링 > 개발배움터' 카테고리의 다른 글
[HTTP] HTTP 기본 (0) | 2021.05.02 |
---|---|
[HTTP] URI와 웹 브라우저 요청 흐름 (0) | 2021.05.01 |
Github Branch Protection Rules (0) | 2021.03.27 |
Github Page를 이용한 React 호스팅 (0) | 2021.03.20 |
SSH 파일 업로드 시 pem 키 혹은 패스워드 입력하기 (0) | 2021.02.20 |
댓글
이 글 공유하기
다른 글
-
[HTTP] HTTP 기본
[HTTP] HTTP 기본
2021.05.02 -
[HTTP] URI와 웹 브라우저 요청 흐름
[HTTP] URI와 웹 브라우저 요청 흐름
2021.05.01 -
Github Branch Protection Rules
Github Branch Protection Rules
2021.03.27 -
Github Page를 이용한 React 호스팅
Github Page를 이용한 React 호스팅
2021.03.20