minhui study

TCP/IP 방식의 계층적 구조 및 네트워크 계층의 헤더 기능 본문

네트워크/우분투 리눅스 기반의 IDS,IPS 설치와 운영

TCP/IP 방식의 계층적 구조 및 네트워크 계층의 헤더 기능

minhui 2021. 3. 31. 10:45

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 헤더의 서비스 종류 필드에 영향을 주지 않는다.

Type-of-Service Flags

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와 비트는 플래그 항목에서 사용하는 두 개의 비트로 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

 

List of IP protocol numbers - Wikipedia

 

en.wikipedia.org

 

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 없음 네트워크 계층 패킷

https://ming9mon.tistory.com/13

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 설치와 운영 - 오동진 추다영 ,저

 

 

 

Comments