기록/네트워크

네트워크 - 소켓, 리눅스 네트워크 관리

YongE 2025. 3. 13. 13:22

소켓(Socket) 통신 개요


소켓은 네트워크 상에서 두 프로그램 간의 양방향 통신을 위한 엔드포인트를 의미한다. 이는 포트 번호에 바인딩되어 TCP 레이어에서 데이터가 전달되어야 하는 애플리케이션을 식별할 수 있게 한다. 여기서 엔드포인트란 IP 주소와 포트 번호의 조합을 의미한다.

소켓의 기본 요소


프로토콜 체계

소켓은 다양한 프로토콜을 지원하며, 주요 프로토콜은 다음과 같다:

  • PF_INET: IPv4 기반 인터넷 프로토콜
  • PF_INET6: IPv6 기반 인터넷 프로토콜
  • PF_LOCAL: UNIX 시스템 내 로컬 통신 프로토콜
  • PF_PACKET: 저수준 패킷 기반 소켓
  • PF_IPX: 노벨 네트워크 프로토콜

소켓의 유형

  • TCP 소켓(스트림 소켓): 연결 지향적이며 신뢰성 있는 데이터 전송을 지원한다. 서버는 클라이언트의 연결 요청을 소켓을 통해 리스닝하며 기다린다. 클라이언트는 서버의 호스트네임과 리스닝 포트를 알고 있어 이를 통해 서버와의 연결을 시도한다. 연결이 수락되면 서버는 동일한 로컬 포트에 바인딩된 새로운 소켓을 얻게 되며, 클라이언트의 주소와 포트로 설정된 리모트 엔드포인트를 갖게 된다. 이는 서버가 별개의 새로운 소켓을 통해 연결된 클라이언트의 요청을 처리하면서, 기존 소켓을 통해 지속적으로 연결 요청을 받을 수 있도록 하기 위함이다.
  • UDP 소켓(데이터그램 소켓): 비연결형이며 빠른 속도를 제공하지만 데이터 손실 가능성이 존재한다.

TCP/IP와 소켓의 위치

소켓은 응용 프로그램과 전송 계층 사이에 존재하며, TCP/IP 프로토콜 스택 내에서 동작한다.

포트 번호


소켓 통신에서 포트 번호는 특정 프로세스와의 통신을 식별하는 데 중요한 역할을 한다:

  • 16비트 정수: 총 65,535개 포트 사용 가능
  • 1-255: 잘 알려진 서비스(WELL-KNOWN PORT)
  • 256-1023: 기타 등록된 서비스(REGISTERED PORT)
  • 1024-4999: 시스템 예약 포트
  • 5000-65535: 사용자 정의 포트

특징

  • 동일한 프로토콜 내에서 포트 번호는 중복될 수 없다.
  • 단, TCP와 UDP는 같은 포트 번호를 각각 사용할 수 있다.

CIDR(Classless Inter-Domain Routing)


IP 주소를 효율적으로 할당하고 관리하기 위한 방식으로, 네트워크 주소 지정 방법을 유연하게 만들어줌. 기존의 고정된 클래스 체계를 탈피한 이 기술은 현대 네트워크 설계의 핵심 요소라고 함.

  • 네트워크 주소 자원을 절약하고 라우팅 효율성을 높이기 위해 개발
  • CIDR은 IP 주소 뒤에 슬래시(/)와 숫자를 붙여 표현
    • 예: 192.168.100.100/24
    • 이 숫자는 서브넷 마스크에서 '1'의 개수와 같음.
    • 기존 표기법: IP: 192.168.100.100, 서브넷 마스크: 255.255.255.0
    • CIDR 표기법: 192.168.100.100/24

CIDR 계산 방법

CIDR 범위를 계산하는 간단한 방법은 다음과 같음.

  1. 프리픽스 값(/)을 32에서 뺌. - 이는 호스트 부분의 비트 수를 나타냄.
  2. 호스트 비트 수가 8 이상이면 8씩 빼면서 옥텟 단위로 계산.
  3. 남은 비트 수로 2의 거듭제곱을 계산하여 가능한 주소 수를 구함.
  • 네트워크 부분: 전체 네트워크를 식별하는 부분
  • 호스트 부분: 해당 네트워크 내의 개별 장치를 식별하는 부분

