이번 포스팅에서는 인터넷 네트워크에 대해 간략하게 정리해보는 시간을 가져보고자 한다.
< 목차 >
- 인터넷 통신
- 인터넷 프로토콜 (IP; Internet Protocol)
- TCP , UDP
- Port
- DNS
1. 인터넷 통신
인터넷 상에서 컴퓨터들은 어떻게 통신을 할까??
예를 들어, 두 대의 컴퓨터가 바로 옆에 붙어 있다고 가정을 해보자. 그런 경우 두 대의 컴퓨터(클라이언트와 서버)는 케이블을 통한 물리적 연결이 바로 가능해진다. 즉, 연결된 케이블을 통해 클라이언트와 서버 간의 통신이 가능해진다는 의미이다.
하지만, 메시지를 주고 받아야 하는 PC 두 대가 서로 멀리 떨어져있다면 얘기는 조금 더 복잡해진다. 한 대의 컴퓨터는 한국에, 또 한 대의 컴퓨터는 미국에 있을 경우 우리는 "인터넷 망"을 통해 메시지를 보내게 되는데 인터넷 망을 통한 메시지 전송은 그리 단순하지 않다. 해저 광케이블, 인공위성 등을 통해 "노드"라고 일컫는 수많은 중간 서버들을 거쳐 메시지가 다른 컴퓨터로 전송되는 것이다. 그렇다면 전송된 메시지들은 도대체 어떤 규칙을 가지고 무사히 목적지까지 도착하게 되는 것일까?? 이를 이해하기 위해서는 인터넷 프로토콜(Internet Protocol)에 대해 알고 넘어가야 할 필요가 있다.
2. 인터넷 프로토콜 ( IP; Internet Protocol )
앞서 얘기한 것처럼 복잡한 인터넷 망 속에서 특정 목적지까지 제대로 메시지를 전송하기 위해서는 최소한의 규칙이 필요할 수 밖에 없다. 여기서 등장하는 것이 바로 우리가 익히 알고 있는 "IP 주소" 이다. 클라이언트와 서버는 각각 "IP 주소"라는 고유한 주소값을 부여받는다. IP라는 인터넷 프로토콜은 지정한 IP 주소(IP Address)에 메시지를 전달할 수 있도록 정해놓은 규칙 같은 것이라고 생각하면 된다. 그리고 메시지 전송시 패킷(Packet)이라는 통신 단위로 데이터를 전달하게 된다.
인터넷 프로토콜(IP)의 역할
- 지정한 IP 주소(IP Address)에 데이터 전달.
- 패킷(Packet)이라는 통신 단위로 데이터 전달.
👉 IP 패킷 정보
메시지를 전송할 때 그냥 보내는 것이 아니라 이 역시도 "IP 패킷"이라는 규칙을 갖고 있다. IP 패킷 안에는 전송 데이터 뿐만 아니라 출발지 IP, 목적지 IP 등의 정보가 담겨 있다. 클라이언트는 IP 패킷을 만들어서 인터넷 망에 던지게 되고 IP 프로토콜 규약을 따르고 있는 인터넷 망에 존재하는 서버들은 IP 패킷을 보고서 출발지와 목적지를 알게 된다. 그렇게 노드들끼리 서로 패킷을 던지다가 결국 IP 패킷 안의 정보를 토대로 최종 목적지까지 데이터가 정확히 도달하게 되는 것이다. 클라이언트로부터 메시지를 전달받은 서버 역시 똑같은 방식으로 IP 패킷을 만들어서 클라이언트에게 메시지를 전송하게 된다.
하지만 이렇게 IP 주소를 부여하고 IP 패킷에 담아 메시지를 전송하는 방식만으로는 한계를 갖는다. 우선 비연결성을 들 수 있는데, 패킷을 받을 대상이 없거나 서비스 불능 상태일 때에도 패킷은 전송되고, 전송한 쪽에서는 이후 상황(제대로 목적지까지 도착했는지 여부)을 알지 못한다는 점이다. 그리고 중간에 패킷이 사라지거나, 여러 개의 패킷을 전송했을 때 패킷이 순서대로 오지 않는 상황 등의 비신뢰성 역시 IP 프로토콜이 지닌 한계이다.
IP 프로토콜의 한계
1. 비연결설
- 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송
2. 비신뢰성
- 중간에 패킷이 유실된다면?? -> 패킷 소실 문제
- 패킷이 순서대로 안 온다면?? -> 패킷 전달 순서 문제
3. 프로그램 구분
- 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이라면??
IP 프로토콜 만으로는 이런 문제들을 해결할 수 없기 때문에 등장한 것이 바로 TCP 프로토콜이다.
3. TCP , UDP
IP 프로토콜에서 발생했던 문제들을 TCP가 해결해준다.
예를 들어 채팅 프로그램으로 다른 컴퓨터에 메시지를 전송하게 될 경우, SOCKET 라이브러리를 통해 OS 계층에 메시지를 전달한다. 메시지를 받은 OS 계층에서는 메시지 데이터를 포함한 TCP 정보를 생성한다. 그리고 TCP 데이터를 포함한 IP 패킷을 생성하게 된다. 이렇게 만들어진 IP 패킷에는 IP와 관련된 정보, TCP와 관련된 정보, 그리고 메시지 정보를 포함하고 있다. 이후 IP 패킷이 네트워크 인터페이스를 통해 나갈 때는 이더넷 프레임(Ethernet frame)이라는 것에 씌워져서 나가게 된다. (이더넷 프레임에는 실제 물리적인 정보들이 포함되어 있다.)
TCP 안에는 출발지 PORT, 목적지 PORT 와 더불어 전송 제어와 관련된 정보, 순서 및 검증과 관련된 정보들이 들어가 있어 IP만으로는 해결되지 않았던 문제들이 해결된다.
TCP
전송 제어 프로토콜 (Transmission Control Protocol)
- 연결 지향 : TCP 3 way handshake (가상 연결)
- 데이터 전달 보증 (서버로부터 응답 존재)
- 순서 보장
- 신뢰할 수 있는 프로토콜
- 현재는 대부분 TCP 사용
TCP의 경우 연결 지향이기 때문에 3 way handshake 방식을 통해 연결이 되었는지 확인한 이후 메시지를 전송하게 된다. 그리고 데이터 전달을 보증해주기 때문에 전송 도중 패킷이 유실될 경우 이를 알 수 있다. 또한 TCP는 데이터의 순서 역시 보장해주게 된다.
참고로, TCP 3 way handshake의 경우 물리적 연결이 아닌, 개념적 연결임에 유의하도록 하자. 실제 케이블을 통해 연결된 것이 아닌 연결이 되었다고 여기는 논리적 연결이다.
👉 UDP
UDP에 대해서는 간략하게만 짚고 넘어가도록 하겠다. UDP는 TCP와 같은 계층에 존재하는 프로토콜이다. (IP 계층 바로 위에 존재)
하지만, UDP는 TCP와 달리 그리 많은 기능을 갖고 있지 않으며 주로 하얀 도화지에 비유하곤 한다.
UDP
사용자 데이터그램 프로토콜 (User Datagram Protocol)
- 하얀 도화지에 비유 (기능이 거의 없음)
- 연결 지향 X
- 데이터 전달 보증 X
- 순서 보장 X
- 데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠름.
- IP 와 거의 흡사. +PORT +체크섬 정도만 추가
- 애플리케이션에서 추가 작업 필요
참고로 UDP의 경우, 최적화가 가능하기 때문에 원하는 것을 애플리케이션 레벨에서 만들어줄 수 있다.
4. Port
클라이언트 pc가 여러 개의 서버와 통신할 경우, Port를 사용해 각각의 애플리케이션에 해당하는 패킷 데이터를 구분할 수 있다. 즉, IP 주소를 통해 목적지 서버를 찾을 수 있다면 Port를 통해 서버 안에서 돌아가는 애플리케이션을 구분할 수 있는 것이다. IP가 아파트라고 한다면 Port는 해당 아파트 안에 위치한 집들의 호수를 의미한다고 생각하면 된다.
Port
- 0 ~ 65535 할당 가능
- 0 ~ 1023 : 잘 알려진 포트, 사용하지 않는 것이 좋다.
- FTP : 20, 21
- TELNET : 23
- HTTP : 80
- HTTPS : 443
5. DNS
클라이언트와 서버가 통신할 때 사용하는 IP는 기억하기 어려울 뿐만 아니라 변경될 수도 있다. DNS는 "도메인 네임 시스템"으로 마치 전화번호부와 같은 서버를 중간에 놓는 것이라고 생각하면 된다. DNS 서버에 도메인명을 등록하고 IP 주소로 변환할 수 있다.
DNS
도메인 네임 시스템 (Domain Name System)
- 전화번호부
- 도메인 명을 IP 주소로 변환
'ABOUT CS' 카테고리의 다른 글
ABOUT.Series (6) HTTP 헤더 (0) | 2022.12.30 |
---|---|
ABOUT.Series (5) HTTP 상태 코드 (0) | 2022.12.29 |
ABOUT.Series (4) HTTP 메소드 (0) | 2022.12.19 |
ABOUT.Series (3) HTTP (0) | 2022.12.18 |
ABOUT.Series (2) URI / URL / URN (0) | 2022.12.15 |