인터넷 프로토콜
- TCP/IP 프로토콜이 사용하는 전송 메커니즘
- 신뢰성이 없고 최선의 노력 전달 서비스 제공
- 데이터그램을 사용하는 패킷 교환망을 위한 비연결형 프로토콜
데이터그램
IPv4 데이터그램
- IP 계층의 패킷
- 가변 길이 패킷, 헤더와 데이터 부분으로 구성
- 헤더: 20바이트 ~ 60바이트
- 기본 헤더가 20바이트, 옵션 헤더가 0~40바이트로 가변적
- 라우팅(경로 지정)과 전달에 필요한 정보 포함
- 헤더를 4바이트(32비트) 단위로 표시
헤더 내의 필드
버전(VER)
- 4비트
- IP 프로토콜의 버전
헤더 길이(HLEN)
- 4비트
- 데이터그램 헤더의 전체 길이 4바이트 단위로 표시
- 5(=45=20bytes)에서 15(=415=60bytes)까지 표현
서비스 유형(TOS)
- 8비트
- 데이터그램 처리 방식 정의
- 일부는 데이터그램 우선순위, 나머지는 서비스 유형 정의
- 처음 6비트는 코드포인트 부필드
- 과거에는 마지막 2비트 사용 X
- 현재는 DSCP가 삽입되어 마지막 2비트에 ECN
- IPv6에서는 Traffic Class 라는 이름으로 정의
- 오른쪽 세 비트가 0일 경우 왼쪽 세 비트는 우선순위
- 혼잡과 같은 문제가 발생했을 경우 데이터그램의 우선순위 정의
- 혼잡이 발생해 폐기해야 하는 경우 가장 낮은 우선순위 값을 가진 데이터그램을 우선적으로 폐기
- (변경 전) 오른쪽 세 비트가 0이 아닐 경우(6비트: bit0~bit5)
- bit 3: delay(지연) → 0: 보통의 지연, 1: 높은 지연
- bit 4: throughput(처리율) → 0: 보통 처리율, 1: 높은 처리율
- bit 5: reliability(신뢰성) → 0: 보통 신뢰성, 1: 높은 신뢰성
- (변경 후) 인터넷 당국이나 지역 당국에 의해 부여된 우선순위에 따라 56가지의 서비스 정의
- xxxxx0: 표준 목적, 24가지 (인터넷 당국 지정)
- xxxx11: 실험용/로컬, 16가지 (지역 당국 지정)
- xxxx01: 실험용/예약, 16가지
- ECN(명시적 혼잡 알림)필드
- 00: 패킷이 ECN 기능 사용하지 X
- 01 또는 10: 발신 측에서 종단점이 ECN 기능을 수용함
- 11: 라우터가 혼잡이 발생했음을 알리기
- 새로운 정의에서는 사용되지 X ← 이게 무슨 뜻인지..??
전체 길이(Total Length)
- 16비트
- 헤더와 데이터를 포함하는 전체 길이를 바이트 단위로 표시 (65535 바이트로 제한)
- 상위 계층으로부터 받은 데이터 길이 = 전체 길이 - 헤더 길이
- 헤더의 길이= HLEN 필드 값 * 4
- 실제 데이터 영역의 크기 확인이 요구되는 경우 필요
식별(identification)
- 16비트
- 단편화
플래그(flags)
- 3비트
- 단편화
단편화 옵셋(fragmentation offset)
- 13비트
- 단편화
식별, 플래그, 단편화 옵셋은 뒤에 나오는 단편화 파트에서 조금 더 자세히 다룰 것
수명(time to live)
- 8비트
- 데이터그램은 전달되는 동안 제한된 수명을 가짐 (폐기되기 전 지나갈 수 있는 홉의 개수 지정)
- 타임스탬프 기능 수행을 위해 설계
- 필드의 값이 0이 되면 데이터그램 폐기 (방문되는 라우터에 의해 감소)
- 라우팅 테이블이 잘못된 경우를 위해 필요 (잘못된 상황으로 인해 네트워크가 혼잡해질 수 있는 상황 관리)
- 라우팅 정보 오류로 데이터그램이 네트워크에 머무를 수 있음
- 패킷의 전달 범위 제한
- 1로 제한하는 경우 지역 네트워크 내에서만 사용 가능
프로토콜(protocol)
- 8비트
- 상위 계층 프로토콜 정의
- 여러 종류 상위 계층 프로토콜 캡슐화 O
- TCP/UDP: 전송 계층
- ICMP/IGMP: 네트워크 계층
- 같은 네트워크 계층이지만 IP 프로토콜의 전달 서비스를 이용하므로 상위 계층이라고 할 수 있음
- ICMP/IGMP/OSPF는 IP의 상위 프로토콜(같은 계층이지만)
- 프로토콜의 헤더가 IP 패킷의 데이터에 해당
- 1 → ICMP, 2 → IGMP, 6 → TCP, 17 → UDP, 89 → OSPF
검사합(checksum)
- 16비트
- 오류 확인을 위한 검사합
발신지 주소(source address)
- 32비트
- 발신지의 IP 주소
목적지 주소(destination address)
- 32비트
- 목적지의 IP 주소
예제
처음 8비트가 다음과 같은 IP 패킷이 도착 (01000010)
수신자가 이 패킷을 폐기하는 이유를 설명하기
답(풀이)
오른쪽의 4비트가 HLEN에 해당하는 부분인데 이는 2 * 4 = 8바이트로 헤더의 최소 바이트 수인 20에 미치지 못함
예제
HLEN의 값이 2진수로 1000. 이 패킷에 옵션이 몇 바이트 있는지?
답(풀이)
HLEN의 값은 8이고 이는 헤더 내 총 바이트 수가 32바이트임을 의미
주 헤더가 20바이트이므로 옵션은 12바이트가 있음
IPv6 데이터그램
- 기본 헤더 40바이트, 페이로드(최대 65535 바이트)로 구성
- 페이로드: 선택적인 확장 헤더 + 상위 계층에서 온 데이터
버전
- 4비트
- IP의 버전 정의
트래픽 클래스(traffic class)
- 8비트
- 페이로드 구분하는 데 쓰임
- IPv4의 서비스 클래스(TOS) 필드를 대신함
흐름 레이블(flow label)
- 20비트
- 패킷들의 흐름에 대한 특성
- 기본적으로 0, 실시간 데이터의 트래픽을 나타내기 위해 0이 아닌 값으로 설정
- IPv6에서 연결형 서비스를 제공하기 위해 사용
- IPv4에서는 MPLS라는 별도의 헤더를 통해 연결형 서비스 제공
페이로드 길이
- 16비트
- 기본 헤더를 제외한 IP 데이터그램의 전체 길이를 정의
다음 헤더
- 8비트
- 데이터그램에서 기본 헤더 다음의 헤더를 정의
- IP에 의해 이용되는 선택적인 확장 헤더 또는 상위 계층 프로토콜을 위한 헤더
- 기본 고정 헤더 뒤 선택적인 확장 헤더가 뒤따라올 수 O
- 기본헤더만 라우터에서 처리, 확장 헤더는 종류에 따라 처리 방식 다름
- 헤더 확장 방법
- 옵션 헤더가 없을 경우 바로 이어서 페이로드 영역에 헤더와 데이터가 옴
- 옵션 헤더가 있을 경우 그에 맞는 옵션을 추가하기(여러번 추가할 수도 있음)
- 기본헤더 이후의 확장 헤더들은 모두 페이로드 영역에 들어감
홉 제한
- 8비트
- IPv4의 TTL 필드와 같은 목적
발신지 주소
- 16바이트(128비트)
- 데이터그램의 원래 발신지 주소 식별
목적지 주소
- 16바이트(128비트)
- 최종 목적지
- 발신지 라우팅 사용되면 이 필드는 다음 라우터 주소 기재
흐름 레이블
- IPv4: MPLS라는 별도의 헤더(필드)를 사용해 IPv4 패킷 캡슐화
- IPv6: 흐름 레이블이 데이터그램 형식에 추가되어 연결형 서비스를 디폴트로 포함시켜 데이터그램 설계
cf. 흐름 레이블은 발신지 호스트에 의해 패킷에 할당됨
호스트가 흐름 레이블을 제공하지 않으면 이 필드를 0으로 설정
동일 흐름에 속하는 모든 패킷은 동일한 조건에서 처리
IPv4와 IPv6 헤더 비교
- IPv6에서 헤더의 길이는 고정됨 → 헤더 길이 필드 X
- IPv6에서 서비스 유형 필드(TOS) 없음
- 트래픽 클래스와 흐름 레이블 필드가 기능을 대신함
- IPv6에 총 길이 필드 X, 페이로드 길이 필드로 대체
- 식별, 플래그, 단편화 옵셋 필드가 IPv6 기본 헤더에 X, 단편화 확장 헤더에 포함
- IPv4에서의 TTL필드 → IPv6에서의 홉 제한
- 프로토콜 필드(IPv4) → 다음 헤더 필드(IPv6)
- 헤더 검사합은 상위 계층 프로토콜에서 제공되므로 IPv6에서는 필요X
- IPv4의 옵션 필드(헤더 영역) → IPv6의 확장 헤더(페이로드 영역)
단편화
데이터그램의 크기를 MTU 이하로 작게 나누어 전송
최대 전달 단위(MTU)
- 데이터그램의 크기는 MTU보다 작아야 함
- 네트워크 프로토콜마다 값이 다름
식별자
- 16비트
- 동일한 데이터그램의 식별을 위한 값(같은 데이터그램인지 확인)
- 식별자 유일성 보장 → 카운터 사용 (1씩 증가)
- 목적지에서 데이터그램을 재조립시 사용
플래그
- 3비트
- 첫 비트 사용 X
- 2번째 비트: do not fragment → 1인 경우 단편화 금지
- 1인 경우 단편화가 필요하면 데이터그램 폐기하고 ICMP 메시지를 발신지 호스트로 전송해 오류 상황 전달
- 3번째 비트: more fragment → 1인 경우 마지막 단편이 아니라는 뜻
단편화 옵셋
- 13비트
- 전체 데이터그램 내에서 단편의 상대적 위치
- 원래의 데이터그램 내에서 데이터의 옵셋을 8바이트 단위로 나타냄
옵션
특징
- 고정된 기본 헤더 부분(20바이트)과 가변인 옵션 부분(0~40바이트)으로 나뉨
- 최대 길이는 40바이트, 32비트(4바이트)의 배수가 되도록 패딩됨
- 네트워크를 시험하거나 디버그하기 위해 사용
형식
- 유형 필드, 길이 필드, 가변 길이의 값 필드로 구성
- TLV라고 함 (Type-Length-Value)
유형(Type)
- 복사
- 1비트
- 단편화에 옵션을 포함시킬 것인지 제어
- 0: 첫번째 단편에만 복사
- 1: 모든 단편에 복사
- 클래스
- 2비트
- 옵션의 목적 정의
- 첫 번째 비트만 의미를 가짐
- 00: 데이터그램의 제어에 사용
- 10: 디버그나 관리 목적
- 01, 11: 정의 X
- 번호
- 5비트
- 옵션의 유형 정의
- 32개의 유형 정의할 수 있지만 현재 6개의 유형만 정의
길이(Length)
- 코드 필드와 길이 필드를 포함한 옵션의 전체 길이 정의
- 모든 옵션 유형에 있지 X
값(Value)
- 특별한 옵션이 필요로 하는 데이터 포함
- 모든 옵션 유형에 있지 X
옵션 유형
- 6개의 값만 실제로 사용
- 2개: 1바이트 옵션, 길이나 데이터 필드 필요 X
- 4개: 다중 바이트 옵션, 길이와 데이터 필드 필요
1바이트 옵션 유형
- No Operation
- 옵션들 사이의 여백을 채워줌
- 송신측이 필드를 4바이트의 배수가 되도록 채우기 위함
- 옵션들 사이의 여백을 채워줌
- End of Option
- 옵션의 필드 끝에 패딩할 목적으로 사용
- 마지막 옵션으로만 사용 가능
- 오직 하나의 옵션 종료만 사용 가능
- 옵션 필드의 경계를 맞추기 위해 1바이트 이상 필요하면 No Operation 사용 후 마지막에 End of Option 사용
- 옵션의 필드 끝에 패딩할 목적으로 사용
다중 바이트 옵션 유형
- Record Route 옵션
- 데이터그램을 처리한 인터넷 라우터들을 기록
- 40바이트에 최대 9개의 IP 주소 기록 가능
- 발신지는 공간을 미리 준비(방문되는 라우터에 채워질 수 있는 공간)
- 유형과 길이 필드: 앞의 형식과 동일
- 포인터 필드: 사용 가능한 첫 번째 빈 엔트리의 위치 정보 포함
- 데이터그램을 가지고 있는 라우터는 포인터 필드의 값과 길이 필드 비교
- 포인터 값 초기에 4로 설정
- 비교 결과에 따라 자신의 IP 주소를 빈 필드에 넣음
- 포인터 필드의 값이 길이보다 크면 새로운 IP를 추가할 수 X
- IP를 기록할 때 포인터 값 4만큼 증가 (길이는 byte 단위)
- 데이터그램을 처리한 인터넷 라우터들을 기록
- Strict Source Route 옵션
- 경로를 미리 지정
- 비용 면에서 장점
- 대부분 사용자는 결과적으로 이 옵션 사용할 수 X (인터넷의 물리적인 접속형태를 모르므로)
- 송신자가 모든 IP 주소 지정한 점 제외 Record Route 옵션과 유사
- 라우터는 포인터의 값과 길이 값 비교
- 포인터 값 < 길이 값 → 라우터는 포인터가 가리키고 있는 IP 주소와 데이터그램이 들어온 IP 주소 비교
- 포인터 값 > 길이 값: 지정된 라우터 모두 방문했음
- 더 이상 이동 X, 데이터그램 폐기 & 오류 메시지 발송
- IP주소가 같다면 데이터그램 처리, 다르다면 현재 IP 주소를 나가는 IP 주소로 대치, 포인터 4만큼 증가, 데이터그램 계속 전달
- 목적지까지 도착했는데 IP 주소가 다른 경우(지정된 경로와 다르게 도착) 데이터그램 폐기 & 오류 메시지 발송
- Loose Source Route 옵션
- Strict Source Route와 경로 비슷
- 리스트 속의 라우터는 반드시 방문해야 하나 리스트에 없는 라우터 방문도 가능
- Timestamp 옵션
- 라우터가 데이터그램을 처리하는 시간을 기록
- 세계 표준시 자정으로부터의 milisecond 단위 표시
- 하나의 라우터에서 다른 라우터까지 가는데 걸리는 시간 추정 가능
- code 0100100 → copy=1, class=10, number=00100(timestamp)
- overflow 필드: 공간 부족으로 타임스탬프를 기록하지 못한 라우터의 수
- 플래그 필드: 방문된 라우터의 의무
- 0: 타임스탬프만 추가
- 1: 나가는 IP 주소와 타임스탬프 기록
- 3: 주어진 IP 주소와 데이터그램이 들어오는 IP 주소 비교, 같으면 라우터 IP 주소에 자신의 나가는 IP 주소를 덮어쓰고 타임스탬프 추가 (경로가 미리 지정된 경우 더 정확하게 측정)
검사합
대부분의 TCP/IP 프로토콜에 의해 사용되는 오류 검출 방법
패킷의 전달 중에 발생할 수 있는 오류에 대한 보호
송신자에 의해 계산, 패킷과 함께 전송
수신자는 패킷에 대해 동일한 값 계산
결과 만족되면 받아들여짐, 그렇지 않으면 폐기
송신자의 검사합 계산
- 메시지 16비트 워드로 구분
- 검사합 워드의 초기값 0
- 검사합을 포함한 모든 워드를 더한 후 1의 보수 취하기
- 그 최종값이 검사합
- 검사합 + 데이터 함께 송신
수신자의 검사합 계산
- 검사합이 포함된 수신 메시지를 16비트 워드 단위로 구분
- 모든 워드를 더하고 1의 보수 취함
- 그 최종값이 새로운 검사합
- 검사합의 값이 0이면 오류 X (0이 아니면 오류 O)
검사합을 헤더에 대해서만 계산하는 이유
- 헤더는 라우터를 방문할 때마다 변경될 수 있는 부분으로, 무결성 확인 필요
- 데이터가 포함되면 많은 처리 시간 필요 (비용 관점)
'공부 기록 > 네트워크 보안' 카테고리의 다른 글
| [네트워크 보안] IP 패킷 전달과 포워딩 (0) | 2025.11.10 |
|---|---|
| [네트워크 보안] IP 주소 (0) | 2025.11.10 |
| [네트워크 보안] 네트워크층 개요 (0) | 2025.11.09 |
| [네트워크 보안] 프로토콜 (0) | 2025.11.03 |