예시: 192.168.10.0/24의 경우

  • 32 - 24 = 8 (호스트 부분은 8비트)
  • 2^8 = 256 (256개의 주소 범위)
  • 범위: 192.168.10.0 ~ 192.168.10.255

예시: 192.168.207.2/22의 경우

  • 32 - 22 = 10 (호스트 부분은 10비트)
  • 10 - 8 = 2 (마지막 옥텟에서 2비트가 네트워크 부분)
  • 2^2 = 4 (한 옥텟 내에서 4단위로 구분)
  • 207은 204~207 범위에 속함
  • 범위: 192.168.204.0 ~ 192.168.207.255

원격 시스템 네트워크 동작 확인 명령어


ping

  • 네트워크 연결 상태와 응답 시간을 확인한다.
  • ICMP 프로토콜을 사용한다.
  • 주의: 과도한 사용은 서버에 부담을 줄 수 있으며, 일부 서버는 ICMP를 차단할 수 있다.
  • ping [옵션] [대상 IP 주소 또는 도메인 이름]
  • 다양한 옵션이 있음. 패킷 크기, 횟수 지정 가능

nslookup

  • 도메인 네임서버 질의 도구이다.
  • 호스트 IP 주소 확인 및 네임서버 동작을 점검한다.
  • nslookup [도메인]

netstat

  • 네트워크 연결, 라우팅 테이블, 인터페이스 통계를 확인한다.
  • netstat [옵션]
  • 주요 옵션
    • a: 모든 소켓을 표시합니다.
    • n: 숫자로 표시합니다. 호스트 이름 대신 IP 주소와 포트 번호를 숫자로 출력합니다.
    • p: 프로세스 ID와 이름을 표시합니다.
    • r: 라우팅 테이블을 표시합니다.
    • t: TCP 소켓만 표시합니다.
    • u: UDP 소켓만 표시합니다.
    • l: LISTEN 상태의 소켓만 표시합니다.
    • s: 각 프로토콜의 통계를 표시합니다.

ifconfig

  • 네트워크 인터페이스 설정 및 정보를 조회한다.
  • 인터페이스 활성화 및 비활성화가 가능하다.
  • Ifconfig [옵션]
  • 특정 네트워크 인터페이스에 대한 정보만 출력할 수 있다.
    • ifconfig [인터페이스명 예:enp0s3]
    • 인터페이스는 NIC(network interface card)이며, 보통 랜카드라 부름.
    • 네트워크 중지는 ifconfig [인터페이스명] down

ifconfig로 고정 IP 설정이 가능하다. 다만 이는 시스템이 재시작하면 초기화된다. 따라서 아래와 같이 영구적 반영 조치를 취할 수 있다.

네트워크 설정은 우분투 기준 /etc/sysconfig/network-scripts/ifcfg-[인터페이스명 파일]에 있다!


  
(user1]$ cat /etc/sysconfig/network-scripts/ifcfg-enp0s3
TYPE-"Ethernet"
BOOTPROTO-"dhcp"
DEFROUTE-"yes"
IPV4_FAILURE_ FATAL "no"
IPV6INIT-"yes"
IPV6 AUTOCONE-"yes"
IPV6_DEFROUTE- "yes"
IPV6 FAILURE FATAL-"no"
NAME "enpOs3"
UUID=""
DEVICE-"enpOs3"
ONBOOT "yes"
PEERDNS "yes"
PEERROUTES-"yes" IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"
IPV6_PRIVACY-"no"

BOOTPROTO가 DHCP(동적 할당)으로 되어 있다. 고정 IP로 설정하기 위해 다음과 같이 설정하면 된다.


  
BOOTPROTO-"static" <-
NETMASK-255.555.255.0
GATEWAY-192.168.1.1
DNS1-168.126.63.1
728x90
반응형