一、 主机对应用层数据的处理
1.主机的接口是以太网口,对收到的帧会按照以太网网帧的格式进行读取。

2.主机接收报文后首先会查看帧里面的目的MAC地址,如果不是自己的MAC地址会直接丢弃报文;如果是自己的,会拆包交付到网络层。

3.在网络层上首先会查看对应的目的IP地址,如果IP地址不是自己,直接丢弃;如果是自己的对应地址(包括自己所在的组播地址和广播地址),则继续拆包交付到传输层。

4.在传输层上会查看数据的目的端口号,如果不是自己已经开启的端口,会直接丢弃;如果是自己开启的端口,则交给相应端口的应用层程序处理。

二、二层交换机对应用层数据的处理

1.交换机收到数据后,首先会查看收到的数据帧是否带有tag,如果没有tag,会先打上接口pvid对应的tag;如果有tag,检测tag表示的vlan是否在此接口允许通过的范围内,如果不能通过,直接丢弃报文,能通过则进行下一步操作。

2.查看源MAC地址,并直接在相应vlan的MAC地址表上更新此条目。查看目的MAC地址,如果是自己管理接口的MAC地址,拆包交互网络层处理;如果是广播,组播或本vlan中MAC地址表上没有记录的单播MAC地址,则在本vlan所允许通过的接口中进行泛洪(不会在接收此帧的接口上再发送回去,防止该网段出现重复帧的情况);如果目的MAC在本设备vlan中MAC地址表的中,并且出接口是入接口的话,直接丢弃报文;如果对应的出接口不是入接口,则进行精确转发。

3.如果目的IP地址是自己的IP地址(包括所在组播和所在广播地址),继续拆包交付传输层进行处理;其他情况直接丢弃。

4.进入传输层的数据会继续查看目的端口号,如果是自己开启的端口,转发到对应应用层进行处理;如果该端口没开启,则丢弃报文。

三、路由器对应用层数据的处理
1.路由器在广播环境中的接口是以太网口,对收到的帧按照以太网网帧的格式进行读取(如果在PPP环境,则按照PPP帧的格式读取)。

2.查看目的MAC地址,不是自己接收接口的MAC地址便会直接丢弃;是自己便先拆包,查看类型字段,例如通过字段0x0800得知上层为ipv4报文,会按照ipv4报文的格式读取。

3.查看目的IP地址,如果是自己的IP地址(包括所在组播和所在广播)继续拆包,查看目的端口号,对应端口打开就交给相应的应用层处理,如果没有打开就丢弃报文。

4.如果查看的目的IP地址不是自己的IP地址,则会查看路由表。如果整张路由表中没有与之可以匹配的条目便丢弃报文;如果路由表里有对应的条目,进行相应的转发。

5.转发按照最长掩码匹配原则进行转发,路由器转发时会首先将整个路由表查看完,可能有多个匹配的条目,子网掩码不同(子网掩码和网络号相同就是同一个网络了),会按照最长掩码的条目进行路由的转发。这里需要注意的是,最后匹配的条目是有一定区别的,分别为直连路由条目,IGP路由条目,静态路由条目,BGP路由条目。


四、路由条目分类及迭代方式
1直连路由条目:直连路由条目只有出接口,下一跳地址用自己的出接口IP地址代替。当报文匹配到了直连路由条目后,如果有对应的arp缓存,直接封装从出接口发送出去;如果没有arp缓存,则从出接口直接请求报文中目的的MAC地址。

2.IGP路由条目:IGP路由条目一定有出接口和下一跳,并且下一跳为直连的对端接口的IP地址。当报文匹配到的是IGP路由条目(表示地址不是直连的,当地址是直连时,IGP条目的肯定没有直连路由优先,不会加表)先查看下一跳的MAC地址的arp缓存是否存在,如果没有则从条目的出接口发arp请求下一跳的MAC地址;如果有,直接将报文封装好并从对应的出接口发送。
注意:IGP和直连路由都都不需要迭代查询。

