일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- Swift 기능
- 운영체제
- 동시성 프로그래밍
- 애플 디벨로퍼 아카데미 21주차 회고
- StateObject
- 네이버 부스트캠프
- 애플 디벨로퍼 아카데미 후기
- 소프트웨어분석및설계
- 치지직
- SWIFT
- 숭실대
- iOS 개발 오류
- ObservableObject
- global soop
- 제앱소
- Swift 문법
- thread safe
- OS
- swift문법
- 네이버 치지직
- 데이터베이스
- ObservedObject
- memoization
- Swift 디자인패턴
- useReducer
- Apple Developer Academy @ POSTECH
- 앱 비교 프로젝트
- 애플 디벨로퍼 아카데미
- 데이터베이스 공부
- react
- Today
- Total
사과하는 제라스
11강. Error, IPv6 and Packet Socket 본문
목차
- 에러 처리는 모든 프로그래밍에서 중요!(∵에러가 무엇인지 알아야 디버깅 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보다 추가적인 필드가 필요함.
- 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 구조체는 어떤 필드들이 있을까?
- 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 헤더 구조
'대학 전공 공부 > 네트워크 프로그래밍' 카테고리의 다른 글
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 |