笔记29
Abstract: 学习网络层数据包的结构, ARP
协议、IP
协议和 ICMP
协议以及 wireshark
获取网络层的数据包。
Table of Contents
协议
学习目标
- 熟悉网络层数据包结构
- 熟悉
ARP
协议、IP
协议、ICMP
协议 - 能够看懂
wireshark
获取到的网络层数据包
ARP协议
ARP
ARP
: Address Resolution Protocol
协议,即地址解析协议,把网络层的 IP
地址翻译成在数据链路层寻址的48位硬件地址(MAC
地址)。
在 OSI
模型中 ARP
协议属于链路层;在 TCP/IP
模型中,ARP
协议属于网络层。
ARP协议工作流程
第一步:在每台主机都设有一个 ARP
高速缓存,保存局域网上各主机和路由 IP
地址到硬件地址的映射表。当 A
主机向 B
主机发送一个数据包时,A
主机先在其高速缓存中查看有无 B
的 IP
地址对应的 MAC
地址,如果有把硬件地址写入到数据包。
第二步:若没有找到,APR
进程在局域网上广播发送一个 ARP
请求分组,数据包的主要内容是:“我的 IP
值是1.1.1.1
,硬件地址是 xx-xx-xx-xx-xx-xx-xx-xx
。我想知道IP
地址为 2.2.2.2
的主机硬件地址”,局域网上所有主机上都会收到这个 ARP
请求分组。
第三步:主机 B
收到了主机 A
发送的 ARP
请求分组数据包,发现请求的 IP
和自己的 IP
一样,就收下这个 IP
,并向主机A
发送 ARP
响应分组,同时把数据包带有 A
的硬件地址写入自己的 ARP
缓存表。其余所有的主机因为 IP
不匹配都不会理会这个请求数据包。响应包的主要内容是:“我的 IP
地址是 2.2.2.2
,我的硬件地址是 yy-yy-yy-yy-yy-yy-yy-yy
”,单独发送给 A
,不会广播。
Note: ARP
对保存在高速缓存中的每一个映射地址都设置生存时间,超过生存时间就会从缓存表中删除,防止对方硬件地址突然失效,比如拔下网线,更换网卡;当硬件地址发生变化,主机会发送一个无偿的 ARP
数据包,广播给局域网内所有鸡器。
IP协议
IP
在 ARP
的上层,ICMP
和 IGMP
在 IP
的上层。
ICMP协议
ICMP
ICMP
: Internet Control Message Protocol
,即网际报文控制协议。用于在IP
主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。大部分网络检修技巧和工具都是基于ICMP
的。简单点说,ICMP
常用于寻找网络故障。
tracert工作原理
tracert
从源主机向目的主机发送一连串 ICMP
数据包。第一个数据包 P1
的生存时间 TTL=1
,当 P1
数据包到达路径上第一个路由器 R1
时候,路由器把 TTL
减一,然后发现 TTL=0
,R1
就丢弃 P1
,然后发送一个 ICMP
时间超过差错报文。下一个数据包 TTL=2
,到第二个路由器 R2
被丢弃,以此类推。
当 TTL
等于某一个数值时候,刚好到达目的主机,目的主机就返回一个正常的响应包,告诉源主机已经到达目的主机。
传输层
在网络中进行通信的实体是主机中的进程,网络层为主机之间提供逻辑通信,而传输层为应用进程之间提供端到端的逻辑通信。传输层还要对报文进行差错检测,提供可靠的运输。但在网络层,IP
数据包检测只针对首部,不检查数据部分。
传输层的两个主要协议:
* 传输控制协议 `TCP` (`Transmission Control Protocol`)
* 用户数据包协议`UDP` (`User Datagram Protocol`)
区别
TCP
提供面向连接的服务。在传送数据前必须先建立会话,进行流量控制,保证可靠传输。UDP
传输之间不需要建立连接,不提供可靠交付,简单点说就是发送出去就不管了。适合一个数据包就能完成通信,或者对丢包了没必要重传的应用。
TCP协议
三次握手
- 客户端发送
SYN
段,并指明客户端的初始化序列号,即ISN(s)
- 服务端发送自己的
SYN
段作为应答,同样指明自己的ISN(s)
。为了确认客户端的SYN
,将ISN(c)+1
作为ACK
数值。这样,每发送一个SYN
,序列号就会加1。如果有丢失情况,则会重传。 - 为了确认服务器端的
SYN
,客户端将SYN(s)+1
作为返回的ACK
数值。
四次挥手
- 客户端发送一个
FIN
段,并包含一个希望接受这看到的自己当前的序列号K
,同时还包含一个ACK
表示确认对方最近一次发过来的数据。 - 服务端将
K
值加1作为ACK
序号值,表明收到了上一个包。这是上层应用程序会被告知另一端发起了关闭操作,通常将这引起应用程序发起自己的关闭。 - 服务端发起自己的
FIN
段,ACK=K+1
,Seq=L
。 - 客户端确认,
ACK=L+1
DNS域名解析
工作原理
- 浏览器输入
www.xxx.com
域名,操作系统会检查自己本地的hosts
文件是否有这个映射关系,若有,就先调用这个IP
地址映射,完成域名解析。 - 若
hosts
没有这个域名映射,则查找本地DNS
解析器缓存,是否有这个网址映射关系,若有直接返回,完成域名解析。 - 若
hosts
与本地DNS
解析器缓存都没有相应的网址映射关系,首先会找TCP/IP
参数设置的首选DNS
服务器,即本地DNS
服务器,此服务器收到查询时,若要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析。 - 若本地
DNS
服务器解析失败,则到根DNS
解析器请求。
DHCP协议
DHCP
: Dynamic Host Configuration Protocol
,即动态主机配置协议,是一个应用层协议,工作在局域网,使用 UDP
协议,能够让设备自动获取重要网络资源,本质就是在 DHCP
服务器上有一个数据库,存放着 IP
地址、网关、DNS
等参数。
工作方式
- 自动分配方式:
DHCP
给主机指定一个永久的IP
地址,一旦DHCP
客户端第一次成功的从DHCP
服务器租用到IP
位址后,就永远使用这个位址。 - 动态分配方式:
DHCP
给主机指定一个有”时间限制”的IP
地址,到时间或主机明确表示放弃这个地址时,这个地址可以被其他主机使用,当然,客户端可以比其他主机更优先延续租用。 - 手动分配方式:主机
IP
地址由网络管理员指定,它可以按照MAC
地址固定分配IP
位址,DHCP
只是把指定的IP
地址告诉主机,相当于将某个MAC
和IP
进行了静态绑定。
工作流程
- 新机器加入网络时,会使用
0.0.0.0
作为源地址,发送广播discover
报文,查询网络上有哪些DHCP server
DHCP
服务器接收到DHCP Discover
报文后,回应Offer
报文,提供IP
地址给请求方- 请求方根据收到的
Offer
报文,选择一个DHCP server
,并选择它提供的IP
地址,然后广播Request
报文,向DHCP Server
请求该IP
地址,同时想本地网络公告自己已经选择了某个DHCP Server
的某个IP
地址 DHCP Server
回应ACK
报文,将IP
地址分配给Client
端