3.静态路由条目:静态路由可能会进行迭代查询。这里讨论的静态路由是加入路由表的静态路由,所以肯定不是直连的。
需要迭代的情况:静态路由可以只配置下一跳,设备会通过下一跳进行迭代,直到查询到一条IGP,或者直连的路由条目,找到报文的出接口为止。如果报文匹配到了静态路由条目后,需要进行ARP请求并最终迭代到的是直连的路由,则请求上一个迭代条目中下一跳的MAC地址;如果迭代最后的是IGP条目,则请求IGP条目的下一跳的MAC地址。如下图所示,这条静态路由条目有着R和D的标记(relay和download),表示需要迭代并加入了FIB表。
不需要迭代的情况:如果只配置了出接口,下一跳的地址默认为自己出接口的地址。进行ARP请求的时候,会直接从匹配的出接口请求对方的MAC地址,这种方式会因为arp报文无法到达对方导致流量转发出现问题。如果不仅配置了下一跳的IP地址,也配置了出接口,这时只要出接口是up状态,不会进行迭代查询,符合要求(最优)后直接加入路由表,这种方式可能会因为配置的下一跳不可达导致流量转发出现问题。
注意:只要有出接口,静态路由条目就不会进行迭代。

4.BGP路由条目:BGP路由可能会进行迭代查询。
需要迭代的情况:IBGP路由条目只有下一跳,没有出接口。当通过IBGP路由条目发送信息的时候,会同样迭代查询到一条IGP或者直连的路由,确定出接口。当报文匹配到了IBGP路由条目,如果没有对方的MAC地址,封装下一跳MAC地址的方式和静态路由迭代方式找下一跳相同。除此之外,当EBGP邻居之间报文的TTL值被修改为大于1,则从对方学习到的EBGP路由依然需要迭代,其迭代方式同IBGP。
不需要迭代的情况:EBGP路由条目默认情况下有出接口,不需要进行迭代。

为什么BGP在从多跳邻居获得的条目需要迭代呢?这是因为BGP是一个拥有丰富选路属性的路由协议,同时也会保留备用路由。单跳建立的邻居必定是直连邻居,出接口是唯一的,直接利用这个出接口加表即可;而通过多跳建立的邻居关系,到达条目的初始下一跳则有则可能有多条路径或接口,因此需要通过IGP协议的协助迭代找到所有出接口并且保留最优的加入路由表。BGP设备如何知道和对等体是单跳还是多跳连接呢?这是依据双方BGP报文中的TTL值来判断的。值大于1表示多跳,需要迭代;等于1表示直连,不迭代。
注意:IBGP邻居关系的跳数默认是255,不能修改,所以必定需要迭代,而EBGP邻居关系的跳数可以在1~255中修改,所以既可能迭代,也可能不迭代。

5.迭代的目的:找到出接口。IGP和直连路由因为有了出接口,所以不用迭代,BGP和没有配置出接口的静态路由则需要进行迭代,直到迭代出IGP或者直连条目,找到出接口为止。最终迭代的结果可以查看FIB表进行验证。

6.构建路由表的方式:首先路由条目会比较网络位和子网掩码是否一样,不一样都会加入路由表。如果一样的话比较AD值,越小越优,直连条目为0,AD值可以我们自己设置,但是不能设置为0。如果AD值相同,则进行cost值的比较,静态和直连路由没有cost,只有动态路由协议才有cost值,并且一般不为0,如果cost值相同就负载均衡。

7.(补充)ARP代理:如果在路由器上开启了arp代理,发现目的地址与自己直连并且是arp报文接收的接口,是不会进行代理。路由器只会对自己路由条目中存在并且条目的出接口和arp请求的入接口不同的数据包此进行代理。

