网络中的数据包到底是如何转发的?

1. IP地址

 1.1 IP地址概述

  在计算机通信中,为了识别通信对端,必须要有一个类似于地址的识别码进行标识。在数据链路中的 MAC 地址正是用来标识同一个链路中不同计算机的一种识别码。
  作为网络层的 IP ,也有这种地址信息,一般叫做 IP 地址。IP 地址用于在“连接到网络中的所有主机中识别出进行通信的目标地址”。因此,在 TCP/IP 通信中所有主机或路由器必须设定自己的 IP 地址。不论一台主机与哪种数据链路连接,其 IP 地址的形式都保持不变。
  IP 地址(IPv4 地址)由32位正整数来表示。IP 地址在计算机内部以二进制方式被处理。然而,由于我们并不习惯于采用二进制方式,我们将32位的 IP 地址以每8位为一组,分成4组,每组以 “.” 隔开,再将每组数转换成十进制数。如下:

 1.2 IP 地址由网络和主机两部分标识组成

例如:
  IP地址是:  192.168.1.0
  对应的二进制:11000000.10101000.00000001.00000000

  子网掩码:255.255.255.0
  对应二进制:11111111.11111111.11111111.00000000

网络中的数据包到底是如何转发的?_第1张图片

  • 相互连接的每个网段的网络标识能不重复(同一网段的IP网络标识相同)。

  • 而同一网段内相连的主机必须有不同的主机标识。

  • 由此,可以通过设置网络地址和主机地址,在相互连接的整个网络中保证每台主机的 IP 地址都不会相互重叠。即 IP 地址具有了唯一性。

  简单的来说,同一网段内的计算机网络标识相同,主机标识不能重复出现。路由器连接不同网段,负责不同网段之间的数据转发,交换机连接的是同一网段的计算机。

 1.3 IP 地址的分类

  IP 地址分为四个级别,分别为A类、B类、C类、D类。它根据 IP 地址中从第 1 位到第 4 位的比特列对其网络标识和主机标识进行区分。

  • A 类 IP 地址是首位以 “0” 开头的地址。从第 1 位到第 8位是它的网络标识。用十进制表示的话,0.0.0.0~127.0.0.0 是 A 类的网络地址。A 类地址的后 24位相当于主机标识。因此,一个网段内可容纳的主机地址上限为16,777,214个。

  • B 类 IP 地址是前两位 “10” 的地址。从第 1 位到第 16位是它的网络标识。用十进制表示的话,128.0.0.0~191.255.0.0 是 B 类的网络地址。B 类地址的后 16
    位相当于主机标识。因此,一个网段内可容纳的主机地址上限为65,534个。

  • C 类 IP 地址是前三位为 “110” 的地址。从第 1 位到第 24位是它的网络标识。用十进制表示的话,192.0.0.0~223.255.255.0 是 C 类的网络地址。C 类地址的后 8位相当于主机标识。适用于小规模的局域网络,每个网络最多只能包含254台计算机。

  • D 类 IP 地址是前四位为 “1110” 的地址。从第 1 位到第 32位是它的网络标识。用十进制表示的话,224.0.0.0~239.255.255.255 是 D 类的网络地址。D类地址没有主机标识,常用于多播。
    网络中的数据包到底是如何转发的?_第2张图片
      在分配 IP 地址时关于主机标识有一点需要注意。即要用比特位表示主机地址时,不可以全部为 0 或全部为 1。因为全部为 0 只有在表示对应的网络地址或 IP 地址不可以获知的情况下才使用。而全部为 1 的主机通常作为广播地址。因此,在分配过程中,应该去掉这两种情况。这也是为什么 C 类地址每个网段最多只能有 254( 28 - 2 = 254)个主机地址的原因。


2. 子网掩码

  掩码,有掩饰的意思。我们知道,IP地址可以大概分为两部分,一部分是网络号,一部分是主机号。

  IP地址是:  192.168.1.0
  对应的二进制:11000000.10101000.00000001.00000000

  子网掩码:255.255.255.0
  对应二进制:11111111.11111111.11111111.00000000

  PS:注意,子网掩码二进制形式,前面的’1‘一定都是连续的!!!

  子网掩码的作用的就是,区分两个IP是否属于同一网段(同一子网)。子网掩码(二进制)前面有n个1,就表示IP地址(二进制)前面n位是网络号,后面的是主机号。有子网掩码的情况下,只要IP前面的网络号相同,就处于同一子网。同一子网内的IP可以直接通信。

例如
(1)
  IP地址是:192.168.1.0
  IP对应二进制:1100 0000.1010 1000.0000 0001.0000 0000
  子网掩码:255.255.255.0
  子网掩码对应二进制:11111111.11111111.11111111.00000000

