이 글은 모든 개발자를 위한 HTTP 웹 기본 지식 - 김영한 님의 강의를 듣고 정리하는 글입니다.
클라이언트에서 서버로 데이터를 송신할 때, 중간에 수 많은 노드라고 하는 서버들을 거쳐서 데이터를 보내게 된다.
그렇다면 어떤 방법을 통해서 데이터들이 보내질까??
클라이언트와 서버 컴퓨터에 대한 주소를 부여해서 데이터의 출발지와 목적지를 판단하자.
IP(인터넷 프로토콜) 역할
지정한 IP 주소(IP Address)에 데이터를 전달
패킷(Packet)이라는 통신 단위로 데이터를 전달
클라이언트에게 IP 주소, 서버에게 IP 주소를 부여하여, 메시지를 보낼 때, 최소한의 규칙이 있게 보낼 수 있는데 IP 패킷 이라는 규칙을 통해 메시지를 보낸다.
IP 패킷 안에는 출발지의 IP 주소, 목적지의 IP 주소, 메시지 내용이 있다.
주의!! 요청할 때와 응답할 때 서로 다른 인터넷 망 노드들을 거쳐서 전달될 수 있음
IP 프로토콜의 한계
비연결성
비신뢰성
프로그램 구분
이를 해결하기 위해 TCP, UDP가 있다.
인터넷 프로토콜 스택의 4계층
IP 프로토콜에서 중간에 패킷이 손실되거나 순서에 문제가 생기는 부분을 TCP 프로토콜이 해결해줄 수 있다.
- 데이터를 감쌀 때, OS 계층에서 TCP정보를 감싸는데, 해당 출발지 PORT, 목적지 PORT, 전송제어, 순서, 검증 정보 등 데이터를 감싸서 함께 보내진다.
- 따라서 IP 프로토콜에서 해결할 수 없었던 문제들을 TCP에서 해결이 된다.
TCP의 특징
(전송 제어 프로토콜 - Transmission Control Protocl)
TCP 3 way handshake 순서
- 먼저 클라이언트에서 서버로 SYN(접속 요청) 메시지를 보냄
- 서버에서 SYN + ACK(요청 수락) 메시지를 보냄
- 클라이언트에서 ACK(서버에서 요청 수락) + 데이터 전송 보냄
- 연결이 서로 되고 난 뒤에 데이터를 전송함
TCP/IP 에서 데이터를 전송하면 서버에서 데이털르 잘 받았다고 전달 받음
만약 데이터를 전송한 뒤에 데이터를 받았다고 전달이 안되었다면 잘못되었다고 판단
패킷1, 패킷2, 패킷3 순서로 전송 -> 패킷1, 패킷3, 패킷2 순서로 도착할 경우 패킷3을 포함하여 그 이후로 보내진 것들을 다 버리고 패킷2 부터 다시 보내라고 전달
서버에서 최적화 할 수 있다. (내부적으로 일어날 수 있음
UDP의 특징
(사용자 데이터그램 프로토콜 - User Datagram Protocol)
연결지향 X
데이터 전달 보증 X
순서 보장 X
데이터 전달 및 순서가 보장되지 않지만, 단순하며 빠르다.
예전에는 주로 방송을 송출할 때, 예를 들어서 축구 방송을 할 때 그런 경우 사용했다고 한다.
UDP는 IP와 거의 같으며 + PORT + 체크섬 정도 추가된다.
(체크섬에 대해서는 나중에 따로 정리한다.)
같은 IP 내에서 프로세스를 구분해주는 역할을 하는 것
예시
내 컴퓨터에서 게임을 하면서, 웹 브라우저를 보면 한번에 내 pc가 여러개의 서버와 통신을 한다.
게임에서 오는 패킷과 웹 브라우저에서 오는 패킷 정보들을 따로 구분해야 할 경우, PORT를 이용
도메인 네임 시스템(Domain Name System)
예시 )
- 도메인 명 google.com -> IP 주소 : 200.200.200.2 (DNS 서버에 저장을 함)
- 클라이언트에서 도메인 명 google.com을 입력
- DNS 서버에서 클라이언트에게 IP 주소로 응답을 함 -> 200.200.200.2
- 응답 받은 IP주소로 클라이언트가 접근
참고 : google.com의 IP 주소가 바뀌게 되더라도 DNS 서버에서 IP주소를 수정할 수 있음