Computer >> Hướng Dẫn Máy Tính >  >> Kết Nối Mạng >> Kết Nối Mạng

Master IPv4:Hướng dẫn dành cho nhà phát triển về các nguyên tắc cơ bản về giao thức và xử lý gói

Master IPv4:Hướng dẫn dành cho nhà phát triển về các nguyên tắc cơ bản về giao thức và xử lý gói

Giao thức Internet phiên bản 4 (IPv4) là một trong những giao thức cốt lõi của các phương thức kết nối mạng dựa trên tiêu chuẩn trên Internet và các mạng chuyển mạch gói khác. IPv4 vẫn là giao thức Internet được triển khai rộng rãi nhất. Số liệu thống kê về IPv6 của Google cho thấy 44,29% lưu lượng truy cập vào các dịch vụ của Google vào ngày 24 tháng 4 năm 2025 là qua IPv6, tức là 55,71% là qua IPv4.

Cuốn sổ tay này sẽ đưa bạn qua mọi khía cạnh của IPv4, từ hiểu địa chỉ IP đến kiểm tra tiêu đề và phân mảnh gói. Bạn sẽ học:

  • Cách hoạt động của địa chỉ IP và các định dạng khác nhau của chúng

  • Sơ đồ đánh địa chỉ mạng từ độ dài cố định đến CIDR

  • Địa chỉ IPv4 đặc biệt và cách sử dụng chúng

  • Cấu trúc và mục đích của mọi trường trong tiêu đề IPv4

  • Cách IPv4 xử lý sự phân mảnh gói trên các mạng khác nhau

Cho dù bạn là kỹ sư mạng, nhà phát triển phần mềm hay chuyên gia CNTT thì việc hiểu rõ IPv4 là điều vô cùng quan trọng để làm việc với các mạng máy tính hiện đại.

Nội dung chúng tôi sẽ đề cập:

  1. Nền

  2. Hiểu địa chỉ IP

  3. ID mạng và ID máy chủ

  4. Cách xác định phần mạng và phần máy chủ

    • Phương pháp tiếp cận có độ dài cố định

    • Những bất lợi ở đây là gì? 🤔

  5. Địa chỉ phân loại

    • Gán địa chỉ IP

    • Những bất lợi ở đây là gì? 🤔

  6. CIDR:Định tuyến liên miền không phân loại

    • Ví dụ thực tế
  7. Mặt nạ mạng con

  8. Tóm tắt tạm thời – Địa chỉ IPv4

  9. Hãy tự kiểm tra

    • Chuyển đổi giữa ký hiệu tiền tố và mặt nạ mạng con

    • Làm việc ngược lại với mặt nạ mạng con

    • Tiền tố không được căn chỉnh theo byte

    • Xác định tư cách thành viên mạng

  10. Địa chỉ IPv4 đặc biệt

    • Địa chỉ "Máy chủ này":0.0.0.0

    • Địa chỉ "Mạng này"

    • Địa chỉ phát sóng

    • Địa chỉ vòng lặp:127.0.0.0/8

    • Tóm tắt các địa chỉ IPv4 đặc biệt

  11. Tiêu đề IPv4

    • Cấu trúc tiêu đề

    • Tiêu đề IPv4 – Tóm tắt tạm thời

  12. Phân mảnh IPv4

    • Tại sao cần phân mảnh

    • Cách phân mảnh hoạt động trong IP

    • Trường nhận dạng

    • Độ lệch mảnh

    • Thêm mảnh vỡ và cờ không phân mảnh

    • Ví dụ về phân mảnh

    • Phân mảnh IPv4 – Tóm tắt

  13. Tóm tắt – IPv4

    • Địa chỉ và cấu trúc mạng

    • Cấu trúc tiêu đề IPv4

    • Phân mảnh

    • Lời cuối cùng

  14. Giới thiệu về tác giả

  15. Tài liệu tham khảo bổ sung

Ghi chú nhanh trước khi bắt đầu

  1. Bạn có thể tìm thêm nội dung về mạng máy tính trên kênh YouTube của tôi:Danh sách phát Mạng máy tính

  2. Tôi đang viết một cuốn sách về Mạng máy tính! Bạn có muốn đọc các phiên bản đầu tiên và đưa ra phản hồi không? Gửi email cho tôi:gitting.things@gmail.com

Nền

IP là viết tắt của "Giao thức Internet", vì vậy IPv4 là Giao thức Internet phiên bản 4. Nó được IETF mô tả trong RFC 791, xuất bản vào tháng 9 năm 1981 và được triển khai sản xuất lần đầu tiên vào năm 1982 trên SATNET (Mạng vệ tinh gói Đại Tây Dương), là mạng vệ tinh đầu tiên hình thành nên một phân khúc ban đầu của Internet.

IPv4 không có kết nối và hoạt động theo mô hình phân phối nỗ lực tốt nhất. Điều này có nghĩa là nó không đảm bảo việc phân phối, thứ tự chính xác của các gói hoặc tính hợp lệ của dữ liệu. Nó được thiết kế để nhanh chóng và linh hoạt.

Hiểu địa chỉ IP

Địa chỉ IP là địa chỉ logic, có thứ bậc, hỗ trợ hầu hết các kết nối internet hiện nay. Mỗi cái bao gồm 4 byte hoặc 32 bit. Chúng thường được viết bằng ký hiệu thập phân có dấu chấm, ví dụ:

Master IPv4:Hướng dẫn dành cho nhà phát triển về các nguyên tắc cơ bản về giao thức và xử lý gói

Hãy tự kiểm tra – Địa chỉ sau có phải là địa chỉ IP hợp lệ không?

Master IPv4:Hướng dẫn dành cho nhà phát triển về các nguyên tắc cơ bản về giao thức và xử lý gói

Không. Vì các dấu chấm phân tách các byte khác nhau nên mỗi giá trị phải nằm trong khoảng 0255 . Vì số 392 lớn hơn 255 , nó không thể được biểu diễn dưới dạng một byte.

Master IPv4:Hướng dẫn dành cho nhà phát triển về các nguyên tắc cơ bản về giao thức và xử lý gói

ID mạng và ID máy chủ

Địa chỉ IP có hai phần:mã định danh mạng (hoặc ID mạng) thuộc về tất cả máy chủ trong mạng và mã nhận dạng máy chủ (hoặc ID máy chủ) xác định máy chủ cụ thể trong mạng này.

Mã định danh mạng sẽ giống nhau cho tất cả các máy chủ trong mạng và còn được gọi là "tiền tố". Ví dụ:hãy xem xét mã định danh mạng là 201.22.3 . Vì đây là tiền tố mạng nên các địa chỉ sau:

201.22.3.15
201.22.3.91

Là một phần của cùng một mạng vì chúng có chung tiền tố. Địa chỉ đầu tiên thuộc về số máy chủ 15 trong mạng này và mạng thứ hai thuộc về số máy chủ 91 .

