1) 네트워크 모델
현재 네트워크 모델은 주로 TCP/IP 모델로 설명합니다. 가장 최근의 TCP/IP 모델은 5개의 계층으로 구성되는데,
각각은 물리 계층, 데이터 링크 계층, 네트워크 계층, 전송 계층, 응용 계층입니다.
이 중에서 TCP는 전송 계층에, IP는 네트워크 계층에 속하는 프로토콜입니다.
※ 프로토콜이란?
- 프로토콜이란 두 개의 호스트(컴퓨터) 간에 데이터를 교환하는 규칙 체계를 의미합니다.
2) TCP란?
TCP란 Transmission Control Protocol의 줄임말로, 두 개의 호스트 간에 데이터 전송의 신뢰성을 보장하기 위한 프로토콜입니다. 이를 다른 말로 '신뢰적인 연결지향성 프로토콜' 이라고 말합니다.
2-1) 신뢰성
- TCP는 신뢰성을 보장합니다. 즉, 네트워크 상에서 전달되는 패킷이 순서가 바뀌지 않고, 중복되지 않고, 손실되지 않는 것을 보장합니다.
2-2) 연결지향성
- TCP는 연결지향성의 특징을 갖고 있습니다. 이는 같은 전송 계층의 프로토콜인 UDP의 비연결성과 대비됩니다.
TCP는 네트워크 통신을 하기 전에 TCP 커넥션을 맺는데,
이 TCP 커넥션을 맺는 과정을 TCP 3-way handshake라고 합니다.
2-2-1) TCP 커넥션
- TCP 커넥션은 네 가지 값으로 구성되어 있는데, 그것은 바로
발신 호스트의 IP 주소, 발신 호스트의 포트, 수신 호스트의 IP 주소, 수신 호스트의 포트입니다.
IP 프로토콜은 IP 주소라는 정보를 제공하는데, 이 정보만으로는 네트워크 통신이 불가능합니다.
왜냐하면 하나의 호스트 안에도 여러 프로그램이 동작하는데,
이 중에서 어떤 프로그램으로 데이터가 전달될지 지정해야 하기 때문입니다.
따라서 TCP 커넥션을 통해 IP 주소에 포트라는 추가 정보를 더해서 두 호스트를 연결합니다.
※ 포트란?
- 하나의 IP 내에서 프로세스(프로그램)를 구분하기 위해서 사용하는 번호입니다.
예를 들어, 일반적으로 HTTP는 80번, HTTPS는 443번, SSH는 22번 포트를 사용합니다.
2-2-2) TCP 3-way handshake
- TCP 3-way handshake는 두 개의 호스트 간에 TCP 커넥션을 맺는 과정입니다.
이를 통해 두 호스트가 데이터를 교환할 준비가 되었다는 것을 보장할 수 있습니다.
TCP 3-way handshake는 크게 다음과 같은 3단계로 구성됩니다.
1) SYN
- 우선, 발신 호스트는 SYN 플래그를 포함한 TCP 패킷을 수신 호스트에 전송합니다.
SYN 플래그를 포함한 것의 의미는 해당 요청이 '커넥션 생성 요청'이라는 것입니다.
2) SYN+ACK
- 수신 호스트는 요청을 받으면, 몇 가지 커넥션 매개 변수를 산출한 후,
커넥션 요청이 받아들였음을 응답하는데,
이 응답은 SYN 플래그와 ACK 플래그를 포함한 TCP 패킷입니다.
3) ACK
- 발신 호스트는 수신 호스트의 응답을 받고,
ACK 플래그를 포함한 TCP 패킷을 전송함으로써, 커넥션이 확립(establish)됩니다.
오늘날의 TCP는 이 과정에서 데이터도 같이 전송할 수 있습니다.
3) IP란?
IP란 Internet Protocol의 줄임말로, IP 주소라는 체계로 네트워크 상에서 데이터를 전달하기 위한 프로토콜입니다.
이를 다른 말로 '라우팅'이라고 합니다.
IP는 라우팅을 통해 네트워크 상에서 데이터를 전달할 수 있는 여러 경로 중 한 가지를 선택해서 데이터를 전달합니다.
IP 주소는 네트워크 상에서 호스트를 식별하기 위한 정보이며, 대표적인 IP 주소 체계에는 IPv4와 IPv6가 있습니다.
IP에서 데이터를 전달하는 기본 단위는 '패킷'인데, 이 패킷은 네트워크 데이터를 작은 단위로 분할한 것을 의미합니다.
IP는 TCP와 반대로 비신뢰성, 비연결성이라는 특징을 갖고 있습니다. 따라서 네트워크 상에서 데이터를 안전하게 전달하기 위해서는 IP만으로는 불가능하며, 반드시 TCP와 보완적으로 기능해야 합니다.
참고
HTTP 완벽 가이드
인터넷 프로토콜 - 위키백과, 우리 모두의 백과사전 (wikipedia.org)
'네트워크' 카테고리의 다른 글
HTTP와 HTTPS (0) | 2022.07.25 |
---|---|
REST API (0) | 2022.07.19 |
파싱 (0) | 2022.06.26 |
JSON (0) | 2022.06.26 |
HTTP 프로토콜(1) (0) | 2022.06.20 |