네트워크 프로그래밍 RAW SOCKET

Alpha, Orderly·2023년 5월 23일
0

Raw socket

  • TCP / UDP 를 거치지 않는 IP 단계 통신
  • ICMPv4, IGMPv4, ICMPv6 은 로우소켓을 통해 송수신 한다.
    • 예 : 핑 프로그램
  • 직접 헤더를 구성할수도 있다.
    • IP_HDRINCL 소켓 옵션을 사용한다.

Raw socket 생성

#include <netinet/in.h>

socket(PF_INET, SOCK_RAW, IPPROTO_ICMP)
IPPROTO_ICMP : 프로토콜 ( socket의 3번째 패러미터 )
SOCK_RAW : Raw socket ( socket의 2번째 패러미터 )

Raw socket output

  • 일반적 output 은 sendto / sendmsg 로 이루어짐
  • IP_HDRINCL set 안할시 - 커널이 IP 헤더 만들어 데이터 붙힘
  • IP_HDRINCL set 할시 - 프로세스가 IP 헤더 만듬 ( Identification / checksum 제외 )

Raw socket input

  • TCP / UDP 는 로우소켓으로 가지 않음
  • ICMP는 로우소켓으로 보내짐
    • 이후 커널이 메시지 처리를 함
    • 모든 작업을 커널이 처리
  • IGMP는 로우소켓으로 보내짐
  • IP 데이터그램은 로우소켓으로 보내짐 > protocol ID 확인
    • 0이 아닌 프로토콜 > 로우 소켓 생성
    • 로컬 IP > bind
    • 외부 IP > connect

ICMP

  • IP는 신회성이 없고 연결성이 없어 에러 컨트롤을 하기 위해 만듦

  • 에러 리포팅 / 질의
    ㅇ ICMP 오류 메세지 (Error Reporting Message)

    • 목적지도달불가 (Destination Unreachable) : Type 3
      . Network Unreachable : Code 0
      . Host Unreachable : Code 1
      . Protocol Unreachable : Code 2
      . Port Unreachable : Code 3
    • 발신 억제 (Source Quench) : Type 4 (표준에서 제외됨)
    • 재지정 (Redirect) : Type 5
    • 시간 초과 (Time Exceeded) : Type 11
      . 패킷이 루프를 돌거나, 과밀 발생, 타이머 값이 너무 낮게 설정된 경우
    • 매개변수 문제 (Parameter Problem) : Type 12

    ㅇ ICMP 정보성 메세지 (Informational Message) / 질의 메세지 (Query Message)

    • 호스트 간에 연결성 검사 확인 등 ☞ ping, traceroute 참조
      . 에코 응답 (Echo Reply) : Type 0
      .. Ping Echo 응답, 데이터를 다시 리턴해 줌
      . 에코 요청 (Echo Request) : Type 8
      .. Ping Echo 요청, 옵션 데이터 가능
    • 라우터 광고 (Router Advertisement) : Type 9
    • 라우터 간청 (Router Solicitation) : Type 10

  1. 프로그램이 호스트에 ICMP ECHO Request 를 보냄
  2. host가 ICMP Echo reply에 응답함

Ping Client

  • host가 응답 가능한지 확인가능
  • icmp_seq_number, TTL, RTT 확인가능
  • 핑 상태를 측정 가능하다,
  • Type 8 : Echo request , 0 : Echo reply

profile
만능 컴덕후 겸 번지 팬

0개의 댓글