1、ARP协议(已知ip地址得到mac地址)
在传输一个 IP 数据报的时候,确定了源 IP 地址和目标 IP 地址后,就会 通过主机「路由表」确定 IP 数据包下一跳。然而,网络层的下一层是数据链路层,所以我们还要知道「下一跳」的 MAC 地址。由于主机的路由表中可以找到下一跳的 IP 地址,所以可以通过 ARP 协议,求得下一跳的 MAC 地址。
ARP提供了将IP地址转换为链路层地址的机制,而且只为在同一个子网上的主机和路由器接口解析IP地址。 ARP寻址的具体过程如下:
假设主机 A和B在同一个网段,主机A要向主机B发送数据报文,具体的地址解析过程如下:
1、主机A首先查看自己的 ARP缓存表,确定其中是否包含有主机B对应的ARP表项。如果找到了对应的MAC地址,则主机A直接利用ARP表中的MAC地址,对IP数据包进行帧封装,并将数据包发送给主机B;
2、如果主机A在ARP表中找不到对应的MAC地址,则将缓存该数据报文,然后 以广播方式发送一个ARP请求报文。ARP请求报文中的发送端IP地址和发送端MAC地址为主机A的IP地址和MAC地址,目标IP地址和目标MAC地址为主机B的IP地址和 全0的MAC地址。由于ARP请求报文以广播方式发送,该网段上的所有主机都可以接收到该请求,但 只有被请求的主机(即主机B)会对该请求进行处理。
3、主机B比较自己的IP地址和ARP请求报文中的目标IP地址, 当两者相同时进行如下处理:将ARP请求报文中的发送端(即主机A)的IP地址和MAC地址 存入自己的ARP表中。之后以 单播方式发送ARP响应报文给主机A,其中包含了自己的MAC地址。
4、主机A收到ARP响应报文后, 将主机B的MAC地址加入到自己的ARP表中以用于后续报文的转发,同时将IP数据包进行封装后发送出去。
当主机A和主机B不在同一网段时,主机A就会先向 网关发出ARP请求,ARP请求报文中的 目标IP地址为网关的IP地址。当主机A从收到的响应报文中获得网关的MAC地址后,将报文封装并发给网关。如果 网关没有主机B的ARP表项,网关会 广播ARP请求,目标IP地址为主机B的IP地址,当网关从收到的响应报文中获得主机B的MAC地址后,就可以将报文发给主机B;如果网关已经有主机B的ARP表项,网关直接把报文发给主机B。
ARP表项又分为动态ARP表项和静态ARP表项。
1、动态ARP表项由ARP协议通过ARP报文自动生成和维护,可以被老化,可以被新的ARP报文更新,可以被静态ARP表项覆盖。
2、静态ARP表项通过手工配置和维护,不会被老化,不会被动态ARP表项覆盖。直到重新启动计算机为止。
2、DHCP协议
客户端首先发起 **DHCP 发现报文(DHCP DISCOVER) **的 IP 数据报,由于客户端没有 IP 地址,也不知道 DHCP 服务器的地址,所以使用的是 UDP 广播通信,其使用的广播目的地址是 255.255.255.255(端口 67) 并且使用 0.0.0.0(端口 68) 作为源 IP 地址。DHCP 客户端将该 IP 数据报传递给链路层,链路层然后将帧广播到所有的网络中设备。
DHCP 服务器收到 DHCP 发现报文时,用 **DHCP 提供报文(DHCP OFFER) **向客户端做出响应。该报文仍然使用 IP 广播地址 255.255.255.255,该报文信息携带服务器提供可租约的 IP 地址、子网掩码、默认网关、DNS 服务器以及 IP 地址租用期。
客户端收到一个或多个服务器的 DHCP 提供报文后,从中选择一个服务器,并向选中的服务器发送 DHCP 请求报文(DHCP REQUEST)进行响应,回显配置的参数。
最后,服务端用DHCP ACK 报文对 DHCP 请求报文进行响应,应答所要求的参数。
3、NAT协议
NAT 就是同个公司、家庭、教室内的主机对外部通信时,把私有 IP 地址转换成公有 IP 地址。两个私有 IP 地址都转换 IP 地址为公有地址 120.229.175.121,但是以不同的端口号作为区分。 由于 NAT/NAPT 都依赖于自己的转换表,因此会有以下的问题:
- 外部无法主动与 NAT 内部服务器建立连接 ,因为 NAPT 转换表没有转换记录。
- 转换表的生成与转换操作都会产生 性能开销 。
- 通信过程中,如果 NAT 路由器重启 了,所有的 TCP 连接都将被 重置 。
解决的方法主要有两种方法。
- 第一种就是改用 IPv6
IPv6 可用范围非常大,以至于每台设备都可以配置一个公有 IP 地址,就不搞那么多花里胡哨的地址转换了,但是 IPv6 普及速度还需要一些时间。
- 第二种 NAT 穿透技术
NAT 穿透技术拥有这样的功能,它能够让网络应用程序主动发现自己位于 NAT 设备之后,并且会主动获得 NAT 设备的公有 IP,并为自己建立端口映射条目,注意这些都是 NAT设备后的应用程序自动完成的。
也就是说,在 NAT 穿透技术中,NAT设备后的应用程序处于主动地位,它已经明确地知道 NAT 设备要修改它外发的数据包,于是它主动配合 NAT 设备的操作,主动地建立好映射,这样就不像以前由 NAT 设备来建立映射了。
说人话,就是 客户端主动从 NAT 设备获取公有 IP 地址,然后自己建立端口映射条目,然后用这个条目对外通信,就不需要 NAT 设备来进行转换了。
3、ICMP协议
4、IGMP协议
- IGMP 报文向路由器申请加入和退出组播组,默认情况下路由器是不会转发组播包到连接中的主机,除非主机通过 IGMP 加入到组播组,主机申请加入到组播组时,路由器就会记录 IGMP 路由器表,路由器后续就会转发组播包到对应的主机了。
- IGMP 报文采用 IP 封装,IP 头部的协议号为 2,而且 TTL 字段值通常为 1,因为 IGMP 是工作在主机与连接的路由器之间。
5、ping的工作原理
6、traceroute的工作原理
traceroute 的第一个作用就是故意设置特殊的 TTL, 来追踪去往目的地时沿途经过的路由器。
它的原理就是利用 IP 包的 生存期限 从 1 开始按照顺序递增的同时发送 UDP 包,强制接收 ICMP 超时消息的一种方法。
比如,将 TTL 设置 为 1,则遇到第一个路由器,就牺牲了,接着返回 ICMP 差错报文网络包,类型是 时间超时。接下来将 TTL 设置为 2,第一个路由器过了,遇到第二个路由器也牺牲了,也同时返回了 ICMP 差错报文数据包,如此往复,直到到达目的主机。这样的过程,traceroute 就可以拿到了所有的路由器 IP。
traceroute 在发送 UDP 包时,会填入一个 不可能的端口号值作为 UDP 目标端口号:33434。然后对于每个下一个探针,它都会增加一个,这些端口都是通常认为不会被使用,不过,没有人知道当某些应用程序监听此类端口时会发生什么。
所以, 当差错报文类型是端口不可达时,说明发送方发出的 UDP 包到达了目的主机。
traceroute 还有一个作用是 故意设置不分片,从而确定路径的 MTU。
它的工作原理如下:
首先在发送端主机发送 IP 数据报时,将 IP 包首部的 分片禁止标志位设置为 1。根据这个标志位,途中的路由器不会对大数据包进行分片,而是将包丢弃。
随后,通过一个 ICMP 的不可达消息将 数据链路上 MTU 的值一起给发送主机,不可达消息的类型为「 需要进行分片但设置了不分片位」。
发送主机端每次收到 ICMP 差错报文时就 减少包的大小,以此来定位一个合适的 MTU 值,以便能到达目标主机。