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

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
반응형