인터넷 프로토콜

네트워크층에서 버전 4에는 주 프로토콜 하나와 보조 프로토콜 3개가 있다. 주 프로토콜인 IPv4는 패킷화, 포워딩, 네트워크층에서 패킷 전달을 수행한다. ICMPv4는 IPv4를 도와 네트워크층 전송 중 발생할 수 있는 오류를 제어한다. IGMP(Internet Group Management Protocol)는 IPv4의 멀티캐스트를 도와준다. ARP(Address Resolution Protocol)는 네트워크층 주소와 링크 계층 주소를 매핑시킨다.

여기서는 IPv4와 ICMPv4를 설명한다.

IPv4

  • 최선형 전송 서비스(best-effort delivery service): 패킷이 훼손되거나 손실, 순서에 맞지 않게 도착, 지연되어 도착, 네트워크에 혼잡을 발생시킬 수 있는 것을 의미한다.
  • 비신뢰적이고 비연결형 프로토콜: 데이터그램 방식의 패킷 교환 네트워크에서 각 데이터그램이 독립적으로 전송되어 서로 다른 경로로 전달될 수 있다. 또한 몇몇 패킷은 전송 중 훼손되거나 분실될 수 있다.

이러한 모든 문제는 상위 계층에서 책임지도록 하고 있다.

IPv4 데이터그램 형식

IP가 사용하는 패킷을 데이터그램(datagram)이라 한다. 데이터그램은 가변 길이의 패킷으로 헤더와 페이로드(데이터)로 이루어져 있다. 헤더는 20~60 바이트 길이이며 라우팅과 전송에 필수적인 데이터를 가지고 있다. TCP/IP에서는 헤더를 4바이트로 표현하는 것이 일반적이다.

IP datagram

  • VER : IP 프로토콜 버전
  • HLEN(헤더 길이): 헤더의 전체 길이를 4바이트로 표시. 값에 4를 곱해 헤더의 전체 길이를 알 수 있다. 처음 20바이트는 기본 헤더이고 그 이후는 옵션이다.
  • Service type(TOS - Type of Service): 해당 데이터그램을 어떤 서비스로 처리할 것인지를 명시. 1990년대 말 IETF는 이 필드를 서비스 구분(DiffServ, differentiated services)을 위한 것으로 재정의하였다.
  • Total length(전체 길이): 16비트의 필드는 IP 데이터그램의 전체 바이트 수를 정의한다. 데이터의 길이를 알려면 이 값에서 헤더 길이를 빼면 된다.
  • Identification(식별자), Flags, Fragmentation offset(단편화 오프셋): 데이터그램 크기가 하부 네트워크가 처리할 수 있는 크기보다 클 경우 단편화를 하는데 사용되는 필드이다.
  • Time to live(생존 시간): 데이터그램의 수명. 방문하는 최대 홉 수를 제어하기 위해 사용. → 라우팅 오류 방지
  • Protocol: IP 계층 서비스를 사용하는 상위 계층 프로토콜
  • Header checksum(헤더 검사합): 헤더 오류 확인
  • 발신지 주소(Source address)
  • 목적지 주소(Destination address)

단편화

최대 전송 단위(MTU) - Maximum Transfer Unit

  • 링크 계층 프로토콜에 따라 전송 가능한 프레임 크기가 다르다.
  • 발신자나 경로상의 라우터에서 하위 프로토콜에 따라 MTU가 달라진다.
  • MTU에 따라 지속적으로 단편화 될 수 있다.

단편화 관련 필드

  • 식별자(identification) – 출처가 같은 단편들은 같은 식별자 값을 가진다.
  • 플래그(flag) – 3 비트 필드
    • M 비트 : 1이면 more fragment(추후 단편이 더 존재함), 0이면 last
    • D 비트 : 1이면 단편화 가능한 데이터그램이 아니므로 해당 데이터그램을 폐기하고 ICMP 오류 메시지를 전송
  • 단편화 옵셋(Fragmentation offset) – 13비트 필드
    • 전체 데이터그램에서 단편의 상대적 위치
    • 원 데이타그램 내에서 데이터의 옵셋을 8바이트 단위로 나타냄

옵션

  • IP 헤더는 고정 20B + 가변 최대 40B 로 구성된다.
  • 가변 구간은 다양한 옵션으로 구성되어 있다. - 네트워크 테스팅, 디버깅 등
  • 단일 바이트 옵션과 다중 바이트 옵션으로 나누어진다.

단일 바이트 옵션

2개의 단일 바이트 옵션이 있다.

  • 무연산 옵션(no-operation): 옵션 사이의 여백을 채워준다.
  • 옵션 종료 옵션(end-of-option): 옵션 필드의 끝에서 패딩을 하기 위해 사용되는 1바이트 옵션이다.

다중 바이트 옵션

