В каждом слое, пакет имеет к разделу «Разъединение»: заголовок, полезная нагрузка
необорудованный разъем означает, что вы можете просто определить полезную нагрузку транспортного уровня. то есть задача ОС - создавать заголовки уровня транспорта, сети и канала передачи данных.
Raw socket означает, что вы можете определить каждый раздел пакета - заголовок или полезную нагрузку. Обратите внимание, что raw-сокет - это общее слово. Я классифицирую raw-сокет в: Network Socket andd Data-Link Socket (или альтернативно L3 Socket и L2 Socket)
В L3 Socket вы можете определить заголовок и полезную нагрузку пакета на сетевом уровне. Например, если протокол сетевого уровня является IPv4, вы можете определить заголовок и полезную нагрузку IPv4. Таким образом, вы можете установить заголовок/полезную нагрузку транспортного уровня, заголовок/полезную нагрузку ICMP, заголовок/полезную нагрузку протоколов маршрутизации.
В гнезде L2 вы можете установить заголовок и полезную нагрузку пакета в канале передачи данных, т. Е. Все в пакете. Таким образом, вы делаете все с L3 Socket +, определяете заголовок/полезную нагрузку ARP, заголовок/полезную нагрузку PPP, заголовок/полезную нагрузку PPPOE, .....
Сейчас в программировании:
- сокет (AF_INET, RAW_SOCKET, ...) означает L3 разъем, протокол сетевого уровня = IPv4
- гнездо (AF_IPX, RAW_SOCKET, ...) Означает L3 сокет, протокол сетевого уровня IPX =
- гнездо (AF_INET6, RAW_SOCKET, ...) означает L3 сокет, протокол сетевого уровня = IPv6
- гнездо (AF_PACKET, RAW_SOCKET, ...) означает сокет L2, данные -link Layer Protocol = Ethernet
Третий параметр определяет протокол полезной нагрузки.
Не могли бы вы дать мне немного больше объяснений – kar
@kar edited с примером. – KBart