IPv4

Giao thức Internet phiên bản 4 (viết tắt IPv4, từ tiếng Anh "Internet Protocol version 4") là phiên bản thứ tư trong quá trình phát triển của các giao thức Internet (IP). Đây là phiên bản đầu tiên của IP được sử dụng rộng rãi. IPv4 cùng với IPv6 (giao thức Internet phiên bản 6) là nòng cốt của giao tiếp internet hiện nay. Hiện tại, IPv4 vẫn là giao thức được triển khai rộng rãi nhất trong bộ giao thức của lớp internet.

Giao thức này được công bố bởi IETF trong phiên bản RFC 791 (tháng 9 năm 1981), thay thế cho phiên bản RFC 760 (công bố vào tháng 1 năm 1980). Giao thức này cũng được chuẩn hóa bởi bộ quốc phòng Mỹ trong phiên bản MIL-STD-1777.

IPv4 là giao thức hướng dữ liệu, được sử dụng cho hệ thống chuyển mạch gói (tương tự như chuẩn mạng Ethernet). Đây là giao thức truyền dữ liêu hoạt động dựa trên nguyên tắc tốt nhất có thể, trong đó, nó không quan tâm đến thứ tự truyền gói tin cũng như không đảm bảo gói tin sẽ đến đích hay việc gây ra tình trạng lặp gói tin ở đích đến. Việc xử lý vấn đề này dành cho lớp trên của chồng giao thức TCP/IP. Tuy nhiên, IPv4 có cơ chế đảm bảo tính toàn vẹn dữ liệu thông qua sử dụng những gói kiểm tra ("checksum")..

== Đánh địa chỉ ==
IPv4 có chiều dài 32 bit để đánh địa chỉ, theo đó, số địa chỉ tối đa có thể sử dụng là 4.294.967.296 (2). Tuy nhiên, do một số được sử dụng cho các mục đích khác như: cấp cho mạng cá nhân (xấp xỉ 18 triệu địa chỉ), hoặc sử dụng làm địa chỉ quảng bá (xấp xỉ 16 triệu), nên số lượng địa chỉ thực tế có thể sử dụng cho mạng Internet công cộng bị giảm xuống. Với sự phát triển không ngừng của mạng Internet, nguy cơ thiếu hụt địa chỉ đã được dự báo, tuy nhiên, nhờ công nghệ NAT (Network Address Translation - Chuyển dịch địa chỉ mạng) tạo nên hai vùng mạng riêng biệt: Mạng riêng và Mạng công cộng, địa chỉ mạng sử dụng ở mạng riêng có thể dùng lại ở mạng công công mà không hề bị xung đột, qua đó trì hoãn được vấn đề thiếu hụt địa chỉ

Chuẩn IPv6, với số lượng bits dùng để đánh địa chỉ nhiều hơn đã được xây dựng nhằm thay thế IPv4 trong tương lai. Hiện tại, công nghệ IPv6 đã được triển khai ở một số quốc gia.

=== Cách biểu diễn địa chỉ ===
32 bits địa chỉ của IP được chia thành 4 nhóm (dạng phân nhóm - dotted format), mỗi nhóm gồm 8 bits (gọi là một octet), các nhóm này phân cách nhau bởi dấu chấm. Tuy nhiên, để thuận tiện cho người sử dụng, các octet này được chuyển đổi sang giá trị thập phân, được miêu tả trong bảng sau:

Hầu hết các định dạng trên được chấp nhận trong tất cả các trình duyệt. Ngoài ra, trong dạng phân nhóm, mỗi nhóm có thể được biểu diễn dưới một hệ cơ số khác nhau, (ví dụ như: 192.0x00.0002.235) nhưng không làm thay đổi giá trị thực của địa chỉ.
Một dạng cuối cùng, hiếm gặp, đó là biểu diễn dưới dạng mã ASCII. Dạng biểu diễn này được sử dụng để gán cho trường địa chỉ nguồn và địa chỉ đích trong các chương trình phần mềm.

=== Phân lớp địa chỉ ===
Ban đầu, một địa chỉ IP được chia thành hai phần:
- Network ID: Xác lập bởi octet đầu tiên
- Host ID: Xác định bởi ba octet còn lại
Với cách chia này, số lượng network bị giới hạn ở con số 256, quá ít so với nhu cầu thực tế.

