精华内容
下载资源
问答
  • 记录一个docker IPv6启动导致宿主机...于是进行尝试,首先修改daemon.json中ipv6网段,修改后启动,照常无用…网上查了许多资料进行很大尝试都没有用…但是重启电脑后宿主机又IPv6又可以通信了(docker没有设置开机自

    记录一个docker IPv6启动导致宿主机IPv6无法通信的问题

    前几天因为项目需要,需要让docker容器开启IPv6服务。于是就按照网上所说的配置daemon.json文件,开启了IPv6功能,然后重新启动docker。结果,一启动通过IPv6就导致宿主机无法用IPv6与外部通信了。

    当时推测:可能是网段冲突了。

    于是进行尝试,首先修改daemon.json中ipv6网段,修改后启动,照常无用…网上查了许多资料进行很大尝试都没有用…但是重启电脑后宿主机又IPv6又可以通信了(docker没有设置开机自启动)但是docker一旦启动IPv6又不能通信了。经查询可能是docker启动ipv6时候把宿主机ipv6路由关了

    于是进行第二步:开启ipv6路由。

    首先重启网络服务…service network restart…结果报错…**Job for network.service failed. See ‘systemctl status network.service’ and ‘journalctl -xn’ for details.**经过网上查询,大概有这么几种方法:
    1、.和 NetworkManager 服务有冲突,直接关闭 NetworkManger 服务就好了, service NetworkManager stop,并且禁止开机启动 chkconfig NetworkManager off 。之后重启就好了。

    2、和配置文件的MAC地址不匹配,这个也好解决,使用ip addr(或ifconfig)查看mac地址 将/etc/sysconfig/network-scripts/ifcfg-xxx中的HWADDR(如果没有就添加上)改成这个MAC地址。

    3、设定开机启动一个名为NetworkManager-wait-online服务,命令为:
    systemctl enable NetworkManager-wait-online.service

    经测试无一有用…

    然后再绝望之际想着那就直接启动容器配置文件吧…结果…容器一启动宿主机ipv6又能与外部通信了…

    后来,又去测试了一遍,又报错。
    首先docker创建了ipv6的网络
    在这里插入图片描述
    一创建服务器的ipv6网络就不能与外部通信,接着编辑sysctl.conf 文件加入如下语句
    在这里插入图片描述再接下来配置ip6tables:
    sudo ip6tables -t nat -I POSTROUTING -j MASQUERADE
    sudo service ip6tables save
    在这里插入图片描述
    最后再ping下外网测试下ipv6网络是否恢复正常。

    展开全文
  • 一、前言二、设备2.1 调制解调器2.2 中继器2.3 网卡2.4 交换机2.5 路由器三、协议3.1 DNS3.2 ARP3.3 DHCP3.4 NAT3.5 ICMP四、通信4.1 判断是否在同一网段4.2 同网段不同主机通信4.3 不同网段不同主机通信五、结束语...
    • 一、前言

    • 二、设备

      • 2.1 调制解调器

      • 2.2 中继器

      • 2.3 网卡

      • 2.4 交换机

      • 2.5 路由器

    • 三、协议

      • 3.1 DNS

      • 3.2 ARP

      • 3.3 DHCP

      • 3.4 NAT

      • 3.5 ICMP

    • 四、通信

      • 4.1 判断是否在同一网段

      • 4.2 同网段不同主机通信

      • 4.3 不同网段不同主机通信

    • 五、结束语

    作者:薛勤(赞赏账户名)

    微信公众号:代码艺术

    未经许可,禁止转载!

    一、前言

    面试时回答计算机网络这块的问题,很对应试者回答的内容多为讲解计算机网络的 TCP 三次握手、四次挥手,或者是 OSI 七层模型的细节阐释。

    当被问到数据包如何在网络上进行传输的,比如 IP 路由、ARP 寻址、交换机与路由器的区别、私有 IP 与全局 IP 的转换等细节,只能沉默以对。

    本文将会梳理清楚数据包在网络中由一台主机发往另一台主机的详细过程,内容包括调制解调器、中继器、网卡、交换机、路由器等网络设备,以及 IP 协议相关技术 DNS、ARP、DHCP、NAT、ICMP等。

    二、设备

    搭建一套网络环境要涉及各种各样的电缆和网络设备,既然要搞清楚数据的传输,那就先搞清楚数据传输的媒介。

    11f28bf8fbbf04fa75d533a57f013c13.png

    如图所示,主机A向主机B发送数据包,需要经过交换机、路由器等设备。但在物理层(OSI 模型的第 1 层),还需要调制解调器和中继器。

    2.1 调制解调器

    现代家庭网络搭建宽带时,可以看到路由器后接的调制解调器(英语:Modem),我们一般亲切称之为“猫”。

    调制解调器是将计算机产生的数字信号转换为模拟信号进行传输,并解调收到的模拟信号以得到数字信号的电子设备。

    以前用电话线上网用的是电话调制解调器,现在都是光纤上网,用的是光纤调制解调器,即用于数字信号与光纤信号的转换。

    2.2 中继器

    同调制解调器一样工作在物理层的还有中继器,它的作用是将电缆传过来的电信号或光信号经由中继器的波形调整和放大再传给另一个电缆,简而言之,中继器是对减弱的信号进行放大和发送的设备。

    2.3 网卡

    一台计算机要想上网必备的就是网卡,而现在大多数计算机也早已内置了网卡。

    网卡,又称为网络适配器、LAN 卡,是一块被设计用来允许计算机在计算机网络上进行通讯的计算机硬件。由于其拥有 MAC 地址,因此属于 OSI 模型的第 2 层(数据链路层)。

    我们所讲的计算机的 MAC 地址或主机的 MAC 地址,实际上是网卡的 MAC 地址。

    如下图所示,Mac 电脑可以在「系统偏好设置 - 网络 - Wi-Fi - 高级 - 硬件」查看当前计算机的 MAC 地址。

    dcda93bb59900f1b9f1db300833c376b.png

    2.4 交换机

    3996c76af11a96f9ea7bf740b9c5278b.png

    交换机是一种网络设备,通过报文交换方式接收和转发数据到目标设备。

    简而言之,交换机就是接收数据包、查看数据包的目的地址以选择路由、将数据包转发给下一跳路由。

    需要明确,交换机不修改数据包,只负责转发数据包。

    交换机又被称为网桥或者 2 层交换机,所谓 2 层,就是工作于数据链路层。这代表着,交换机在转发数据包时,不知道也无需要知道来源主机和目的主机的 IP 地址,只需知其 MAC 地址。

    2.4.1 交换机的工作原理

    交换机内部的 CPU 会在每个端口成功连接时,通过将 MAC 地址和端口对应,形成一张 MAC 表。

    端口号MAC地址
    1ac:bc:32:7d:2c:dd
    2ac:bc:43:8d:3c:dd
    ....

    当一台交换机安装配置好之后,其工作过程如下:

    1. 交换机端口 1 收到 MAC 地址为 X 的计算机发给 MAC 地址为 Y 的计算机的数据包,交换机从而记下了 MAC 地址 X 在端口 1 。(学习)

    2. 如果目的地 MAC 地址 Y 不能在 MAC 表中找到时,交换机会把数据包转发给除端口 1 外的所有数据包。(洪泛)

    3. MAC 地址 Y 的计算机收到该数据包,向 MAC 地址 X 发出确认包。交换机收到该包后,从而记录下 MAC 地址 Y 所在的网段。

    4. 交换机向 MAC 地址 X 转发确认包。(转发)

    5. 交换机收到一个数据包,查表后发现该数据包的来源地址与目的地址属于同一个端口,交换机将不处理该数据包。(过滤)

    6. 交换机内部的 MAC 地址-端口 查询表的每条记录采用时间戳记录最后一次访问的时间。早于某个阈值(用户可配置)的记录被清除。(老化)

    2.5 路由器

    路由器可以连接不同的数据链路。例如连接两个以太网。现在,人们在家或办公室里连接互联网时所使用的宽带路由器也是路由器的一种。

    路由器又被称为 3 层交换机,是在 OSI 模型的第 3 层即网络层面上连接两个网络、并对分组报文进行转发的设备。

    交换机是根据物理地址(MAC地址)进行处理,参考的是 MAC 表,而路由器则是根据 IP 地址进行处理,所参考的表叫做路由控制表。

    值得一提的是,一般家用路由器都自带交换机的功能。

    2.5.1 路由控制表

    发送数据包时所使用的地址是网络层的 IP 地址。然而仅仅有 IP 地址还不足以实现将数据包发送到对端目标地址,在数据发送过程中还需要类似“指明下一个路由器或主机”的这方面信息,以便真正发往目标地址。保存这种信息的就是路由控制表。

    实现 IP 通信的主机和路由器都必须持有一张这样的表。它们也正是在这个表格的基础上才得以进行数据包发送的。

    该路由控制表的形成方式有两种:一种是管理员手动设置,另一种是路由器与其它路由器相互交换信息时自动刷新。前者也叫静态路由控制,而后者叫做动态路由控制。

    为了让动态路由及时刷新路由表,在网络上互连的路由器之间必须设置好「路由协议」,保证正常读取路由控制信息。

    2.5.2 查看本机路由表

    Linux 和 Mac 系统可以通过终端输入routenetstat -nr命令查看,如下图所示:

    e092606b979a4ad0b167ea96893467cd.png

    可以看到,路由控制表中记录着目的 IP 地址与下一步应该发送至路由器的地址。

    在发送 IP 包时,首先要确定 IP 包首部中的目标地址,再从路由控制表中找到该地址具有相同网络地址的记录,根据该记录将 IP 包转发给相应的下一个路由器。

    如果路由控制表中存在多条相同网络地址的记录,就选择一个最为吻合的网络地址。所谓最为吻合是指相同位数最多的意思。

    例如 172.20.100.52 的网络地址与 172.20/16 和 172.20.100/24 两项都匹配。此时,应该选择匹配度最长的 172.20.100/24 。

    默认路由是指路由表中任何一个地址都能与之匹配的记录。默认路由一般标记为 0.0.0.0/0 或 default。这里的 0.0.0.0/0 并不是指 IP 地址是 0.0.0.0,为了避免人们误以为 0.0.0.0 是IP地址,故后缀是 /0 。

    三、协议

    在访问 Web 站点和发送、接收电子邮件时,我们通常会直接输入 Web 网站的地址或电子邮件地址等那些由应用层提供的地址,而不会使用由十进制数字组成的某个 IP 地址。

    但是网络层需要的是 IP 地址,这就需要一种功能--将应用中使用的地址映射为 IP 地址。

    此外,在数据链路层也不需要 IP 地址,需要的是 MAC 地址传输数据包。由此可知,在实际通信中,还需要众多支持 IP 的相关技术才能够实现通信。

    IP 的辅助技术包括 DNS、ARP、ICMP、ICMPv6、DHCP、NAT 等。还包括如 IP 隧道、 IP多播、IP任播、质量控制以及网络拥塞的显式通知和 Mobile IP 技术。

    3.1 DNS

    域名系统(英语:Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和 IP 地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS 使用 TCP 和 UDP 端口 53 。当前,对于每一级域名长度的限制是 63 个字符,域名总长度则不能超过 253 个字符。

    3.1.1 DNS查询过程

    以查询 zh.wikipedia.org 为例:客户端发送查询报文 "query zh.wikipedia.org" 至DNS服务器,DNS服务器首先检查自身缓存,如果存在记录则直接返回结果。如果记录老化或不存在,则:

    1. DNS服务器向根域名服务器发送查询报文"query zh.wikipedia.org",根域名服务器返回顶级域 .org 的权威域名服务器地址。

    2. DNS服务器向 .org 域的权威域名服务器发送查询报文"query zh.wikipedia.org",得到二级域 .wikipedia.org 的权威域名服务器地址。

    3. DNS服务器向 .wikipedia.org 域的权威域名服务器发送查询报文"query zh.wikipedia.org",得到主机 zh 的A记录,存入自身缓存并返回给客户端。

    3.1.2 查看修改DNS

    如下图所示,Mac 电脑可以在「系统偏好设置 - 网络 - Wi-Fi - 高级 - DNS」查看当前网络所使用的 DNS。

    为什么我们从来不需要设置 DNS 服务器呢?这是因为现代路由器大多具备 DHCP 服务器的功能,DHCP 服务器自动为我们提供默认的 DNS 服务器地址。

    路由器会将连接到自身所有设备的 DNS 服务器地址设置为路由器自带的 DNS 服务器地址。连接该路由器的手机、电脑等网络设备的 DNS 请求,统一发送至路由器 DNS 服务器,此时路由器扮演各设备的 DNS 服务器。然后,路由器转发 DNS 请求,到实际的 DNS 服务器。实际的 DNS 服务器解析域名 IP,返回给路由器。最后,路由器再把 IP 返回给终端设备。

    发送 DNS 请求到 DNS 服务器获取网站真实的 IP 地址,这个过程需要一定的时间,影响这个时间的因素之一就是 DNS 服务器的地理位置。DNS 服务器离你越近,传输数据自然更快。因此默认情况下,路由器将从网络提供商提供获取最近的 DNS 服务器地址,实现最快的网络响应。

    网上有一些说法是,通过修改 DNS 服务器地址可以提高你的网速,这是有一定根据的,但却不一定是有效的。

    3.2 ARP

    只要确定了 IP 地址,就可以向这个目标地址发送 IP 数据报。然而,在底层数据链路层,进行实际通信却有必要了解每个 IP 地址所对应的 MAC 地址。

    于是需要一种方法,根据目的主机的 IP 地址,获得其 MAC 地址。这就是 ARP 协议要做的事情。所谓地址解析(address resolution)就是主机在发送帧前将目标 IP 地址转换成目标 MAC 地址的过程。

    另外,当发送主机和目的主机不在同一个局域网中时,即便知道对方的 MAC 地址,两者也不能直接通信,必须经过路由转发才可以。所以此时,发送主机通过 ARP 协议获得的将不是目的主机的真实 MAC 地址,而是一台可以通往局域网外的路由器的 MAC 地址。于是此后发送主机发往目的主机的所有帧,都将发往该路由器,通过它向外发送。这种情况称为委托 ARP 或 ARP代理(ARP Proxy)。

    3.2.1 ARP工作原理

    ARP 是如何知道 MAC 地址的呢?简单来说,ARP 是借助 ARP 请求与 ARP 响应两种类型的包确定 MAC 地址的。

    在每台安装有 TCP/IP 协议的电脑或路由器里都有一个 ARP 缓存表,表里的 IP 地址与 MAC 地址是一对应的,如下表所示。

    主机名称IP地址MAC地址
    A192.168.38.1000-AA-00-62-D2-02
    B192.168.38.1100-BB-00-62-C2-02
    C192.168.38.1200-CC-00-62-C2-02
    D192.168.38.1300-DD-00-62-C2-02
    E192.168.38.1400-EE-00-62-C2-02
    .........

    以主机A(192.168.38.10)向主机B(192.168.38.11)发送数据为例。

    1. 当发送数据时,主机A会在自己的 ARP 缓存表中寻找是否有目标 IP 地址。如果找到就知道目标 MAC 地址为(00-BB-00-62-C2-02),直接把目标 MAC 地址写入帧里面发送就可。

    2. 如果在 ARP 缓存表中没有找到相对应的 IP 地址,主机A就会在网络上发送一个广播(ARP request),目标 MAC 地址是“FF.FF.FF.FF.FF.FF”,这表示向同一网段内的所有主机发出这样的询问:“192.168.38.11的 MAC 地址是什么?”

    3. 网络上其他主机并不响应 ARP 询问,只有主机B接收到这个帧时,才向主机A做出这样的回应(ARP response):“192.168.38.11的 MAC 地址是00-BB-00-62-C2-02”,此回应以单播方式。这样,主机A就知道主机B的 MAC 地址,它就可以向主机B发送信息。同时它还更新自己的 ARP 高速缓存(ARP cache),下次再向主机B发送信息时,直接从 ARP 缓存表里查找就可。

    需要注意,上述示例中的主机 A 和主机 B 属于同一网段。如果主机 A 和主机 B 不属于同一网段,那么主机 A 发送的广播(ARP request)主机 B 就不可能收到。

    所以,在发送广播(ARP request)前,主机 A 会判断主机 B 是否属于同一网段(参考下文判断是否在同一网段),如果不属于,就会在自己的 ARP 缓存表中寻找网关(也就是路由器)的 MAC 地址。如果没有找到,主机 A 就会在网络上发送一个广播(ARP request)询问网关(路由器)的 MAC 地址。

    ARP 缓存表采用老化机制,在一段时间内如果表中的某一行没有使用,就会被删除,这样可减少缓存表的长度,加快查询速度。

    3.2.2 查看本机ARP

    如何查看本机 ARP 缓存表呢?

    • Windows:开始 → 运行 → cmd → arp -a(参数a表示显示所有内容)

    • Linux:终端 → arp -nv

    • MacOS:终端 → arp -nla

    01fd2dff278fc3b50c3eb472a67a5090.png

    3.3 DHCP

    如果逐一为每一台主机设置 IP 地址会是非常繁琐的事情。于是,为了实现自动设置 IP 地址、统一管理 IP 地址分配,就产生了 DHCP 协议。

    如下图所示,Mac 电脑可以在「系统偏好设置 - 网络 - Wi-Fi - 高级 - TCP/IP」查看当前本地 IP 配置。

    789c4b4231c743539a9475b80ae5f181.png

    DHCP 服务器会统一管理每个子网的 IP 地址分配范围、子网掩码、默认路由以及 DNS 服务器。

    有了 DHCP ,计算机只要连接到网络,就可以进行 TCP/IP 通信。也就是说,DHCP 让即插即用变得可能。而 DHCP 不仅在 IPv4 中,在 IPv6 中也可以使用。

    3.3.1 DHCP 的工作机制

    在使用 DHCP 之前,首先要架设一台 DHCP 服务器(很多时候用该网段的路由器充当 DHCP 服务器。)。然后将 DHCP 所要分配的 IP 地址设置到服务器上。此外,还需要将相应的子网掩码、路由控制信息以及 DNS 服务器的地址等设置到服务器上。

    DHCP 服务器搭建好之后,DHCP 的运行分为四个基本过程,分别为请求 IP 租约、提供 IP 租约、选择 IP 租约和确认 IP 租约。所谓租约,也就是计算机 IP 地址的有效期。

    由此,DHCP 的网络设置结束,可以进行 TCP/IP 通信。不需要 IP 地址时,可以发送 DHCP 解除包。

    另外,DHCP客户端在 IP 租约到期前可以发送 DHCP 请求包通知想要延长这个时限。

    3.4 NAT

    告诉大家一个有趣的实验,拿起你的手机和电脑,连接同一 Wi-Fi ,然后访问百度,输入“IP”,你会惊奇的看到手机和电脑显示的 IP 地址是相同的,而且并非是本机 IP 地址。

    那么问题来了,在数据包的发送过程中,是根据网络层的来源 IP 地址和目的 IP 地址进行定位。同一局域网的来源 IP 地址根据上面实验的结果显然都是相同的公网 IP ,那么百度响应过来的数据包是如何精确发送到我们的本地计算机呢?答案是使用 NAT 技术。

    NAT(Network Address Translator)是用于在本地网络中使用私有地址,在连接互联网时转而使用全局 IP 地址。除转换 IP 地址外,还出现了可以转换 TCP、UDP 端口号的 NART(Network Address Ports Translator)技术,由此可以实现用一个 IP 地址与多个主机的通信。现在我们所说的 NAT 多半都是 NAPT,或者称之为 IP 伪装。

    NAT(NAPT)实际上是为了正在面临地址枯竭的 IPv4 而开发的技术,不过,IPv6 为了提高网络安全也正在使用 NAT,在 IPv4 和 IPv6 之间的相互通信当中常常使用 NAT-PT。

    3.4.1 NAT的工作机制

    如下图所示,以 10.0.0.10 的主机与 163.221.120.9 的主机进行通信为例。利用 NAT ,途中的 NAT 路由器将发送源地址从 10.0.0.10 转换为全局的 IP 地址(202.244.174.37)再发送数据。反之,当包从地址163.221.120.9 发过来时,目标地址(202.244.174.37)先被转换成私有 IP 地址 10.0.0.10 以后再被转发。

    f20bafc82f2a64a21faf3e4f0e40b18b.png

    NAT 对数据包的  IP 首部进行改动,由于在 TCP 或 UDP 中,IP 地址还用于校验和的计算,因此 IP 发生变化时,也需要相应地将 TCP、UDP 的首部进行转换。

    在 NAT(NAPT)路由器的内部,有一张自动生成的用来转换地址的表。当 10.0.0.10 向 163.221.120.9 发送第一个包时生成这张表,并按照表中的映射关系进行处理。

    当私有网络内的多台机器同时都要与外部进行通信时,仅仅转换 IP 地址,人们不免担心全局 IP 地址是否不够用。这时采用如下图所示的包含端口号一起转换的方式(NAPT)可以解决这个问题。

    455c2c5880cef0d7a3c5f81dad46bfac.png

    如图所示,主机 163.221.120.9 的端口号是 80,局域网有两个客户端 10.0.0.10 和 10.0.0.11 同时进行通信,并且这两个客户端的本地端口都是 1025。此时,仅仅转换 IP 地址为某个全局地址 202.244.174.37,会令转换后的所有数字完全一致。为此,只要将 10.0.0.11 的端口号转换为 1026 就可以解决问题。

    将上图椭圆形内容进行合并,生成一个 NAPT 路由器的转换表,就可以正确地转换地址跟端口的组合,令客户端 A、B 能同时与服务器之间进行通信。

    这种转换表在 NAT 路由器上自动生成。例如,在 TCP 的情况下,建立 TCP 连接首次握手时的 SYN 包一经发出,就会生成这个表。而后又随着收到关闭连接时发出 FIN 包的确认应答从表中被删除。

    在使用 TCP 或 UDP 的通信当中,只有目标地址、源地址、目标端口、源端口以及协议类型(TCP 还是 UDP)五项内容都一致时才被认为是同一个通信连接。也就是复用转换表的同一行记录。

    3.5 ICMP

    架构 IP 网络时需要特别注意两点:确认网络是否正常工作,以及遇到异常时进行问题诊断。

    例如,一个刚刚搭建好的网络,需要验证该网络的设置是否正确。ICMP 正是提供这类功能的一种协议。

    ICMP 的主要功能包括,确认 IP 包是否成功送达目标地址,通知在发送过程当中 IP 包被废弃的具体原因,改善网络设置等。有了这些功能以后,就可以获得网络是否正常、设置是否有误以及设备有何异常等信息,从而便于进行网络上的问题诊断。

    在 IP 通信中如果某个 IP 包因为某种原因未能达到目标地址,那么这个具体的原因将由 ICMP 负责通知。例如,主机 A 向主机 B 发送了数据包,由于某种原因,途中的路由器未能发现主机 B 的存在,这时,路由器就会向主机 A 发送一个 ICMP 包,说明发往主机 B 的包未能成功。

    ICMP 的消息大致可以分为两类:一类是通知出错原因的错误消息,另一类是用于诊断的查询消息。

    3.5.1 ping

    ping(呯)是使用 ICMP 协议的一种计算机网络工具,用来测试数据包能否透过 IP 协议到达特定主机。

    ping 的运作原理是向目标主机传出一个 ICMP 的请求回显数据包,并等待接收回显回应数据包。程序会按时间和成功响应的次数估算丢失数据包率(丢包率)和数据包往返时间(网络时延,Round-trip delay time)。

    ping 有时候也被我们说成了动词,如 “ping一下计算机XXX,看它是否开着。”

    下面以 ping 百度的网址作为示例:

    e8d40bc864cebfed6f6dc09f5eebf017.png

    可以看到,百度的 IP 地址是 61.135.169.125,以 64 bytes 测试,反应时间 5.589 毫秒,TTL(Time To Live)值为 56。

    这里不得不解释 TTL 是什么?

    IP 包中有一个字段叫做 TTL (Time To Live,生存周期),它的值随着没经过一次路由器就会减 1,直到减到 0 时该 IP 包会被丢弃。此时,IP 路由器将会发送一个 ICMP 超时的消息给发送端主机,并通知该包已被丢弃。

    示例中 TTL 的值为 56 ,假设发送端设置的 TTL 为 64,那么中间经历的路由数为 64 - 56 = 8。

    四、通信

    根据 OSI 七层模型,程序在发送消息时,应用层按既定的协议打包数据,随后由传输层加上双方的端口号,由网络层加上双方的 IP 地址,并指明上层协议(TCP/UDP),由链路层加上双方的 MAC 地址,并将数据拆分成数据帧,经过多个路由器和网关后,达到目标机器。简而言之,就是按“端口 -> IP 地址 -> MAC 地址”这样的路径进行数据的封装和发送,解包的时候反过来操作即可。

    但是对于同一网段和不同网段主机间的通信过程是有所不同的,接一下笔者将对网络传输的基本原理进行梳理。

    4.1 判断是否在同一网段

    所谓的同网段可以简单理解为同一路由器下的主机,不同网段则是不同路由器下的主机。

    但是事实上,主机 A 在与其它主机进行通信时,还需要通过对目的主机 B 的 IP 地址进行计算,进而判断是否在同一网段。具体过程为:

    主机 A 通过自己的子网掩码与主机 B 的 IP 地址进行位与运算得出网络号,主机 A 也会通过子网掩码与自己的 IP 地址进行位与运算得出网络号,两者网络号相同即为同一网段,不同则为不同网段。

    4.2 同网段不同主机通信

    如下图所示,同一网段下的主机通信其实是不需要路由器进行中转的。

    7e73ecfea430393d3c0e5a93e4d1a16e.png

    上图中,当主机 A 向主机 B 发送数据时,是在已知主机 B 的 IP 地址的前提下。程序在发送消息时,应用层、传输层、网络层都已准备就绪,但是链路层还需要下一跳的 MAC 地址。

    通过判断得知主机 A 与主机 B 在同一网段,于是使用 ARP 协议获取主机 B 的 MAC 的地址,最后将数据拆分成数据帧发往主机 B ,中途经交换机进行端口转发。

    4.3 不同网段不同主机通信

    如下图所示,不同网段其实也意味着是不同路由器下的主机进行通信。

    cbb5afc0418250ad6374e4ce3a25e4c6.png

    上图中,当主机 A 向主机 B 发送数据时,是在已知主机 B 的 IP 地址的前提下。程序在发送消息时,应用层、传输层、网络层都已准备就绪,但是链路层还需要下一跳的 MAC 地址。

    通过判断得知主机 A 与主机 B 不在同一网段,于是主机 A 查询本机路由控制表得到网关(即路由器)的 IP 地址,有了路由器 IP 地址后,再使用 ARP 协议获取路由器的 MAC 的地址,最后将数据包拆分成数据帧发往路由器 。

    路由器收到主机 A 发送的数据包,检查目的 MAC 地址是否为自身,否则丢弃。将 IP 包中目标 IP 与路由表进行匹配,如匹配路由表不成功,则丢弃,返回 ICMP 错误消息;若成功,则通过路由表找到下一跳路由器的 IP 地址,通过 ARP 协议获取下一跳路由器的 MAC 地址,将数据包的来源 MAC 地址设置为自身,目的 AMC 地址设置为下一跳路由器的 MAC 地址,最后将数据拆分成帧发往下一跳路由器。

    后续路由器收到数据包后,经查路由表得知目的 IP 地址正好位于自身网段,于是便将数据包发往目的主机 B,具体过程这里不再赘述。

    五、结束语

    通过本文的学习,我们掌握了数据传输所依赖的设备与协议,但限于篇幅有限,本文并未对 TCP/IP 报文内容进行详细的阐述。

    希望本文能对你在探索计算机网络的世界中有所帮助!我的微信公众号「代码艺术」,欢迎联系。


    作者:薛勤,互联网从业者,编程爱好者。

    本文首发自公众号:代码艺术(ID: onblog)未经许可, 禁止转载

    61b6130ffdfd0a133d4601aadf9ca440.png
    展开全文
  • arp和rarp 同网段不同网段之间的通信过程 IPv6中已经没有arp rarp协议,所以这里都是IPv4。 链路层使用以太网地址来确定目的地址,应用则常使用ip地址通信 arp协议是指从ip地址获取对应的mac地址的协议 同网段和...

    arp和rarp 同网段和不同网段之间的通信过程

    IPv6中已经没有arp rarp协议,所以这里都是IPv4。

    链路层使用以太网地址来确定目的地址,应用则常使用ip地址通信
    arp协议是指从ip地址获取对应的mac地址的协议

    同网段和不同网段之间的通信过程

    网上别人写的很经典的ping过程,不清楚原创作者是谁:

    在当今的以太网络通信中,在IP数据包中有两个必不可少的地址,那就是IP地址和网卡地址(即MAC地址),在数据包中,无论是IP地址还是MAC地址,都有源地址和目标地址,因为通信是双方的,所以就必须同时拥有双方的地址!在同一IP网络中通信,将会发生以下事件:
    主机A与主机B通信,这时主机A肯定首先要封装这些需要发给主机B的数据包,那么对于主机A来说,自己的IP地址和MAC自己肯定能够轻易得到,对于主机B的IP地址这时主机A也应该知道,要不然它就不清楚自己将要和谁通信,当有了自己的IP地址,MAC地址以及主机B的IP地址后,主机A在数据包中可以正确地写上源IP地址,目标IP地址,接下来的工作就是写入自己的MAC地址(即源MAC),最后还必须正确写入目标主机B的MAC地址,可这时主机A才发现自己根本没有目标主机B的MAC地址,那该怎么办呢?这时主机A就通过比较上面已经封装好的源IP和目标IP,通过子网掩码计算一下,发现源IP和目标IP恰好在同一个IP网络内,那么它想要得到目标主机B的MAC地址就有办法了,首先主机A就向本网段发过一个ARP请求,这个ARP请求包中包括主机A的源IP地址,源MAC地址,目标主机B的IP地址,而目标MAC地址为广播MAC地址(全部为F),因为我们要找的就是目标MAC,所以这里用广播MAC地址,又因为是以太网,所以整个局域网的所有主机都能收到这个请求MAC地址的数据包,当然主机B也能收到,因此在主机B收到此ARP请求后,立即构建一个包括自己的MAC地址的ARP回应包,回应给主机A,当主机A收到这个ARP回应后,终于完成了找寻目标MAC的重大任务,从而把目标主机B的MAC地址正确封装进上面还未封装结束的正准备发给主机B的数据包,在这时,源IP和源MAC以及目标IP和目标MAC都已正确存在于数据包中,那么这里主机A向网络内发出这些数据包,因为目标地址在本网段,所以本网段所有主机都能收到这个数据包(这是以太网的特性),最后只有真正的目标主机B能够打开这些数据包,在此,同网段两台主机之间的通信就此圆满结束!在这里应该注意另外一个问题,因为主机A要寻找的目标主机B在同一网络,所以主机A能够通过ARP得到目标主机B的MAC地址,从而完成通信,当主机A在封装数据包时检测到目标主机并不在本网段,在这时,数据包不能把目标主机的MAC地址顺利封装进去,那么就用到另一种方法,那就是网关,主机A在准备发向主机B的数据中,封装好自己的IP地址和MAC地址,同时也封装好目标主机B的IP地址,数据包封装到这里,主机A就利用上面得到同网段目标主机B的方法去请求得到网关的MAC地址,同样也是用ARP去广播,因为网关必须和本机在同一网段,理所当然,网关能够收到这个ARP请求并能正确回应给主机A,这时主机A在数据包中封装好自己的IP地址和MAC地址,同时也封装好目标主机B的IP地址和网关的MAC地址,把数据包从网卡发出去,因为目标MAC是网关的,所以网关收到这个数据包后,发现目标MAC是自己,而目标IP却是别人,所以它不可以再往上打开这个数据包,它要做的工作就是把这些数据包发给下一跳路由器(如果网关自身就是一台路由器的话),如果网关是一台普通PC,那么它就发给路由器,让路由器把这些数据包正确传输到远程目标网络,到达远程网络后,它们的网关再将数据包发给数据包中的目标IP,即源主机A苦苦寻找的目标主机B,从而真正结束不同网络之间的通信,回应的数据包也是用同样的方法到达目的地,在这里,还需要注意的是,当网关把数据包发给下一跳路由器时,这个数据包必须由网关把目标MAC改成下一跳路由器的MAC地址(通过ARP得到),否则下一跳路由器收到目标MAC不是自己的数据包,会丢弃不予理睬,下一跳路由器再发给下一跳路由器同样要把目标MAC地址改为下一跳路由器的MAC地址再发出去!
    最后还可以总结出:在网段通信时,数据包中的地址就是源IP,目标IP,源MAC,目标MAC,根本用不到网关,而当检测到需要把数据包发到远程网络时,这时,目标MAC就必须改变了,在还没有出内网时,目标MAC必须写成网关的MAC地址发出去,当网关收到时,再把目标MAC地址改成下一跳的MAC地址发出去,而源IP和源MAC以及目标IP不曾改变,就算到达了公网上,目标MAC仍然在不断改变着,直到最后,这个数据包到达目标IP的网络,最终通信结束!

    arp高速缓存

    arp -a可以看到当前主机缓存的ip地址和mac地址对应的列表
    可以看到缓存的都是同网段的机器的mac地址,因为需要arp请求的地址,都是下一跳不经过路由器就能到的地址,这地址才有意义。

    主机和其他主机通信时,只有当目的地址和当前地址在同一个网络中时,才会发送arp请求这个目的地址的mac地址,如果交换机收到这个arp请求,发现这个ip对应的mac地址已经自己已经缓存了,就将这个地址回应给当前主机,发送给所有端口。如果是不同网段间的通信,源地址和目的地址不在同一个网络中就根据路由表,那么系统会选择下一跳的主机,目的mac地址填下一跳主机的地址。

    arp攻击

    可以编造包,去一直请求arp请求当前网络中不存在的主机,这样arp包会被发送到整个网络的所有主机上,也就是arp广播攻击了。
    也可以编造包,声称ip x.x.x.x的mac地址是自己,arp欺骗,劫持流量,影响正常通信。

    其他:
    安全是个大问题,以后遇到了再学吧。
    ARP攻击防范方法总结

    arp代理

    当一个路由器收到arp请求时,它可以代替它所连接到的主机回应这个请求,例如主机10.10.10.10有一条10.10.0.0/16的路由,他认为10.10.20.10和它在同一个网络内,所会发送arp请求,请求获得10.10.20.10的地址,通常是这样子,可是有时候这个地址并不在这个网络内,路由器收到地址后发现,它的en0连接到10.10.10.0/24,en1连接到10.10.20.0/24,如果没有配置arp代理,那正常的,路由器不会有任何响应,主机10.10.10.10会发现自己不能连接到目的地址,如果配置了arp代理,路由器就会把en0的地址回应给10.10.10.10,告诉他这就是10.10.20.10的地址。

    不必要arp

    gratuitous arp,既发送arp请求查询本机ip的mac地址,可以用于检测ip冲突,或者是当前接口mac地址变更后,向局域网内更新自己的mac地址变换

    tcp/ip卷一中文版把这个翻译成免费arp,这是不准确的。

    rarp

    逆地址解析协议,可以用于网卡启动时,向rarp server请求自己的ip。和dhcp类似的功能,现在基本都使用dhcp。

    转载于:https://www.cnblogs.com/zhangyufei/p/5602304.html

    展开全文
  • 1、什么是ipv6 v6地址后面经常接/数字,这个是他网段划分数字 在这里插入图片描述 与ipv4的32位4段10进制不同,采用128位分成8段的16进制 eg:2001:0000:1F1F:0000:0000:0100:11A0:ADDF 为了简化其表示法, rfc...

    1、什么是ipv6

    v6地址后面经常接/数字,这个是他网段划分数字

    ipv6的子网掩码完全由前缀地址替代,每位16个前缀地址,是ipv4的两倍
    在这里插入图片描述
    在这里插入图片描述

    与ipv4的32位4段10进制不同,采用128位分成8段的16进制

    在这里插入图片描述

    eg:2001:0000:1F1F:0000:0000:0100:11A0:ADDF

    为了简化其表示法, rfc2373提出每段中前面的0可以省略,连续的0可省略为"::",但只能出现一次。例如

    1080:0:0:0:8:800: 200C : 417A 可简写为 1080::8:800: 200C : 417A

    FF01:0:0:0:0:0:0:101 可简写为 FF01::101

    IPv4地址IPv6地址
    组播地址( 224.0.0.0/4)IPv6组播地址(FF00::/8)
    广播地址无,只有任播( anycast)地址
    未指定地址为 0.0.0 .0未指定地址为 ::
    回路地址为 127.0.0.1回路地址为 ::1
    公用 IP地址可汇聚全球单播地址
    私有地址( 10.0.0 .0/8、172.16.0.0/12和192.168.0.0/16)本地站点地址( FEC0::/48)
    Microsoft自动专用IP寻址自动配置的地址(169.254.0.0/16)本地链路地址( FE80::/64)
    表达方式:点分十进制表达方式:冒号十六进制式(取消前置零、零压缩)
    子网掩码表示:以点阵十进制表示法或前缀长度表示法( CIDR)子网掩码表示:仅使用前缀长度表示法( CIDR)

    2、v6的作用域与地址分类

    作用域

    link local地址 本链路有效

    site local地址 本区域(站点)内有效,一个site通常是个校园网

    global地址 全球有效,即可汇聚全球单播地址

    地址

    unicast 单播(单点传送)地址

    multicast 组播(多点传送)地址

    anycast 任播(任意点传送)地址

    没有广播地址,由组播地址替代广播

    3、常见v6地址和前缀

    ::/128(0:0:0:0:0:0:0:0)只能作为尚未获得正式地址的主机原地址,不能作为目的地址,不能分配给真实的网络接口

    ::1/128,回环地址,相当于v4的127.0.0.1,ping loaclhost可以得到此地址

    2001::/16全球可聚合地址,由IANA地域和ISP分配,属于单播地址

    2002::/16 ,6to4地址,用于6to4自动构造隧道技术的地址,属于单播

    fe80::/10 本地链路地址,用于单一链路,适用于自动配置、邻机发现等,路由器不转发以fe80开头的地址。

    ff00::/8 组播地址。

    ::A.B.C.D 兼容IPv4的IPv6地址,其中<A.B.C.D>代表IPv4地址。自动将IPv6包以隧道方式在IPv4网络中传送的IPv4/IPv6节点将使用这些地址。

    ::FFFF:A.B.C.D 是IPv4映射过来的IPv6地址,其中<A.B.C.D>代表IPv4地址,例如 ::ffff:202.120.2.30 ,它是在不支持IPv6的网上用于表示IPv4节点

    4、组网v4和v6的技术策略

    双栈策略

    在网元中同时具有v6和v4两个协议线,同时接受处理收发v4分组,

    主机双栈:指可以根据需要对业务产生的数据进行v4或v6封装

    **路由器双栈:**路由器设备维护v6‘和v4的两套协议栈,使v4主机与v6主机通信,反之亦然,分别独立支持v4和v6两套协议,单独由其协议计算,维护不同的路由表。v6按v6路由表转发,v4按v4的转发

    隧道策略

    隧道:用协议来传输另外一种协议的数据技术。具有隧道出口和入口两个端口,一般这些端口为双栈节点。

    在隧道入口以一种协议的形式来对另外一种协议数据进行封装,并发送。在隧道出口对接收到的协议数据解封装

    5、v6技术相关

    隧道的配置方法分为手工配置隧道和自动配置隧道,而自动配置隧道又可以分为兼容地址自动隧道、 6to4隧道、6over4、ISATAP、MPLS隧道、GRE隧道等,这些隧道的实现原理和技术细节都不相同,相应的,其应用场景也就不同。

    DS-Lite方案

    采用IPv4-in-IPv6 隧道和NAT 这两个基本技术。特点是在接入网部署“纯IPv6”,对于用户的IPv4业务应用,采用隧道技术把IPv4业务放到IPv6伺服器上。该方案适用于IPv4地址非常紧缺的运营商,在以IPv6业务为主的同时,兼容IPv4业务。据了解,目前法国电信、意大利电信、西班牙电信以及北美的Comcast等运营商都比较关注这个方案。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oAOTtDIK-1614762282611)(file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml12928\wps1.jpg)]

    **B4 - Basic Bridging BroadBand 网关基本桥接宽带单元。**

    **AFTR - Address Family Transition Router 地址族过渡路由器单元,AFTR设备负责执行隧道封装、解封装和IPv4-IPv4地址翻译。**

    6RD方案

    它的理念在于:接入网依然保持原有的IPv4,而在IPv4和IPv6业务支持和实现流程上则与DS-Lite正好相反。一般认为,6RD适用于IPv6业务发展早期——有少量IPv6协议用户存在,同时又以IPv4业务为主的运营商。它的价值在于可以保护运营商的初期投资,减少对现网业务的影响。目前,北美的at&t计划采用这个办法,Comcast也在做相关测试。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fYP0NGJf-1614762282612)(file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml12928\wps2.jpg)]

    6in4方案

    是一种****IPv6****转换传送机制,是将IPv6的数据包直接封装在****IPv4****数据包中。缺点是需要公网IPv4地址。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2YzJHhkf-1614762282614)(file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml12928\wps3.jpg)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LW3Wz1rd-1614762282615)(file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml12928\wps4.jpg)]

    6to4方案

    6to4定义了一个网络前缀2002::/16用于表达这是一个6to4网络整体,任何一个公共IPv4地址将地址的十六进制值加在6to4网络前缀之后,从而产生一个前缀数为48的相应IPv4的6to4子网的网络前缀。由于6to4的任播前缀操作问题无法解决,该部分标准在2015年已弃用。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-be1MADHy-1614762282615)(file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml12928\wps5.jpg)]

    AICCU方案

    产生一个前缀数为48的相应IPv4的6to4子网的网络前缀。由于6to4的任播前缀操作问题无法解决,该部分标准在2015年已弃用。

    [外链图片转存中…(img-be1MADHy-1614762282615)]

    AICCU方案
    展开全文
  • 做项目的时候需要架设一个 IPv6的网络,架设好以后,... 因为IPv6地址的IP资源非常丰富,所以针对不同网段,赋予了不同的含义,比如说200~开始的才是Globe的IP;或者是现在的GlobeIP只开放了200~网段......我没有找
  • 在VMware下实现主机与虚拟主机之间的IPv6通信    首先需要安装一个虚拟机,本次实验采用的是linux系统,首先需要确认Linux系统可支持IPv6地址,查询方法:输入 ifconfig,回车后,如果有...
  • 两台pc(pc1,pc2)分别连接switch的两个端口(eth1,eth2),pc1的eth1 连接 switch的eth1,pc2的eth1连接swith的eth2,pc1和pc2处于不同的子网,现在配置路由实现pc1和pc2之间的通信。 建议:在root用户下进行配置 ...
  • IPv6隧道通信技术

    2010-09-19 10:08:05
    IPv6隧道通信技术     隧道机制 隧道技术是一种通过互联网络基础设施在网络之间传递数据的方式。使用隧道传递的数据可以是不同协议的数据帧或包,隧道协议将这些其它协议的数据帧或包重新封装在...
  • IPV6

    千次阅读 2018-11-10 20:29:02
    1.DUAL STACK 双栈 即使用IPV6又使用IPV4 注:同时使用IPV6优于IPV4 2.IPV6没有分片功能,他不需要分片,使用PDM最小MTU路径检测 3.IPV6没有校验字段,在IP报头里面的校验字段IPV6不需要 4.缺省路由 :: 5.IPv6...
  • Docker的网络模式和如何跨主机通信

    万次阅读 2018-09-26 17:44:20
    Docker有四种网络模式:Bridge、Host、Container、None,一般常用的是前面两种,默认的是第一种,不安全的是第二种,以下介绍一下四种网络模式,并重点介绍一下如何配置自己的跨主机通信网络。 一、网络模式介绍 1...
  • KVM配置实现跨网段通信

    千次阅读 2017-01-11 20:16:32
    KVM配置实现跨网段通信,设置跨网段的虚拟网卡和公网vlan对应,配置虚拟机IP
  • IPv6

    千次阅读 2015-03-02 23:08:35
    1、IPv6提供比IPv4更大的地址空间 128bit --- 32bit 2、提供更好的端到端的连接,Peer-to-peer应用需要end-to-end连接。 Ipv6有巨大的地址空间,不需要像IPv4那样使用NAT 3、IPv6具有更好的设备自动配置功能。IPv4...
  • 网关的作用(两个内网主机通信原理)

    万次阅读 多人点赞 2016-10-29 17:48:32
    在使用不同通信协议、数据格式或语言,甚至体系结构完全不同的两种系统之间,网关是一个翻译器。与网桥只是简单地传达信息不同,网关对收到的信息要重新打包,以适应目的系统的需求。同时,网关也可以提供过滤和...
  • IPv6的组播地址(掌握IPv6通信原理的关键知识点)在IPv4中广泛的使用单播、广播、组播的方式。而在IPv6的应用环境中,使用单播,组播、任意播的新方式,放弃广播的使用,换而言之,在IPv6的环境中不再有广播的存在。...
  • 转发表(Forwarding Table) MAC地址 以太网地址或物理地址 它是一个用于确认网络设备位置的地址 每个网络设备(如网络适配器(Network Adapter), ...维护记录着局域网主机端口MAC地址与交换机端口对
  • 其次,如果可以使用Docker的host网络模式,就可以借用host的IPv6协议栈进行通信,而无需多余配置;以实现容器ipv6通信的需求。 Docker开启IPv6支持 vi /etc/docker/daemon.json { "ipv6": true, "fixed-cidr-...
  • IP&IP地址、ipv4&ipv6、子网掩码、网段计算、网络广播ID计算、默认网关、DNS服务器、DHCP服务器等知识
  • 说明:在TOS防火墙上使用IPV6功能时,需要升级到020版本,并且需要跟产品经理要license导入后才能有license功能。这里我们说的是NATPT的v4和v6过渡的一种技术,如果有版本支持NAT64和46,尽量选用后者。 一、组网...
  • 利用Winpcap 完成两台主机之间的数据通信(数据链路层) 仿真ARP协议获得网段主机的MAC表 使用帧完成两台主机通信(Hello! I’m …)
  • IPV6详解

    千次阅读 多人点赞 2020-03-03 14:49:11
    3、多宿主—一个物理接口可以同时拥有多个不同网段IPV6地址;但不同接口不 能在同一网段 4、自动配置 1)DHCP V6 2)auto-config路由器接口手工配置IPv6地址,然后路由器将自己地址的前缀(网络号)下放给PC,PC将...
  • 使用IPv6协议,,实现GNS3中的路由器与win7虚拟机进行通信,并抓包分析。
  • Docker有四种网络模式:Bridge、Host、Container、None,一般常用的是前面两种,默认的是第一种,不安全的是第二种,以下介绍一下四种网络模式,并重点介绍一下如何配置自己的跨主机通信网络。 一、网络模式介绍 1、...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,959
精华内容 3,583
关键字:

ipv6不同网段主机通信