路由器DHCP服务器分配给手机IP地址过程,光猫路由器PPPOE拨号建立连接过程,IP、VLAN报文分析
附全部wireshark抓包分析,如有疑问,欢迎评论区留言;
一、DHCP通信过程
DHCP通信过程,通过 bootp 过滤
DHCP服务,获取IP的四个过程
一、发现,Discover向整个网络广播:IP信息-源 0.0.0.0 目标 255.255.255.255(自己没有合法IP,也不知道服务器IP)
二、提供,offer网络上的DHCP服务器收到广播后检查自己的地址池是否有可用IP,如有就回答:
IP信息-192.168.1.1-- 192.168.1.100
三、选择,request网络上可能有多个DHCP服务器都会对Discover广播回应,客户机总是选择最先回应的那台服务器分配的IP
IP信息-0.0.0.0 => 255.255.255.255 (分配的IP还不能使用,仍使用 0.0.0.0)
四、确认,ack
第一个回应的DHCP服务器看到选择广播后IP信息-192.168.1.100 <= 192.168.1.1
二、PPPOE的交互过程
PPPOE(Point-to-Point Protocol Over Ethernet)基于以太网的点对点通讯协议
交互过程 ,PPPOE链接建立的过程包括PPPOE发现阶段以及PPPOE会话阶段;
1、发现阶段是一个无状态的阶段,该阶段只要是接入服务器,确定所要建立的PPP会话标识符Session ID,同时获得对方点到点的连接信息(通过pppoed过滤)
1.1 PADI(PPPoE Active Discovery Initiation):发现阶段的第一步,用户主机以广播的方式发送PADI数据包,请求建立链路,code 为 0×09,会话ID 为0×0000;
1.2 PADO(PPPoE Active Discovery Offer):发现阶段的第二步
设备收到服务范围内的PADI包后,发送PADO包响应其请求,其code 为0×07,Session ID仍为0×0000;PADO包必须包含一个接入设备名称类型AC-Name(netcore)的标签,以及一个或者多个服务名称类型标签,表明可以向用户主机提供的服务种类;
1.3 PADR (PPPoE Active Discovery Request) 用户在可能收到的多个PADO包中选择一个合适的接入设备,选择的原则是根据PADO中接入设备名称类型标签,服务名称类型标签的内容,然后向所选择的设备发送PADR包,其code 字段为0×19,Session ID仍为0×0000,PADR包必须包含一个服务名称类型标签,确定向接入设备请求的服务种类,当一个用户主机在确定时间没有收到PADO,它会从发一个PADI,同时等待两倍的时间,可能需要重复多次;
1.4 PADS (PPPoE Active Discovery Session-confirmation)
服务设备收到PADR包后准备开始ppp会话 ,它发送一个pppoe有效发现会话确认(PADS)包,其code字段为0×65,session ID 为接入设备所产生的唯一的pppoe会话标识号码
发现阶段的任务:1、寻找可用的服务器
2、得到session ID,开始ppp的建立过程;
2会话阶段
2.1.1 协商阶段 LCP(链路控制协议) 通过 ppp&&lcp 过滤
此阶段主要是协商链路的一些参数,如最大接收单元MRU、Magic Number,以及后续认证时使用的协议等。LCP协商分为LCP Configuration Request和 LCP Configuration Ack
客户端发送数据到服务端协商请求
可以看到,Session ID就是之前PPPOE发现阶段获得的那个,这边协商了MRU,并且提出认证使用的Magic number。一般而言,MRU和MTU取值相同,PPPOE的最大MTU不能超过1492。
服务端到客户端请求回应给客户端一个 Magic Number数据
ACK 客户端给服务端发送确认。
ACK 确认 服务端给客户端 给出确认
2.2 认证阶段 通过 ppp&&chap 过滤
会话双方通过LCP协商好的认证方法进行认证,如果认证通过了,才可以进行下面的网络层的IPCP协商.认证阶段务器端将验证客户端的合法性。最常见的两种就是PAP和CHAP;
PAP认证:发送的认证信息是明文,可以通过抓包工具看到用户名、密码;
CHAP认证:发送的认证信息是密文,抓包工具无法解析出来真正的用户名、密码。
下面抓个CHAP认证的包:
服务设备给一个响应
2.2.1用户端发送认证数据到服务设备
2.2.2设备服务端给客户端回应成功消息
2.3 IPCP阶段 通过 ppp&&ipcp 过滤
Configuration Request:(s->c) : 服务端给客户端一个IP地址(网关地址)
Configuration Request:(c->s) : 客户端告知服务器端 本机IP,主要DNS,次要DNS(地址都是0000)
Configuration Nak:(s->c) : 服务端表示拒绝,于是就给客户端分配IP,主要DNS,次要DNS
Configuration Ack:(c->s) : 客户端表示确认一下,
Configuration Request:(c->s) : 客户端告知服务器端 本机IP,主要DNS,次要DNS(server端分配的)
Configuration Ack:(c->s) : 服务端表示同意客户端就可以使用分配的ip上网了.
2.3.1 Configuration Request:(s->c) : 服务端给客户端一个IP地址(网关地址)
2.3.2 Configuration Request:(c->s) : 客户端告知服务器端本机IP,主要DNS,次要DNS(地址都是0.0.0.0)
2.3.3Configuration Nak:(s->c) : 服务端表示拒绝,于是就给客户端分配IP,主要DNS,次要DNS
2.3.4客户端对服务端确认
2.3.5客户端告知服务器端 本机IP,主要DNS,次要DNS(server端分配的)
2.3.6Configuration Ack:(c->s) : 服务端表示同意客户端就可以使用分配的ip上网了
注意:SessionID 用来确定一个会话, Identifier可以用来确定一组应答(双方的request中Identifier都是从1开始递增的, Identifier最早出现在LCP协商的request中,比如说 A->B的request中Identifier为1,那么B->A的应答中Identifier也为1)
三、IP报文
0100前四位二进制转16进制为4,代表IPV4。
四、VLAN的报文