分析:子网掩码前24位为1,则网络号为IP的前24位(二进制)。
   网络号是:1100 0000.1010 1000.0000 0001
表示IP从
1100 0000.1010 1000.0000 0001.0000 0000

1100 0000.1010 1000.0000 0001.1111 1111
都在同一网段,因为它们的网络号相同。
  十进制表示则为:IP在192.168.1.0 - 192.168.1.255之间的为同一网段。

(2)
  IP:192.168.1.188
  IP对应二进制:1100 0000.1010 1000.0000 0001.1011 1100
  子网掩码:255.255.255.224
  子网掩码对应二进制:11111111.11111111.11111111.11100000

分析:子网掩码前27位为1,则网络号为IP的前27位(二进制)。
   网络号是:1100 0000.1010 1000.0000 0001.101
表示IP从
1100 0000.1010 1000.0000 0001.1010 0000

1100 0000.1010 1000.0000 0001.1011 1111
都在同一网段,因为它们的网络号相同。
  十进制表示为192.138.5.160 - 192.138.5.191之间的为同一网段。

!!!这里要非常注意一点,网段内,子网掩码一定是和IP一同出现的,只有IP或只有子网掩码是没有任何意义的!!

  这里增加说一点,192.168.1.160\27,后面的27意思是,子网掩码的前27位为1。这是一种简写方式,一般很少见,但见到了最好也要知道是什么意思。

3. NAT

 3.1 定义

  NAT(Network Address Translation,网络地址转换)。用来将内网地址和端口号转换成合法的公网地址和端口号,建立一个会话,与公网主机进行通信。NAT主要是为了解决IPV4地址不够用的问题。因为一个设备就需要一个IP,出现了IP地址不足问题。

 3.2 IP伪装

  上面说的太官方,下面我来大白话说一下。例如在家庭局域网中,你的手机或者电脑的IP(Windows下可以使用ipconfig命令查看),和你在百度上查询自己的IP,二者肯定是不同的。因为家庭里你使用的是内网IP,是不被公共互联网承认的。所以,内网如果想和公网通信,就必须得有一个公网承认的IP。这个IP就是你的ISP服务商提供给你的那个公网IP(当然,肯定是要花钱才提供给你的)。内网IP是由路由器分配(或者手动分配的),是不被外网承认的IP。
  所以,当内网的数据包到达内网出口时(路由器),NAT会自动把数据包的源IP(也就是内网IP)改成ISP运营商提供给你的那个公网IP,内网内的每个设备都是如此,只有这样才能与互联网进行通信。

  举个例子,当你使用家庭里面的电脑访问外边的互联网时,你的IP显示的是你公网的IP。不仅仅是你的电脑,你家里的一切与路由器连接的设备访问公网时,从公网来看,显示IP都是ISP服务商提供给你的那个公网IP。

  当数据包经过你家里的路由器时,路由器会进行NAT转发,把你数据包的源的IP伪装成ISP服务商提供给你的那个公网IP。这样就可以顺利的和外网通信了。包括你的手机、其他的一些移动设备,只要是连接上路由器的,都是使用ISP服务商提供给你的那个外网IP来与外界进行通讯。当然,这只是内网向外网通信。

 3.3 端口转发

  当外网想向内网的某台PC通信时,目的IP一定是PC所在的外网IP。路由器怎么知道外网返回的数据包发给局域网中哪台主机呢?
  首先内网中的客户端将数据包传送给路由器,路由器解析数据包后发现,这个数据包是送给外网的。例如这个数据包的源IP:192.168.1.2,当路由器检测到这个数据包的目标IP是外网IP的时候,会把他的源IP改成真实的IP,会把源端口替换成一个索引值(一个新端口A),这个索引值与源数据包的IP和端口相对应,发送到互联网上。接收数据时,数据都会发送到路由器的A端口上,这时和原来生成的映射表(表里就是端口号A与源IP、源端口的映射)进行匹配,将数据包转发给A端口对应的内网IP:192.168.1.2与其对应的端口号,这其实就是一个端口转发的过程。外网的数据包就成功的转到内网的正确主机上。

 3.4 IP的分配

  NAT地址转换,使用了IP地址的三个范围,这些地址已经被声明为私有化。任何网络可以在内部随意的使用这些地址。仅有的规则是不允许包含这些地址的数据包出现在Internet上。这三个保留地址范围是:

  • 10.0.0.0 ~ 10.255.255.255/8 (16777216个主机)
  • 172.16.0.0 ~ 172.31.255.255/12 (1048576个主机)
  • 192.168.0.0 ~192.168.255.255/16 (65536个主机)

 3.5 现状分析

  须知现在的家庭宽带,运营商基本上已经不会直接分配公网IP到户了,比如电信,都是通过NAT44来实现IPV4公网IP不够用的问题,路由器直接获得的IP都是10.X.X.X类似这种的私网IP。也就是说,可能经过多次NAT,才会获得一个公网IP。我们家庭路由器的IP很大程度上也不是公网IP,而是运营商内部IP。