Để vượt qua giới hạn này, việc phân lớp mạng đã được định nghĩa, tạo nên một tập hợp lớp mạng đầy đủ (classful). Theo đó, có 5 lớp mạng (A, B, C, D và E) được định nghĩa. Lớp A sử dụng 8 bits cho phần network, do đó có tới 24 bits được sử dụng cho phần host. Lớp B dùng 16 bits cho network, 16 bit dành cho host. 24 bits được sử dụng để xác định phần network cho lớp C, do đó, mỗi network của lớp C chỉ còn 8 bit để đánh địa chỉ host. Lớp D được dùng cho địa chỉ multicast còn lớp E sử dụng cho thí nghiệm.

Khoảng năm 1993, lược đồ lớp đã được thay thế bởi lược đồ CIDR (Classless Inter-Domain Routing - Định hướng lớp miền chung). Với lược đồ CIDR, các lớp A, B, C có thể được chia lại thành các mạng nhỏ hơn (hoặc lớn hơn) để phân phối cho các tổ chức, cá nhân hoặc các mạng cục bộ khác nhau.

Việc gán địa chỉ tuân theo nguyên tắc: Địa chỉ của thiết bị phản ánh vị trí và vai trò của chính thiết bị đó trong mạng. Điều đó có nghĩa rằng, trong một hệ thống mạng, không được phép xuất hiện hai thiết bị có cùng địa chỉ. Một cấu trúc thứ bậc được tạo ra bởi CIDR, được IANA (Internet Assigned Numbers Authority - Bộ phận quản lý việc cấp phát địa chỉ internet) cùng các điểm đăng ký internet trực thuộc (Regional Internet Registries - RIRs) giám sát, có nhiệm vụ quản lý việc cấp phát địa chỉ Internet trên toàn thế giới. Mỗi RIR duy trì một cơ sở dữ liệu cho phép tìm kiếm công tự do WHOIS, cho phép mọi người có thể dễ dàng xác định được vị trí địa lý của một địa chỉ internet công cộng.

=== Mạng riêng ===
Trong khoảng hơn bốn tỷ địa chỉ có thể sử dụng của IPv4, ba dải địa chỉ được dành riêng cho các mạng riêng (private network). Các dải này không xuất hiện trong bảng định tuyến ở bên ngoài mạng riêng. Các thiết bị trong mạng riêng cũng không thể trực tiếp liên lạc với các mạng công cộng. Để có thể liên lạc với internet công cộng, họ phải sử dụng công nghệ NAT.

Sau đây là ba dải địa chỉ dành riêng cho các mạng riêng:

=== Đánh địa chỉ liên kết cục bộ ===
RFC 3330 định nghĩa một dải địa chỉ thuộc lớp B 169.254.0.0/16 dành riêng cho việc đánh địa chỉ mạng cục bộ. Những địa chỉ thuộc dải này chỉ có giá trị khi được gán cho thiết bị có các kết nối thuộc phân đoạn mạng cục bộ hoặc các kết nối điểm - tới - điểm (point to point, p2p). Những địa chỉ này cũng không được lưu trong bảng định tuyến tương tự như địa chỉ dành cho mạng riêng, có nghĩa là, chúng không thể trở thành địa chỉ nguồn hay đích đến của các gói tin được truyền trong mạng internet. địa chỉ liên kết cục bộ (Link-local addresses) chủ yếu được sử dụng để "tự động cấu hình địa chỉ", (Zeroconf) trong trường hợp thiết bị không được cấp phát địa chỉ từ máy chủ DHCP hoặc từ các phương pháp cấp phát địa chỉ nội bộ khác.

Khi dải địa chỉ được dự trữ, không tồn tại tiêu chuẩn cho cơ chế tự cấu hình địa chỉ, để lấp chỗ trống, Microsoft đưa ra bổ sung có tên Tự động cấp phát địa chỉ IP dành riêng (Automatic Private IP Addressing - APIPA). Dựa vào thị phần của Microsoft, APIPA đã được triển khai trên hàng triệu máy tính, qua đó trở thành một chuẩn trong lĩnh vực CNTT (de facto). Nhiều năm sau, IETF định nghĩa một chuẩn chính thức, RFC 3927, cho chức năng này. Ý nghĩa của chuẩn này là: Tự động cấu hình địa chỉ liên kết cục bộ cho chuẩn IPv4 ("Dynamic Configuration of IPv4 Link-Local Addresses").

=== Localhost ===
Dải địa chỉ 127.0.0.0/8 (CIDR notation) được quy định dành riêng cho thiết bị thực hiện các giao tiếp bên trong chính nó.

Dải địa chỉ này không bao giờ xuất hiện bên ngoài một thiết bị. Mọi gói tin có đích đến thuộc dải địa chỉ này sẽ được gửi trả về như là một gói tin đến từ một mạng ảo, mạng này có tên gọi là mạng loopback