Địa chỉ này có tiền tố khác hoặc mã nhận dạng mạng khác và do đó thuộc về một mạng khác:

201.22.14.50

Trong các ví dụ trên, có mã nhận dạng mạng bao gồm 3 byte hoặc 24 bit và mã nhận dạng máy chủ bao gồm 1 byte hoặc 8 bit.

Master IPv4:Hướng dẫn dành cho nhà phát triển về các nguyên tắc cơ bản về giao thức và xử lý gói

Cách xác định phần mạng và phần máy chủ

Một câu hỏi được đặt ra:làm sao bạn biết bit nào là một phần của ID mạng và bit nào là một phần của ID máy chủ? Một số phương pháp đã phát triển theo thời gian để giải quyết thách thức này.

Phương pháp tiếp cận có độ dài cố định

Hãy xem xét giải pháp này:Đối với mỗi địa chỉ IP, byte đầu tiên, có ý nghĩa nhất sẽ đại diện cho ID mạng và ba byte còn lại, có ý nghĩa nhỏ nhất sẽ đại diện cho ID máy chủ. Bằng cách này, việc đọc địa chỉ IP thực sự dễ dàng. Ví dụ cho địa chỉ này:

20.12.1.92

Bạn biết rằng nó mô tả mạng 20 , và máy chủ 12.1.92 bên trong mạng đó. Bất kỳ địa chỉ IP nào không bắt đầu bằng 20 , chẳng hạn như 22.1.2.3 , sẽ nằm trong một mạng khác và bất kỳ địa chỉ IP nào bắt đầu bằng 20 , như 20.1.2.3 , sẽ nằm trong cùng một mạng.

Master IPv4:Hướng dẫn dành cho nhà phát triển về các nguyên tắc cơ bản về giao thức và xử lý gói

Những nhược điểm ở đây là gì? 🤔

Chỉ với một byte (8 bit) để biểu thị ID mạng, bạn chỉ có 2^8 hoặc 256 , các mạng khác nhau. Tất nhiên, có nhiều mạng hơn thế giới thực. Ngay cả trong những ngày đầu của Internet, các trường đại học và các công ty lớn đều cần có mã định danh mạng riêng.

Nói chung, việc sử dụng độ dài cố định cho ID mạng và độ dài cố định cho ID máy chủ là không đủ linh hoạt. Nếu bạn quyết định rằng hai byte quan trọng nhất sẽ đại diện cho ID mạng và hai byte quan trọng nhất sẽ đại diện cho ID máy chủ, bạn có thể biểu thị tối đa 2^16 hoặc 65,536 mạng, điều đó cũng chưa đủ. Hơn nữa, một số mạng, chẳng hạn như mạng của các công ty lớn, có thể yêu cầu nhiều hơn 65,536 ID máy chủ.

Địa chỉ phân loại

Giải pháp nằm ở việc cung cấp một số tính linh hoạt. Hãy xem xét một cách tiếp cận khác gọi là "địa chỉ phân lớp". Theo phương pháp này, số bit dành riêng cho ID mạng thay đổi từ địa chỉ này sang địa chỉ khác và bạn có thể biết ID mạng bằng cách xem byte đầu tiên, quan trọng nhất của địa chỉ.

  • Bất kỳ địa chỉ nào bắt đầu bằng số trong khoảng 1127 Thuộc "Lớp A", nghĩa là ID mạng của nó bao gồm 1 byte, để lại 3 byte cho ID máy chủ.

  • Bất kỳ địa chỉ nào bắt đầu bằng số trong khoảng 128191 thuộc về "Lớp B", có nghĩa là ID mạng của nó dài 2 byte và ID máy chủ của nó cũng dài 2 byte.

  • Bất kỳ địa chỉ nào bắt đầu bằng số trong khoảng 192223 Thuộc "Lớp C" nên nó có 3 byte ID mạng và 1 byte ID máy chủ.

Bạn có thể xem bản trình bày đầy đủ về phương pháp này trong bảng bên dưới:

Phạm vi byte đầu tiênKích thước ID mạngKích thước ID máy chủ A1 - 127 1 byte3 byteB128 - 191 2 byte2 byteC192 - 223 3 byte1 byteD224 - 239 (đa hướng)E240 - 255 (bảo lưu)

Master IPv4:Hướng dẫn dành cho nhà phát triển về các nguyên tắc cơ bản về giao thức và xử lý gói

Ví dụ:địa chỉ này thuộc lớp nào?

(1) 130.12.204.5

Vì nó bắt đầu bằng 130 , nằm trong khoảng 128191 , nó thuộc về "Lớp B". Điều này có nghĩa là ID mạng của nó là 130.12 và ID máy chủ của nó là 204.5 . Hãy đánh dấu nó là "địa chỉ số 1".

Địa chỉ này và địa chỉ sau (2) có thuộc cùng một mạng không?

(2) 130.90.2.40

Không, vì họ có số nhận dạng mạng khác nhau nên họ không nằm trong cùng một mạng.

Địa chỉ sau thuộc về lớp nào?

(3) 200.1.1.9

Nó thuộc lớp C, vì giá trị của byte đầu tiên của nó, 200 , nằm trong khoảng 192223 . Điều này có nghĩa là mã định danh mạng của nó là 200.1.1 và bất kỳ địa chỉ nào bắt đầu bằng tiền tố này sẽ nằm trong cùng một mạng. Địa chỉ cụ thể này mô tả máy chủ 9 trong mạng này.

Để hoàn thành bức tranh, các địa chỉ bắt đầu bằng giá trị trong khoảng 224239 thuộc về "Lớp D" – tức là địa chỉ multicast – địa chỉ thuộc về nhiều thiết bị. Địa chỉ bắt đầu bằng giá trị trong khoảng 240255 đã được dành riêng để sử dụng trong tương lai. Địa chỉ bắt đầu bằng 0 là những địa chỉ đặc biệt.

Gán địa chỉ IP

Trong thời kỳ đầu của Internet, địa chỉ IPv4 được Cơ quan quản lý số cấp phát Internet (IANA) gán cho các tổ chức. Khi internet phát triển, trách nhiệm này được phân bổ cho năm Cơ quan đăng ký Internet khu vực (RIR) xử lý việc phân bổ địa chỉ cho các khu vực địa lý khác nhau. Các tổ chức lớn sẽ nhận được các khối địa chỉ dựa trên nhu cầu của họ, với các lớp địa chỉ xác định kích thước của các khối này.

Những nhược điểm ở đây là gì? 🤔

Mặc dù việc đánh địa chỉ theo lớp cho phép linh hoạt hơn so với phương pháp có độ dài cố định, nhưng ngay cả phương pháp này cũng không đủ linh hoạt.

Hãy xem xét tình huống này:Một công ty khởi nghiệp nhỏ chỉ có hai người sáng lập cần một mã định danh mạng. Họ sẽ cần lớp nào?

