网络杂记

本文主要目标是让大家了解数据包在网络中的流转过程,以及对ip、MAC地址、交换机和路由器有混淆的,看完本文一定会恍然大悟。

对于TCP/IP4层协议,这里不过多介绍,里面只会简单涉及到一些。

ip的重新认识

ip中分为网络号和主机号,目前通常使用子网掩码来识别网络号是用于标识该ip属于哪个子网(局域网),相同的子网则代表是在同一个区域网内;而主机号主要用于区分子网内的不同主机。

如果源ip和目标ip不是一个局域网,则数据包在网络中传输时,从当前设备跳到下个设备的过程中,源ip和目标ip是不变的,而源mac地址和目标mac地址则是一在变化的,至于是怎么变化的,可以继续往下看。

如果源ip和目标ip属于一个局域网,则数据包不需要经过路由器,而是在局域网内使用ARP协议通过广播的形式获取到目标ip的MAC地址,然后在该局域网内使用交换机将数据发送给该MAC地址(交换机只认识MAC地址而不认识IP地址)。

上面这三段话很重要,大家细细品读。

MAC地址到底是干什么用的

大家对网络层的ip可能比较熟悉,ipv4是一个32位的10进制数;但是对网络接口层的MAC地址的作用可能有点模糊,有的同学可能有疑问:既然已经知道了目标ip,为什么还需要目标的MAC地址呢?

接下来由我细细讲解:

  1. 首先需要知道的一点是网络层的ip的作用只是指明数据包应发往的目的地是哪里,而数据包具体是以什么方式发送到目的地的,网络层ip并不关心。举个例子,比如你想去迪士尼,那么你的目的地就是上海,而目的ip就是上海,而至于你怎么去的上海,网络层ip并不关心。

  2. 如果想把数据包真实的发送到目标ip,则只能通过转换机或者是路由器来实现转换机只能负责在局域网数据传输,而路由器可以在不同的网段内进行数据传输

  3. 对于交换机还是路由器来说它们并不认识ip只认识MAC地址。在实际的网络通信中,当一个设备需要将数据包发送到另一个设备时,它通常需要查找到目标设备的 MAC 地址才可以进行传输

  4. 现在有个问题,我们发送数据时通过DNS解析知道了目标ip,而数据传输是需要知道目标设备的MAC地址的,所以是怎么知道目标ip的MAC地址呢?
    答案就是ARP协议该协议会在目标ip的局域网内进行广播询问当前目标ip的MAC地址是什么?对应的IP收到广播信息后就会将自己的MAC地址返回。通过APR协议就可以将ip转换为对应MAC地址,数据就可以愉快的传播啦。

  5. 还需要注意一点是,网络中的所有设备都存在一个MAC地址,比如路由器交换机主机都存在唯一的MAC地址。

通过上面的介绍现在你应该明白了,目标MAC地址的作用是用于真正的数据传输。网络接口层的目标MAC地址指向的是数据包下一跳的设备的MAC地址;而网络层接口层的源MAC地址就是指的数据包所在当前设备的MAC地址。

网卡到底是做什么的

信号转换

源ip的数据包经过TCP/IP的4层协议加工(应用层->传输层->网络层->网络接口层,每层协议前边都加一个头)后,从源主机的网卡优先流出,从数字信号转换为电信号,顺着网线传输。

经过交换机路由器交换机等,到达目标ip后会会进入目标ip的网卡,然后将电信号转换为数字信号然后在经过CP/IP的4层协议层层分拨(网络接口层-->网络层->传输层>应用层),最终将数据展示出来。

网卡是计算机里的一个硬件,专门负责接收和发送网络包,当网卡接收到一个网络包后,会无脑接受,通过 DMA 技术,将网络包写入到指定的内存地址,也就是写入到 Ring Buffer ,这个是一个环形缓冲区,接着就会告诉操作系统这个网络包已经到达。

上面介绍知道了:网卡的一个作用就是将数字信号转换为电信号 或者 电信号转换为数字信号

确定源ip

其实还有一个非常重要的作用就是确定消息的源ip:每个计算机通常会有多个网卡,那么每个网卡对应一个ip,也就是说一个计算机通过会有只有多个ip那么当发送数据包时,应该选择哪个网卡的ip作为源目标ip呢?

  1. 使用route -n查看当前计算机的路由表,如下


  2. Destination表示的是路由表中的网络地址,用来匹配目标ip的网络地址GateWay表示下一跳的设备ip(可能是路由器、交换机或者是目标ip);Genmaskz只子网掩码;Iface指的就是网卡了。

  3. 通过上图可以看出该计算机有俩个网卡,分别是eth0eth1

  4. 如果目标ip为192.168.3.10,而子网掩码为255.255.255.0时,该ip的网段正好是192.168.3.0,所以匹配的是第一条路由,而第一条路由的网卡是eth0,那么该数据的源ip就是eth0的ip

  5. 如果数据目标ip为192.168.20.10,而子网掩码为0.0.0.0时,该ip的网段正好是0.0.0.0,所以匹配的是第3条路由,而第三条路由的网卡是eth0,那么该数据的源ip就是eth0的ip

