모든 개발자를 위한 HTTP 웹 기본 지식 강의 수강 후, 정리한 글입니다.
클라이언트와 서버가 직접 통신하지 않고 인터넷을 통해서 통신하는 것이다.
인터넷에는 수많은 노드들이 있는데, 목적지까지 여러 개의 노드를 지나면서 통신을 하게 된다.
이러한 통신에 대해서 제대로 알기위해서는 IP에 대한 개념을 정리해야한다.
100.100.100.1
, 200.200.200.2
와 같은 것package + bucket
IP 주소에 메시지를 보낼 때의 규칙으로, 출발지 IP 주소
, 목적지 IP 주소
, 전송 데이터
등을 포함
클라이언트 패킷 전달
클라이언트에서 보낸 패킷을 인터넷 망에서 노드들끼리 이해하면서 목적지 IP 주소에 도착한다.
서버 패킷 전달
새 메시지를 만들고, 메시지에 패킷의 정보인 출발지 IP
와 목적지 IP
등을 넣어 클라이언트에게 보낸다.
인터넷 망이 복잡하기 때문에 클라이언트가 전달할 때랑 서버가 전달할 때에 서로 다른 노드를 통해 전달 될 수 있다. 그래서 IP라는 패킷에 담는 방식으로는 한계가 있다.
비연결성: 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷을 전송
예를 들어, 독일에 있는 서버 PC가 꺼져있는 지를 모르고 클라이언트가 계속 메시지를 보내는 경우이다.
비신뢰성: 중간에 패킷이 사라지거나, 패킷이 순서대로 오지않을 수 있음
여러 노드들을 거치다가 패킷이 유실될 수 있다.
메시지를 한 번 보낼 때, 1500byte를 넘으면 나눠서 보낸다. 이때, 패킷마다 노드를 따로 선택해서 보내게 되어 패킷의 도착 순서가 바뀔 수 있다.
Hello,
- 1500 byte, ② World!
- 1500byteWorld!
- 1500byte, ② Hello,
- 1500 byte프로그램 구분
같은 IP를 사용하는 서버에서 노래 듣고 영화보는 것을 동시에 한다면, 프로세스 식별이 불가능하다.
(host 식별까지만 가능하다.)
계층 | 프로토콜 |
---|---|
애플리케이션 계층 | HTTP, FTP |
전송 계층 | TCP, UDP |
인터넷 계층 | IP |
네트워크 인터페이스 계층 |
예시) 채팅 프로그램
1. 프로그램이 Hello world! 메시지 생성: 애플리케이션 계층에서 전송 데이터 생성
2. SOCKET 라이브러리를 통해 전달
3. TCP 정보 생성, 메시지 데이터 포함: 전송 데이터를 TCP 정보로 감쌈
4. IP 패킷 생성, TCP 데이터 포함: IP 정보로 감쌈
5. LAN카드로 서버에 보냄(Ethernet frame): 네트워크 인터페이스를 통해 서버에 전송될 때 이더넷 프레임으로 감쌈
IP 패킷: 목적지 서버 찾기
TCP 세그먼트: 목적지 서버에서 어떤 서버인지 찾기
이 과정을 통해 클라이언트와 서버간 서로 살아 있다는 것을 알 수 있다. 즉, 신뢰할 수 있다.
가상연결: 개념적으로 연결된 것으로, 물리적으로 연결된 것이 아니다. 연결 과정에 있는 수많은 노드 서버가 연결되었는 지의 상태는 알 수 없다.
SYN: 접속 요청
ACK: 요청 수락
클라이언트가 서버로 데이터를 전송하면 서버는 클라이언트로 데이터 잘 받았다고 보낸다.
순서 안맞으면 다시보내라고 요청보낸다.
① 클라이언트 ➡️ 서버: 패킷1
, 패킷2
, 패킷3
순서로 전송
② 서버: 패킷1
, 패킷3
, 패킷2
순서로 도착
③ 서버 ➡️ 클라이언트: 패킷2
부터 다시 보내라고 요청
PORT: 어떤 애플리케이션 패킷인지 구분
Checksum: 메시지가 제대로 왔는 지 검증
디스코드하면서 게임을 하는 경우, 어떤 패킷인지 알 수 없는 문제가 생긴다.
IP: 아파트
PORT: 동, 호수
프로토콜 | 포트번호 |
---|---|
FTP | 20, 21 |
TELNET | 23 |
HTTP | 80 |
HTTPS | 443 |
기억하기 어렵다.
변경될 수 있다. (변경되면 접근할 수 없다.)