Nhận được lớp A hoặc lớp B sẽ là quá mức, vì vậy họ có thể nhận được lớp C – cho phép 256 địa chỉ. Điều này nhiều hơn mức cần thiết hiện tại nhưng cho phép mở rộng một số. Điều gì xảy ra nếu phần khởi động phát triển lên hơn 256 nhân viên (và thiết bị)?

Tại thời điểm này, họ cần lấy địa chỉ lớp B, cung cấp không ít hơn 65,536 địa chỉ, khi tất cả những gì họ cần là hơn 256 một chút địa chỉ. Điều này có nghĩa là lãng phí nhiều hơn 60,000 địa chỉ.

Điều này đã trở thành một vấn đề thực sự vào đầu những năm 1990 khi Internet phát triển nhanh hơn. Nhu cầu về nhiều địa chỉ IP trở nên rõ ràng và không gian địa chỉ IPv4 sắp cạn kiệt. Các trường hợp 60,000 địa chỉ bị lãng phí không thể chấp nhận được nữa.

CIDR:Định tuyến liên miền không phân loại

Một trong những biện pháp để giải quyết tình trạng thiếu địa chỉ này là từ bỏ việc đánh địa chỉ theo lớp vào năm 1993 và chuyển sang một phương pháp khác gọi là CIDR – Định tuyến liên miền không phân lớp. Cách tiếp cận này vẫn được sử dụng cho đến ngày nay.

CIDR cho phép linh hoạt khi chọn ID mạng và ID máy chủ. Nó cho phép quản trị viên mạng tạo các mạng con có kích thước phù hợp một cách chính xác, thay vì bị giới hạn ở các Lớp A, B hoặc C.

Hãy bắt đầu với một ví dụ đơn giản. Trong ký hiệu CIDR, chúng tôi thêm hậu tố cho biết số lượng bit được sử dụng cho phần mạng:

(4) 200.8.3.1/16

Ký hiệu gạch chéo này chỉ định số lượng bit mô tả ID mạng. Trong ví dụ (4) ở trên, 16 đầu tiên bit (hoặc 2 byte) được sử dụng cho ID mạng. Vì vậy, trong trường hợp này, 200.8 là mã định danh mạng và 3.1 là định danh máy chủ. Thực tế là 200.8 là ID mạng có nghĩa là tất cả các địa chỉ từ 200.8.0.0 thông qua 200.8.255.255 đang ở trong mạng này.

Master IPv4:Hướng dẫn dành cho nhà phát triển về các nguyên tắc cơ bản về giao thức và xử lý gói

Hãy xem xét các địa chỉ bổ sung sau:

(5) 200.2.13.5
(6) 200.8.21.6

Với tiền tố địa chỉ này là 16 bit hoặc 2 byte, địa chỉ nào trong số này thuộc cùng một mạng như ví dụ (4) (200.8.3.1/16 )?

Địa chỉ đầu tiên (5) (200.2.13.5 ) không thuộc mạng này, vì 16 đầu tiên của nó bit – 200.2 , khác với 16 đầu tiên bit của địa chỉ ví dụ.

Địa chỉ thứ hai (6) (200.8.21.6 ) thuộc cùng một mạng với địa chỉ ví dụ.

Master IPv4:Hướng dẫn dành cho nhà phát triển về các nguyên tắc cơ bản về giao thức và xử lý gói

Ví dụ thực tế

Trong thực tế, ISP có thể nhận được một khối lớn như 104.16.0.0/12 từ RIR. Điều này cho phép họ kiểm soát tất cả các địa chỉ từ 104.16.0.0 tới 104.31.255.255 . Sau đó, ISP có thể phân bổ các mạng con nhỏ hơn cho khách hàng, chẳng hạn như cấp cho một doanh nghiệp nhỏ một /24 mạng con có 256 địa chỉ hoặc một công ty lớn hơn /20 mạng con có 4,096 địa chỉ.

Mặt nạ mạng con

Một cách khác để thể hiện tiền tố mạng là sử dụng mặt nạ mạng con, như sau:

255.255.0.0

Khi chuyển sang dạng nhị phân, 255 ở dạng thập phân bằng tám 1 s ở dạng nhị phân - vì vậy tất cả các bit đều được bật. Vì vậy, nếu bạn dịch mặt nạ này sang dạng nhị phân, bạn sẽ nhận được:

11111111 11111111 00000000 00000000

Nói cách khác, 16 bit đang bật, nghĩa là tiền tố mạng là 16 bit. Cả hai quy ước (ký hiệu CIDR và mặt nạ mạng con) đều được sử dụng rất thường xuyên.

Master IPv4:Hướng dẫn dành cho nhà phát triển về các nguyên tắc cơ bản về giao thức và xử lý gói

Với CIDR, một địa chỉ có thể nằm trong các mạng khác nhau với các tiền tố mạng hoặc mặt nạ mạng con khác nhau. Nếu bạn xem xét cùng một địa chỉ ví dụ nhưng có tiền tố khác, hãy nói rằng đó là 8 bit – cả hai địa chỉ bổ sung sẽ thuộc về cùng một mạng, vì chúng đều có chung 8 đầu tiên bit – 200 .

Bạn sẽ trình bày tiền tố mạng của 8 như thế nào bit làm mặt nạ mạng con? Bạn cần 8 đầu tiên bit được bật, điều đó có nghĩa là 255 ở dạng thập phân và các bit còn lại bị tắt, dẫn đến mặt nạ mạng con này:

255.0.0.0

Master IPv4:Hướng dẫn dành cho nhà phát triển về các nguyên tắc cơ bản về giao thức và xử lý gói

Điều gì xảy ra nếu bạn sử dụng tiền tố mạng là 24 bit? Đầu tiên, bạn sẽ thể hiện điều đó như một mặt nạ mạng con như thế nào? Bạn cần 24 các bit được bật, tức là gấp 3 lần 8 bit được bật, dẫn đến:

255.255.255.0

Master IPv4:Hướng dẫn dành cho nhà phát triển về các nguyên tắc cơ bản về giao thức và xử lý gói

Bây giờ, cả hai địa chỉ bổ sung đều không nằm trong cùng một mạng với địa chỉ ví dụ vì chúng không chia sẻ ID mạng 200.8.3 .

Master IPv4:Hướng dẫn dành cho nhà phát triển về các nguyên tắc cơ bản về giao thức và xử lý gói

Lưu ý rằng tiền tố mạng không nhất thiết phải thể hiện byte đầy đủ. Ví dụ:bạn có thể sử dụng tiền tố mạng là 12 bit hoặc 11 bit hoặc 22 bit. Khi độ dài tiền tố không phải là bội số của 8 , mặt nạ mạng con sẽ có giá trị khác 0 hoặc 255 ở một trong các vị trí của nó.

Điều này giải quyết vấn đề liên quan đến công ty khởi nghiệp. Nếu một công ty khởi nghiệp có 300 nhân viên, họ cần có 23 -bits ID mạng, để lại 9 bit cho các máy chủ trong mạng của họ. Điều này có nghĩa là 2^9 hoặc 512 địa chỉ, như vậy là đủ.

