IP (Internet Protocol) 의 정의
네트워크 계층에서 TCP/IP 프로토콜을 사용하는 전송 매커니즘이다.
IP는 오류 제어 기능이 없어서 비신뢰성 + 연결 과정이 없어서 비연결형 프로토콜이다.
단지 Best Effort로 서비스를 제공할 뿐이다.
IP 패킷의 구조
네트워크 계층의 패킷은 Datagram이라고 불리고, 가변적인 길이를 가지고 있는 2개의 부분으로 이루어져 있다. 라우팅 (경로 설정) 과 전송에 필수적인 정보를 포함하며 20 ~ 60 Bytes의 길이를 가진 Header와 Data로 구성된다.
IP 헤더의 구조
1. VER
IP 프로토콜의 버전을 정의하는 필드이다. 0100이면 IPv4이고 0110이면 IPv6이다.
2. HLEN
헤더의 길이를 나타내는 필드이다. 해당 값에 X4 를 하면 실제 헤더의 길이 값을 구할 수 있다.
3. Service type
IP 서비스 품질 및 우선순위를 지정하는 필드이다.
4. Total length
IP 헤더와 데이터를 포함한 패킷의 전체 길이를 나타내는 필드이다. IP 데이터 그램의 최대 길이는 65,535 (2의 16승 -1) Bytes 이고, 그 중 20 ~ 60 Bytes는 헤더이다. 일부 물리적 네트워크는 65,535Bytes의 데이터 그램을 캡슐화할 수 없으므로 단편화 과정을 거쳐야 한다. 예를 들어, Ethernet 프레임은 캡슐화할 수 있는 데이터의 크기가 최소 46Bytes ~ 최대 1500 Byte 로 제한되어있으므로 해당 조건에 맞게 단편화되거나 데이터의 크기가 46Bytes 미만이라면 요구 조건을 충족시키기 위해 헤더에 Padding을 추가하여야 한다. 역캡슐화 과정에서 Total Length 필드를 확인함으로써 실제 데이터 길이가 얼마이고, Padding이 얼마인지 확인할 수 있다.
각각의 데이터 링크 계층 프로토콜마다 data 필드의 최대 크기가 정의되어 있기 때문에 IP 데이터 그램의 크기가 MTU (Maximum Transfer Unit)를 초과하게 된다면 단편화 과정을 거쳐야 한다. 예를 들어, Ethernet의 경우 1500Bytes, PPP의 경우296Bytes, FDDI의 경우 4352Bytes의 MTU 값을 가지고 있는데 데이터 그램의 크기가 이보다 크다면 해당 크기에 맞게 여러 조각들로 단편화되어 데이터가 전달될 수 있다.
5. Identification
패킷을 단편화하였을 때, 단편화된 패킷을 식별하기 위해 필요한 필드이다. 데이터 그램이 조각화되면 해당 필드의 값이 모든 단편화된 조각으로 복사되어 모든 단편화된 조각 패킷들은 원본 데이터 그램과 같은 Identifacation 값을 가지게 된다. 단편화된 조각을 재조립할 때, Identification 필드 값을 사용한다.
6. Flags
3bits의 필드로 첫번째 비트는 사용되지 않고, 두번째 비트는 Don't fragment, 세번째 비트는 More fragments 로 사용된다.
D 필드의 값이 1로 set 되어있다면 해당 데이터 그램을 더 이상 단편화하지 말라는 의미이다. 만약, D가 1로 set 되어있지만 사용 가능한 물리적 네트워크를 통해 데이터그램을 전달할 수 없다면 해당 패킷을 폐기하고, ICMP 패킷을 통해 오류 메시지를 Source 호스트로 전송한다. 값이 0으로 set 되어있다면 필요한 경우, 단편화를 진행할 수 있다.
M 필드의 값이 1로 set 되어 있다면 해당 패킷 조각이 마지막 조각이 아니고 뒤에 더 많은 조각이 존재한다는 것을 의미한다. 값이 0으로 set 되어있다면 해당 패킷 조각이 마지막임을 의미한다.
7. Fragmentation offset
원본 데이터 그램에 대한 단편화된 패킷 조각의 상대적인 위치를 알려주는 필드이다. 단편 조각의 시작 바이트 번호를 8로 나누면 Fragmentation offset 필드의 값을 구할 수 있다.
아래의 그림은 4000Bytes의 데이터 그램을 3 조각으로 나눈 것이다. 첫번째 조각은 0부터 1399 까지의 바이트를 전달하고, 두번째 조각은 1400부터 2799 까지의 바이트를 전달하며 세번째 조각은 2800부터 3999까지의 바이트를 전달한다. 첫번째 조각 패킷의 Fragmentation offeset은 0000/8이므로 0, 두번째 조각 패킷의 오프셋 값은 1400/8이므로 175, 세번째 조각 패킷의 오프셋 값은 2800/8이므로 350이 된다.
단편화된 조각은 필요에 따라 더 작은 조각으로 단편화될 수 있으며, 이때도 마찬가지로 오프셋을 구할 수 있다. 아래의 그림은 1400 부터 2799 까지의 바이트를 전달하는 두번째 단편 조각을 더 작은 단편 조각 2개로 나누려고 한다. 단편 조각의 첫번째는 1400 부터 2199까지 전달하므로 1400/8인 175의 오프셋 값을 가지고, 두번째는 2200부터 2799까지 전달하므로 2200/8인 275의 오프셋 값을 가진다.
오프셋 값을 확인하면 단편화된 조각이 다른 경로를 통해서 순서대로 도착하지 않더라도 (유실된 패킷 조각이 없다면) 원래 데이터 그램으로 재조립이 가능하다.
8. Time to live
데이터그램은 제한된 수명을 가지고 있으며 목적지를 향해 패킷을 전송할 때, 목적지와 출발지 사이의 최대 경로 개수의 약 2배 정도 되는 값을 해당 필드에 저장한다. 네트워크 상에 위치한 라우터들을 거칠 때마다 TTL 값은 감소하고 TTL 값이 0이 되는 순간 해당 데이터 그램은 폐기된다. 라우팅 테이블이 손상되어 패킷이 목적지로 전달되지 못하고 네트워크 상을 무한히 돌아다니는 것을 방지하기 위하여 TTL 값이 필요하다. 만약 TTL 값을 1로 설정한다면 로컬 네트워크만으로 패킷 전달을 제한할 수 있다. 외부로 나가기 위하여 라우터를 거치는 순간 TTL 값은 0이 되므로 패킷이 폐기되기 때문이다.
9. Protocol
IP 계층의 서비스를 사용하는 상위 수준의 프로토콜을 정의하는 필드이다. TCP, UDP, ICMP 및 IGMP 등의 데이터를 캡슐화할 수 있는데, 데이터 그램이 최종적으로 전달되어야 하는 프로토콜을 지정한다. 필드의 값으로 1은 ICMP, 2은 IGMP, 6 은 TCP, 17은 UDP, 89은 OSPF 프로토콜을 지정할 수 있다.
10. Header Checksum
대부분의 TCP/IP 프로토콜들은 오류 검출 방법으로 체크섬을 사용한다. 하지만, IP 패킷은 데이터가 아닌 헤더만 체크섬을 수행한다.
1) 출발지 Checksum 계산
패킷을 n 비트 (일반적으로 16) 로 섹션을 분류하고 모든 섹션을 1의 보수 연산을 사용하여 더한다. 그 값을 Complement (0을 1로, 1을 0으로 변환) 하여 체크섬을 생성한다.
2) 수신지 Checksum 계산
수신한 패킷을 K개의 섹션으로 나누고 모든 섹션을 더한다. 그리고 그 값을 Complement 한다. 최종 값이 0이라면 패킷을 수신하고, 그렇지 않으면 패킷 수신을 거부한다.
11. Source IP address
32bits의 출발지 IP 주소를 정의하는 필드로, IP 데이터 그램이 출발지에서 목적지로 전송되는 동안 변경되서는 안된다.
12. Destination IP address
32bits의 목적지 IP 주소를 정의하는 필드로, IP 데이터 그램이 출발지에서 목적지로 전송되는 동안 변경되서는 안된다.
13. Options
IP 헤더는 고정적인 길이를 가진 부분 20Bytes와 최대 40Bytes의 가변적인 길이를 가진 Option 부분으로 구분할 수 있다. 옵션은 필수적인 부분이 아닌 네트워크 테스트 및 디버깅에 사용된다. 옵션 필드의 포맷은 1Byte의 Type 필드와 1Byte의 Length 필드, 그리고 가변적인 길이를 가진 필드로 구성된다.
1) Type
옵션의 타입을 정의하는 필드로, 3개의 서브 필드를 가지고 있다.
- Copy 서브 필드
단편화에서의 옵션 사용을 정의하는 필드이다. 0 값이면 첫번째 조각에만 옵션 값을 복사하고 1 값이면 모든 조각에 옵션 값을 복사하라는 의미이다.
- Class 서브 필드
옵션의 용도를 정의하는 필드이다. 00은 데이터 그램 제어, 10은 디버깅 및 관리에 옵션이 사용됨을 의미하고, 01과 11은 정의되지 않았다.
- Number 서브 필드
옵션의 유형을 정의하는 필드이다. 최대 32개의 유형을 정의할 수 있지만 현재는 6가지의 유형만 사용하고 있다.
2) Length
Option 필드의 전체 길이를 나타내는 필드이다. 모든 옵션 타입에 이 필드가 사용되지는 않는다.
3) Value
특정 옵션이 요구하는 데이터를 포함하는 필드이다. Length 필드와 마찬가지로 모든 옵션 타입에 이 필드가 사용되지는 않는다.
IP 헤더의 6가지 Option Type
1. No-Operation 옵션
옵션 필드에 추가되는 1 바이트의 옵션이다. 옵션의 시작부분이나 다음 옵션 시작 전에 추가하여 16비트 및 32비트 경계에서 정렬하기 위해 사용한다.
2. End-of-Option 옵션
옵션 필드 끝에만 추가 가능한 Padding에 사용되는 1 바이트의 옵션이다. 해당 옵션이 종료된 후에 수신자는 페이로드 데이터를 찾는다. 만약, 옵션 필드를 정렬하는데 1 바이트 이상이 필요한 경우 No-Operation 옵션에 End-of-Option을 추가하여 사용해야한다.
3. Record-Route 옵션
데이터그램을 처리하는 라우터를 기록하기 위해 사용되는 옵션이다. 헤더의 최대 크기가 60 바이트이므로 최대 9개의 라우터 IP 주소를 기록할 수 있다. Pointer 필드의 기본 값은 4이며, 데이터그램을 처리하는 라우터는 포인터 값과 길이 값을 비교한다. 포인터 값이 길이 값보다 크면 주소를 기록할 수 있는 옵션 공간이 가득찼다는 의미이므로 옵션 값은 변경되지 않으며, 포인터 값이 길이 값보다 작으면 빈 공간의 라우터의 나가는 쪽 IP 주소를 삽입한다. 그리고 포인터 값을 4만큼 증가 시킨다.
4. Strict-Source-Route 옵션
데이터그램의 이동 경로를 미리 설정하기 위해 출발지에서 사용되는 옵션이다. 옵션에 정의된 모든 라우터를 방문해야 하며, 옵션에 정의되지 않은 라우터는 방문해서는 안된다. 목록에 없는 라우터를 방문하게 된다면 데이터그램이 폐기되며 오류메시지를 발생시킨다. 더불어 데이터그램이 목적지에 도착하더라도 목록의 모든 라우터를 방문하지 않았다면 데이터그램이 폐기되며 오류메시지를 발생시킨다.
Record-Route 옵션과 유사하게 Pointer 값과 Length 값을 비교한다. 포인터 값이 길이 값보다 크면 데이터그램이 미리 정의된 모든 경로를 무사히 방문했다는 의미이고, 더 이상 데이터그램이 이동할 수 없으므로 패킷은 폐기되고 오류메시지를 발생시킨다. 포인터 값이 길이 값보다 작으면 라우터는 데이터그램의 목적지 주소와 패킷이 들어온 라우터의 IP 주소를 비교한다. 비교한 값이 동일하다면 데이터그램을 처리하고 포인터가 가리키는 IP 주소를 목적지 주소와 교환하여 기록한 후에, 포인터 값을 4 증가시킨다. 만약 비교한 값이 동일하지 않다면 데이터그램을 폐기하고 오류메시지를 발생시킨다.
5. Loose-Source-Route 옵션
Strict-Source-Route 옵션과 유사하지만 조금 더 자유로운 옵션이다. 정의된 라우터 목록을 모두 방문해야하지만 목록에 없는 라우터를 방문해도 된다.
6. Timestamp 옵션
라우터에 의해 데이터그램을 처리하는 시간을 기록하는데 사용하는 옵션이다. 시간은 표준 시간의 자정부터 밀리초 단위로 기록된다. 데이터그램이 한 라우터에서 다른 라우터로 이동하는데 걸린 시간을 추정할 수 있어서 라우터의 동작을 추적하는데 도움이 된다.
1) O-Flow 필드
기록할 공간이 가득차서 타임스탬프를 기록할 수 없는 라우터의 개수를 기록한다.
2) Flags 필드
방문한 라우터의 기록 내용을 지정한다. Flags 값이 0이면 타임스탬프만 기록, 1이면 나가는 쪽의 IP 주소와 타임스탬프를 기록, 3이면 IP 주소가 주어지며 각 라우터는 자신의 수신 IP로 주어진 항목을 확인하고 일치한다면 나가는 IP 주소로 덮어쓰고 타임스탬프를 기록한다.
공부하면서 정리한 내용을 글로 작성하였습니다.
혹시나 잘못된 내용이 있다면 댓글로 알려주시면 감사하겠습니다 :)
'Network > Network Theory' 카테고리의 다른 글
[Network / 네트워크] 브로드캐스트 도메인, 충돌 도메인 (0) | 2023.01.04 |
---|---|
[Network / 네트워크] ARP (Address Resolution Protocol) 프로토콜 (0) | 2022.12.30 |
[Network / 네트워크] Interface 운영 모드 (0) | 2022.12.30 |
[Network / 네트워크] Well-Known Port란? (0) | 2022.12.30 |
[Network / 네트워크] Hub, Bridge, Switch, Router (0) | 2022.12.30 |