minhui study
TCP/IP 방식의 계층적 구조 및 네트워크 계층의 헤더 기능 본문
Chapter 01. TCP/IP 방식의 계층적 구조
▶ 통신이란?
전송과 제어로 이뤄졌다는 기본 원리에 따라 아래 그림과 같은 계층적 구조를 제시
TCP 방식에 기반해 오류를 제어하기 위한 계층 |
IP 방식에 기반해 데이터를 전송하기 위한 계층 |
▶ TCP/IP Protocol
* Protocol : 호스트와 호스트 사이에서 사용하는 일종의 언어와 같은 개념
- 오늘날 4계층으로 이루어진 구조로 성장했지만 TCP/IP 프로토콜의 구조와 기능 등을 설명할 때에는 다음과 가티 4계층이 아닌 5계층 구조로 설명한다.
계층 구분 | 해당 계층에 속하는 프로토콜 종류 |
응용 | FTP SSH TELNET SMTP DNS HTTP SNMP SSL 등 |
전송 | TCP UDP 등 |
네트워크 | IP ICMP IGMP ARP 등 |
데이터 링크 | 이더넷 PPP 등 |
물리 |
- TCP/IP 프로토콜을 4계층으로 구분할 때에는 데이터 링크 계층과 물리 계층을 통합해 네트워크 인터페이스 계층 또는 네트워크 접근 계층이라고 부른다.
- 응용 계층에서 물리 계층까지 하위 계층으로 내려갈수록 물리적이고 구체적인 속성이 강해진다. 즉, 응용 계층보다는 전송 계층이 보다 물리적이고 구체적이다.
- TCP/IP 프로토콜에 따른 일련의 송신이란 상위 계층에서 하위 계층으로 전환하는 과정이며 논리적 속성이 물리적 속성으로 전환하는 과정이고 일련의 부가 정보를 추가하는 과정이다.
▶ 계층별 송신
- 송신의 시작 단계인 응용 계층에서 전송하고 할 UDP 기반의 페이로드를 생성한 뒤 사용자의 실제 정보를 저장한다.
이처럼 응용 계층에서 생성한 전송 단위를 메시지Message 라고 부른다.
- 응용 계층에서 완성된 메시지는 다음 계층인 전송 계층으로 넘어가 첫 번째 헤더의 주요한 정보인 포트 번호와 결합한다.
이러한 형태의 전송 단위를 데이터그램Datagram이라고 한다.
- 전송 계층에서 완성한 데이터그램은 네트워크 계층으로 넘어가 두 번째 헤더의 중요 정보인 IP 주소와 결합한다.
이러한 형태의 전송 단위를 패킷Packet이라고 한다.
- 네트워크 계층에서 완성한 패킷은 데이터 링크 계층으로 넘어와 세 번째 헤더의 주요 정보인 맥 주소와 결합한다.
이에 대한 전송 단위를 프레임Frame이라고 한다.
* 프레임의 크기가 늘 일정한 경우 셀(Cell)이라고 부르는데 이는 ATM 전송 기법에서 사용하는 전송단위이다.
- 위 절차로 만들어진 프레임은 물리 계층으로 넘어가 비트(Bit) 전송 단위로 전환된다.
계층 | 데이터 전송 단위 | 주요한 프로토콜 | 비고 |
응용 | 메시지 | 약 6,5000개 정도 | 송신 시작 계층 |
전송 | 데이터그램/세그먼트 | UDP와 TCP 등 | |
네트워크 | 패킷 | IP와 ICMP 등 | |
데이터 링크 | 프레임 | 이더넷과 PPP 등 | |
물리 | 비트 | 수신 시작 계층 |
Chapter 02. 네트워크 계층의 헤더 기능
▶ IP Header
IP 헤더의 크기는 일반적으로 20byte 크기를 사용지만 경우에 따라 IP추가 항목을 이용해 21byte이상으로 사용할 수도 있다.
Version (4bit)
→ IPv4 주소라면 4가 IPv6 주소라면 6이 들어간다.
Header Length (4bit)
→ IP 헤더의 크기가 들어간다. 일반적으로 20 byte 크기를 사용하므로 보통 20이 들어간다.
Type-of-Service Flags (8bit)
→ 패킷의 전송 우선 순위를 제공한다.
→ IPv4에만 해당. 이 설정은 더 이상 사용되지 않으며 IP 헤더의 서비스 종류 필드에 영향을 주지 않는다.
Total Length (16bit)
→ IP 헤더를 포함한 패킷 전체의 길이 정보를 담는다.
→ 만약 항목에 100이 저장되면 헤더 길이 항목에 담긴 20이란 정보를 통해 남은 크기를 추론할 수 있다.
ID(16bit)/ Flags(3bit)/ Fragment Offset (13bit)
→ MTU에 따른 패킷 분할 정보를 담는다
* MTU : 최대 전송 단위
→ 만약 MTU보다 큰 크기의 데이터가 발생하면 ID 항목, 플래그 항목, 플래그먼트 오프셋 항목이 필요하다.
→ TCP 헤더의 플래그 항목은 제어 신호를 설정하고 IP 헤더의 플래그 항목은 두 개의 비트를 이용해 패킷의 분할 유무를 표시한다.
→ 빈번한 패킷 분할을 과부하를 유발할 수도 있다.
▷ ID (16bit)
: 분열이 발생한 경우, 조각을 다시 결합하기 원래의 데이터를 식별하기 위해서 사용한다.
▷ Flags (3bit)
: 처음 1bit는은 항상 0으로 설정, 나머지 2비트의 용도는 다음과 같다.
- May Fragment : IP 라우터에 의해 분열되는 여부를 나타낸다.
※ 플래그 0 - 분열 가능 1 - 분열 방지
- More Fragments : 원래 데이터의 분열된 조각이 더 있는지 여부 판단.
※ 플래그 0 - 마지막 조각, 기본값 1- 조각이 더 있음
▷Fragment Offset (13bit)
: 8바이트 오프셋으로 조각에 저장된 원래 데이터의 바이트 범위를 나타낸다.
◎ 예시
MTU가 1,500 byte인 경우 1,400 byte의 패킷과 5,900 byte 패킷이 있다고 가정
ex1) 1,400 byte 크기의 패킷은 MTU가 1,500 byte인 이더넷 구간을 통과할 수 있으며 패킷 분할이 필요하지 않으며 패킷 분할 항목의 설정이 아래 표와 같다.
ID 항목 | 플래그 항목 (D 비트) | 플래그 항목 (M 비트) | 플래그먼트 오프셋 |
0 | 1 | 0 | 0 |
D와 M 비트는 플래그 항목에서 사용하는 두 개의 비트로 D는 Do not fragment 비트이고 M은 More fragments 비트이다. 이때, D 비트가 1이라는 것은 패킷 분할이 없는 것이고 이때 ID 항목과 프래그먼트 오프셋은 의미가 없다.
ex2) 5,900 byte 크기의 패킷은 이더넷 구간을 통과할 수 없어 패킷 분할이 필요하다.
MTU에 적합할 수 있도록 패딩을 통해 100byte를 채워 6,000 byte 크기의 패킷으로 만든다. 그리고 해당 패킷을 1,500 byte로 분할하여 이더넷 구간을 통과할 수 있도록 만든다. 패킷 분할의 설정 내용은 아래 표와 같다.
ID 항목 | 플래그 항목 (D 비트) | 플래그 항목 (M 비트) | 플래그먼트 오프셋 |
1234 | 0 | 1 | 0 |
1234 | 0 | 1 | 1500 |
1234 | 0 | 1 | 3000 |
1234 | 0 | 0 | 45000 |
첫 번째 패킷
- 헤더에서 ID와 D 비트가 0이 아닌 1임을 통해 해당 패킷이 분할 패킷인 것을 알 수 있다.
- M 비트가 1인 것은 해당 패킷 외에 또 다른 분할 패킷이 있다는 것을 의미한다.
- 플래그먼트 오프셋은 시작 위치로 0 byte이다.
두 번째 패킷
- 첫 번째와 마찬가지로 ID 항목이 동일
- D와 M 비트가 각각 0과 1로 분할 패킷이며 또 다른 분할 패킷이 있다는 것을 의미한다.
- 첫 번째 패킷 바로 다음인 1,500이 플래그먼트 오프셋임을 알 수 있다.
세 번째 패킷
- 첫 번째, 두번째 패킷과 마찬가지로 역시 같다.
마지막 패킷
- 이전 패킷들과 달리 M비트가 0으로 더 이상 분할 패킷이 없다는 의미이다.
Time to Live (8bit)
→ 라우팅 루프가 일어나 구간에서 패킷을 폐기하기 위한 용도로 사용한다.
→ 해당 패킷이 통과할 수 있는 라우터의 개수 정보를 담는다.
Protocol (8bit)
→ 상위 계층에 속한 프로토콜 번호를 저장한다.
(송신 측에서 UDP 페이로드를 생성했다면 17로 TCP 페이로드를 생성했다면 6으로 설정한다.)
→ 이를 통해 수신 측에서 패킷의 속성을 파악한다.
* 프로토콜 항목에서 사용하는 프로토콜 번호의 종류는 다음 사이트를 통해 확인할 수 있다.
https://en.wikipedia.org/wiki/List_of_IP_protocol_numbers
Header Checksum (16bit)
→ 해당 항목은 비활성화 상태로 헤더 오류 검사는 보통 사용하지 않는다.
→ 라우터를 지나갈때 마다 재 계산을 하기 때문에 속도가 떨어진다.
Source IP Address (32bit) / Destiantion IP Address (32bit)
→ 출발지 IP 주소 / 목적지 IP 주소
▶ IP 주소
- IP 주소는 일반적으로 A 등급부터 C 등급까지(원래는 E까지) 사용되며 첫 번째 자리를 가지고 구분한다.
- 서브넷 마스크 표기에 써있는 IP 주소는 등급에 따라 네트워크 ID와 호스트 ID가 다르다.
- 네트워크 ID : LAN 영역에 대한 고유한 식별자
- 호스트 ID : 해당 LAN 영역에 속한 호스트에 대한 공유한 식별자
- 호스트 ID에서 모든 비트가 0인 경우를 네트워크 주소라고 하며 모든 비트가 1인 경우를 브로드캐스트 IP 주소라고 한다.
등급 | 범위 | 기본 서브넷 마스크 | 비고 |
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주소를 사용할 수도 있다.
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
ping 192.168.10.255 -b
( 192.168.10.1부터 254까지에 이르는 모든 호스트에세 ICMP를 요청하겠다는 의미 )
▶ ICMP (Internet Control Message Protocol)
- 화면 출력 메시지에 기반해 오류 통보 기능과 질의 응답 기능 등을 수행하기 위한 프로토콜이다
- 오류 통보 : 전송 중 일어날 수 있는 목적지 도달 불가나 발신지 억제 또는 시간 초과나 매개 변소의 문제 등을 사용자 화면에 출력하기 위한 기능
- 질의 응답
- 목적지 호스트가 출발지 호스트를 직접 확인할 수 없는 경우 임의의 쓰레기 값으로 이루어진 데이터를 생성한 ping 명령어로 전송한다. 만약 목적지 호스트가 동작 중이라면 응답이 온다.
- 사용자가 목적지 호스트로 ICMP 질의를 요청하면 네트워크 계층에 기반하여 쓰레기 값으로 채워진 페이로드를 생성한다.
구분 | 상위 계층과의 연속성 | 페이로드 생성 계층 | 전송 단위 |
IP | 있음 | 응용 계층 | 패킷 |
ICMP | 없음 | 네트워크 계층 | 패킷 |
Type
→ 해당 ICMP가 요청인지 응답인지 구분하기 위한 정보가 담긴다.
→ 요청은 8을 응답은 0을 담는다.
▷ICMP 페이로드에 ICMP 헤더를 추가해 ICMP 패킷을 생성해 그 앞에 IP 헤더를 붙인다.
(IP 헤더가 있어야 라우팅이 가능하기 때문)
▷ICMP 패킷은 네트워크 계층에서 시작해 데이터 링크 계층과 물리 계층으로 넘어간다.
* 다음을 통해 IP와 ICMP차이점을 확인할 수 있다.
TCP/UDP 페이로드 | TCP/UDP 헤더 | IP 헤더 |
ICMP 페이로드 | ICMP 헤더 | IP 헤더 |
▷ping / tracert
- ICMP 방식에 기반해 구현한 명령어
- ping : 출발지와 목적지 사이의 통신 여부를 점검하기 위한 용도
- tracert : 출발지와 목적지 사이의 라우팅 과정을 확인하기 위한 용도
( ping 명령어의 TTL 속성을 이용하여 구현 )
* 외부에 라우터 또는 장비 ip를 노출하기 싫어서 장비를 막아 놓았을 때는 '요청 시간이 만료되었습니다.'라는 메시지가 나온다고 한다.
- 이를 통해 구글 DNS 서버까지 몇 개의 LAN 영역을 통과했는지 알 수 있으며 오른쪽의 IP 주소는 라우터 IP 주소에 해당하고 첫 번째로 찍히 IP 주소는 나의 로컬 라우터 IP 주소이다.
< 참고 자료 >
우분투 리눅스 기반의 IDS/IPS 설치와 운영 - 오동진 추다영 ,저
'네트워크 > 우분투 리눅스 기반의 IDS,IPS 설치와 운영' 카테고리의 다른 글
네트워크 계층 기반의 주요 공격 유형 (0) | 2021.05.07 |
---|