4개의 다중 바이트 옵션이 있다.

  • 경로 기록(record route) 옵션: 데이터그램을 처리하는 인터넷 라우터를 기록하기 위해 사용된다. 9개의 라우터 주소까지 기록이 가능하다. 이것은 디버깅이나 관리에 사용 가능하다.
  • 엄격한 근원지 경로(strict source route) 옵션:
    • 데이터그램이 거쳐야 할 경로를 미리 지정
    • 데이터그램이 옵션에 정의된 모든 라우터 방문
      • 최소지연을 갖거나 최대처리율을 제공하는 것과 같이 특별한 유형의 서비스 제공이 가능
      • 목록에 없는 라우터에 도착하면 폐기 후 오류 메시지 발생
  • 느슨한 근원지 경로 옵션(Loose-source-route option) 옵션: 엄격한 발신지 경로와 비슷하지만 리스트에 없는 라우터도 방문 가능
  • 타임스탬프 옵션: 라우터가 데이터그램을 처리하는 시간을 기록. 세계 표준시 이용 millisecond 단위 표시. 플래그를 사용해 상세한 설정 가능.

IPv4 데이터그램의 보안

초기에 사용자들은 서로 알고있는 사람들만 사용했다. 그래서 보안성도 없었다. 하지만 요즘은 수많은 모르는 사람들이 사용하고 있고 인터넷은 안전하지 않다. IP 프토토콜에 적용 가능한 세가지 보안 이슈가 있다.

패킷 도청(sniffing)

공격자가 IP 패킷을 가로채어 복사본을 만들 수 있다. 패킷 도청은 간접적인 공격으로 공격자가 패킷의 내용을 변경하지 않는다.

패킷 변조(modify)

공격자가 패킷을 가로채어 내용을 변경한 뒤 수신자에게 새로운 패킷을 전송할 수 있다. 수신자는 원래 송신자가 패킷을 보낸 것으로 알고 있다.

IP 스푸핑(IP spoofing)

공격자가 다른 사용자로 가장하고 IP 패킷에 다른 컴퓨터의 근원지 주소를 입력하여 생성할 수 있다.

ICMPv4

IPv4 프로토콜의 단점

  • 오류 보고와 오류 수정 기능이 없다.
  • 호스트와 관리 질의를 위한 메커니즘이 없다.

이 두가지를 보안하기 위해 인터넷 제어 메세지 프로토콜 버전 4(ICMPv4, Internet Control Message Protocol version 4)가 설계되었다.

메시지

ICMPv4 메시지는 오류 보고(error-reporting) 메시지와 질의(query) 메시지로 나눌 수 있다.

  • 오류 보고 메시지: 라우터(목적지)나 호스트가 IP 패킷을 처리하는 도중 탐지하는 문제를 보고한다.
  • 질의 메시지: 쌍으로 생성되는데 호스트나 네트워크 관리자가 라우터나 다른 호스트로부터 특정 정보를 획득하기 위해 사용한다.

오류 보고 메시지 종류

  • 목적지 도달 불가(destination unreachable)
    • 라우터가 데이터그램을 라우팅할 수 없거나 호스트가 데이터그램을 배달할 수 없을 때 데이터그램은 폐기되고 발신지 호스트에 목적지 도달 불가 메시지 전달
    • 코드를 통해 도달 불가 유형을 설명
  • 근원지 억제 : 혼잡으로인한 데이터그램 폐기를 발신지에 알림
  • 재지정 메시지 : 발신자가 잘못된 라우터를 사용하여 데이터그램을 전송 했을 때 발생되는 메시지
  • 매개변수 문제 : 데이터그램 헤더에 불명확한 점이 있으면 문제가 발생할 수 있다
  • 시간 초과 : 라우팅 테이블에 오류가 있을 시 목적지가 시간내에 모든 단편을 받지 못했으면 수신된 단편을 폐기하고, 발신지로 시간 경과 메시지를 보냄.

질의 메시지

네트워크를 진단하기위해 질의 메시지를 사용할 수 있다.

  • 에코 요청과 응답 : 라우터나 호스트가 통신할 수 있는지 점검
  • 타임스템프 요청과 응답 : 호스트나 라우터를 지나가는데 필요한 왕복시간(round-trip time) 또는 시계 동기화에 사용

왕복시간 계산

타임스탬프 요청과 응답을 이용해 왕복시간을 계산할 수 있다.

  • 원래 타임스탬프(original timestamp) : 출발 시각
  • 수신 타임스탬프(receive timestamp) : 요청이 수신된 시각
  • 전달 타임스탬프(transit timestamp) : 응답 메시지 출발 시각
  • 패킷 도착 시간 : 응답 메시지 수신 시각
  • 송신시간 = 수신 타임스탬프 – 원래 타임스탬프
  • 수신 시간 = 패킷 도착 시간 - 전달 타임스탬프
  • 왕복시간 = 송신시간 + 수신 시간
  • 단위는 milliseconds
김땡땡's blog

김땡땡's blog

김땡땡