IP Header
[그림 1] IP Header 구조
IP 헤더 크기는 일반적으로 20byte지만 경우에 따라 IP Options 항목을 이용해 21byte가 된다.
VERSION
IPv4 - 4, IPv6 - 6
Header Length
IP 헤더의 크기 (일반적으로 20)
Type of Service (ToS)
해당 패킷의 전송 우선 순위
-> 회선이 혼잡할 경우에도 해당 패킷 우선 전송 A.K.A 구급차
Total Length
IP 헤더(20~21) 포함한 패킷 전체의 길이 정보
Identification, Flags, Fragement Offset
-> MTU에 따른 패킷 분할 정보를 담는 항목
* MTU
: 최대 전송 단위. 각 프로토콜에서 정한 데이터 크기의 최대 범위.
ex) 이더넷 - MTU : 1500bytes = 이더넷 구간을 통과할 수 있는 데이터 최대 크기가 1500바이트
IF) 5900바이트 크기의 데이터 발생, 어떻게 통과?
-> Identification, Flags, Fragement Offset 항목 필요!
... TCP 헤더의 플래그 항목과 다름(IP : 두개의 비트(D,M) 이용, 패킷의 분할 유무 표시 <-> TCP : 제어 신호 설정시 사용)
EX1. 이더넷 구간, 1400 바이트 패킷
-> MTU : 1500 바이트, 패킷 분할 불필요
ID | Flag (D 비트) | Flag (M 비트) | Flagemet Offset |
0 | 1 | 0 | 0 |
D 비트 : Do not fragment -> 패킷 분할 불필요
M 비트 : More fragment -> 패킷 분할 필요
EX2. 이더넷 구간, 5900 바이트 패킷
-> MTU : 1500 바이트, 패킷 분할 필요
[송신 OS]
1. 이더넷 MTU에 적합하도록 100바이트의 쓰레기 값을 채움 -> Padding!
2. 6000바이트를 각각 MTU 크기(1500)로 분할
ID | Flag (D 비트) | Flag (M 비트) | Flagemet Offset |
1234 | 0 | 1 | 0 |
1234 | 0 | 1 | 1500 |
1234 | 0 | 1 | 3000 |
1234 | 0 | 1 | 4500 |
[수신 OS]
첫번째 패킷 헤더 : ID, D 비트 통해 해당 패킷이 분할 패킷임 + M 비트 통해 또 다른 분할 패킷 존재 + 플레그먼트 오프셋을 통해 시작 위치가 0바이트
두번째 패킷 헤더 : 플래그먼트 오프셋 통해 첫번째 패킷이 0바이트에서 시작해 1499바이트로 끝나는 1500바이트짜리 패킷
세번째 패킷 헤더 : 플래그먼트 오프셋 통해 두번째 패킷이 1500바이트에서 시작해 2999바이트로 끝나는 1500바이트짜리 패킷
마지막 패킷 : M 비트 통해 더 이상 분할 패킷 없음 + 플래그먼트 오프셋 통해 세번째 패킷이 3000바이트에서 시작해 4499바이트로 끝나는 1500바이트짜리 패킷
-> 위 표 기반으로 네 개의 분할 패킷을 순서에 따라 재조립. .. 빈번한 패킷 분할은 과부하 유발 가능
*
Time To Live (생존시간)
라우팅 루프가 일어난 구간에서 패킷을 폐기하기 위한 용도
해당 패킷이 통과할 수 있는 라우터의 개수 정보를 담음
ex) TTL = 0, 해당 패킷은 10대 이하의 라우터 통과 가능
Protocol
상위 계층에 속한 프로토콜 번호 저장
ex) 송신 측, UDP 페이로드 생성 -> 17, TCP 페이로드 생성 -> 6
수신 측, 17읽고 해당 패킷을 데이터그램으로 간주, 6읽고 해당 패킷을 세그먼트로 간주
↓ 프로토콜 번호 종류 확인 가능
en.wikipedia.org/wiki/List_of_IP_protocol_numbers
Header Checksum (헤더 오류 검사)
비활성 상태. 일반적으로 사용 x
출발지 주소 / 목적지 주소
크기 : 32bit, 출발지 IP 주소와 목적지 IP 주소 저장
* IP 주소
: IANA에서 관리, 범위 0~255(0.0.0.0~255.255.255.255), 총 32비트, A~E 등급까지 있지만 C까지 사용
등급 | 범위 | 기본 서브넷 마스크 | 비고 |
A | 1 ~126 | 255.0.0.0 | 127.0.0.1 루프백 주소 |
B | 128~191 | 255.255.0.0 | |
C | 192~223 | 255.255.255.0 |
등급에 따라 네트워크 ID와 호스트 ID가 다름
네트워크 ID : LAN 영역에 대한 고유한 식별자
호스트 ID : 해당 LAN 영역에 속한 호스트에 대한 고유한 식별자
* 모든 비트가 0인 경우 = 네트워크 IP 주소 = C 등급에서 192.168.10.0 인 경우
* 모든 비트가 1인 경우 = 브로드캐스트 IP 주소 = C 등급에서 192.168.10.255인 경우
네트워크 IP 주소와 브로드캐스트 IP 주소는 운영 체제 내부에서 사용
C 등급인 경우 실제 사용 가능한 IP 주소 범위 : 192.168.10.1번 ~ 192.168.10.154번 -> 총 254개
.. A,B 등급 역시 네트워크 IP주소와 브로드캐스트 IP주소를 제외한 개수가 실제 사용 가능한 개수
리눅스) echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
-> 브로드캐스트 IP 주소를 사용하겠다
리눅스) ping 192.168.10.255 -b
-> 192.168.10.1~192.168.10.254번까지 이르는 모든 호스트에게 ICMP 요청
*
ICMP 프로토콜
IP 등장 이후 전송 작업을 화면에 출력하기 위한 용도
화면 출력 메시지에 기반해 오류 통보 기능과 질의 응답 기능 등을 수행하기 위한 프로토콜
오류 통보 : 전송 중 일어날 수 있는 목적지 도달 불가, 발신지 억제, 시간 초과, 매개변수 등의 문제등을 사용자 화면에 출력하기 위한 기능
but, 사용자 입장에서는 질의 응답 기능이 더욱 중요
ping : 임의의 쓰레기 값으로 이뤄진 데이터를 생성해 전송. 목적지 호스트가 동작 중이라면 응답 옴
1. 사용자->목적지 호스트 : ICMP 질의 요청
2. OS : 네트워크 계층 기반, 쓰레기 값으로 채워진 페이로드 생성
(<->FTP,SSH : 응용 계층에서 사용자의 실제 정보 담은 페이로드 생성)
구분 | 상위 계층과의 연속성 | 페이로드 생성 계층 | 전송 단위 |
IP | 있음 | 응용 계층 | 패킷 |
ICMP | 없음 | 네트워크 계층 | 패킷 |
ICMP Header
[그림 2] ICMP Header 구조
Type
해당 ICMP가 요청(8)인지 응답(0)인지 구분 정보
ICMP 페이로드 + ICMP 헤더 = ICMP 패킷 생성!
ICMP 패킷 앞에 IP 헤더 붙음 -> IP 헤더가 있어야 라우팅이 가능하기 때문
ICMP 패킷 : 네트워크 계층 -> 데이터 링크 계층 -> 물리 계층
TCP/UDP 페이로드 | TCP/UDP 헤더 | IP헤더 |
IP
ICMP 페이로드 | ICMP 헤더 | IP 헤더 |
ICMP
tracert : 출발지와 목적지 사이의 라우팅 과정 확인 명령어
-> ping 명령어의 TTL 속성을 이용하여 구현
구글의 DNS 서버까지 몇 개의 LAN 영역을 통과했는가 알 수 있음
오른쪽 IP 주소=라우터 IP 주소
첫번째 찍힌 IP 주소 = 나의 로컬 라우터 IP 주소
TTL 값이 1로 설정한 ICMP 패킷 발생 -> 라우터 도착하자마자 TTL 값은 0-> 해당 라우터는 출발지 호스트에 ICMP 오류통보 기능 이용하여 목적지 도달 불가 응답 -> 출발지 호스트에서 TTL 값2로 설정.....
TTL 값이 10일 때 목적지 호스트로부터 ICMP 응답이 돌아온다
-> 출발지에서 목적지까지 경유한 경로 확인
tracert 명령어 사용시 주의점
1. 윈도우 계열 = ICMP 방식
리눅스 계열 = UDP 방식 (포트 33435)
2. 경로 추적 수행시 라우팅 상황에 따라 이전과 다른 경로 나올 수 있음
-> 동적으로 동작하는 라우팅 알고리즘 때문 (최선의 경로는 상황예 따라 변화)
그 외의 프로토콜
IGMP -> 멀티캐스트 구현
ARP,RARP -> 엄밀히 말하면 네트워크 계층과 데이터 링크 계층 사이에서 동작하는 프로토콜. 통상적으로 네트워크 계층
IPv6 환경에서 ICMP -> IGMP, ARP 기능까지 구현
'Network > 침해탐지' 카테고리의 다른 글
전송 계층 기반의 주요 공격 유형 (0) | 2021.05.14 |
---|---|
전송 계층의 헤더 기능 (0) | 2021.05.14 |
TCP/IP 방식의 계층적 구조 (0) | 2021.04.02 |