五、实例分析

  1. telnet基于TCP 23号端口,需要进行三次握手连接的建立。首先会生成三次握手中第一次的TCP报文然后封装源和目的IP地址,这个时候会查看路由表(主机的路由表分为无线和有线的路由表,如果同时启动的话,没有重复的条目都可以同时使用,但默认路由只能存在在一个表项中,如果使用其中的默认路由不能到达对方,就需要将这个网卡断开,将默认路由转移到另外一个表项中)。这里查路由表是为了查看从最终从哪个接口发送报文出去,封装对应接口的MAC地址作为源MAC地址,并根据路由表的指示封装目的MAC地址。

  2. 本拓扑中封装了PC1的E0/0/1接口的MAC地址以后,就会去封装目的MAC地址,这里有几种可能,在有对方MAC地址的情况下,直接封装发出;如果没有对方的MAC地址并且PC2与PC1在同一网段,会匹配直连路由,发送arp请求报文,从条目的出接口直接请求PC的MAC地址;如果对方不和自己在同一网段,而且PC配置了网关,相当于匹配到了默认路由,直接发arp请求报文请求网关的MAC地址;如果没有配置网关,会直接请求对方的MAC地址,这时只能在路由器开启代理功能后才能保证通信成功。

  3. 以填了网关为例子,我们通过arp获得的对方的网关的MAC地址,这时候将封装好的报文从接口发送出去到达交换机,交换机(没有进行任何配置,默认只有vlan1)先会打上vlan1的tag,然后进行地址学习,再查看MAC地址表,因为在之前进行arp请求的时候,在e0/0/2接口上已经学习到了路由器g0/0/0接口的MAC地址表项,所以这里直接将报文从交换机的e0/0/2接口精确转发出去,如果没有表项,则会进行泛洪操作。

  4. 这时R1接口收到报文后,首先会进行MAC地址的比较,并发现就是自己接收接口的MAC地址,然后会根据类型字段发现上层是一个ipv4报文,这时会以ipv4的方式进行上层报文的读取,并会发现目的IP地址不是自己,于是进行转发。转发时首先会按照报文的目的IP地址查看IP路由表,在路由表中匹配到了直连的路由条目,找到出接口,封装自己出接口的MAC地址为源MAC地址,报文中目的IP所对应的MAC地址为目的MAC。如果有对方的MAC地址,网络层和以上的数据不变,封装好MAC地址后发送出去;如果没有对方的MAC地址,而会因为报文转发匹配的是直连的路由条目,则发ARP报文直接请求目的IP的MAC地址。

  5. 报文封装好目的MAC地址后从对应的出接口发送到达PC2,PC2首先会对报文中的目的MAC地址和自己的接收接口的MAC地址作比较,发现相同后解封装到网络层,并发现目的IP地址就是自己的接收接口的MAC地址,于是查看协议字段拆包到传输层的TCP处理模块,通过TCP的读取格式读取TCP的协议类容,这时发现对方是一个三次握手中的第一个报文,SYN字段为1,会返回一个确认的报文,首先将TCP报文封装在IP报文里面,然后查看路由表确定源目MAC地址,目的MAC,没有网关的MAC地址会进行相应请求,然后从出接口发送出去。回复的过程比较类似,这里就不详细说明了。

