관리 메뉴

사과하는 제라스

11강. Error, IPv6 and Packet Socket 본문

대학 전공 공부/네트워크 프로그래밍

11강. Error, IPv6 and Packet Socket

Xerath(제라스) 2022. 5. 12. 00:25

목차

    728x90
    반응형

    - 에러 처리는 모든 프로그래밍에서 중요!(∵에러가 무엇인지 알아야 디버깅 Easy)

     

    - 리눅스는 발생한 에러를 저장하는 전역변수 errno를 제공함.(쓰려면 error.h를 include해야 함.)

    즉, 에러가 발생하면 errno에 해당 에러에 대한 값(숫자)을 저장함.

    - 에러가 생기면 socket은 -1을 리턴하면서 종료함. 이때 errno가 어떤 값인지  if문을 통해 확인하는 코드를 짤 수 있음.

    - IPv6 헤더는 IPv4 헤더에 비해 깔끔함.

    1) Version : IPv6에 대한 버젼

     

    2) Traffic Class : 패킷 QoS(Quality of Service) 관련 값

    ->어떤  서비스를 함에 있어서 서비스 퀄리티 보장 위해 => 패킷 우선순위(라우터에서 어떤 걸 먼저 처리해줄 지)필요한지 아닌지 여부

    그 값들이 Traffic Class에 있음.

     

    3) Flow Label : 패킷의 flow control을 위한 값

    1. IPSec(IP 계층의 보안을 담당하는데 IP payload를 모두 암호화 함.)으로 인해 Transport 계층(TCP/UDP port) 확인이 불가능할 때 2. Packet fragmentation(분열)으로 Transport 계층 확인 불가능할 때

     

    4) Payload Length : IPv4의 Total Length와 동일함.

     

    5) Next Header : 다음 헤더 값이 무엇인지 알려줌.

     

    6) Hop Limit : IPv4의 Time to Live와 동일함.

     

    7) Source Address : 128bit

     

    8) Destination Address : 128bit

     

    - IPv6 주소 표기법

    1) 0이 연속되면 생략 가능함.

    ex)

    fe80:0000:0000:1234:5678:9012:3456:7890 

     → fe80:0:0:1234:5678:9012:3456:7890
     → fe80::1234:5678:9012:3456:7890

     

    특수한 주소

    :: => 0.0.0.0(당연한거고~)

    ::1 => 127.0.0.1(127을 안써줘도 되는구나~)

     

    - IPv6 주소체계는 IPv4보다 추가적인 필드가 필요함.

    IPv6 주소체계

    - IPv4 -> IPv6 로 넘어갈 때 둘 다 지원하기 위해 다음과 같이 함수가 추가됨.

    1) inet_aton(), inet_addr() -> inet_pton() //주소들을 network byte order로 변경

    2) inet_ntoa() -> inet_ntop() //network byte order를 주소로 변경

    3) gethostbyname() -> getaddrinfo() //host name을 가지고서 IP 주소 가져옴

     

    - Packet Socket = 데이터링크 계층에 대해 수정(MAC 헤더까지)이 가능하게 하는 소켓

    <=> Raw Socket은 IP 계층까지만 수정이 가능했음.

    MAC 주소 기반의 프로토콜인 ARP 프로토콜을 처리하는 법 배울 것임.

     

    - Packet Socket 사용법

    socket(AF_PACKET, int socket_type, int protocol);

    1) 무조건 AF_PACKET이어야 함.

    2) socket_type

    1. SOCK_RAW : 2계층 모든 작업 가능.

    2. SOCK_DGRAM : 네트워크의 2계층 헤더는 자동 생성, 2계층의 데이터 부분은 작성 가능.

     

    3) protocol : 주로  ETH_P_IP와 ETH_P_ARP를 씀. ETH_P_ALL이란 것도 있는데 '모든 패킷 수신 가능'을 의미함

     

     - 그렇다면 Packet Socket 구조체는 어떤 필드들이 있을까?

    Packet Socket 구조체

    - IP address VS MAC address

    1. 32bit(4 byte) IP주소:  네트워크 층에서 라우팅을 하기위해 사용됨.

     

    2. MAC 주소(= LAN address = physical address = Ethernet address)

    : 1. local하게 통신 시 필요한 주소임 2. 48bit의 :으로 구분되는 주소 3. 앞 3byte= 제조업체, 뒤 3byte=시리얼 넘버

     

    - MAC주소는 unique해야 하며 같을 시 충돌이 일어날 수 있음.

     

    * 허브 형태 = MAC주소 할당 X, 스위치 형태 = MAC주소 할당 O

     

    - destination address에 MAC 주소를 FF-FF-FF-FF-FF-FF(= broadcast address)로 주면 모든 연결된 곳에 전송이 됨​​

     

    - MAC 주소 : 주민등록번호와 같음, flat address라서 portability하다.

    - IP 주소 : 우편 번호와 같음, hierarchical address라서 portability하지 않다.

     

    - ARP(Address Resolution Protocol)는 왜 필요할까?

     도메인 주소로 IP주소 알아오잖아? 근데 MAC주소는 모름.

    ∴ ARP 프로토콜이라는 것으로 MAC주소를 알아올 수 있음.

     

    모든 PC들은 자신만의 ARP table(<IP주소, MAC주소, TTL>)을 갖고 있음.

    -> 한번 접속했던 서버들에 대해선 MAC주소를 갖고있음.

     

    만약 어떤 PC에 접근하려는데 새로운 IP주소에, table에 없는 MAC주소다?

    -> ARP를 통해 PC로부터 ARP response를 받고 그걸 통해 MAC주소를 알아냄.

     

    - ARP 헤더 구조

    728x90
    반응형

    '대학 전공 공부 > 네트워크 프로그래밍' 카테고리의 다른 글

    16. Basic OpenSSL  (0) 2022.06.08
    15. 네트워크 보안  (0) 2022.06.08
    14강. 보안 기본 개념  (0) 2022.05.21
    13강. HTTP and Web Client  (0) 2022.05.13
    12강. DNS  (0) 2022.05.13