Lập trình TCP/IP stack, 1: Ethernet và ARP (2016)
(saminiir.com)-
Triển khai TCP/IP stack
- Tự triển khai TCP/IP stack có thể trông như một công việc phức tạp.
- Đặc tả cốt lõi của TCP gồm phân tích header TCP, máy trạng thái, kiểm soát tắc nghẽn và tính toán thời gian chờ truyền lại.
- Trong loạt bài blog này, tác giả sẽ triển khai một TCP/IP stack tối giản trong không gian người dùng trên Linux.
- Mục đích của bài viết và phần mềm này là phục vụ giáo dục để học sâu hơn về lập trình mạng và hệ thống.
-
Thiết bị TUN/TAP
- Sử dụng thiết bị TAP để chặn lưu lượng mạng mức thấp trong nhân Linux.
- Thiết bị TUN/TAP dễ thiết lập từ chương trình không gian người dùng và được dùng trong nhiều chương trình như OpenVPN.
- Có thể dùng thiết bị TAP để đọc và ghi dữ liệu vào bộ đệm Ethernet.
-
Định dạng khung Ethernet
- Ethernet là nền tảng của nhiều công nghệ mạng dùng để kết nối máy tính trong LAN.
- Chuẩn Ethernet đã phát triển đáng kể kể từ khi lần đầu được công bố vào năm 1980.
- Header khung Ethernet có thể được khai báo bằng cấu trúc C, bao gồm các trường DMAC, SMAC, Ethertype và payload.
-
Phân tích khung Ethernet
- Sử dụng thuộc tính
packedđể trình biên dịch GNU C không tối ưu hóa bố cục bộ nhớ của cấu trúc. - Toàn bộ kịch bản phân tích và xử lý khung Ethernet là khá đơn giản.
- Sử dụng thuộc tính
-
Giao thức phân giải địa chỉ (ARP)
- ARP được dùng để ánh xạ động địa chỉ Ethernet 48-bit sang địa chỉ giao thức.
- Định dạng gói ARP tương đối đơn giản, bao gồm các trường loại phần cứng, loại giao thức, kích thước phần cứng, kích thước giao thức, opcode và dữ liệu.
-
Thuật toán phân giải địa chỉ
- Để lưu kết quả của ARP, sử dụng
translation tablenhằm tránh các yêu cầu ARP trùng lặp. - Bài kiểm tra cuối cùng của phần triển khai ARP là xác nhận nó phản hồi đúng với yêu cầu ARP.
- Để lưu kết quả của ARP, sử dụng
-
Kết luận
- Việc xử lý khung Ethernet và triển khai ARP tối thiểu là tương đối dễ, có thể thực hiện chỉ với vài dòng mã.
- Mã nguồn của dự án có thể xem trên GitHub.
- Trong bài tiếp theo, tác giả sẽ tiếp tục triển khai ICMP echo và phản hồi (ping) cùng với phân tích gói IPv4.
Chưa có bình luận nào.