Abstract: 学习网络层数据包的结构, ARP 协议、IP 协议和 ICMP 协议以及 wireshark 获取网络层的数据包。

Table of Contents

  1. 协议
    1. 学习目标
    2. ARP协议
      1. ARP
      2. ARP协议工作流程
    3. IP协议
    4. ICMP协议
      1. ICMP
      2. tracert工作原理
  2. 传输层
    1. 区别
    2. TCP协议
      1. 三次握手
      2. 四次挥手
    3. DNS域名解析
      1. 工作原理
    4. DHCP协议
      1. 工作方式
      2. 工作流程

协议

学习目标

  • 熟悉网络层数据包结构
  • 熟悉ARP 协议、IP 协议、ICMP 协议
  • 能够看懂 wireshark获取到的网络层数据包

ARP协议

ARP

ARP: Address Resolution Protocol 协议,即地址解析协议,把网络层的 IP 地址翻译成在数据链路层寻址的48位硬件地址(MAC地址)。

OSI 模型中 ARP 协议属于链路层;在 TCP/IP 模型中,ARP 协议属于网络层。

ARP协议工作流程

第一步:在每台主机都设有一个 ARP 高速缓存,保存局域网上各主机和路由 IP 地址到硬件地址的映射表。当 A主机向 B主机发送一个数据包时,A 主机先在其高速缓存中查看有无 BIP 地址对应的 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协议

IPARP 的上层,ICMPIGMPIP 的上层。

ICMP协议

ICMP

ICMP: Internet Control Message Protocol ,即网际报文控制协议。用于在IP 主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。大部分网络检修技巧和工具都是基于ICMP的。简单点说,ICMP常用于寻找网络故障。

tracert工作原理

tracert 从源主机向目的主机发送一连串 ICMP 数据包。第一个数据包 P1 的生存时间 TTL=1,当 P1 数据包到达路径上第一个路由器 R1 时候,路由器把 TTL 减一,然后发现 TTL=0R1就丢弃 P1,然后发送一个 ICMP时间超过差错报文。下一个数据包 TTL=2,到第二个路由器 R2被丢弃,以此类推。

TTL 等于某一个数值时候,刚好到达目的主机,目的主机就返回一个正常的响应包,告诉源主机已经到达目的主机。

传输层

在网络中进行通信的实体是主机中的进程,网络层为主机之间提供逻辑通信,而传输层为应用进程之间提供端到端的逻辑通信。传输层还要对报文进行差错检测,提供可靠的运输。但在网络层,IP 数据包检测只针对首部,不检查数据部分。

传输层的两个主要协议:

* 传输控制协议 `TCP` (`Transmission Control Protocol`)
* 用户数据包协议`UDP` (`User Datagram Protocol`)

区别

  1. TCP 提供面向连接的服务。在传送数据前必须先建立会话,进行流量控制,保证可靠传输。
  2. UDP 传输之间不需要建立连接,不提供可靠交付,简单点说就是发送出去就不管了。适合一个数据包就能完成通信,或者对丢包了没必要重传的应用。

TCP协议

三次握手

  1. 客户端发送 SYN 段,并指明客户端的初始化序列号,即 ISN(s)
  2. 服务端发送自己的 SYN段作为应答,同样指明自己的 ISN(s) 。为了确认客户端的 SYN,将 ISN(c)+1 作为 ACK 数值。这样,每发送一个 SYN,序列号就会加1。如果有丢失情况,则会重传。
  3. 为了确认服务器端的 SYN,客户端将 SYN(s)+1作为返回的 ACK数值。
四次挥手

  1. 客户端发送一个 FIN 段,并包含一个希望接受这看到的自己当前的序列号 K,同时还包含一个 ACK 表示确认对方最近一次发过来的数据。
  2. 服务端将 K值加1作为 ACK 序号值,表明收到了上一个包。这是上层应用程序会被告知另一端发起了关闭操作,通常将这引起应用程序发起自己的关闭。
  3. 服务端发起自己的 FIN 段, ACK=K+1Seq=L
  4. 客户端确认,ACK=L+1

DNS域名解析

工作原理
  1. 浏览器输入 www.xxx.com 域名,操作系统会检查自己本地的 hosts 文件是否有这个映射关系,若有,就先调用这个 IP 地址映射,完成域名解析。
  2. hosts 没有这个域名映射,则查找本地 DNS 解析器缓存,是否有这个网址映射关系,若有直接返回,完成域名解析。
  3. hosts 与本地 DNS 解析器缓存都没有相应的网址映射关系,首先会找 TCP/IP 参数设置的首选 DNS 服务器,即本地 DNS 服务器,此服务器收到查询时,若要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析。
  4. 若本地 DNS 服务器解析失败,则到根 DNS 解析器请求。

DHCP协议

DHCP: Dynamic Host Configuration Protocol,即动态主机配置协议,是一个应用层协议,工作在局域网,使用 UDP 协议,能够让设备自动获取重要网络资源,本质就是在 DHCP 服务器上有一个数据库,存放着 IP地址、网关、DNS等参数。

工作方式
  1. 自动分配方式:DHCP给主机指定一个永久的 IP 地址,一旦 DHCP 客户端第一次成功的从 DHCP 服务器租用到 IP位址后,就永远使用这个位址。
  2. 动态分配方式:DHCP 给主机指定一个有”时间限制”的 IP 地址,到时间或主机明确表示放弃这个地址时,这个地址可以被其他主机使用,当然,客户端可以比其他主机更优先延续租用。
  3. 手动分配方式:主机 IP 地址由网络管理员指定,它可以按照 MAC地址固定分配 IP 位址,DHCP 只是把指定的 IP 地址告诉主机,相当于将某个 MACIP 进行了静态绑定。
工作流程
  1. 新机器加入网络时,会使用 0.0.0.0 作为源地址,发送广播discover报文,查询网络上有哪些 DHCP server
  2. DHCP 服务器接收到 DHCP Discover 报文后,回应 Offer 报文,提供 IP 地址给请求方
  3. 请求方根据收到的 Offer 报文,选择一个 DHCP server ,并选择它提供的 IP 地址,然后广播 Request 报文,向 DHCP Server 请求该 IP 地址,同时想本地网络公告自己已经选择了某个 DHCP Server 的某个 IP 地址
  4. DHCP Server 回应 ACK 报文,将 IP 地址分配给 Client