출처
1년 전 들은 강의를 복습하는 글입니다.
강의를 기반으로 한 내용이며 이미지는 포함되어 있지 않습니다.
인터넷 통신
웹이나 HTTP는 인터넷 망에 기반해서 동작한다.
인터넷에서 컴퓨터 두 대는 어떻게 통신할까?
- 둘이 붙어 있는 경우 (케이블 하나로 연결된 경우)
- 클라이언트가 "Hello world" 라고 보내면
- 서버는 연결된 케이블을 통해 바로 "ok" 로 응답할 수 있음
- 둘이 멀리 떨어져 있는 경우 (케이블로 연결되지 않은 경우)
- 예: 한국과 미국에서 메시지를 주고 받을 때
- 데이터를 전달하기 위한 광범위한 인터넷 노드 망이 필요
IP (Internet Protocol)
멀리 떨어져 있는 컴퓨터들이 서로 인터넷 망에서 통신하기 위한 최소한의 약속(Protocol)
역할
- 패킷(Packet) 단위로 데이터 전달
- 전달할 메시지를 클라이언트가 패킷으로 던지면
- 인터넷 망이 IP 규약을 통해 출발지와 목적지를 이해해서 노드를 통해 패킷 전달
- 서버도 같은 방식으로 응답 메시지를 클라이언트에 전송
한계
비연결성
- 패킷을 받을 대상이 없거나(예: 서버쪽 컴퓨터가 꺼져 있음)
- 서비스 불능 상태인데도 패킷을 전송
- 상대가 받을 수 있는지 여부 판단 없이 무조건 던짐
- 상대가 최종 데이터를 받았는지 여부도 보내는 입장에서 알 수 없음
비신뢰성
- 통신 중간에 패킷이 사라지거나
- 패킷이 여러 개일 때 순서대로 가지 않아도 무조건 보냄
프로그램 비구분
- 같은 IP인 컴퓨터 내에서 서버와 통신하는 프로그램이 여러 개여도 구분하지 않음
- 예: 인터넷 게임을 하면서 음악을 듣는 등 같은 IP 주소에서 프로그램 여러 개가 동작하고 있을 때, 특정 패킷을 던지면 프로그램 구분 없이 컴퓨터 단위(IP 주소)로만 목적지를 인식
⇒ 이러한 IP의 한계로 TCP와 UDP 등장 (UDP도 딱히 구분은 안 하고 Port 정도로만 구분)
TCP와 IP
TCP/IP 패킷
IP 패킷 안에 TCP 세그먼트를 포함한 형태
IP 패킷
출발지 IP와 목적지 IP 등을 포함
TCP 세그먼트
출발지 Port, 목적지 Port, 전송 제어 및 순서, 검증 정보 등을 포함
TCP와 IP의 차이점
- TCP는 전송 순서를 구분
- TCP는 Port를 통해 한 컴퓨터 내에서도 다양한 애플리케이션들을 구분 가능
- IP는 IP 주소를 통해 각 컴퓨터 단위만 구분
TCP와 UDP
TCP와 UDP는 IP 스택의 4계층 중 전송 계층에 해당한다.
IP 4계층
- 애플리케이션 계층 (HTTP, FTP)
- 전송 계층 (TCP, UDP)
- 인터넷 계층 (IP)
- 네트워크 인터페이스 계층
TCP (Transmission Control Protocol)
- 전송 제어 프로토콜
- IP의 비연결성, 비신뢰성 단점을 해결
- 단점: 속도가 느리다 (연결성, 신뢰성, 순서를 보장하기 위한 중간 과정 때문에)
비연결성 해결
TCP는 연결 지향
— 연결이 되었다는 걸 보장한 후 데이터 전송
TCP 3 way handshake
- 가상 연결 (진짜로 연결된 것 아니고 개념적인 연결)
- 클라이언트와 서버가 연결 과정에서 메시지를 총 3번 주고 받음 (SYN - 접속 요청, ACK - 접속 승인)
-
SYN: 클라이언트가 서버에 접속 요청
-
SYN + ACK: 서버도 클라이언트에 접속 요청 후, 클라이언트가 보낸 접속 요청을 수락
-
ACK: 클라이언트도 서버의 접속 요청 수락
⇒ 이후 서로 간에 데이터 전송
- 이 과정에서 서버가 중간에 꺼져 있으면 클라이언트의 접속 요청을 수락하지 못하게 됨
- 데이터 전송 전에 이미 연결 가능 여부를 확인 가능
비신뢰성 해결
- 데이터 전달 여부 보장
- 전달 중에 데이터가 누락되면, 서버 쪽에서 메시지를 받지 못했음을 클라이언트가 알 수 있음
- 순서 보장
- 여러 개의 패킷을 보낼 경우 순서 보장
- 클라이언트가 보낸 순서대로 패킷이 도착하지 않았을 경우, 서버가 다시 보내라고 응답
⇒ 이러한 특징들로 인해 TCP는 신뢰할 수 있는 프로토콜이라고 할 수 있다.
UDP (User Datagram Protocol)
- 사용자 데이터그램 프로토콜
- 연결 여부 보장 x, 데이터 전달 여부 보장 x, 순서 보장 x
- TCP가 갖고 있는 기능이 하나도 없음
- IP와 거의 동일
- PORT와 체크섬 정도만 추가
(근데 PORT는 TCP에도 있음)
** 체크섬 : 이 메시지가 맞는지 정도만 검증해주는 데이터
- 장점: (확인 여부 없이 무조건 보내서) 끊기지 않고 속도가 빠르다
- 한 번 보내고 나면 네트워크 연결이 끊겨도 계속 재생되어야 하는 동영상 등에 사용됨
- 단점: 데이터의 연결성과 신뢰성이 보장되지 않음
Port란?
-
클라이언트나 서버 역할을 하는 하나의 컴퓨터(IP, 아파트 건물)에서
여러 개의 애플리케이션(아파트 건물 내의 각 호수)들을 구분하기 위한 번호
-
클라이언트에서 IP 패킷(의 TCP 세그먼트) 안에 출발지 Port와 목적지 Port를 담아서 보내면, 해당 목적지 Port의 서버가 해당 출발지 Port로 응답을 보냄
종류
- 0부터 65535번까지 사용 가능
- 0부터 1023번까지는 잘 알려진 포트이므로 사용하지 않는 게 좋다.
- 대표 Port: HTTP 80번, HTTPS 443번
DNS (Domain Name System)
- 클라이언트가 요청하면 도메인 명에 해당하는 IP 주소 반환 (일종의 전화번호부)
- 예: 구글(google.com)의 IP 주소는 200.200.200.2
과정
- 클라이언트가 도메인 명으로 요청
- DNS 서버가 도메인에 해당하는 IP 주소 응답
사용 이유
- IP 주소는 기억하기 어려움 (127.0.0.1)
- IP 주소는 변경될 가능성이 있음 (컴퓨터 단위이기 때문에)
- 서버의 IP 주소가 변경되면 기존에 연결된 클라이언트에서는 인지할 수 없음
- 도메인 명은 IP 주소가 바뀌어도 변하지 않음