Tóm tắt tạm thời – Địa chỉ IPv4

Trong phần này, bạn đã tìm hiểu về địa chỉ IPv4. Địa chỉ IP là địa chỉ logic, có thứ bậc bao gồm 4 byte. Địa chỉ IP có hai phần:phần nhận dạng mạng thuộc về tất cả các máy chủ trong mạng và phần nhận dạng máy chủ xác định máy chủ cụ thể trong mạng.

Bạn đã khám phá nhiều tùy chọn khác nhau để xác định mã nhận dạng mạng và mã nhận dạng máy chủ:

  1. Cách tiếp cận có độ dài cố định – quá cứng nhắc và hạn chế

  2. Cách tiếp cận địa chỉ phân lớp – tốt hơn nhưng vẫn lãng phí

  3. CIDR (Định tuyến liên miền không phân loại) – linh hoạt và hiệu quả

CIDR mang lại sự linh hoạt hơn nhiều và giúp khắc phục vấn đề nghiêm trọng về thiếu địa chỉ IPv4. Tuy nhiên, CIDR chỉ là một phần trong việc giải quyết tình trạng thiếu địa chỉ IPv4, cùng với các giải pháp khác bao gồm NAT (Dịch địa chỉ mạng) và cuối cùng là IPv6.

Phần tiếp theo sẽ khám phá các địa chỉ IPv4 đặc biệt và sau đó kiểm tra tiêu đề của gói IPv4.

Tự kiểm tra

Bây giờ hãy thực hành các khái niệm bạn đã học và đảm bảo bạn cảm thấy thoải mái với chúng.

Hãy dành chút thời gian thử trả lời các câu hỏi sau trước khi kiểm tra câu trả lời.

Chuyển đổi giữa ký hiệu tiền tố và mặt nạ mạng con

Bạn sẽ thể hiện tiền tố mạng của 16 như thế nào bit, được viết như thế này /16 , làm mặt nạ mạng con?

Bạn cần 16 các bit đang bật. Khi 8 bạn sẽ nhận được 255 ở dạng thập phân, vì vậy bạn sẽ sử dụng:

255.255.0.0

Master IPv4:Hướng dẫn dành cho nhà phát triển về các nguyên tắc cơ bản về giao thức và xử lý gói

Với tiền tố mạng này, các địa chỉ này có thuộc cùng một mạng không?

Master IPv4:Hướng dẫn dành cho nhà phát triển về các nguyên tắc cơ bản về giao thức và xử lý gói

Có, họ làm vậy vì họ có chung 16 quan trọng nhất bit hoặc hai byte

Master IPv4:Hướng dẫn dành cho nhà phát triển về các nguyên tắc cơ bản về giao thức và xử lý gói

Địa chỉ này có thuộc cùng mạng với địa chỉ trước đó không?

Master IPv4:Hướng dẫn dành cho nhà phát triển về các nguyên tắc cơ bản về giao thức và xử lý gói

Vâng, nó có. Một lần nữa, nó chia sẻ hai byte quan trọng nhất.

Master IPv4:Hướng dẫn dành cho nhà phát triển về các nguyên tắc cơ bản về giao thức và xử lý gói

Còn cái này thì sao? Nó có thuộc cùng mạng với các địa chỉ trước đó không?

Master IPv4:Hướng dẫn dành cho nhà phát triển về các nguyên tắc cơ bản về giao thức và xử lý gói

Không, vì hai byte đầu tiên không phải là 42.31 – đây là một mạng khác. Vậy địa chỉ này mô tả máy chủ 1.2 , trong mạng 42.32 .

Master IPv4:Hướng dẫn dành cho nhà phát triển về các nguyên tắc cơ bản về giao thức và xử lý gói

Làm việc ngược với mặt nạ mạng con

Hãy thử cách khác. Bạn có mặt nạ mạng con này:

255.255.255.0

Bạn sẽ thể hiện nó như thế nào bằng cách sử dụng tiền tố mạng?

Bạn có ba lần xuất hiện 255 , nghĩa là ba lần 8 các bit đang bật, nên tổng thể bạn có 24 các bit đang bật. Vì vậy bạn cũng có thể viết /24 . Điều này có nghĩa là 3 byte.

Master IPv4:Hướng dẫn dành cho nhà phát triển về các nguyên tắc cơ bản về giao thức và xử lý gói

Với mặt nạ mạng con này, các địa chỉ (1) và (3) ở trên có thuộc cùng một mạng không?

Master IPv4:Hướng dẫn dành cho nhà phát triển về các nguyên tắc cơ bản về giao thức và xử lý gói

Đúng như vậy, vì cả hai đều có cùng ba byte quan trọng nhất – mạng 42.31.93 .

Master IPv4:Hướng dẫn dành cho nhà phát triển về các nguyên tắc cơ bản về giao thức và xử lý gói

Còn địa chỉ (1) và (2) thì sao?

Master IPv4:Hướng dẫn dành cho nhà phát triển về các nguyên tắc cơ bản về giao thức và xử lý gói

Với tiền tố mạng này, chúng không thuộc cùng một mạng. Địa chỉ đầu tiên thuộc mạng 42.31.93 , và địa chỉ thứ hai thuộc về mạng 42.31.1 .

Master IPv4:Hướng dẫn dành cho nhà phát triển về các nguyên tắc cơ bản về giao thức và xử lý gói

Tiền tố không được căn chỉnh theo byte

Tiền tố mạng không nhất thiết phải căn chỉnh theo 8 bit hoặc byte đầy đủ. Giả sử bạn có tiền tố mạng là 14 bit. Bạn sẽ chuyển đổi nó thành mặt nạ mạng con như thế nào?

Chà, byte đầu tiên đã rõ:bạn có 8 bật bit nên byte đầu tiên là 255 . Thế còn phần tiếp theo thì sao?

Trong hệ nhị phân, bạn muốn có thêm sáu số 1 và sau đó là 2 số 0 – vì vậy trong hệ nhị phân bạn sẽ viết:

11111100

Chuyển đổi sang số thập phân, số nhị phân này đại diện cho 252 . Vậy mặt nạ mạng con của bạn là:

255.252.0.0

Một cách khác để thực hiện chuyển đổi này:Bạn biết rằng tám số 1 trong hệ nhị phân đại diện cho 255 ở dạng thập phân. Bạn cũng biết rằng 11 ở dạng nhị phân là 3 , vì vậy bạn chỉ cần trừ 3 từ 255 và nhận được 252 .

Master IPv4:Hướng dẫn dành cho nhà phát triển về các nguyên tắc cơ bản về giao thức và xử lý gói

Tiếp theo, hãy thử cách khác. Bạn có mặt nạ mạng con sau:

255.255.224.0

Có bao nhiêu bit đại diện cho tiền tố mạng?

