笔记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端