일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 머신러닝
- airflow docker
- leetcode125
- leetcode
- leetcode 819
- leetcode 49
- leetcode 121
- leetcode 234
- leetcode 344
- 올바른 변수명 짓기
- leetcode 937
- Hortonworks Sandbox
- leetcode 238
- 컴퓨터구조
- docker로 airflow 설치하기
- leetcode 5
- leetcode 561
- Python
- Hadoop
- 배열
- leetcode 15
- wargame.kr
- 빅데이터를 지탱하는 기술
- 데이터레이크와 데이터웨어하우스
- ctf-d
- webcrawler
- 문자열 조작
- 스파크 완벽 가이드
- MapReduce 실습
- 블로그 이전했어요
- Today
- Total
HyeM
[IDS/IPS]Week1. TCP/IP구조와 IP 헤더 기능 본문
1장. TCP/IP 방식의 계층적 구조
01 | 배경
전송과 제어라는 통신의 기본 내용을 인터넷 공간에서 구현하기 위한 구조로 등장한 개념이 TCP/IP 프로토콜*이다.
*프로토콜(protocol) : 호스트와 호스트 사이에서 사용하는 일종의 언어와 같은 개념. 수신자와 송신자가 동일하게 설정해야 통신 가능함.
ISO 기구에서 프로토콜을 통합하기 위해 OSI 프로토콜 만들었다.
02 | TCP/IP 계층*
▶ TCP/IP 계층
* 계층 : 비음성 통신에서 데이터를 전송하기 위한 일련의 과정이나 단계, 해당 프로토콜에 따라 데이터 전송 시, 모든 단계를 거친다.
TCP/IP는 총 4개의 계층으로 구성되고,
응용 계층(상위계층) ---> 물리계층 (하위계층) 으로 내려갈수록 물리적이고 구체적이다. 또한 일련의 헤더를 추가한다.
응용 계층(상위계층) <--- 물리계층 (하위계층) 으로 올라갈수록 논리적이고 추상적이다.
▶ TCP/IP 데이터 전송 단위
- 응용 계층 : 전송하고자 할 UDP 기반의 페이로드를 생성한 뒤 사용자의 실제 정보를 저장한다.
전송 단위 : 메시지
메시지는 전송 계층으로 넘어가 첫 번째 헤더와 결합함. - 전송 계층 : 첫 번째 헤더에서 주요한 정보는 포트 번호이고, 이 전송 단위를 데이터그램이라고 함
데이터그램은 네트워크 계층으로 넘어가 두 번째 헤더와 결합함. - 네트워크 계층 : 두 번째 헤더에서 주요한 정보는 ip 주소이고, 이 전송 단위를 패킷 이라고 함
패킷은 데이터 링크 계층으로 넘어가 세 번째 헤더와 결합함. - 데이터 링크 계층 : 세 번째 헤더에서 주요한 정보는 Mac주소이고, 이 전송 단위를 프레임이라고 함
프레임의 크기가 늘 일정한 경우에는 셀이라고 부름. 이는 ATM 전송 기법에서 사용한 전송 단위 - 물리 계층 : 완성된 프레임은 물리계층으로 넘어와 Bit 전송 단위로 전환한다.
2장. 네트워크 계층의 헤더(IP 헤더) 기능
01| IP 헤더 구조
IP 헤더 크기는 일반적으로 20byte 크기를 사용하지만, 경우에 따라 IP 추가 항목을 이용해 21byte 이상으로 사용할 수 있다.
▶ IP 헤더 구성 요소
1. 버전
IPv4 : 4
IPv6 : 6
2. 헤더 길이
IP 헤더의 크기
일반적으로 20byte를 사용하기 때문에 20이 들어감
3. Type of Service
해당 패킷의 전송 우선 순위를 저장한다.
Tos 기능을 지정하면 회선이 혼잡할 경우에도 해당 패킷을 우선적으로 전송해준다,
4. 전체길이
IP 헤더를 포함한 패킷 전체의 길이 정보가 담긴다.
IP 헤더를 제외한 남은 크기 추론 가능
5. ID, Flag 항목, 플래그먼트 오프셋
MTU에 따른 패킷 분할 정보를 담는 항목이다.
MTU란 최대 전송 단위 라는 의미로, 각각의 프로토콜에서 정한 데이터 크기의 최대범위를 의미한다. (이더넷은 1500byte)
IP헤더의 플래그 항목은 두 개의 비트(원래는 3개의 비트지만, 실제로는 2개의 비트만을 사용함)를 이용해 패킷의 분할 여부를 표시함.
Case1. 1400byte 패킷
ID 항목 | Flag 항목(D 비트) | Flag 항목(M 비트) | 플래그먼트 오프셋 |
0 | 1 | 0 | 0 |
D비트와 M 비트는 Flag 항목에서 사용하는 두 개의 비트를 의미
- D 비트 : Do not fragment ; 패킷 분할이 없음
- M 비트 : More Fragment; 또 다른 분할 패킷이 있다.
D비트가 1인 경우는 패킷 분할이 없음을 의미하므로, ID항목과 플래그먼트 오프셋 항목은 의미가 없다.
Case2. 5900Byte 패킷
5900바이트는 이더넷 구간을 통과 할 수 없어, 패킷 분할일 필요하다.
이더넷 MTU에 적합하도록 기존 패킷에 100바이트 크기의 쓰레기 값을 채우는 패딩을 거쳐 6000byte 크기의 패킷으로 늘린다.
6000byte가 된 패킷은 각각 1500 byte 크기로 분할할 수 있으므로, 분할하면 이더넷 구간을 통과할 수 있다.
ID 항목 | Flag 항목(D 비트) | Flag 항목(M비트) | 플래그먼트 오프셋 |
1234 | 0 | 1 | 0 |
1234 | 0 | 1 | 1500 |
1234 | 0 | 1 | 3000 |
1234 | 0 | 1 | 4500 |
ID가 모두 1234인것과 D비트가 0인것을 통해 해당 패킷이 분할 패킷임을 알 수 있다.
M 비트가 1인경우는 해당 패킷 말고 또 다른 분할 패킷이 있다는 의미이다.
첫 번째 패킷의 플래그먼트 오프셋을 보면 시작위치가 0바이트이다.
두 번째 패킷의 플래그먼트 오프셋을 보면 1500이기 때문에, 첫 번째 패킷은 0바트 부터 1499바이트로 끝나는 1500바이트 패킷임을 알 수 있다.
세 번째 패킷의 플래그먼트 오프셋을 보면 3000이기 때문에, 두 번째 패킷은 1500바트 부터 2999바이트로 끝나는 1500바이트 패킷임을 알 수 있다.
마지막 패킷의 경우 M비트가 0이므로, 더 이상 분할 패킷이 없다는 의미이므로, 네 번째 패킷이 마지막 분할 패킷임을 의미한다.
6. 생존 시간(TTL)
라우팅 루프가 일어난 구간에서 패킷을 폐기하기 위한 용도로 사용된다.
해당 패킷이 통과할 수 있는 라우터의 개수 정보를 담고 있다.
7. 프로토콜
상위 계층에 속한 프로토콜 번호를 저장함.
송신측에서 UDP 페이로드를 생성했다면 17로 설정하고, TCP 페이로드를 생성했다면 6으로 설정한다.
8. 헤더 오류 검사
일반적으로 사용하지 않아, 비활성 상태이다.
9. 출발지 주소 항목과 목적지 주소 항목
크기는 둘 다 32bit이고, 출발지 IP 주소와 목적지 IP 주소를 저장한다.
IP주소는 IANA에서 관리하고, IP주소의 범위는 0.0.0.0~ 255.255.255.255 까지 총 32bit로 이뤄졌다.
IP주소 등급은 A등급부터 E 등급까지 분류했지만, 일반적으로는 A부터 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 |
IP 주소는 등급에 따라 네트워크 ID와 호스트 ID가 다르다.
- 네트워크 ID : LAN 영역에 대한 고유한 식별자
- 호스트 ID : 해당 LAN 영역에 속한 호스트에 대한 고유한 식별자
특히 호스트 ID의 모든 비트가 0인 경우를 네트워크 IP 주소라고 하며
모든 비트가 1인 경우엔 브로트 캐스트 IP주소라고 한다.
네트워크 IP주소와 브로트 캐스트 IP주소는 운영체제 내부에서 사용하기 때문에,
C등급의 경우 실제 사용가능한 IP 주소 범위는 192.168.10.1~192.168.10.254까지 총 254개 이다.
▶ 리눅스에서의 브로트 캐스트 IP주소
(실습 추가 예정)
리눅스 기반의 운영체제에서는 다음과 같은 설정으로 통해 브로트 캐스트 IP주소를 사용할 수 있다.
echo 0 >/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
: 브로드캐스트 IP주소를 사용하겠다는 설정으로, 브로드 캐스트 IP주소를 사용하기 위해 선행적으로 설정해야함.
ping 192.168.10.255 -b
: 192.168.10.1부터 192.168.10.254번까지 모든 호스트에게 ICMP를 요청하겠다는 의미이다.
02| ICMP 구조
▶ ICMP란?
ICMP는 IP 등장 이후 전송 작업을 화면에 출력하기 위한 용도로 등장했다.
즉, ICMP는 화면 출력 메시지에 기반해 오류 통보 기능과 질의 응답 기능 등을 수행하기 위한 프로토콜이다.
(사용자 입장에서는 질의 응답 기능이 더욱 중요하다.)
ICMP 오류 통보란.
전송 중 일어날 수 있는 목적지 도달 불가나 발신지 억제 또는 시간 초과나 매개변수의 문제등을 사용자 화면에 출력하기 위한 기능을 의미한다.
ICMP 질의 응답란.
사용자가 목적지 호스트로 ICMP 질의를 요청하면, 운영체제에서는 네트워크 계층에 기반해 쓰레기 값을 채워진 페이로드를 생성한다. (ping으로, 목적지 호스트가 동작 중이라면 응답이 온다.)
구분 | 상위 계층과의 연속성 | 페이로드 생성 계층 | 전송 단위 |
IP | 있음 | 응용계층 | 패킷 |
ICMP | 없음 | 네트워크 계층 | 패킷 |
쓰레기 값으로 채워진 ICMP 페이로드 앞에 아래 그림의 8byte 크기의 ICMP 헤더가 붙는다.
▶ ICMP 헤더 구성 요소
1. 타입
해당 ICMP가 요청인지 응답인지 구분
8은 요청을, 0은 응답을 의미한다.
ICMP 페이로드에 ICMP 해더를 추가하여 ICMP 패킷을 생성한 뒤, 그 앞에 IP 헤더가 붙는다. (IP 헤더가 있어야 라우팅 가능하기 때문)
-> ICMP 패킷은 네트워크 계층에서 시작해 데이터 링크와 물리 계층으로 넘어간다.
▶ ICMP 방식에 기반의 명령어
ping : 출발지와 목적지 사이의 통신 여부를 점검하기 위한 용도
tracert : 출발지와 목적지 사이의 라우팅 과정을 확인하기 위한 용도
▶ Tracert 명령어
tracert 명령어는 구글 DNS 서버까지 몇 개의 LAN 영역을 통과했는지를 알 수 있다.
오른쪽 IP주소는 라우터 IP주소에 해당하고, 첫 번째 찍힌 IP주소는 자신의 로컬 라우터 IP주소이다.
tracert는 TTL 속성을 이용해 구현하는데, TTL 값이 10이면 해당 패킷은 10대의 라우터를 통과할 수 있고 그 이상은 통과할 수 없음.
- TTL 값을 1로 설정한 ICMP 패킷이 발생하고, 해당 패킷은 로컬 라우터 도달하자 마자 TTL 값을 0으로 바꾸고, 그 뒤 라우터로 넘어갈 수 없음. 그래서 출발지 호스트 측에 ICMP의 오류 통보 기능을 이용해 목적지 도달 불가라고 응답을 보낸다.
- 그 다음엔 TTL을 2로 설정하고, 이는 두 번째 라우터 까지만 도달할 수 있다.
- 계속해서 출발지 호스트는 ICMP 패킷을 TTL 값을 다시 늘려 이러한 작업을 반복적으로 수행
- TTL이 10일 때, 목적지 호스트로부터 ICMP 응답이 돌아온다.
tracert는 윈도우 계열에서는 ICMP 방식을 이용하고, 유닉스/리눅스 계열에서는 UDP 방식을 이용한다.(33435번 포트 사용)
그리고, 라우팅은 동적으로 동작하기 때문에 이전과 다른 경로가 나올 수 있다.
전송 계층에는 IP와 ICMP 프로토콜 이외에도 멀티 캐스트 구현을 위해 IGMP 프로토콜이 있고, ARP와 RARP는 네트워크 계층과 데이터 링크 계층 사이에서 동작하는 프로토콜이지만 통상 네트워크 계층으로 분류한다.
'Study > Network' 카테고리의 다른 글
[IDS/IPS] 네트워크 계층 기반의 주요 공격 유형 (0) | 2021.05.07 |
---|---|
[AWS]EC2 (0) | 2020.11.24 |
[4]GCP 인스턴스 만들기 (0) | 2020.11.09 |
[3]이더넷, IP,TCP 헤더 분석 (0) | 2020.09.27 |
[3]ARP sender 개발 (ARP, 이더넷 패킷) (0) | 2020.09.27 |