HTML 기본 개념 정리
Updated:
IP $($인터넷 프로토콜)
인터넷 프로토콜은 지정한 IP주소에 패킷이라는 통신 단위로 데이터를 전달한다.
IP 패킷
IP 패킷은 출발지 IP 주소, 도착지 IP 주소, 메세지 등이 포함되어 생성된다.
인터넷은 서버간의 통신을 통해 클라이언트$($출발지 IP)에서 말단 서버$($도착지 IP)까지 패킷이 전송된다.
이때 중간 서버$($노드)가 중단되 버리면 패킷이 손실된다$($패킷손실) - 비연결성
뿐만 아니라 서로 연관된 데이터를 담고있는 두개의 다른 패킷들은 전송되는 과정에서 서로 다른 노드를 통해서 서버에 도착할 수 있으며 늦게 보낸 패킷이 앞서 보낸 패킷보다 먼저 도착하는 패킷 전달 순서 문제가 발생할 수 있다. - 비신뢰성
$($예 -> Hello, $($패킷1)와 world!$($패킷2)를 클라이언트측에서 보냈는데 world!가 먼저도착하여 world!Hello,로 받게 된다.)
또다른 IP의 문제점은 인터넷 프로토콜의 문제는 대상 서버가 패킷을 받을 수 있는 상태인지 모른는 상태에서 패킷을 전송한다는 것이다. 때문에 대상 컴퓨터가 꺼져있거나 문제가 있는 경우 패킷을 받지 못하는 상황이 발생한다. - 비신뢰성
이러한 인터넷 프로토콜의 문제점의 해결책으로 TCP, UDP가 고안되었다.
인터넷 프로토콜 4계층
IP패킷에는 결국 IP에 대한 정보 + TCP관련 정보 + 실제 프로그램을 통해 만들어낸 메시지가 존재하게 된다.
LAN카드를 통해 서버에 전달될때 Ethernet frame까지 포함이되서 전달된다.
IP 정보 안에다가 TCP에대한 정보가 들어간다.
다음과 같은 TCP 정보를 통해 IP만으로 해결이 안됐던 패킷 순서제어 문제같은 문제들이 해결이 된다.
TCP - 전송 제어 프로토콜 - 패킷전송을 어떻게 할지 제어한다.
TCP $($Transmission Control Protocol)
기존의 IP에 TCP를 추가하여 문제점들을 보완할 수 있다.
TCP는 전송 제어 프로토콜이라 불리며 다음과 같은 특징이 있다.
- TCP 3-way-handshake를 통한 연결지향
- 확실한 데이터 전달을 보증
- 패킷 도착 순서 보장
- 신뢰할 수 있는 프로토콜
TCP 3-way-handshake
TCP는 3-way-handshake를 통해서 IP의 비신뢰성 문제를 해결한다.
-
클라이언트는 서버에 접속 요청 신호$($syn)를 보낸다.
-
만약 서버가 정상적으로 작동하고 있다면 서버는 클라이언트의 요청을 수락$($ack)함과 동시에 클라이언트에 접속 요청$($syn)을 보낸다.
-
클라이언트는 서버가 보낸 요청을 수락한다$($ack)
이와 같은 3번에 걸친 과정을 통해서 서버간의 연결을 완료한 뒤에 패킷을 전송하기 때문에 클라이언트와 서버의 연결이 보장된 상태에서 데이터를 전송할 수 있다. 즉, 신뢰성 있는 데이터 전송이 가능하다.
$($3-way-handshake는 논리적으로 연결된 것이지, 물리적으로 연결된 것은 아니다)
데이터 전달 보증
- 클라이언트에서 서버로 데이터를 전송
- 서버는 데이터를 잘 받았다는 메시지를 클라이언트에게 전달하여 데이터의 전달을 보증해 준다.
패킷 도착 순서 보장
- 1, 2, 3 순서로 패킷을 전송하였는데
- 1, 3, 2 순서로 패킷이 서버에 도착하였다.
- 서버는 잘못된 지점부터의 패킷을 다 버리고 2번부터 다시 보내라고 클라이언트에 전송
- 클라이언트는 2번부터 다시 보내서 순서 보장
TCP는 신뢰도 있는 데이터 전달을 보장하지만 3-way-handshake과정에서 시간이 많이 소요되고 데이터 전송 확인 과정과 같은 과정들 때문에 UDP에 비해 데이터 양도 크고 전송 속도도 느리며 최적화 하기도 힘들다.
UDP
IP에 PORT와 체크섬 정도만 추가된 프로토콜이다.
데이터 전달, 순서가 보증되지 않고, 3-way-handshake도 하지 않지만 그만큼 단순하고 빠르다.
애플리케이션단에서 추가 작업이 필요하다.
PORT
PORT: 하나의 IP에서 여러 어플리케이션이 동작하는 경우, 구분해 주기 위해서 사용.
포트의 사전적 의미는 배가 도착하는 “항구”를 의미한다.
TCP/IP 패킷 내부의 출발지 PORT번호, 목적지 PORT번호를 사용하여 구분한다.
IP = 목적지 서버를 찾는 주소
PORT = 서버내에서 돌아가는 어플리케이션을 추가로 구분
IP를 아파트, PORT를 몇동, 몇호 라고 생각하면 이해하기 편하다.
- 게임 포트번호 = 8090
- 화상통화 포트번호 = 21000
- 웹 브라우저 포트번호 = 10010
예) 게임의 경우
클라이언트는 200.200.200.2 번에 있는 11220번 포트에 게임서버를 연결하겠다고 패킷을 쏜다.
서버는 요청에 맞는 응답을 만들어서 100.100.100.1 번의 8090포트로 응답을 보내준다. 서버는 요청받은 패킷에 들어있는 출발지 IP, PORT 번호를 통해서 어디서 온 요청인지 알아내고 해당 IP, PORT로 응답을 보내준다.
DNS $($Domain Name System)
IP 주소는 언제든지 변경될 수 있으며 200.200.200.2와 같은 IP 주소는 기억하기 어렵다.
때문에 DNS를 사용하여 도메인 명과 실제 IP주소를 매핑해 준다.
클라이언트는 도메인 명을 사용하여 DNS 서버에 요청을 보낸다.
DNS 서버는 해당 도메인 명과 매칭되는 IP 주소를 클라이언트에게 응답한다.
클라이언트는 DNS 서버로 부터 응답받은 IP주소를 통해 서버에 접속한다.
Leave a comment