网络通信数据处理过程相关推荐

  1. 大数据处理过程中,如何让Hadoop运行得更快一些?

    在数据处理方面,我们发现数据输入速度一般要比的数据处理速度快很多,这种现象在大数据领域尤为明显.随着数据不断膨胀,相应的响应时间自然要有所增加,数据处理的复杂度也在不断提高.作为一个开发者,我们自然非 ...

  2. 计算机硬件数据处理过程,统计数据处理

    统计数据处理(Statistical Data Processing) [编辑] 什么是统计数据处理 统计数据处理是指使用计算机对常规的统计报表.专项统计调查表和其他统计资料等载体上的数据进行录入(读 ...

  3. 数据处理过程的潜在风险和应对逻辑

    编者按:本文来自微信公众号"晨山资本"(ID:chenshancapital) 随着线上化.数字化.智能化的发展,万物互联时代的逐步到来,数据体量正在快速增长.而无论是个人隐私数据 ...

  4. 大数据处理过程的通俗理解

    大数据处理过程的通俗理解 转载声明: 本文系转载自以下文章: 原始数据.数据清洗.数据集市.数据处理.数据可视化的通俗理解 作者:多智时代 转载仅为方便学习查看,一切权利属于原作者,本人只是做了整理和 ...

  5. mini-imagenet数据处理过程_从头开始训练

    mini-imagenet miniImageNet包含100类共60000张彩色图片,其中每类有600个样本,每张图片的大小被resize到了84×84.这里,这个数据集的训练集和测试集的类别划分为 ...

  6. Python:豆瓣电影商业数据分析-爬取全数据【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】

    **爬取豆瓣电影信息,分析近年电影行业的发展情况** 本文是完整的数据分析展现,代码有完整版,包含豆瓣电影爬取的具体方式[附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告] 最近MBA ...

  7. RocketMQ Streams拓扑构建与数据处理过程

    本文作者:倪泽,Apache RocketMQ committer.RSQLDB/RocketMQ Streams Maintainer 01 背景 RocketMQ Streams 1.1.0版本已 ...

  8. 浅谈主机间网络通信实际过程

    网络通信神马的,听起来不过尔尔,唠起来也是催眠的话题.不过没关系. 网络还没有你认为的那么枯燥.话说阿拉喜欢的,你要说他没意思阿拉真的--会证明他的魅力给你看的哦. 嗨嗨,第一个词--抓包.兴许各位倒 ...

  9. Landsat Collection 2 T1一级数据详细介绍(数据处理过程和几何精度)

    几项数据处理.几何和辐射改进,以及新的数据分发过程,定义了 Collection 2 Level-1 数据.此页面提供了有关用户可以在 Landsat Collection 2 Level-1 数据中 ...

  10. 团购市场分析:赶集网 团购数据处理过程【笔记】

    网站基本信息: 网址: http://tuan.ganji.com 本地网址格式:http://tuan.ganji.com/{城市} 数据总体信息: 总城市:379个,实际有本地商品的城市:12个. ...

最新文章

  1. 【java】兴唐第三十节课之零三知识点总结
  2. python可以做什么 知乎-python能做什么知乎
  3. python从零基础到项目实战怎么样-Python 3.x网络爬虫从零基础到项目实战
  4. C++ Primer 5th笔记(chap 10)泛型算法 :特定容器算法list
  5. C/C++之C++命名空间
  6. ibatis中resultClass与resultMap 的区别
  7. QPW 用户签到日志表(tf_user_signin_log)
  8. MYSQL中什么是规范化_如何规范化SQL数据库
  9. 对contentoffset的理解
  10. python中的死锁
  11. 【AI视野·今日CV 计算机视觉论文速览 第244期】Fri, 15 Apr 2022
  12. 测试:fiddler使用
  13. iOS 数据库操作(使用FMDB)
  14. linux安装tomcat_Linux云服务器安装jdk、Tomcat、MySQL5.7 - 咸鱼落成
  15. 第五天 面向对象软件分析与设计
  16. 掌财社:一边亏钱一边被骂,爱奇艺需要出路
  17. P3537 [POI2012]SZA-Cloakroom
  18. 品味kettle--(一)用eclipse 搭建源码
  19. WIN10 连接 BOSE QC35 蓝牙耳机时断时续问题
  20. HTML5适合的情人节礼物有纪念日期功能

热门文章

  1. 机器学习—关联规则分析之Apriori算法及其python实现
  2. 数据科学包5- pandas基础之基础运算
  3. LeetCode刷题——80. 删除排序数组中的重复项 II
  4. 盘点12个Python数据可视化库,通吃任何领域
  5. 新书榜TOP 20占了17位!榜单里有哪些值得入手的技术新书?
  6. 博文视点大讲堂第36期——让Oracle跑得更快(3大oracle ACE联合推荐)
  7. pickle.dump()和pickle.load()进行文件操作
  8. Django项目实践4 - Django站点管理(后台管理员)
  9. Flask运行时Unicode编码错误
  10. linux返回值含义,linux命令返回值的含义解析