![[모든 개발자를 위한 HTTP 웹 기본 지식] 1. 인터넷 네트워크](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkKOw5%2FbtsDrjARgRZ%2FT0zDrc9UVcMqxBqQovRrS1%2Fimg.png)
인프런 김영한 강사님의 [모든 개발자를 위한 HTTP 웹 기본 지식] 을 수강하고 정리한 글입니다.
모든 개발자를 위한 HTTP 웹 기본 지식 강의 - 인프런
실무에 꼭 필요한 HTTP 핵심 기능과 올바른 HTTP API 설계 방법을 학습합니다., [사진] 📣 확인해주세요!본 강의는 자바 스프링 완전 정복 시리즈의 세 번째 강의입니다. 우아한형제들 최연소 기술
www.inflearn.com
📌 IP (인터넷 프로토콜)
복잡한 인터넷 망에서 통신을 하기 위해서는 무언가 규칙이 필요하다.
IP는 바로 그러한 규칙(프로토콜)이다.
IP의 역할
- 지정한 IP 주소에 데이터를 전달
- 패킷(Packet) 이라는 통신 단위로 데이터를 전달
패킷 이라는 단위 안에 출발지 IP 주소, 목적지 IP 주소, 전송할 것 등을 담아서 전송한다.
응답할 때도 마찬가지로 패킷에다가 여러 정보들을 담아서 전송한다.
IP의 한계
- 비연결성
- 패킷을 받을 대상이 없거나, 서비스 불능 상태여도 그 상태를 확인하지 않고 무작정 패킷을 전송한다.
- 비신뢰성
- 통신 도중 패킷이 사라졌을 때의 대안책이 없다.
- 패킷이 전송한 순서대로 도착하지 않았을 때 (순서가 바뀌어서 도착했을 때)의 대안책이 없다.
- 프로그램 구분
- 같은 IP 주소를 사용하는 서버에서 통신하고자 하는 애플리케이션이 여러 개일 때에도 문제가 있다.
📌 TCP
우리는 위에서 IP의 한계들을 봤다.
이러한 IP의 한계들을 해결해주는 프로토콜이 바로 TCP(전송 제어 프로토콜, Transmission Control Protocol)다.
위 사진에서 유심히 봐야할 부분은 전송할 데이터를 먼저 TCP 패킷으로 감싸고, 그 이후에 IP 패킷이 감싸서 전송된다는 점이다.
IP 패킷으로 감쌀 때는 IP 주소를 포함해서 감싼다고 했는데, TCP 패킷은 어떤 정보를 지닐까?
포트 라는 것을 포함한다.
그 외에도 전송 제어, 순서, 검증 정보 등을 가진다.
이러한 것들이 TCP의 특징이 된다.
TCP 특징
- 연결지향
- 먼저 연결을 시킨 후에 메시지를 보낸다. (IP는 연결과 관련 없이 그냥 메시지를 무작정 보냈다.)
- TCP 3 Way Handshake
- 데이터 전달 보증
- 순서 보장
위 TCP의 특징들에서 TCP는 신뢰할 수 있는 프로토콜이라는 것을 알 수 있다.
무작정 데이터만 보내던 IP와는 다르게, 우선 연결을 확인하여 목적지가 정상적인 상태인지부터 확인한 후 메시지를 전송한다.
데이터가 제대로 전달 됬는지 확인도 하고, 순서는 어떻게 올바르게 도착했는지도 확인한다.
이는 IP의 단점들을 모조리 커버하는 신뢰성 높은 프로토콜이다.
위에서 빨간 글씨가 칠해진 TCP 3 Way Handshake란 뭘까?
연결의 성공 여부를 다루는 메시지를 세 번 주고 받는 방식을 말한다.
이러한 세 번의 과정을 통해 연결 여부를 확인한 후 메시지를 전송한다.
(위에서부터 연결 이라는 말이 계속 나오는데, 물리적으로 연결된 느낌이 아니라, 그냥 논리적으로 연결된 느낌이다. 그냥 클라이언트랑 서버랑 잘 연결됐나보다.)
위 3 way handshake 과정을 보면, TCP의 특징들이 보인다.
연결이 성공적으로 이루어졌다고 답장 메시지를 보내니까 데이터가 제대로 전달되었는지에 대한 보증이 가능하다.
또한 순서 보장 또한 가능한데, 이는 아래 그림을 보자.
자 이렇게 TCP의 장점들을 봤는데, 문제점도 있다.
딱 보니까 많은 기능들을 위해 패킷 안에 다양한 것들을 넣는다.
무겁지 않을까?
그렇다.
TCP의 단점은 바로 전송 속도다.
무겁기 때문에 전송 속도가 느리다.
TCP처럼 안전한 방식도 좋지만 가끔 특정 상황에서는 그냥 안전성보다는 빠른 전송이 선호될 때도 있지 않을까?
📌 UDP
UDP(사용자 데이터그램 프로토콜, User Datagram Protocol)는 안전성을 포기하고 빠른 전송이 가능한 프로토콜이다.
UDP의 특징
- 연결 지향 X
- TCP 3 way handshake X
- 데이터 전달 보증 X
- 순서 보장 X
- 대신 단순하게 빠르다.
위 특징들을 볼 때, 사실 IP랑 큰 차이가 없다는 것을 느낄 수 있다.
IP와 UDP의 차이점이라면,
그래도 UDP에는 IP에 없는 포트가 담겨 있고, CheckSum 정도만 담겨있다. (체크섬은 오류 검사를 위해 사용된다.)
실제로 UDP를 쓸 때는 안전 장치가 너무 없다보니, 애플리케이션에서 관련 추가 작업이 필요하다.
📌 PORT
TCP, UDP 패킷에 포함되는 녀석들 중 공통되는 녀석이 바로 포트(Port)였다.
IP의 한계 중 마지막에 쓰였던 부분이 있다.
- 같은 IP 주소를 사용하는 서버에서 통신하고자 하는 애플리케이션이 여러 개일 때에도 문제가 있다.
포트가 이를 말끔히 해결해준다.
비유하자면 아파트가 IP 주소라면
포트는 몇동 몇호에 해당한다.
대표적인 포트로 80은 HTTP, 443은 HTTPS.
이처럼 몇개의 포트는 이미 지정이 되어 있다. (0~65535 범위에서 할당 가능한데, 보통 0~1023은 이미 잘 알려진 포트들로, 사용하지 않는 것이 좋다.)
📌 DNS
IP에 대해 위에서 설명할 때 한 가지 말 안한 IP의 아쉬운 점이 있다.
IP 주소는 긴 숫자로 이루어져있다. 이것을 기억하기도, 다루기도 어렵지 않을까?
그리고 IP 주소가 변경되면 어떻게하지?
기존에 내가 기억하고있던 IP 주소가 변경된 사실을 못듣는데?
이를 해결해주는게 DNS(도메인 네임 시스템, Domain Name System)이다.
DNS는 비유하자면 전화번호부 같은 것이다.
우리는 폰 전화번호부에
박개발 : 010-xxxx-xxxx
이런식으로 저장되어있는데, DNS가 이와 유사하다.
이름 대신에 도메인이 들어가고, 전화번호 대신에 IP 주소가 들어간다.
우리가 흔히 아는 네이버나 구글 같은 그런 주소들도 사실은 IP를 다 가지고 있다. 그냥 도메인 명일 뿐이다.
'Computer Science > Network' 카테고리의 다른 글
[모든 개발자를 위한 HTTP 웹 기본 지식] 3. HTTP 기본 (0) | 2024.01.17 |
---|---|
[모든 개발자를 위한 HTTP 웹 기본 지식] 2. URI와 웹 브라우저 요청 흐름 (0) | 2024.01.15 |
[Network] 양방향 암호화 방식 (대칭키 / 비대칭키) (0) | 2023.12.15 |
[Network] 단방향 암호화 방식(Hash, MAC) (0) | 2023.12.14 |
[Network] TCP 3, 4 way handshake (0) | 2023.11.28 |
개발자가 되고 싶어요.