데이터를 주고받는 '통신'을 제대로 하기위한 고군분투 극복이야기.
인터넷 통신
통신 : 서로 다른 두 컴퓨터가 데이터를 주고받는 것.
엄청 멀리 떨어진 컴퓨터끼리 통신은 어떻게 할까? => '인터넷'을 통해서 데이터를 전달한다
문제1.인터넷 통신은 어떻게 할까?
근데, 인터넷을 이용하면 수많은 '노드'를 거쳐가고, 모든 데이터가 똑같은 노드를 거쳐가는 것도 아니다.
정보의 바다 인터넷에 데이터를 떨구면 어떻게 목적지를 찾아갈 수 있을까???

IP(인터넷 프로토콜)
정답! 각 컴퓨터에 고유한 IP를 부여하고, 데이터에게 목적지IP를 들려보낸다.
전달하는 데이터에 출발지IP Address, 목적지IP Address를 적어두면 수많은 노드를 거치더라도 목적지를 잃지 않는다.
동일한 이유로 서버로부터 응답도 제대로 받을 수 있다.

패킷?
패킷은 통신 할때 한 번에 보낼 수 있는 데이터 단위이다.
당연히 한 번에 엄청나게 고용량 데이터를 한 번에 보낼 수 없다. 쪼개서 보내야지. 이 때 쪼갠 단위를 '패킷'이라고 한다.
간단하게 패킷 구성을 보면 이렇다
IP패킷 = 출발지IP + 목적지IP + 데이터
IP의 한계
근데, 출발지/목적지를 안다고 모든 문제가 해결되는게 아니다.
- 비연결성
- 비신뢰성
- 프로그램 구분
비연결성
아니, 길고긴 인터넷을 거쳐서 목적지에 도착하나 했더니 목적지가 없어졌다면??
즉, 서버가 서비스 불능상태인지 아닌지 알 수 없다. 그냥 막 패킷 보내는 거다.
비신뢰성 + 순서 비보장
그 많은 노드를 거치다가 패킷이 중간에 없어질 수 있다!
한 데이터는 여러 패킷으로 조각내서 보낸다. 서버에 모든 패킷이 도착해서 봤더니 순서가 뒤죽박죽일 수 있다.
모든 패킷이 인터넷에서 같은 노드를 통해서 전달되는게 아니니까!
프로그램 구분
서버 1대에서 돌아가는 프로세스가 1개만 있을리 없다.
도착지에 도착하고 봤더니 프로그램이 여러개 띄어져있으면 도대체 어느 프로그램에게 패킷이 최종 도착해야하는지 알 수 없다.
TCP, UDP
인터넷 프로토콜 계층

IP통신의 한계 극복 방법! TCP(or UDP) 정보를 패킷에 포함한다.
port는 한 컴퓨터에서 실행되는 여러 어플리케이션(프로세스)를 구분하기 위한 상세 주소다.
TCP,UDP는 IP패킷에 여러 상세정보를 추가해서 그 한계를 극복하려고 한다
IP통신의 3가지 한계를 해결하기위해 상세정보를 추가해서 데이터 패킷을 만든다. 단순 ㅎㅎ
TCP패킷 = 출발지PORT + 목적지PORT + 전송제어 + 순서 + 검증정보... + (출발지IP + 목적지IP + 데이터)
TCP 특징
- 연결지향 (Three Handshake)
- 데이터 전달 보장
- 순서 보장
- 신뢰할 수 있다
- 현재 대부분 TCP를 사용한다
연결지향 (TCP 3 Way HandShake)
도착지 서버가 정상적인 것을 확인하기 위해 패킷 전달 전에 연결(물리적연결X)을 확인한다.
- 클라이언트가 'SYN' 전송요청을 보낸다
- 서버가 잘 받았다고 'SYN' + 'ACK' 응답을 보낸다
- 클라이언트도 응답 잘 받았다고 'ACK' 를 보낸다.
- 오케 연결확인 됐으니까 이젠 진짜로 데이터 보낸다.
요즘은 더 빠른 통신을 위해 3번에 데이터를 같이 보낸다.
SYN(씬), ACK(엑크)
데이터 전달 보장
- 클라이언트가 데이터를 보내면
- 서버가 잘 받았다고 응답한다
순서 보장
패킷에 순서정보가 포함된다.
서버에서 도착한 패킷들을 순서대로 조합해서 완벽한 데이터를 열어볼 수 있다.
PORT
한 서버에 여러 애플리케이션에 각각 다 요청해야하면 IP주소만으로 안되잖아!
정답! PORT주소도 알면 된다.
PORT는 같은 IP 내에서 프로세스를 구분해준다.
- 0 ~ 65535 할당 할 수 있다.
- 하지만, 0 ~ 1023 은 마치 약속처럼 사용되는 포트니 쓰지 않는게 좋다.
- FTP : 20, 21
- TELNET : 23
- HTTP : 80
- HTTPS : 443
- ......
DNS
도메인 네임 시스템 (Domain Name System)
IP의 단점
- 숫자 덩어리... 사람은 기억하기 힘들다.
- IP는 자꾸 바뀐다.
특히, 요즘에 out-scaling 이 많이 사용되고, 컨테이너 기반의 배포가 이루어지면서 IP는 자주 바뀔 수 있다.
즉, IP만으로는 서버 주소를 항상 보장할 수 없다는 말이다. - 동일한 서비스가 여러대 서버로 실행될 수 있다. 즉, IP가 여러개일 수 있다.
그래서! 자꾸 바뀌는 IP를 DNS에 등록하고 DNS를 목적지 주소로 쓰자
IP가 여러개든, 자꾸 바뀌든 DNS에만 잘 등록해주면 된다.
그럼 클라이언트는 DNS만 알면 언제든 확실하게 목적지 서버를 알 수 있는 것이다!
이 글은 인프런 김영한 님의 강의 '모든 개발자를 위한 HTTP 웹 기본 지식'를 공부하고 개인적으로 정리한 글입니다.
'강의와 책과 스터디' 카테고리의 다른 글
| 책. TCP/IP 쉽게, 더 쉽게 (0) | 2023.11.06 |
|---|---|
| 스터디 관리툴 고민:개발도서 독서모임을 주관하게 되었는데 (0) | 2023.07.24 |
| HTTP.03.HTTP 메서드02 (0) | 2023.04.07 |
| HTTP.03.HTTP 메서드01 (0) | 2023.04.07 |
| HTTP.02.URI와 웹 브라우저 요청 흐름 (0) | 2023.03.24 |