IP 주소 지정 메커니즘과 IP 패킷의 delivery 및 forwarding에 대해 논의한 후, 이제 패킷의 형식에 대해 논의한다.
IP 패킷이 어떻게 기본 헤더 및 패킷 전송을 용이하게 하거나 제어하는 데 사용되는 옵션이 만들어 지는지 배운다.
Introduction
IP는 네트워크 계층에서 TCP/IP 프로토콜에 의해 사용되는 전송 메커니즘
IP는 reliable하고 connectionless 데이터그램 프로토콜로, best effort delivery이다.
- IP 패킷이 손상, 손질, 잘못 도착, 지연되면 네트워크에 정체를 줄 수 있다.
위 얘기는 각 데이터그램은 독립적으로 처리되며 각 데이터그램은 목적지까지 다른 경로를 따를 수 있다.
이는 동일한 source에 의해 동일한 destination으로 전송된 데이터그램이 비정상적으로 도착할 수 있음을 의미한다.
또한, 일부는 전송 중에 분실되거나 손상될 수 있다.
IP는 이러한 모든 문제를 처리하기 위해 더 높은 수준의 프로토콜에 의존한다.
Datagrams
네트워크 레이어의 패킷을 datagram 이라고 부른다.
헤더와 데이터로 구성된 가변적 길이 패킷이며,
헤더는 routing과 delivery에 필수적인 정보를 포함한다.
헤더는 보통 20~60바이트이다.
위 그림을 하나하나 알아보자.
VER
- IP protocol을 정의한다. (IPv4인지 v6인지)
HLEN(header length)
- 4bit로 word(4바이트)로 구성된 데이터그램의 헤더의 길이를 나타낸다.
- 헤더는 20~60 바이트로 구성되기 때문에 HLEN의 최솟값은 5이고 최댓 값은 15이다. (HLEN의 값이 5보다 작으면 패킷 오류이다.)
Service Type
서비스의 타입을 나타낸다.
Total length
- 헤더와 데이터부분을 합친 전체 길이다
- 16비트이기 때문에 IP datagram의 길이의 한계는 65536(2^16 - 1)이다.
- 데이터 부분이 너무 크면 fragmentation 될 수 있다.
total length가 헤더를 포함한 데이터그램의 전체 길이를 나타낸다.
total length가 필요한 이유, 추가적 padding을 하는 이유
라우터 또는 호스트가 프레임을 수신하면 헤더와 트레일러가 데이터그램을 떠난다
IP 데이터그램의 크기가 minimum보다 작으면 이 요구 사항을 충족하기 위해 일부 padding이 추가된다.
이 경우, 라우터 또는 호스트가 데이터그램의 캡슐화를 해제할 때, 실제 데이터 양과 패딩 양을 결정하기 위해 total length를 확인해야 한다.
Identification
fragmentation 패킷 id
Flags
fragmentation 인지 아닌지 판단 flag
Fragmentation offset
몇번째 fragmentation인지 알려줌
Time to live (TTL)
네트웤 트래픽때문에 존재
value가 0이면, 라우터는 패킷을 버린다.
소스가 패킷을 로컬 네트워크로 제한하려는 경우 이 필드에 1을 저장할 수 있다.
Routing loop의 영향을 최소화 하는 방법으로 사용
Protocol
IP가 사용하는 상위 레벨의 프로토콜을 알려준다.
- IP 데이터그램이 전송되어야 하는 최종 목적지 프로토콜을 지정
- UDP, TCP, ICMP, IGMP
이 필드의 값에 따라 사용하는 프로토콜이 바뀐다.
Checksum
checksum 표시
TTL로 인해 checksum 한 뒤, 다시 크기를 줄이고 다시 헤더 체크하고 하는 방식으로 라우터의 큰 오버헤드가 됨.
Source IP address
source의 IP 주소
Options
뒤에 설명
Fragmentation
IP packet의 크기가 네트워크가 제공하는 최대사이즈 보다 클 때 패킷을 쪼개서 전송
Fragmentation: source host나 라우터에서 수행
Reassembly: destination에서만 수행
- datagram이 파편화가 되어도 각 조각들은 헤더를 가지고 있다
- flag, 파편 옾셋, total length가 다시 정의된다
- 나머지는 복사됨
- flag, 파편 옾셋, total length가 다시 정의된다
- 조각된 데이터그램들은 더 작은 MTU를 만나면 다시 파편화될 수 있다
- 여러번 조각날 수 있다
- 데이터그램은 source 호스트 또는 경로에 있는 라우터에 의해 조각화될 수 있다
- 각 조각은 독립적인 데이터그램이 되기 때문에 데이터그램의 재조립은 destination 호스트에 의해서만 이루어진다
- 파편화된 데이터그램은 다른 경로를 통해 이동할 수 있다
- 파편화된 데이터그램이 어떤 경로를 취할 수 있는지 제어할 수 없다
- 동일한 데이터그램에 속하는 모든 조각들은 보통 destination 호스트에 도착해야 한다.
- 파편화된 데이터그램이 어떤 경로를 취할 수 있는지 제어할 수 없다
MTU
수용가능한 최대 frame size
데이터의 크기는 MTU보다 작아야한다.
Identification
- 모든 fragments는 같은 identification number를 가진다.
- destination에서 데이터 그램을 재조합할 때 사용된다.
Flags
처음 비트는 사용되지 않음
두번째 비트는 do not fragment bit
- 1로 설정시 파편화가 되지않음
- 0으로 설정시 파편화 가능
세번째 비트는 more fragment bit
- 1로 설정 시 데이터그램은 마지막 파편이 아닌걸 뜻한다.
- 0으로 설정 시 이 조각이 마지막 or 하나의 조각임을 뜻한다.
Fragmentation offset
데이터그램에서 파편의 상대적 위치를 나타낸다.
fragmentation할 때 8byte 단위로 분리해야함.
마지막 조각인 fragment3은 flag에서 more bit이 0으로 설정되어 있다 (마지막 이기 때문)
Options
IP 데이터그램의 헤더는 두 부분으로 구성되어 있다.
- fixed 부분
- variable 부분
fixed 부분은 20바이트 길이
variable 부분은 최대 40바이트의 옵션으로 구성된다.
이름에서 알 수 있듯이 데이터그램에는 옵션이 필요없다
데이터 그램은 네트워크 테스트 및 디버깅에 사용할 수 있다
옵션이 IP 헤더의 필수 부분은 아니지만 IP 소프트웨어의 옵션 처리가 필요하다
즉, 헤더에 옵션이 있는 경우 모든 구현이 해당 옵션을 처리할 수 있어야 한다
Copy
파편화 여부를 확인
- 0 : 옵션을 첫번째 조각에만 복사해야함
- 1 : 옵션을 모든 조각에 복사해야함
Class
옵션의 목적
- 00 : 데이터그램 제어
- 01 : X
- 10 : 디버깅, 관리 용도
- 11 : X
Number
옵션의 타입 정의
Length
type과 자신을 합친 길이
Value
특정 옵션에 필요한 데이터
Option Types
single byte는 1바이트만 사용
multiple byte는 length와 data 필드 사용
No operation Option
- 4의 배수를 맞추기 위해 채우는 옵션
End of Option
- 옵션의 마지막을 알림
- 1바이트는 이 옵션을 위해 사용되어야 한다.
Record Route Option
- 라우터 경로를 기록한다.
- 9개의 라우터 IP 주소를 기록할 수 있디. (20바이트는 기본이고, 40바이트는 option부분에 사용하므로 4 X 9 = 36이기 때문)
Strict Source Route
- 데이터그램의 경로를 미리 결정하는데 사용 (전송을 안정적이고 신뢰성있게 할 수 있음)
- 데이터그램에 라우터 주소가 없으면 방문하지 않는다.
- 데이터그램이 목적지에 도착했는데 다른 조각들이 오지않는다면 오류이다.
- 데이터그램은 미리 정의된 라우터에 들어간다.
- 라우터는 destination IP 주소와 들어오는 데이터그램의 IP 주소를 비교
- 만약 같다면, 데이터그램을 처리하고, 포인터가 가리키는 IP 주소를 목적지 주소와 교환, 포인터 값을 4씩 증가시키고, 데이터그램을 forwarding
- 다르면 에러
Loose Source Option
- Strict와 비슷하지만 좀 더 느슨함
- 방문해야하는 라우터가 있지만 안해도 된다.
Timestamp Option
- 데이터 그램이 라우터에서 프로세싱되는 시간을 기록
Checksum
TCP/IP 프로토콜에서 사용되는 오류 탐지 방법을 checksum이라고 한다.
checksum은 패킷 전송 중에 발생할 수 있는 손상으로부터 보호한다.
checksum은 sender에서 계산되고 얻은 값은 패킷과 함께 전송된다.
receiver는 checksum을 포함한 전체 패킷에 대해 동일한 계산을 반복한다
결과가 만족스러우면 패킷이 수락되고, 그렇지 않으면 거부된다.
체크섬은 데이터가 아닌 헤더를 판단한다.
receiver가 패킷을 받으면 모든 부분을 더한다.
-> 체크섬 결과가 0 이면 정상, 아니면 오류
처음에 체크섬에 0 넣어서 sum을 구함
모두 더해 sum을 구함
checksum이 0이되어야 정
Reference
https://velog.io/@zh025700/%EC%BB%B4%ED%93%A8%ED%84%B0%EB%A7%9D-4-ipv4-protocol
'🖥️ Computer Science > Computer Network' 카테고리의 다른 글
Internet Control Message Protocol Version 4 (ICMPv4) (0) | 2024.10.21 |
---|---|
Address Resolution Protocol (ARP) (0) | 2024.10.17 |
Delivery and forwarding of IP Packets (1) | 2024.10.01 |
IPv4 Address (0) | 2024.09.26 |
Introduction to Network layer (0) | 2024.09.10 |