=== Địa chỉ Broadcast và địa chỉ Default route ===
Đôi khi bạn có thể gán địa chỉ dạng x.x.x.0 hay x.x.x.255 cho host, tuy nhiên, trong nhiều trường hợp, địa chỉ dạng trên không được chấp nhận khi gán cho host. Tình huống này thường gặp khi địa chỉ được dùng nằm trong dải có subnet mask từ 24 bits trở lên. Ví dụ 192.168.100.0/24 (192.168.100.0 255.255.255.0) hay 192.168.10.255/25 (192.168.10.255 255.255.255.128). Những địa chỉ dạng này không thể gán cho host, bởi nó là địa chỉ Default route và địa chỉ Broadcast!

Địa chỉ Broadcast là địa chỉ được sử dụng làm đích đến của một gói tin khi một host muốn gửi gói tin đó đến tất cả các host còn lại trong mạng LAN. Trong mỗi subnet - LAN (mạng con), địa chỉ cuối cùng trong dải địa chỉ của mạng này chính là địa chỉ Broadcast. Không thể gán địa chỉ Broadcast cho một host cụ thể nào trong mạng.
Địa chỉ Default route là địa chỉ định danh cho một mạng con (LAN, subnet). Nó là địa chỉ đầu tiên trong dải địa chỉ của subnet. Tương tự như địa chỉ broadcast, địa chỉ default route cũng không thể gán cho một host cụ thể.

Một số ví dụ về default route và broadcast:

Dải địa chỉ 140.10.0.0/23 đến 140.10.1.255/23 có địa chỉ broadcast là 140.10.1.255 và địa chỉ default route là 140.10.0.0

Dải địa chỉ: 192.168.1.0/24 đến 192.168.1.255/24 có địa chỉ broadcast là 192.168.1.255 và địa chỉ default route là 192.168.1.0

Dải địa chỉ: 192.168.20.128/26 đến 192.168.20.191/26 có địa chỉ broadcast là 192.168.20.191 và địa chỉ default route là 192.168.20.128

=== Giải pháp tên miền ===
Các thiết bị trong mạng giao tiếp với nhau thông qua địa chỉ IP. Tuy nhiên, việc ghi nhớ danh sách các chuỗi địa chỉ đối với người sử dụng internet là vô cùng khó khăn, gần như là không thể. Trong khi đó, việc ghi nhớ các cụm ký tự có tính "gợi nhớ" dễ dàng hơn nhiều.

Để giải quyết vấn đề này, hệ thống tên miền (DNS: Domain Name System) ra đời. Có thể xem DNS như một dạng từ điển gồm hai cột, một cột là địa chỉ IP, cột còn lại là tên miền. Khi người dùng gõ một tên miền vào trình duyệt, tên miền này sẽ được gửi đến một máy chủ DNS để "dịch" tên miền này sang địa chỉ IP, là địa chỉ được sử dụng để các thiết bị mạng giao tiếp với nhau.

== Nguy cơ hết địa chỉ ==
Trong giai đoạn Internet đang ngày càng phát triển, các địa chỉ IPv4 đang dần cạn kiệt, để giải quyết vấn đề này, các địa chỉ IPv6 đang được đưa vào sử dụng để tránh tình trạng quá tải đối với địa chỉ IPv4.

== Giải pháp NAT ==
Sự ra đời của chuẩn dải mạng riêng (private) cho phép các tổ chức có thể cùng sử dụng một dải địa chỉ để gán cho các thiết bị mạng của mình mà không sợ bị xung đột. Tuy nhiên, một vấn đề đặt ra là: "làm thế nào để các mạng riêng này có thể giao tiếp với hệ thống mạng công cộng"? Công nghệ "dịch địa chỉ mạng" (NAT: Network Address Translation) ra đời giúp giải quyết vấn đề này.
Về cơ bản, có thể hình dung NAT như một bảng liên kết gồm hai phần, một phần là danh sách các địa chỉ của mạng riêng có nhu cầu giao tiếp với mạng công cộng, phần còn lại là địa chỉ công cộng được chỉ định làm đại diện cho các địa chỉ mạng riêng (tạm gọi là địa chỉ NAT).

Khi một host trong mạng riêng muốn giao tiếp với một host trong mạng công cộng, nó sẽ đóng gói bản tin với địa chỉ nguồn là địa chỉ mạng riêng của chính nó (host Pri, có địa chỉ IP là: PriAdd), địa chỉ đích là địa chỉ của host trong mạng công cộng (Host Pub, có địa chỉ IP là: PubAdd). Gói tin này sẽ được gửi tới NAT, tại đây, toàn bộ gói tin này được đóng gói thêm một lần nữa, địa chỉ đích của gói mới vẫn là PubAdd, nhưng địa chỉ nguồn thì được đổi thành địa chỉ NAT. Để phản hồi về Pri, Pub đóng gói gói tin với địa chỉ nguồn là PubAdd, địa chỉ đích là PriAdd, sau đó tiếp tục sử dụng "lớp vỏ" NAT đóng gói tiếp một lần nữa để tạo thành gói NAT, gói NAT này có địa chỉ nguồn là PubAdd, địa chỉ đích là địa chỉ NAT.

