Giao thức Bootstrap

**Giao thức Bootstrap** hay **giao thức BOOTP** là một giao thức Internet protocol được sử dụng để gán một địa chỉ IP và một loạt các tham số bổ sung cho một máy tính trong mạng TCP/IP.

Ví dụ, BOOTP được sử dụng để thiết lập địa chỉ mạng của thiết bị đầu cuối và các máy trạm không đĩa cứng, mà hệ điều hành của chúng lấy từ một máy chủ khởi động (boot server thí dụ như DHCP server). Việc truyền tải chương trình hoạt động sau đó thường được thực hiện thông qua TFTP. Ngoài ra, một số thiết bị ngoại vi, chẳng hạn như máy in mạng, có thể sử dụng BOOTP để xác định địa chỉ IP và cấu hình mạng (subnet/gateway).

Trước đây, RARP được sử dụng để xác định địa chỉ IP cho các thiết bị không đĩa cứng. Trái ngược với RARP, chỉ chuyên cung cấp địa chỉ IP, BOOTP có nhiều tham số bổ sung, đặc biệt là mặt nạ mạng con, Gateway và máy chủ khởi động. Tuy nhiên, để cấu hình các máy trạm và máy tính cá nhân, nó vẫn chưa đủ, bởi vì các thiết đặt bổ sung như máy in, máy chủ thời gian và những thứ khác là cần thiết. Giao thức cấu hình động máy chủ (DHCP) là một mở rộng của BOOTP. DHCP cung cấp chức năng cơ bản của BOOTP, nó còn, ví dụ, cho phép giới hạn thời gian của việc gán địa chỉ IP ("lease"). Giao thức BOOTP được định nghĩa trong .

## Hoạt động một máy trạm không có đĩa cứng
BOOTP cho phép một máy trạm không có đĩa cứng thi hành các công việc sau:

1 - tìm kiếm địa chỉ IP cho chính nó

2 - tìm IP của BOOTP server

3 - nạp một file khởi động từ server vào bộ nhớ

4 - và khởi động

Theo cách này, BOOTP cho phép một workstation khởi động mà không cần đĩa cứng hay đĩa mềm.

## Quá trình hỏi đáp BOOTP

Yêu cầu BOOTP (request) bao gồm yêu cầu của thiết bị và phản hồi của máy chủ.

### Yêu cầu BOOTP
Khi thiết bị được cho chạy, nó không biết địa chỉ IP của nó hoặc máy chủ BOOTP. Yêu cầu khởi động (boot request) được gửi. Đây là một gói UDP bình thường. Địa chỉ 0.0.0.0 được sử dụng làm người gửi vì không có gì khác được biết. Địa chỉ của người nhận là 255.255.255.255, được hiểu là phát sóng (Broadcast) trong mạng riêng của nó, vì client BOOTP không biết địa chỉ cục bộ của chuỗi mạng.

Yêu cầu khởi động từ máy khách (client) luôn được gửi tới cổng đích 67 (máy chủ BOOTP). Sau đó, máy khách lắng nghe trên cổng 68 (BOOTP client), mà một đáp ứng (boot reply) được gửi đi.

Không phải mỗi kết nối IP đều có hai cổng dành riêng được sử dụng như trong trường hợp này. Hầu hết các giao thức sử dụng một số cổng ngẫu nhiên như là cổng ra (cổng của máy khách). Các phản hồi của máy chủ cũng dự kiến xảy ra trên cổng này. Đối với BOOTP, điều này có thể sẽ không thực hiện được vì phản hồi của máy chủ BOOTP (Bootreply) không nhất thiết phải được gửi đến một địa chỉ đích cụ thể, mà được phát sóng tới tất cả các trạm trong mạng con riêng của nó. Nếu không có số cổng cố định được sử dụng, có thể máy khách khác đang lắng nghe trên cùng một cổng nhưng mong đợi điều gì đó khác.

Với yêu cầu khởi động (boot request), máy khách sẽ gửi một số thông tin về chính nó: Quan trọng nhất là địa chỉ phần cứng của card mạng (địa chỉ MAC). Đây là tính năng nhận dạng duy nhất của trạm. Máy khách cũng tạo ra một con số ngẫu nhiên 4 byte, mà phải xuất hiện lại trong boot reply. Hơn nữa, một bộ đếm thời gian được cung cấp để tính toán máy khách đã chờ đợi trong bao lâu boot reply của nó.

### Phản hồi BOOTP
Nếu máy chủ BOOTP nhận được yêu cầu hợp lệ trên cổng tương ứng, trước tiên nó sẽ xem xét địa chỉ MAC. Địa chỉ MAC từ yêu cầu được so sánh với cơ sở dữ liệu trong đó các địa chỉ IP được gán với các địa chỉ MAC. Nếu một mục nhập được tìm thấy cho yêu cầu, máy chủ sẽ gửi phản hồi (boot reply). Thông thường, phản hồi chỉ đơn giản được gửi dưới dạng broadcast, nhưng cũng có thể hoạt động theo bảng ARP của máy chủ. Tuy nhiên, nhân hệ điều hành phải cung cấp khả năng này.

Nếu phản hồi được gửi dưới dạng broadcast, nó sẽ chứa các thông tin sau:
* Địa chỉ phần cứng của máy khách. Máy khách mong đợi một phản hồi với địa chỉ phần cứng của nó để nhận ra rằng gói tin là dành cho nó. 
* Số ngẫu nhiên được tạo ra bởi máy khách trong yêu cầu.
* Địa chỉ IP của máy khách.

Các tham số sau là tùy chọn và chỉ được truyền nếu máy chủ BOOTP được cấu hình cho phù hợp:
* Địa chỉ IP và tên máy chủ của máy chủ boot. Từ đó, một hệ điều hành có thể được nạp thông qua TFTP trong bước tiếp theo.
* Tên và đường dẫn đến tệp khởi động. Tệp khởi động chứa nhân hệ điều hành, mà sau đó được truyền tải bằng TFTP.
* Tên của thư mục sẽ được sử dụng như phần vùng gốc (/) của nhân hệ điều hành thông qua NFS.

Máy khách BOOTP lắng nghe trên cổng đã cho và chờ đợi phản hồi từ máy chủ. Nếu nó nhận được một gói tin, địa chỉ MAC được so sánh với địa chỉ MAC của nó, cũng như số ngẫu nhiên với con số được gởi đến. Nếu máy khách nhận ra phản hồi, địa chỉ IP được gán cho giao diện mạng.

## Tham khảo