Hai byte đầu tiên rõ ràng:bạn có 16 bit. Chuyển byte thứ ba sang nhị phân:224 ở dạng thập phân là 11100000 ở dạng nhị phân. Điều này có nghĩa là bạn có thêm ba số 1, vì vậy bạn có thể viết mặt nạ mạng con ở trên làm tiền tố của /19 bit – 16 bit cho hai 255 byte và 3 bit bổ sung cho 224 byte.

Master IPv4:Hướng dẫn dành cho nhà phát triển về các nguyên tắc cơ bản về giao thức và xử lý gói

Xác định tư cách thành viên mạng

Hãy xem xét các địa chỉ sau:

Master IPv4:Hướng dẫn dành cho nhà phát triển về các nguyên tắc cơ bản về giao thức và xử lý gói

Họ có phải là một phần của cùng một mạng không? 🤔

Nó phụ thuộc vào mặt nạ mạng con.

Nếu tiền tố mạng là /8 , thì chúng là một phần của cùng một mạng vì chúng có chung ID mạng.

Master IPv4:Hướng dẫn dành cho nhà phát triển về các nguyên tắc cơ bản về giao thức và xử lý gói

Mặt khác, nếu tiền tố mạng là /16 , thì chúng có ID mạng khác nhau và do đó không thuộc cùng một mạng. Nhưng điều gì xảy ra với các tiền tố ở giữa? Liệu họ có cư trú trong cùng một mạng với tiền tố /9 không ? /14 ?

Cách tiếp cận câu hỏi này là chuyển đổi byte thứ hai của các địa chỉ này thành nhị phân. Đối với địa chỉ đầu tiên, byte này là 24 , ở dạng nhị phân là:

00011000

Đối với địa chỉ thứ hai, byte thứ hai là 23 , ở dạng nhị phân là:

00010111

Master IPv4:Hướng dẫn dành cho nhà phát triển về các nguyên tắc cơ bản về giao thức và xử lý gói

Bạn có thể thấy rằng 4 quan trọng nhất các bit trong byte thứ hai giống hệt nhau. Nếu bạn thêm 8 đầu tiên các bit của địa chỉ, bạn sẽ thấy 12 quan trọng nhất bit của các địa chỉ này giống nhau.

Vì vậy, nếu bạn có tiền tố mạng là /11 , những địa chỉ này có thuộc cùng một mạng không?

Có, đúng vậy – 11 quan trọng nhất của họ bit giống hệt nhau.

Còn /13 thì sao ?

Không, với tiền tố mạng này, họ không chia sẻ cùng một mã định danh mạng như 13 của họ bit thứ thì khác.

Cách thực hành này sẽ giúp bạn cảm thấy thoải mái với mặt nạ mạng con và tiền tố mạng. Trong phần tiếp theo, bạn sẽ tìm hiểu về các địa chỉ IP đặc biệt và sau đó kiểm tra tiêu đề của gói IP.

Địa chỉ IPv4 đặc biệt

Bây giờ bạn đã cảm thấy thoải mái với địa chỉ IP và mặt nạ mạng con, hãy khám phá một số địa chỉ IP có ý nghĩa đặc biệt.

Địa chỉ "Máy chủ này":0.0.0.0

Địa chỉ 0.0.0.0 có nghĩa là "máy chủ này" và được sử dụng trong hai trường hợp:

Đầu tiên là khi máy khởi động và chưa có địa chỉ IP. Địa chỉ IP là địa chỉ logic cần được gán cho máy. Trước nhiệm vụ này, một thiết bị không có địa chỉ IP nào cả. Nếu thiết bị cần liên lạc ở giai đoạn này, thiết bị có thể sử dụng địa chỉ đặc biệt này, 0.0.0.0 .

Thứ hai, khi viết các ứng dụng mạng cần lắng nghe các kết nối đến trên tất cả các giao diện mạng. Ví dụ:nếu một máy có hai giao diện – một giao diện có địa chỉ IP 1.1.1.1 và một địa chỉ khác có địa chỉ 2.2.2.2 – nghe ở địa chỉ 0.0.0.0 có nghĩa là chấp nhận kết nối bất kể giao diện mạng nào nhận chúng.

Địa chỉ "Mạng này"

Một loại địa chỉ đặc biệt khác là những địa chỉ bắt đầu bằng số 0, trong đó số 0 có nghĩa là "mạng này".

Ví dụ:nếu bạn có một máy có địa chỉ:

12.34.55.55

Và tiền tố mạng là 16 bit, máy này có thể gửi gói đến một thiết bị khác trên mạng bằng địa chỉ đầy đủ của nó, ví dụ 12.34.66.66 , hoặc sử dụng ký hiệu số 0 đặc biệt và gửi gói tới:

0.0.66.66

Điều này có nghĩa là "gửi gói đến máy chủ 66.66 trên mạng này." Tất nhiên, người nhận cũng phải biết tiền tố mạng liên quan để diễn giải chính xác địa chỉ này.

Địa chỉ phát sóng

Địa chỉ 255.255.255.255 , trong đó tất cả các bit được đặt thành 1 , là địa chỉ của tất cả các máy chủ trong mạng cục bộ – địa chỉ quảng bá. Điều này tương tự như địa chỉ quảng bá trong Ethernet (FF:FF:FF:FF:FF:FF ). Trong cả hai trường hợp, tất cả các bit đều được đặt thành 1 .

Có thể sử dụng mã định danh mạng thích hợp trong đó mã định danh máy chủ được đặt thành 1 để gửi gói quảng bá đến các mạng từ xa. Ví dụ:hãy xem xét mạng 12.34.0.0/16 và một mạng khác có ID mạng là 12.35.0.0/16 . Nếu máy ở 12.34.55.55 muốn gửi một gói đến tất cả các thiết bị trong mạng khác, nó có thể sử dụng địa chỉ đích:12.35.255.255 .

Mặc dù điều này được cho phép theo đặc tả IP (RFC), nhưng trên thực tế, tính năng này thường bị tắt vì nó có thể tạo ra các lỗ hổng bảo mật.

Địa chỉ vòng lặp:127.0.0.0/8

Tất cả các địa chỉ trong mạng 127.0.0.0/8 (nghĩa là tất cả các địa chỉ bắt đầu bằng 127 ) là các địa chỉ loopback. Các gói được gửi đến bất kỳ địa chỉ nào trong số này không được đưa vào mạng vật lý mà được xử lý cục bộ trong hệ điều hành. Điều này cực kỳ hữu ích cho việc phát triển và gỡ lỗi.

Ví dụ:khi phát triển một chương trình trò chuyện đơn giản, bạn cần hai máy khách trao đổi dữ liệu. Một cách tiếp cận là sử dụng hai máy tính vật lý khác nhau, nhưng điều này thật tẻ nhạt – bạn cần viết tin nhắn trên một máy tính, kiểm tra máy tính kia xem nó đã được nhận chưa, sau đó viết tin nhắn trên máy tính thứ hai và quay lại máy tính đầu tiên để xác thực biên nhận.