== Mạng riêng ảo ==
Địa chỉ mạng riêng không xuất hiện trong mạng công cộng, do vậy, các gói tin có địa chỉ đích đến là địa chỉ thuộc mạng riêng sẽ bị các router trong mạng công cộng bỏ qua. Điều đó dẫn đến tình trạng hai mạng riêng không thể giao tiếp trực tiếp với nhau thông qua mạng internet. Cần phải tạo nên một "đường hầm" xuyên qua mạng internet hoặc xây dựng một mạng riêng ảo (VPN: Virtual Private Network) để hai mạng riêng này có thể giao tiếp với nhau.

Mạng riêng ảo là một mạng máy tính cho phép hai mạng riêng kết nối với nhau một cách tin cậy trên nền mạng Internet công cộng. Dữ liệu truyền trong mạng riêng ảo được đóng gói theo phương thức mã hóa an toàn giúp cho gói tin có thể truyền qua nhiều thiết bị mạng thuộc mạng công cộng và các mạng riêng khác nhau.

Hiện tại, có nhiều cách phân loại, thực thi cũng như cách sử dụng VPN khác nhau.

== Cấu trúc gói tin IP ==
Một gói tin IP bao gồm một đoạn header và đoạn dữ liệu

=== Header ===
Header của gói tin IPv4 bao gồm 13 trường, trong đó 12 trường là bắt buộc. Trường thứ 13 (được tô màu đỏ trong bảng) là tùy chọn, đúng với tên của nó: options. Các trường này trong header được lưu trữ với byte có ý nghĩa cao (the most significant byte) ở địa chỉ thấp (big endian), nói cách khác bit có ý nghĩa cao luôn ở địa chỉ thấp. Bit quan trọng nhất là bit số 0, vì vậy trường phiên bản (version) được lưu trong 4 bit đầu tiên của byte đầu tiên, ví dụ
- Phiên bản (Version): Trường đầu tiên trong header của gói tin IP chính là trường Phiên bản (Version) dài 4 bit. Với IPv4, nó có giá trị bằng 4.
- Độ lớn của header (Internet Header Length) (IHL): Trường thứ hai (4 bit) là độ lớn của header (Internet Header Length - IHL) cho biết số lượng các từ 32-bit trong header. Vì một header của gói tin IPv4 có thể chứa rất nhiều tùy chọn (options), trường này cho biết kích thước của header (nó cũng trùng với offset của data). Giá trị nhỏ nhất cho trường này là 5 (RFC 791), do đó gói tin có độ dài là 5×32 = 160 bit. Vì đây là số 4 bit nên độ dài lớn nhất có thể được của gói tin là 15 từ (15×32 bit) tức là 480 bit.
- Differentiated Services (DS)
- Total Length: Chỉ định tổng chiều dài gói tin IPv4 (cả phần mào đầu và phần dữ liệu). Kích thước 16 bít, chỉ định rằng gói tin IPv4 nhỏ nhất là 20 byte (chỉ có header không có dữ liệu) và có thể lớn tới 65.535 byte.
- Identification: Định danh gói tin. Kích thước 16 bít. Định danh cho gói tin được lựa chọn bởi nguồn gửi gói tin. Nếu gói tin IPv4 bị phân mảnh, mọi phân mảnh sẽ giữ lại giá trị trường định danh này, mục đích để nút đích có thể nhóm lại các mảnh, phục vụ cho việc phục hồi lại gói tin.

== Liên kết ngoài ==
- RFC 791—Internet Protocol
- http://www.iana.org — Internet Assigned Numbers Authority (IANA)
- http://www.networksorcery.com/enp/protocol/ip.htm — IP Header Breakdown, including specific options
- RFC 3344 — IPv4 Mobility
- IPv6 vs. carrier-grade NAT/squeezing more out of IPv4

Cạn kiệt nguồn địa chỉ:
- RIPE report on address consumption as of October 2003
- Official current state of IPv4 /8 allocations, as maintained by IANA
- Dynamically generated graphs of IPv4 address consumption with predictions of exhaustion dates—Geoff Huston
- IP addressing in China and the myth of address shortage
- Countdown of remaining IPv4 available addresses (estimated)