目录
一、ARP
二、DNS
三、TCP
TCP的总过程:
TCP三次握手:
TCP四次挥手:
四、HTTP
一、ARP
1.ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。
我们要抓ARP 同网段内的访问网关的情况。
先cmd执行 arp -a 命令,从ARP表中查看本网段内有哪些主机
然后 arp -d 清空ARP表
cmd执行 arp -a,验证ARP表已被清空(ARP的自主学习)
2.Ping本网段内任意主机
1)cmd执行下面这条命令获取局域网内所有主机:
命令的意思是:ping 10.200.1.xxx到 10.200.1.255 之间的所有IP,注意将IP地址改成自己的网段。
for /L %i IN (1,1,254) DO ping -w 2 -n 1 10.200.1.%i
ipconfig -all 查看本机IP及MAC地址:
全部ping网段 或者ping网关或某个ip
3.过滤ARP协议的数据包
显示过滤器中输入:arp,过滤ARP协议的数据包。
两个数据包,第一个包是ARP请求包,第二个包是ARP响应包。
先看第一个数据包,源地址(Source字段)是我自己的MAC地址(8d:e4:71)。
目标地址(Destination字段)是 Broadcast,就是广播的意思。
Info 字段,是对当前动作的描述。
总结一下第一个数据包做了什么:
我的电脑,发送了一个广播,广播的内容是 “谁是10.200.1.8?告诉10.200.1.36”
10.200.1.36是我电脑的IP,意思就是:呼叫10.200.1.8,收到请回复我。
第二个数据包的目的地址(Destination 字段)是我电脑的MAC地址
结合 Info 字段的信息,总结一下第二个数据包做了什么:
有个主机,向我的电脑发送了一个信息,信息的内容是 “10.200.1.36 是 c0-25-a5-8d-e4-71”
这个主机把MAC地址告诉了我的电脑。
结论:
ARP地址解析协议就像一个队内语音,他会向局域网内所有主机广播请求,索要目标IP的MAC地址;知道的主机就会响应具体的MAC地址。
4.数据包内容分析
接下来我们根据包的数据分析一下,这两个包是怎么做的:
1)第一个包的数据:
- 第一处:ARP后面的括号里是 request,说明这是个请求包
- 第二处:源IP、源MAC、目标IP都有值,目标MAC却全是0,意思就是告诉他们:我不知道这个IP的MAC地址。
2)第二个包的数据:
- 第一处:ARP后面的括号里是 reply,说明这是个响应包
- 第二处:源IP、源MAC、目标IP、目标MAC都有值,接收方可以从这里获取IP对应的MAC地址。
5.ARP自主学习
再次使用 arp -a 查看ARP表
可以发现,表中添加了我们刚才 ping 的IP,以及对应的MAC地址,这就是ARP的学习能力:解析成功的MAC地址会被临时缓存,以节约资源。
第六步:再次访问
1)Wireshark开启抓包,重新访问这个主机
2)查看ARP请求包的目的MAC地址
由于是第二次访问,ARP表中已经缓存了MAC地址,所以这次ARP请求不再广播,而是直接从ARP表中获取。
二、DNS
DNS是一个应用层协议,基于TCP/IP传输,一般的DNS报文传输层是UDP报文。查询的时候一般请求DNS服务器的53端口号。
启动wireshark,在浏览器输入www.xiaomi.com
,访问小米的官网。(ps:网址会自动跳转到www.mi.com
,这是因为小米官网做了域名重定向。)
ping www.xiaomi.com
请求报文:
172.16.7.1(DNS服务器地址)
响应报文:
可以看到,经过DNS查询,得到了IP地址123.125.103.192
和111.202.1.202
三、TCP
传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793 [1] 定义。
wireshark数据包详细栏每个字段对应的分层。
TCP的总过程:
TCP三次握手:
TCP三次握手示意图
1)第一次握手:
可以看到,客户端发起一个SYN请求,初始序列号为0
2)第二次握手
服务端返回SYN+ACK,并且包含服务端的一个初始序列号seq=0,同时返回一个确认号ack=1
3) 第三次握手
客户端返回一个ACK,并且返回一个确认号ack=1,并且将自己的序列号seq更新为1
到此,TCP三次握手就结束了。客户端与服务端之间已经成功建立起连接。
TCP四次挥手:
TCP四次挥手示意图
第一次挥手:客户端发起一个FIN,表示客户端希望断开连接。
第二次挥手:服务端返回一个ACK,表示对客户端断开请求的应答。
第三次挥手:服务端发起一个FIN,表示服务端希望断开连接。
第四次挥手:客户端返回一个ACK,表示对服务端断开请求的应答。
1)第一次挥手
客户端发起一个FIN请求(表示客户端希望断开连接),
序列号seq=1,应答号ack=1。注意这里的应答是上一次数据通信过程中的应答。
2)第二次
服务端返回一个ACK(表示对客户端断开请求的应答)
应答号ack=2,序列号seq=1
3)第三次挥手
服务端返回一个ACK(表示对客户端断开请求的应答)+FIN(表示服务端希望发起断开请求)
应答号ack=2,序列号seq=1
4)第四次挥手
客户端返回一个ACK(表示对服务端断开请求的应答)
应答号ack=2,序列号seq=2
附:
访问www.xiaomi.com的TCP总过程:
四、HTTP
超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。
HTTP报文由三部分组成,开始行、首部行和实体主体,如图。
在请求报文中,开始行就是请求行。
以超星学习通为例吧:
因为现在大部分网站都是用https加密了。
超星
鲨鱼抓包:
200的响应码:
小米的 mi.com:
TLS协议Client Hello
服务端发出的Server Hello
到此,TLS的握手过程就结束了,后面可以加密传输消息了。