[HTTP] 인터넷 네트워크
웹이나 HTTP 모두 인터넷 네트워크 기반에서 동작하기 때문에 네트워크 개념을 알고 가는 것이 좋다!
인터넷상에서 컴퓨터 둘은 어떻게 통신할까?
인터넷 망은 단순하지 않다. 수많은 중간 노드 서버를 거쳐서 내가 원하는 목표 지점까지 메시지가 안전하게 넘어가야하는데, 어떤 규칙으로 어떻게 넘어갈까? 이 것을 이해하려면 ip 프로토콜을 알아야한다.
IP (인터넷 프로토콜)
1. 인터넷 프로토콜 역할
- 지정한 IP 주소에 데이터 전달
- 패킷이라는 통신 단위로 데이터 전달
2. IP 패킷 정보
- 출발지 IP, 목적지 IP 등
- 패킷이 출발지에서 목적지까지 바로 이동하는 것이 아니라, 중간 노드들을 거쳐서 이동하게 된다.
- 두 대의 컴퓨터가 서로 패킷을 전달할 때, 거쳐가는 중간 노드들이 일정하지는 않다. 다른 경로로 전달할 수 도 있다.
3. IP 프로토콜의 한계
- 비연결성
- 패킷을 받을 대상이 없거나 그 서비스가 불능 상태여도 패킷이 전송되고, 전송한 입장에서는 상대의 상태를 알 수 없다. 패킷은 그대로 중간에 소실된다.
- 비신뢰성
- 보통 패킷이 1500Byte가 넘어가면 끊어서 보내게 되는데, 여러 패킷이 전송한 순서대로 도착한다는 보장이 없다. 최종적으로 도착하는 순서는 다를 수 있다.
- 프로그램 구분 불가
- 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이라면 어떻게 구분하지?
TCP (전송 제어 프로토콜 / Transmission Control Protocol)
이름 그대로 전송을 어떻게 할지 제어하는 프로토콜이다. 신뢰할 수 있는 프로토콜이기 때문에 현재는 대부분의 어플리케이션에서 TCP를 사용한다.
1. 인터넷 프로토콜 스택의 4계층
- 애플리케이션 계층 - HTTP, FTP
- 전송 계층 - TCP, UDP
- 인터넷 계층 - IP
- 네트워크 인터페이스 계층
2. 프로토콜 계층별 데이터 전달
- 채팅 프로그램에서 "Hello" 메시지를 전달한다고 가정해보자.
- 계층별로 이동하면서 추가 데이터로 감싸는 형태가 되고, 결과적으로 TCP/IP 패킷을 만든다.
- 채팅 프로그램 > SOCKET 라이브러리
- 프로그램이 "Hello" 메시지를 생성한다.
- 소켓 라이브러리를 통해 OS계층에 메시지를 전달한다.
- SOCKET 라이브러리 > TCP
- 메시지 데이터를 포함하여, TCP 정보를 생성한다.
- 출발지 PORT, 목적지 PORT, 전송 제어, 순서, 검증 정보..
- TCP > IP
- TCP 데이터를 포함하여, IP 패킷을 생성한다. --> TCP/IP 패킷
- 출발지 IP, 목적지 IP, 기타..
- IP > 인터넷
- IP 패킷이 네트워크 인터페이스를 통해 랜카드를 통해 나갈 때, 이더넷 프레임이 포함되어 나간다.
- 랜카드에 등록된 MAC 주소 등 물리적인 정보...
3. TCP 프로토콜의 특징
- 연결지향적
- 상대와 연결이 되었는지 안되었는지 확인한 뒤에 메시지를 보낸다.
- TCP 3way handshake (가상연결)
- SYN : 클라이언트가 서버로 접속 요청을 한다.
- SYN+ACK : 서버가 클라이언트의 요청을 수락하고, 클라이언트에게 접속을 요청한다.
- ACK : 클라이언트가 서버의 요청을 수락한다.
- 클라이언트와 서버가 서로 믿을 수 있는 상태가 되고, 이 때 데이터를 전송한다.
(요즘은 최적화된 경우가 많아 3.ACK 를 날릴 때 데이터와 함께 보내는 경우가 많다.) - 주의해야할 점은 실제로 연결이 된 것이 아니라는 것이다. 이는 서로 연결 가능한 상태임을 확인하여 개념적으로 연결이 됐다고 인식하는 것이지, 전용선이 깔린 그런 연결로 이해하면 안된다!
- 데이터 전달 보증
- 만약 전달한 패킷이 중간에 누락된다면 보낸 사람이 알 수 있다.
- 순서 보장
- 만약 클라이언트가 패킷 1,2,3을 순서대로 보냈는데, 서버에 1,3,2 순서로 도착을 한다면 이를 인지할 수 있다.
- 이 때 서버가 클라이언트에게 패킷 2번부터 다시 전송하라고 요청한다.
- TCP 데이터 안에 전송 제어, 순서, 검증 정보들이 추가되어 있기 때문이다.
UDP (사용자 데이터그램 프로토콜 / User Datagram Protocol)
TCP와 같이 IP 계층 바로 위에 있는 프로토콜이다.
1. UDP 프로토콜의 특징
- 기능이 거의 없다.
- 3way handshake, 데이터 전달 보증, 순서 보장 등의 기능이 없다.
- 단순하고 빠르다.
- IP와 거의 비슷하고, PORT 정보, 체크섬(메시지에 대해 제대로 맞는지 검증해주는 데이터) 정도만 추가된 프로토콜이다.
- 애플리케이션에서 조작하여 UDP 프로토콜에 기능을 확장해볼 수 있다.
PORT
내가 게임을 하며 화상 통화를 하고, 웹 브라우저에 무언가 검색을 한다면 하나의 클라이언트 pc가 여러 서버와 통신을 하고 있는 것이다. 여러 서버에서 받는 패킷들이 어느 애플리케이션에 필요한 패킷인지 구분하려면 애플리케이션별로 구분값이 필요하다. 이것이 PORT 이다.
IP는 목적지 서버를 찾는 거고, 그 서버 안에서 돌아가는 애플리케이션들을 구분하는게 PORT 이다. TCP/IP 패킷에는 출발지, 목적지의 IP, PORT가 모두 있기 때문에 데이터를 정확히 주고 받을 수 있다.
포트 번호는 0~65535 까지 할당할 수 있는데, 0~1023은 잘 알려진 포트(well known port) 이므로 사용하지 않는 것이 좋다.
(주요 포트 번호 FTP : 20, 21 / TELNET : 23 / HTTP : 80 / HTTPS : 443)
DNS (Domain Name System)
도메인 명을 IP 주소로 변환해주는 서버이다. IP는 기억하기가 어렵고 변경될 수 있다. 하지만 DNS를 사용한다면 도메인 명만 기억하면 IP가 바뀌어도 접속 가능하다.
이 때는 서버 IP로 직접 접속하는 것이 아니라 DNS에 먼저 요청해야한다. DNS에 도메인 명으로 요청하면 IP 주소를 응답으로 받고, 그 IP로 접속을 하면 된다.
이 포스팅은 모든 개발자를 위한 HTTP 웹 기본 지식 강의를 수강하며 작성되었습니다.
모든 개발자를 위한 HTTP 웹 기본 지식 | 김영한 - 인프런
김영한 | 실무에 꼭 필요한 HTTP 핵심 기능과 올바른 HTTP API 설계 방법을 학습합니다., [사진] 📣 확인해주세요!본 강의는 자바 스프링 완전 정복 시리즈의 세 번째 강의입니다. 우아한형제들 최연
www.inflearn.com