[TIL] 250726_Network: 인터넷 네트워크

지코·2025년 7월 26일
0

Today I Learned

목록 보기
78/94
post-thumbnail

✴️ 인터넷 통신

클라이언트가 서버에게 메세지를 보내고자 할 때, 두 컴퓨터가 직접적으로 연결되어있지 않은 이상 인터넷이라는 통신망을 거쳐야 한다.

이때 어떤 규칙을 통해 메세지가 전달될 수 있을까?

✴️ IP(Internet Protocol)

클라이언트는 자신의 IP 주소와 내가 메세지를 보내고자 하는 서버의 IP 주소를 알아야 한다. 여기서 IP는 클라이언트가 지정한 IP 주소에 패킷(Packet) 이라는 통신 단위로 데이터를 전달하게 된다.

패킷에는 클라이언트의 IP 주소와 서버의 IP 주소가 담기게 되고, 인터넷 망 내 노드들 간에 패킷이 전달되면서 최종 목적지에 도착하게 된다.

위 과정은 서버에서도 똑같은 방식으로 진행된다. 서버는 클라이언트의 데이터를 잘 받았다는 의미로 패킷을 전달하게 된다.

🤔 한계점

  1. 비연결성
    패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷을 전송한다.

  2. 비신뢰성
    패킷 전송 후 패킷이 사라지거나, 패킷을 여러 개 보냈지만 순서대로 도착하지 않을 가능성이 있다.

  3. 프로그램 구분
    같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 두 개 이상이라면, 프로그램을 구분하기 어려울 가능성이 있다.

이러한 한계점들을 극복하기 위해 우리는 TCP 를 사용한다❗️

✴️ TCP, UDP

  1. 메세지를 전달하고자 할 때 애플리케이션 계층에서는 보통 소켓 라이브러리를 이용해 메세지를 OS 계층에 넘긴다.
  2. OS 계층에서는 TCP 정보를 생성해서, 메세지 패킷에 해당 정보를 포함시킨다.
  3. IP와 관련된 데이터들을 패킷에 포함시킨다.
  4. 완성된 IP 패킷이 네트워크 인터페이스에서 LAN 카드를 통해 나갈 때 이더넷 프레임이 포함된다. 이더넷 프레임에는 MAC 주소와 같은 물리적인 정보들이 포함되어 있다.

TCP/IP 패킷의 형태는 위와 같다. 따라서 IP만으로 해결되지 않았던 순서 제어 등의 문제가 TCP를 통해 해결된다.

📌 TCP(Transmission Control Protocol)의 특징

TCP는 전송 제어 프로토콜로, 다음과 같은 특징을 가진다.

  • TCP 3-way handshake를 통해 연결 지향적 특징을 가진다. 클라이언트와 서버 간에 연결이 확립되어야 데이터 전송이 가능하다. 이 때 말하는 연결은 물리적 연결이 아닌, 개념적 연결이다.
  • 데이터 전달을 보증한다. 전송 과정에서 패킷이 누락될 경우 이를 확인할 수 있다.
  • 전송된 패킷들 간의 순서를 보장한다. 패킷 내부에 순서 정보를 포함하고 있기 때문에, 전송 과정에서 순서가 변경되더라도 수신 측에서 이를 확인할 수 있다. 기본적으로는 순서가 잘못된 패킷부터 재전송을 요청하게 된다.

이와 같은 특징들로 인해 TCP는 신뢰할 수 있는 프로토콜이며, 현재 대부분 TCP를 사용하고 있다.

📌 TCP 3-way handshake

위와 같은 과정을 거쳐 클라이언트와 서버가 상호 간의 신뢰를 형성하게 되고, 이후 데이터 전송이 가능하다.

📌 UDP(User Datagram Protocol)

UDP는 사용자 데이터그램 프로토콜로, 다음과 같은 특징을 가진다.

  • TCP처럼 3-way handshake를 통해 연결을 지향 ❌
  • 데이터 전달 보증 ❌
  • 순서 보장 ❌
  • but, 단순하고 빠름.
  • IP에 PORT가 추가된 정도.

✴️ PORT

한 번에 두 개 이상의 서버 컴퓨터를 연결해야 한다면, 패킷을 전송하면서 이 패킷이 어떤 용도로 사용되어야 하는지 구분하기가 어렵다.

이 때 IP와 함께 PORT 라는 개념을 사용한다. IP는 목적지 서버를 찾을 때 사용하며, PORT는 하나의 목적지 서버 내 프로세스들을 구분하는 역할을 한다.

정리하면 위 그림과 같다.

내가 게임을 위한 패킷을 전달하고자 한다면, 하나의 TCP/IP 패킷에 클라이언트 IP, 서버 IP, 클라이언트 PORT(8090), 서버 PORT(11220), 전송 데이터를 모두 포함시키면 된다.

0 ~ 65535의 PORT를 사용할 수 있으나, 0 ~ 1023은 잘 알려진 포트로 사용하지 않는 것이 좋다. 예를 들어 HTTPS는 443, HTTP는 80 등이 있다.

✴️ DNS(Domain Name System)

IP는 사람이 기억하기 어려우며, 언제든지 변경될 수 있다는 특징을 가지고 있다.

DNS는 일종의 전화번호부 개념으로, DNS 서버에 도메인명으로 요청하면 해당 도메인의 IP 주소를 응답한다. 따라서 클라이언트는 응답 받은 IP 주소를 이용해 서버에 접속이 가능하게 된다.

Reference

🎥 모든 개발자를 위한 HTTP 웹 기본 지식

profile
꾸준함이 무기

0개의 댓글