Một cách tiếp cận đơn giản hơn nhiều là sử dụng địa chỉ loopback. Cả hai máy khách đều có thể chạy trên cùng một máy và kết nối với nhau. Bạn có thể chạy hai chương trình máy khách khác nhau trên cùng một máy tính vật lý và trao đổi tin nhắn giữa chúng mà không cần thêm máy.

Ví dụ:bạn có thể sử dụng địa chỉ 127.0.0.1 , với một khách hàng đang nghe trên cổng 1337 và cái còn lại trên cổng 1338 . Khi máy khách A gửi một gói đến máy khách B, gói này không bao giờ rời khỏi card mạng của bạn mà vẫn nằm trong hệ điều hành. Máy khách B nhận gói từ giao diện loopback như thể nó được nhận từ mạng vật lý.

Sau khi gỡ lỗi hoàn tất, mã máy khách của bạn không cần thay đổi – điểm khác biệt duy nhất là chúng sẽ liên lạc bằng địa chỉ IP thực thay vì địa chỉ loopback.

Master IPv4:Hướng dẫn dành cho nhà phát triển về các nguyên tắc cơ bản về giao thức và xử lý gói

Tóm tắt các địa chỉ IPv4 đặc biệt

Để tóm tắt các địa chỉ IPv4 đặc biệt mà bạn đã tìm hiểu:

Địa chỉ đặc biệtÝ nghĩaCách sử dụng 0.0.0.0 "Máy chủ này"Được sử dụng trong khi khởi động hoặc để nghe trên tất cả các giao diệnĐịa chỉ bắt đầu bằng 0 "Mạng này"Gửi tới máy chủ trên mạng cục bộ255.255.255.255 Phát sóngGửi tới tất cả các máy chủ trên mạng cục bộID mạng có tất cả số 1 trong phần máy chủPhát sóng trực tiếpGửi tới tất cả các máy chủ trên một mạng cụ thể127.0.0.0/8 LoopbackThử nghiệm và gỡ lỗi mà không cần sử dụng mạng vật lý

Trong phần tiếp theo, bạn sẽ tìm hiểu về cấu trúc của tiêu đề IPv4.

Bây giờ bạn đã hiểu địa chỉ IP, mạng con và địa chỉ đặc biệt, đã đến lúc kiểm tra chi tiết cấu trúc tiêu đề IPv4.

Master IPv4:Hướng dẫn dành cho nhà phát triển về các nguyên tắc cơ bản về giao thức và xử lý gói

Sơ đồ trên hiển thị tiêu đề của IPv4 như được định nghĩa trong RFC 791. Hãy kiểm tra từng trường:

Phiên bản (4 bit)

Master IPv4:Hướng dẫn dành cho nhà phát triển về các nguyên tắc cơ bản về giao thức và xử lý gói

Tiêu đề bắt đầu bằng trường Phiên bản, bao gồm bốn bit. Đối với gói IPv4, phiên bản là 4 , vì vậy trường này sẽ luôn mang giá trị 4 (hoặc 0100 ở dạng nhị phân).

❓ Tại sao tiêu đề bắt đầu bằng trường Phiên bản? 🤔

(Lưu ý – khi tôi bắt đầu một câu bằng ❓dấu – đó là một câu hỏi dành cho bạn và tôi khuyến khích bạn thử trả lời câu hỏi đó trước khi đọc tiếp).

Nguyên nhân là do các trường còn lại có thể khác nhau tùy theo phiên bản. Nếu thiết bị mạng đọc gói IP và trường phiên bản mang giá trị 4 , nó sẽ mong đợi phần còn lại của gói sẽ tuân theo cấu trúc IPv4. Nếu nó mang giá trị khác, chẳng hạn như 6 , các trường còn lại sẽ khác, như trong IPv6.

Master IPv4:Hướng dẫn dành cho nhà phát triển về các nguyên tắc cơ bản về giao thức và xử lý gói

Trường này cho biết độ dài của tiêu đề.

❓ Tại sao cần xác định độ dài? 🤔

Không giống như Ethernet, nơi kích thước tiêu đề được cố định, độ dài tiêu đề IPv4 có thể thay đổi do các trường tùy chọn. Đối với gói IP không có tùy chọn đặc biệt, tiêu đề bao gồm 20 byte, đây là trường hợp phổ biến nhất.

Trường IHL không chỉ định trực tiếp độ dài tính bằng byte mà theo đơn vị từ 4 byte. Vì vậy, để chỉ định độ dài 20 byte, giá trị sẽ là 5 (5 × 4 =20). Mã hóa này cho phép trường chỉ sử dụng 4 bit trong khi chỉ định độ dài tiêu đề lên tới 60 byte (khi IHL =15 ).

Do đó, gói IPv4 phổ biến bắt đầu bằng byte 0x45 ở dạng thập lục phân, nghĩa là phiên bản 4 của giao thức IP và tiêu đề là 20 dài byte.

Loại dịch vụ (TOS) (8 bit)

Master IPv4:Hướng dẫn dành cho nhà phát triển về các nguyên tắc cơ bản về giao thức và xử lý gói

Ý tưởng đằng sau trường này là không phải tất cả các gói đều quan trọng như nhau. Bạn có thể muốn ưu tiên một số gói hơn những gói khác.

Ví dụ:các gói mang dữ liệu thời gian thực (như hội nghị thoại hoặc video) nhạy cảm hơn về mặt thời gian so với các gói mang dữ liệu tải xuống email hoặc tệp. Nếu bộ định tuyến hiện đang chịu tải cao thì lý tưởng nhất là bộ định tuyến nên ưu tiên các gói nhạy cảm với thời gian.

Trường Loại dịch vụ cho phép người gửi chỉ ra mức độ ưu tiên của gói tin của họ. Tuy nhiên, trên mạng internet công cộng, trường này thường bị các bộ định tuyến bỏ qua vì bất kỳ người gửi nào cũng có thể đặt bất kỳ giá trị ưu tiên nào. In most cases, this field carries the value of 0 .

Total Length (16 bits)

Master IPv4:Hướng dẫn dành cho nhà phát triển về các nguyên tắc cơ bản về giao thức và xử lý gói

This field specifies the total length of the IP packet, including both the header and the payload (data).

❓ Why is this needed to specify the length? 🤔

Unfortunately, the IP layer doesn’t necessarily know if some of the bytes in the packet are actually a padding of the second layer. I described this in detail in a previous post, where I showed that in Ethernet protocol, in some cases, the receiving Ethernet entity cannot tell which bytes belong to the payload and which bytes are simply padding. The IP layer needs to know precisely which bytes belong to the actual packet, hence the Total Length field.

❓What is the maximum size of an IPv4 packet? 🤔

Since this field is 16 bits long, an IPv4 packet may contain a maximum of 2^16-1 bytes, or 65,535 bytes, including the header. The minimum size is 20 bytes, consisting of just the header without options or payload.

Fragmentation Fields (32 bits)

Master IPv4:Hướng dẫn dành cho nhà phát triển về các nguyên tắc cơ bản về giao thức và xử lý gói