4. 端口映射

  上面已经讲解过端口转发,这里又为什么要再说一次呢?因为这里讲的与上边的NAT转发稍有不同。
  端口映射:端口映射就是将内网中的主机的一个端口映射到外网主机的一个端口,提供相应的服务。当互联网上的用户访问外网主机的这个端口时,服务器(路由器)自动将请求映射到对应局域网内部的机器上。(外网主机指的是内网通过ISP运营商获得的公网IP,可以是路由器,也可以是服务器)

比如
  我们在内网中有一台Web服务器,但是外网中的用户是没有办法直接访问该服务器的。于是我们可以在路由器上设置一个端口映射,只要外网用户访问路由器IP的80端口,那么路由器会把自动把流量映射到内网Web服务器的80端口上。并且,在路由器上还存在一个Session,当内网服务器返回数据给路由器时,路由器能准确的将消息发送给外网请求用户的主机。在这过程中,路由器充当了一个反向代理的作用,他保护了内网中主机的安全。

  网上有很多做端口映射的教程,但是这里要说一个前提,如果你想在路由器上做端口映射,一定要保证你路由器获得的IP是公网IP,不是运营商内网IP。具体操作是:(1)登录你自己家的路由器上去看看路由器的IP是多少(这里要注意,不是LAN口的IP!!)。(2)用百度搜索IP查询,查询到的IP。(3)对比二个IP,如果两个IP一样,说明你家路由器获得的是公网IP。

5. 广播、多播、单播

  单播、多播和广播单播”(Unicast)、“多播”(Multicast)和“广播”(Broadcast)这三个术语都是用来描述网络节点之间通讯方式的术语。那么这些术语究竟是什么意思?区别何在?

  • 单播:如果一个人对另外一个人说话,此时信息的接收和传递只在两个节点之间进行,那么用网络技术的术语来描述就是“单播”。但是通常使用“点对点通信”(Point to Point)代替“单播”,因为“单播”一般与“多播”和“广播”相对应使用。
  • 广播:“广播”在网络中的应用较多。同单播和多播相比,广播几乎占用了子网内网络的所有带宽。在IP网络中,广播地址用IP地址“255.255.255.255”来表示,这个IP地址代表同一子网内所有的IP地址。
  • 多播:“多播”也可以称为“组播”,在网络技术的应用并不是很多,网上视频会议、网上视频点播特别适合采用多播方式。因为如果采用单播方式,逐个节点传输,这种方式显然效率极低。如果采用不区分目标、全部发送的广播方式,虽然一次可以传送完数据,但是显然达不到区分特定数据接收对象的目的。
     (1)采用多播方式,既可以实现一次传送所有目标节点的数据也可以达到只对特定对象传送数据的目的。  
     (2)IP网络的多播一般通过多播IP地址来实现。多播IP地址就是D类IP地址,即224.0.0.0至239.255.255.255之间的IP地址。Windows 2000中的DHCP管理器支持多播IP地址的自动分配。

 5.1 多播技术的原理

  “多播”亦称“多点传送”(multicast),也就是一台主机发出的包可以同时被其他多个有资格的主机接收,这台主机和那些有资格的主机就形成了一个组,他们在组内的通信是广播式的。
  多播的工作原理是,将一个网络上的某些主机的网卡设置成多播传送工作模式,指定其不过滤以某一个多播传送地址作为目的物理地址的数据帧,这样,这些主机的驱动程序中就可以同时接收以该多播传送地址作为目的物理地址的数据帧,而其他主机的驱动程序却接收不到,这些主机在逻辑上便形成了一个“多播”组。采用这种技术,相对广播而言,可有效减轻网络上“多播”组之外的其他主机的负担,因为发送给“多播”组的数据不会被传送到它们的驱动程序中去处理,避免资源的无谓浪费。