确定了消息使用的网卡后,那么该消息的源ip的就是网卡的ip,使用ifconfig即可查看到对应的网卡的ip了。从下图可以看出eth0网卡的ip是192.168.1.4

根据上面的路由表还需要关注几个特别重要的点:

  1. 上图中可以确定有俩个网卡,也就意味有俩个ip,也就意味着有俩个局域网

  2. 通常Gateway为0.0.0.0时则代表是局域网
    如果目标ip的网段为192.168.3.0或者是192.168.10.0时,则表示和本机是在一个局域网内,那么则发送的数据包不需要经过路由器,而是在局域网内使用ARP协议通过广播的形式获取到目标ip的MAC地址,然后在该局域网内使用交换机将数据发送给该MAC地址即完成数据传输了。

  3. 通常Genmask为0.0.0.0是是指默认网关,指目标ip网络段没有匹配到路由表的其他路由之后,就会走该路由。
    表示的是如果目标ip的网段不再192.168.3.0或者是192.168.10.0时,也就是源ip和目标ip不是一个局域网时,则发送给下一跳地址ip为192.168.3.1的路由器。可以发现192.168.3.1其实是属于192.168.3.0网段的,也就是192.168.3.1是属于本机的局域网的。

深入了解

举个例子:假如目标ip为192.168.20.4,该ip不属于本机的局域网,所以命中默认网关路由,指明数据的下一跳地址为192.168.3.1的路由器。

此时在192.169.3.0这个局域网内使用ARP协议通过广播的形式获取到192.168.3.1 ip路由器的MAC地址,然后在局域网内使用交换机将数据发送给该MAC地址的路由器

接着在继续查询192.168.3.1路由器的路由列表,使用Destination来匹配目标ip的网络段的路由如果匹配到了该路由器局域网,则在该局域网内使用交换机将数据发送目标ip所对应MAC地址即可;如果匹配到的是默认网关,则继续跳到下一个路由器上。以此循环直到找到目标ip的局域网为止。

TCP/IP 4层的作用

  • 应用层:组装应用数据
  • 传输层:保证数据传输的稳定性以及可靠性源端口是由客户端随机选择的。客户端会在一个特定的端口范围内(通常是1024到65535)随机选择一个未被占用的端口作为源端口,用来标识自己;目标端口为请求服务的socket bind端口;源端口和目标端口在整个数据传输过程不变。
  • 网络层:指明数据的传输地址,也可以认为实现主机与主机之间的通信,也叫点对点(end to end)通信。主机一般会很会有很多网卡,每个网卡都有自己的ip,主机发送数据时会选择一个合适的网卡将数据流出,该网卡即源ip目标ip即为请求服务的socket的ip;源ip和目标ip在整个数据传输过程不变。
  • 网络接口层: 实现了数据的真正的传输。每个设备,如主机、交换机、路由器等设备都有一个唯一的MAC地址源MAC地址为数据包所在当前设备的MAC地址;目标MAC地址为数据包的下一跳设备的MAC地址,通过ARP协议获取可以发现,数据在整个传输过程中会经过很多的网络设备,也就是说整个传输过程中的源MAC地址和目标MAC地址都是在一直变化的。

路由器

应用场景

源ip和目标ip不在同一个局域网时会使用到路由器(其实也会用到交换机,网络包经过交换机之后,才会达了路由器,并在此被转发到下一个路由器或目标设备,后面的流程中会详细说明)。

作用

  • ip路由
    根据目标ip的网络段来匹配当前设备的路由表的Destination字段,该行的gateway字段即是当前设备下一跳的ip地址路由表中记录着网络地址与下一步应该发送至路由器的地址。在主机和路由器上都会有各自的路由器控制表。在发送 IP 包时,首先要确定 目标IP 包的网络地址,再从路由控制表中找到与该地址具有相同网络地址的记录,根据该记录将 IP 包转发给相应的下一个路由器。如果路由控制表中存在多条相同网络地址的记录,就选择相同位数最多的网络地址,也就是最长匹配。

  • 数据转发(同网段件的数据传输)
    对于不同网段的数据转发只能使用路由器来转发,而不可以使用交换机

交换机

使用场景

源ip和目标ip属于一个局域网时数据包的传输不需要经过路由器,只经过交换机即可。

作用

数据传输:在局域网内使用ARP协议通过广播的形式获取到目标ip的MAC地址,然后在该局域网内使用交换机将数据发送给该MAC地址即可。

实践