The next four bytes are dedicated to fragmentation control. I’ll cover these fields in a separate section, as they involve a complex topic deserving special attention.

Time to Live (8 bits)

Master IPv4:Hướng dẫn dành cho nhà phát triển về các nguyên tắc cơ bản về giao thức và xử lý gói

Despite its name, this field doesn't actually measure time but rather the maximum number of routing hops a packet can traverse before being discarded.

To understand its purpose, consider this scenario:If Machine A sends a packet to Machine B through a series of routers, but there's a routing loop where Router 2 sends to Router 3, which sends to Router 4, which sends back to Router 2, the packet could circulate indefinitely, consuming bandwidth and never reaching its destination.

Master IPv4:Hướng dẫn dành cho nhà phát triển về các nguyên tắc cơ bản về giao thức và xử lý gói

The TTL field prevents this by setting a limit on how many hops a packet can take:

  1. The sender sets an initial TTL value (often 64 or 128 )

  2. Each router that handles the packet decrements the TTL by 1

  3. If a router receives a packet with TTL =1 , it decrements it to 0 and discards the packet

  4. The router then sends an ICMP "Time Exceeded" message back to the original sender

This doesn't solve the underlying problem of routing loops, but it prevents packets from circulating forever.

In IPv6, this field is renamed "Hop Limit," which more accurately describes its function.

Protocol (8 bits)

Master IPv4:Hướng dẫn dành cho nhà phát triển về các nguyên tắc cơ bản về giao thức và xử lý gói

This field describes the payload of the IPv4 packet. Ví dụ:

  • A value of 6 means the payload is TCP

  • A value of 17 means the payload is UDP

This helps the receiving system know which protocol handler should process the packet's contents. It's similar to the Type field in Ethernet, which specifies the protocol of the layer encapsulated within the Ethernet frame.

Master IPv4:Hướng dẫn dành cho nhà phát triển về các nguyên tắc cơ bản về giao thức và xử lý gói

This is a 16-bit checksum used to verify the validity of the header only (that is, excluding the payload). The sender computes this value based on the fields of the header, and the receiver also computes it to validate that the header was received correctly.

❓The checksum must be recalculated by each router. Tại sao vậy? 🤔

Because the TTL field changes at each hop. For example, if a packet starts with TTL =7 , each router will:

  1. Verify the current checksum based on TTL =7

  2. Decrement TTL to 6

  3. Calculate a new checksum based on TTL =6

  4. Forward the packet with the new checksum

If the checksum verification fails, the device drops the packet. This prevents packets with corrupted headers (which might have incorrect destination addresses, for instance) from being forwarded.

Source and Destination Addresses (32 bits each)

Master IPv4:Hướng dẫn dành cho nhà phát triển về các nguyên tắc cơ bản về giao thức và xử lý gói

These fields contain the source and destination IPv4 addresses, respectively. Each is 4 bytes (32 bits) long, as you learned in the previous sections on IPv4 addressing.

Options (Variable Length)

Master IPv4:Hướng dẫn dành cho nhà phát triển về các nguyên tắc cơ bản về giao thức và xử lý gói

Most IPv4 packets don't include options, but when present, they can provide additional functionality:

  • Record Route :Each router that handles the packet adds its own address to this option, creating a trace of the packet's path

  • Source Routing :Allows the sender to specify the route the packet should take:

    • Strict Source Routing:The entire route must be followed exactly

    • Loose Source Routing:Certain routers must be traversed, but the exact path between them is flexible

Padding

In some cases, the header ends with padding bytes (usually 0 s).

❓Why does the IPv4 header have padding?🤔

As explained before, the IHL field specifies the header length in 4-byte units, so the total header length must be a multiple of 4 bytes. If options make the header length not divisible by 4, padding bytes (usually 0 ) are added to reach the next multiple of 4.

For example, if you have 3 bytes of options, you would need 1 byte of padding to make the total header length a multiple of 4 bytes.

You've now learned about the structure of the IPv4 header, with the exception of the fragmentation fields which I’ll cover in the next section.

The IPv4 header efficiently packs all the necessary routing and control information into a compact structure, typically 20 bytes long (without options). This design allows for fast processing by routers while providing the flexibility needed for internet communication. It is amazing how prominent IPv4 is, even so many years after its publication.

In the next section, you'll learn about IPv4 fragmentation.

IPv4 Fragmentation

In the previous section, you learned about most of the IPv4 header structure, with the exception of 32 bits dedicated to fragmentation. This topic deserves special attention, as it reveals important aspects of how IP packets travel across different networks.

Master IPv4:Hướng dẫn dành cho nhà phát triển về các nguyên tắc cơ bản về giao thức và xử lý gói

Why Fragmentation Is Needed

To understand what fragmentation is and why it's needed, consider the following network scenario:

Master IPv4:Hướng dẫn dành cho nhà phát triển về các nguyên tắc cơ bản về giao thức và xử lý gói

In this diagram, you have two different networks where Machine A resides in one network and Machine B resides in another. A router forwards packets between these two networks.

These two networks have different Maximum Transmission Units (MTUs). MTU refers to the maximum size of a frame that can be transmitted in a network. Ví dụ:

  • Machine B is connected to an Ethernet network with an MTU of 1500 bytes

  • Machine A is connected to a different network with an MTU of 2000 bytes

Different MTUs stem from the different protocols and hardware that different networks have. Ethernet has an MTU of 1500 bytes. This maximum size was chosen because RAM was expensive back in the late 1970s when Ethernet was planned, and a receiver would need more RAM if a frame could be bigger. Other networks were devised at different times where RAM prices might have been lower, or just have other considerations that affect the MTU.

Now, consider this scenario:Machine A wants to send a packet to Machine B. This packet is 1800 bytes long. From A's perspective, there's no problem since its network supports packets of this size. Machine A transmits the packet.

When the router receives this packet, it faces a problem:it cannot simply forward the packet to B's network because the packet is too big for the network's MTU. The router must fragment the packet – splitting it into smaller chunks of up to 1500 bytes, which will then be reassembled by Machine B.

How Fragmentation Works in IP

Let's examine the scenario further. The router needs to take an IP packet of 1800 bytes and split it into two fragments, each consisting of up to 1500 bytes. If Machine A sends another packet of 1800 bytes to Machine B, the router will have to split that one too – resulting in four different fragments that will be reassembled into two separate packets.

Master IPv4:Hướng dẫn dành cho nhà phát triển về các nguyên tắc cơ bản về giao thức và xử lý gói

When Machine B receives these fragments, it must ensure that it reassembles fragment #1 together with fragment #2 of packet A, and fragment #1 with fragment #2 of packet B – and not, for instance, fragment #1 of packet A with fragment #2 of packet B. It must also reassemble the fragments in the correct order – so structure a packet that consists of #1#2 and not #2#1.

Master IPv4:Hướng dẫn dành cho nhà phát triển về các nguyên tắc cơ bản về giao thức và xử lý gói