6. 路由

  1. 发送数据包时所使用的地址是网络层的地址,即 IP 地址。然而仅仅有 IP 地址还不足以实现将数据包发送到对端目标地址,在数据发送过程中还需要类似于“指明路由器或主机”的信息,以便真正发往目标地址。保存这种信息的就是路由控制表。
  2. 该路由控制表的形成方式有两种:一种是管理员手动设置,另一种是路由器与其他路由器相互交换信息时自动刷新。前者也叫做静态路由控制,而后者叫做动态路由控制。
  3. IP 协议始终认为路由表是正确的。然后,IP 本身并没有定义制作路由控制表的协议。即 IP 没有制作路由控制表的机制。该表示由一个叫做“路由协议”的协议制作而成。

 6.1 ARP协议

  ARP协议——地址解析协议。尽管Internet上的每台机器都有一个(或)多个IP,但是仅有这些地址还不足以支撑发送数据包。数据链路层硬件网卡,比如以太网卡并不理解Internet地址。在以太网的环境里,每一块NIC在出厂时都配置了一个唯一的48位以太网地址,简称MAC地址。NIC根据其48位以太网地址来发送和接收数据。它们对IP地址完全一无所知。
  那么,又是如何知道目标IP所对应的MAC地址的呢?
  情况一:客户机A和客户机B在同一局域网内。客户机A想给客户机B发消息,知道客户机B的IP地址192.168.1.0,那么,客户机A发送一个ARP广播包到以太网络上,问,谁的IP是192.123.1.0?收到ARP包的客户机,比对包中询问的IP,如果包中IP和自己的IP对应上了,就发送一个ARP响应包(把自己的MAC放在这个包里)。同时,客户机A会建立一个临时ARP缓存表,如果下次再想给客户机B发消息,便不用再发送ARP请求包去寻找MAC了。既然是"缓存"表,意味着它有时效性,并且如果电脑或者通信设备重启的话,这张表就会清空;也就是说,如果下次需要通信,又需要进行ARP请求。在我们的windows/macos系统下,可以通过命令行"arp -a"查看具体信息=
网络中的数据包到底是如何转发的?_第3张图片
  情况二:当两个客户机不在同一局域网内时。客户机A想要知道客户机B的MAC地址,也是通过ARP询问的方式。当路由器接到这个ARP包时,发现目标IP在另一个局域网内,就会把这个包发送到另一个局域网。由另一个局域网的路由器负责寻找客户机B的MAC,最后把MAC返还给客户机A。

 6.2 DHCP

  DHCP(Dynamic Host Configuration Protocol ,动态主机配置协议)通常被用在大型的局域网络中,主要作用是集中的管理,分配IP地址,使网络环境中的主机动态的获得IP地址,Gateway地址,DNS服务器地址等信息,并能够提升地址的使用率。
  DHCP由三种机制分配IP地址:
1.自动分配方式:DHCP服务器为主机指定一个永久性的IP地址,一旦DHCP客户端第一次成功从DHCP服务器租用到IP地址,就可以永久使用该地址。
2.动态分配方式:DHCP服务器给主机指定一个有时间限制的IP地址, 时间到期或主机明确表示放弃该地址时,该地址可以被其他主机使用。
3.手工分配方式:客户端的IP地址是由网络管理员指定的,DHCP服务器只是将指定的IP地址告诉客户端主机。
三种地址分配方式中, 只有动态分配方式可以重复使用客户端不再需要的地址

8. DNS服务器

  你想访问百度时,输入www.baidu.com就可以了。DNS就自动帮你把www.baidu.com转换成IP。DNS服务器里面存放的就是网址与IP的对应关系。

  就比如你想取某个商店买东西,每个商店都可以自己去工商局(管理域名的机构)申请一个不重复的名字,我们知道的也只有商店的名字(网址),但是不知道它在哪里(IP)。我们在地图上(网络中)输入商店名字(网址),DNS服务器就会自动寻找网址所对应的地址(ip)了。

9. 网关

  网关是一个非常重要的概念。
  做这样一个操作,你可以查看一下家里的联网的无线设备,看看它们的网关填的是什么。大概率的情况是,他们的网关都是同一个地址——路由器的LAN口地址。

   PS:路由器的WAN口地址指的是路由器从ISP运营商那得到的IP。路由器的LAN口地址是属于内网的,不被外网承认。

  网关代表着一个指向的作用,代表着数据出口。你家里的所有无线设备与公网通信,数据包最终都要走路由器。所以,一般来说,家里的无线设备的网关一般都是路由器的LAN口地址。
  简单的来说,一台PC机的网关如果是192.168.1.0,那么,这个PC机的所有流量都要发送到192.168.1.0这个网关,然后再由这个网关决定流量的下一步应该怎么走。这个网关可以在路由器上,可以在三层交换机上,也可以在防火墙上。192.168.1.0只是作为一个中转站。

  常见的,一些公司会把网关设置成防火墙。这样,无论外边的网络怎么给内网发送数据,所有的数据都要经过网关。网关可以设置一些访问规则,违反这些规则的数据包不可能进入内网。做到安全防护的作用。

10、总结

  文章讲的相对比较乱,但是涉及到数据包转发的一个过程本身就相当的复杂。要想弄懂数据包如何转发,还是需要一定的网络基础。
  文章如有不当之处,还请不吝指教!!

你可能感兴趣的:(计算机网络)