前言

正文

网络设备

net_device包含的信息

DHCP作用

DHCP交互过程

DHCP饥饿攻击

注册网络设备

不具有路由功能的网络设备

Linux网络通信中sk_buff 

net_device结构体

查询路由表

虚拟网卡


前言

笔者是个物联网专业的应届生,有一天发现自己对网络相关的知识一无所知,于是决定在做题中探究一二。

正文

网络设备

网络设备及部件是连接到网络中的物理实体。

基本的网络设备有:计算机(无论其为个人电脑或服务器)、集线器、交换机、网桥、路由器、网关、网络接口卡(NIC)、无线接入点(WAP)、网络打印机和调制解调器、光纤收发器、光缆等。

net_device包含的信息

net_device 本身包含了设备很多硬件信息,包括是网络设备的名称。设备所使用的共享内存的起始和结束地址。网络设备I/O 基地址。设备使用的中断号。多端口设备使用哪一个端口和DMA通道等,设备传输需要使用的速度由mac层协商而来,而不是net_device 本身去指定。

DHCP作用

当我们将客户主机ip地址设置为动态获取方式时,DHCP服务器就会根据DHCP协议给客户端分配IP。

DHCP交互过程

第一步是主机发送DHCP Discover包,主机(client)想通过这个数据包发现可以给它提供服务的DHCP服务器

第二步,当DHCP服务器收到一条DHCP Discover数据包时,用一个DHCP Offerr包给予客户端响应,此时仍采用广播的方式,因为因为此时请求分配IP的主机(Client)并没有自己ip

第三步,当主机(client)收到了DHCP Offer包以后,确认有可以和它交互的DHCP服务器存在,于是主机(client)发送Request数据包,请求分配IP

第四步,接下来服务器用DHCP ACK包对DHCP请求进行响应,该数据报文中携带了分配的IP

上述四个过程,通过wireshark抓取数据包,发现所有过程均是采用广播的方式。

DHCP饥饿攻击

当伪造合法的MAC地址,不断地向DHCP服务器发出DHCP Request包时,这种情况会耗尽服务器的可用IP,会导致原有的这台DHCP服务器便不能够给客户端分配IP了。

注册网络设备

register_netdev可以用来注册网络设备,其函数原型是int register_netdev(struct net_device *dev),该函数需要一个struct net_device的参数,该参数就代表一个网络设备,不管是真实设备还是虚拟设备,都会通过一个net_device来存储对用网络设备的所有信息。

alloc_netdev是用来分配及初始化结构体struct net_device

ether_setup是用来初始化以太网设备对应的net_device中的部分字段的。

不具有路由功能的网络设备

当一个网络设备不具有路由功能,则当它收到一个目的地址不是它本身的报文时,会丢弃这个报文。当其不具有路由功能时,其主机没有转发数据的功能,但因为数据包的目的地址不是该主机,因此不会对这个数据报文进行处理,而是丢弃该数据报文。

Linux网络通信中sk_buff 

在Linux网络通信中,sk_buff 有四个非常重要的指针,分别是head,data,tail和end,关于这四个指针,在linux的sk_buff中,head 和 end 指向缓冲区的头部和尾部,而 data 和 tail 指向实际数据的头部和尾部。每一层会在 head 和 data 之间填充协议头,或者在 tail 和 end 之间添加新的协议数据。

net_device结构体

net_device 结构体在内核中指代一个网络设备,网络设备驱动程序只需通过填充,net_device的具体成员并注册net_device即可实现硬件操作函数与内核的挂接。net_device 本身是一个巨型结构体,包含网络设备的属性描述和操作接口。IOCTl接口也是其中一个

查询路由表

route 和netstat都可以用来查询路由表

虚拟网卡

在Linux系统中,可以使用ifconfig命令创建一个虚拟网卡;

创建的虚拟网卡与真实的物理网卡MAC地址是一样;

重启系统或网络后,创建的虚拟网卡会消失;

在上层使用上,虚拟网卡和真实的物理网卡没有区别。

05-30 18:38