Identification Field

First, focus on making sure Machine B reassembles fragments of the same packet (for example, fragment #1 and fragment #2 of packet A in the example above, rather than fragment #1 of packet A and fragment #2 of packet B). This is achieved using the identification field of IPv4. Fragments belonging to the same packet will have the same identification value. For example, both fragments of packet A might have identification set to 100 , and both fragments of packet B might have identification of 200 .

Master IPv4:Hướng dẫn dành cho nhà phát triển về các nguyên tắc cơ bản về giao thức và xử lý gói

It's important to note that sharing identification values isn't sufficient for fragments to belong to the same packet. Fragments of the same packet must also share:

  • The same source IP address

  • The same destination IP address

  • The same protocol value (indicating whether the payload is TCP, UDP, and so on)

Fragment Offset

Since IP is a connectionless protocol, there's no guarantee that fragments will arrive at Machine B in the correct order. Fragment #2 of packet A may arrive before fragment #1. To handle this issue, each fragment carries an Offset field, which denotes the offset from the beginning of the original packet.

The Offset field consists of 13 bits, which means it can carry values from 0 to 8191 (2^13-1). This poses a potential problem, as the maximum size of an IP packet can be 65,535 bytes (since the Total Length field of the IP header consists of 16 bits).

To address this limitation, the value encoded in the Offset field is actually multiplied by 8 (2^3). This means the minimum size of a fragment is 8 bytes, with the exception of the last fragment.

❓Why do IP packets carry an offset in bytes divided by 8, instead of just a sequential fragment number?🤔

While using sequence numbers might seem simpler, it would create problems when packets need to be fragmented multiple times.

For example, if Computer A sends a packet to the first router, which fragments it into pieces of 1480 bytes and 320 bytes, and then these fragments are sent to another router that needs to fragment them again into even smaller pieces, how would you number them?

With byte offsets, the solution is straightforward – if the first fragment has an offset of 0 and the next one has an offset of 1480 , then if we need to split them into maximum 800 -byte fragments, we'd have:

  • First fragment:800 bytes with offset 0

  • Second fragment:680 bytes with offset 800

  • Third fragment:320 bytes with offset 1480

More Fragments and Don't Fragment Flags

When Machine B receives a fragment, it needs to know whether this is an entire packet by itself or if it should expect additional fragments. For this purpose, each IP fragment carries a More Fragments (MF ) bit that is set to 1 for every fragment that is not the last fragment of the packet. For the last fragment, it's set to 0 .

In case the packet consists of a single fragment – the MF bit will be set to 0 , and the offset field will also hold the value 0 (that is, 13 bits of 0 s).

Another bit related to fragmentation is the Don't Fragment (DF ) bit. When this flag is turned on, intermediate devices should not fragment the original packet, even if it exceeds the MTU. Instead, they should drop it and typically send an ICMP "Fragmentation Needed" message back to the source.

In our example, if Machine A sets the Don't Fragment bit to 1 , the router would drop the packet, and notify Machine A about it.

Note that right after the identification field and before the DF flag, there is a reserved bit set to 0 . This bit was reserved in case it is needed in the future, for a reason unknown to the original authors of IPv4.

Fragmentation Example

Consider again our example above – with Machine A residing in a network where the MTU is 2000 , and Machine B residing in a network where the MTU is 1500 . Machine A sends a packet which is 1800 bytes long.

❓Can you fill the values in these tables?

First Fragment:

Total Length IdentificationDon’t FragmentMore FragmentsOffset

Second Fragment:

Total Length IdentificationDon’t FragmentMore FragmentsOffset

For our example above, the values of the relevant fragmentation fields in IP would be as follows:

First Fragment:

  • Total Length:1500 (including 20 bytes of IP header, so 1480 bytes of payload)

  • Identification:1337 (arbitrary value)

  • Don't Fragment bit:0 (off, to allow further fragmentation if needed)

  • More Fragments bit:1 (on, as this is not the last fragment)

  • Offset:0 (it's the first fragment)

Second Fragment:

  • Total Length:340 (including 20 bytes of IP header, so 320 bytes of payload – together with the first fragment, we get to 1800 bytes of payload)

  • Identification:1337 (same as first fragment, indicating they belong together)

  • Don't Fragment bit:0 (off, to allow further fragmentation if needed)

  • More Fragments bit:0 (off, as this is the last fragment)

  • Offset:185 (1480/8 =185, or 0xB9 in hexadecimal)

IPv4 Fragmentation – Summary

You've now learned about the final part of the IPv4 Header:fragmentation. Fragmentation is necessary to allow packets to travel across networks with different MTUs. The IPv4 header includes several fields specifically designed to support fragmentation:

  • Identification (16 bits):Identifies which fragments belong together

  • Flags (3 bits):Including the "More Fragments" and "Don't Fragment" flags

  • Fragment Offset (13 bits):Indicates where in the original packet this fragment belongs

With this knowledge, you now understand every bit and byte of the IPv4 header and how IP packets can traverse networks with different characteristics.

Summary – IPv4

In this comprehensive guide to IPv4, you've learned about the fundamental building blocks of Internet communications. Let's recap the key concepts we covered:

Addressing and Network Structure

  • IPv4 addresses are 32-bit numbers typically written in dotted decimal notation

  • Networks can be identified using various methods:

    • Fixed-length approach (historically)

    • Classful addressing (A, B, C, D, E classes)

    • CIDR (modern approach allowing flexible network sizes)

  • Special addresses serve specific purposes:

    • 0.0.0.0 for "this host"

    • 127.0.0.0/8 for loopback

    • 255.255.255.255 for broadcast

  • The header contains crucial fields for packet routing and processing:

    • Version and IHL for header interpretation

    • Type of Service for traffic prioritization

    • Total Length for packet size

    • Various fields for fragmentation control

    • TTL to prevent infinite routing loops

    • Protocol to identify the encapsulated protocol

    • Checksum for error detection

    • Source and destination addresses

Fragmentation

  • Allows IPv4 packets to traverse networks with different MTUs

  • Uses three key fields:

    • Identification to group fragments

    • Flags to control fragmentation

    • Fragment Offset to reassemble packets

Final Words

While IPv4 has limitations, particularly its address space constraints, its elegant design and robust features have allowed it to remain the backbone of the Internet for over four decades. Understanding IPv4 provides essential context for working with modern networks and helps in transitioning to newer protocols like IPv6.

About the Author

Omer Rosenbaum is Swimm’s Chief Technology Officer. He's the author of the Brief YouTube Channel. He's also a cyber training expert and founder of Checkpoint Security Academy. He's the author of Gitting Things Done (in English) and Computer Networks (in Hebrew). You can find him on Twitter.

Additional References

  • Computer Networks Playlist - on my Brief channel

Học cách viết mã miễn phí. Chương trình giảng dạy mã nguồn mở của freeCodeCamp đã giúp hơn 40.000 người có được việc làm với tư cách là nhà phát triển. Bắt đầu