上面说了那么多,可能还是云里雾里的,接下来通过上面这张图来来详细介绍下数据包在网络中的流转过程(数据包的应用层和传输层的头信息在整个传输 顾虑是一直不变的,这里就不再介绍)。


  1. 确定源ip: 首先可以确定目标ip为10.1.2.10,通过主机A路由表匹配到了默认路由,该路由的网卡是eth0(图中没有显示,正常路由表后面有一个iface字段),通过ifconfig查看到该网卡的ip为10.1.1.30,即为源ip了。

  2. 根据目标ip的网络段来匹配主机A路由表,最终匹配到了默认路由,也就知道了主机A的下一跳目标地址为10.1.1.1,此时主机1通过ARP协议在10.1.1.0.24这个局域网内广播可以获取到10.1.1.1的MAC地址;
    此时在主机上A的数据包格式如下:

   网络层: 源ip:10.1.1.30,目标ip为10.1.2.10;       
   网络接口层: 源MAC地址:主机A的MAC地址;目标MAC地址:路由器1的MAC地址
  1. 由于下一跳地址10.1.1.1与主机A属于同一局域网,那么此时由交换机将主机A上的数据传输到路由器1上。

  2. 根据目标ip的网络段来匹配路由器1的路由表,发现有对应10.1.2.0/24网段,即下一跳的地址为10.1.0.2。此时路由器1通过ARP协议在10.1.0.0/24(图中画错了)这个局域网内广播可以获取到10.1.0.2的MAC地址

    此时在路由器1的数据包格式如下:

  网络层: 源ip:10.1.1.30,目标ip为10.1.2.10;        
  网络接口层:  源MAC地址:路由器1的MAC地址;目标MAC地址:路由器2的MAC地址
  1. 由于下一跳地址10.1.0.2与路由器1不属于同一局域网那么此时由路由器1将路由器1上的数据传输到路由器2上。

  2. 根据目标ip的网络段来匹配路由器2的路由表,发现有对应10.1.2.0/24网段,即下一跳的地址为10.1.2.8。此时路由器2通过ARP协议在10.1.2.0/24这个局域网内广播可以获取到10.1.2.8的MAC地址

    此时在路由器2的数据包格式如下:

    网络层: 源ip:10.1.1.30,目标ip为10.1.2.10;
    网络接口层:  源MAC地址:路由器2的MAC地址;目标MAC地址:路由器3的MAC地址;
  1. 由于下一跳地址10.1.2.8与路由器2不属于同一局域网,那么此时由路由器2路由器2上的数据传输到路由器3上。

  2. 根据目标ip的网络段来匹配路由器3的路由表,发现有对应10.1.2.0/24网段且该网段为局域网,也就是已经找到目标ip的局域网了。此时路由器3通过ARP协议在10.1.2.0/24这个局域网内广播可以获取到10.1.2.10的MAC地址,即目标ip的MAC地址。

    此时在路由器3的数据包格式如下:

    网络层: 源ip:10.1.1.30,目标ip为10.1.2.10;
    网络接口层:  源MAC地址:路由器3的MAC地址;目标MAC地址:目标主机B的MAC地址;
  1. 由于路由器3和目标ip属于同一局域网那么此时由交换机路由器2上的数据传输到目标主机上

  2. 目标主机通过网卡将电信号转化为数字信号,然后在根据TCP/IP协议一层一层解析出来数据即可。

总结:

  1. 可以发现如果源ip和目标ip不是一个局域网时,网络包先经过交换机将数据发送到下一跳的路由器上(该路由器源ip属于局域网内,交换机只能在局域网内通过MAC地址传输数据).

  2. 路由器根据在所属的路由表将数据发送到下个路由器上,以此循环,路由器与路由器之间属于不同的局域网,那么对于不同局域网内的数据包传输路由器完成的而不是交换机,路由器传输数据同样是通过ARP协议获取下一跳设备(路由器)的MAC地址来完成数据传输的;

  3. 最后会一直跳到与目标ip相同的局域网的路由器上,最后在局域网内通过ARP协议获取到目标ip的MAC地址,最终通过交换机发送数据到该MAC地址上,接着数据也就到达了目标ip的网卡。到此整个数据传输完成。

  4. 如果源ip和目标ip不是一个局域网时,数据是先通过交换机发送到对应的路由器上,然后路由器1跳到路由器2,路由器2跳到路由器3….,最终跳到了与目标ip相同的局域网的路由器上,接着在使用交换机将数据发送到目标MAC上,最终到达目标ip的网卡,整个过程为源ip网卡->交换机->路由器1->路由器2->路由器n->交换机->目标ip网卡。

  5. 如果源ip和目标ip不是一个局域网,则数据包在网络中传输时,从当前设备跳到下个设备的过程中,源ip和目标ip是不变的,而源mac地址和目标mac地址则是一在变化的.

·

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,080评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,422评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,630评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,554评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,662评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,856评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,014评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,752评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,212评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,541评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,687评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,347评论 4 331
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,973评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,777评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,006评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,406评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,576评论 2 349