计算机网络(四)_网络层

article/2025/8/23 23:47:33

相关博文:

计算机网络入门

计算机网络物理层

计算机网络-数据链路层

与网络层相关的IP地址与子网掩码单独抽出于下

IP地址

计算机网络-域名与IP地址详解

子网掩码与子网划分

计算机网络-子网掩码与子网划分

文章目录

      • IP地址
      • 子网掩码与子网划分
      • 一些基本概念
      • 网络层提供的服务
      • 网络层传输示意图
      • 互联网络与虚拟互联网络
      • 互联网中间设备
      • 数据包的路由过程
      • ARP协议与RARP
      • ICMP协议
      • Internet组播管理协议 IGMP
      • IP数据报

一些基本概念

网络层提供的服务

网络层应该向上层传输层提供怎样的服务,分为两种形式:

  • 虚电路
    虚电路是分组交换的两种传输方式中的一种。提供面向连接的通信服务。在两个节点或应用进程之间建立起一个逻辑上的连接或虚电路后,就可以在两个节点之间依次发送每一个分组,接收端收到分组的顺序必然与发送端的发送顺序一致,因此接收端无须负责在接收分组后重新进行排序。虚电路协议向高层协议隐藏了将数据分割成段,包或帧的过程。虚电路是建立一条逻辑连接,发送方与接收方不需要预先建立连接。

  • 数据报服务

当端系统要发送数据时,网络层给该数据附加上地址、序号等信息,然后作为数据报发送给网络节点(路由器);目的端系统收到数据报可能是不按照顺序到达,也有可能出现数据报丢失。网络层于此只需尽最大努力持续交付即可。数据报服务与OSI的无连接网络服务类似。

现代网络层协议主要使用的是数据报服务。

网络层传输示意图

  • H1 发送给 H2 的分组可能沿着不同路径传送

  • 网络层负责在不同的网络之间(基于数据包的IP地址)尽力转发数据包,不负责丢包重传和接收顺序(这是由传输层负责的)

  • 数据包在Internet中的传输,Internet既有局域网,又有广域网,既有光纤,又有铜线,无线,还有不同的协议

互联网络与虚拟互联网络

虚拟网络把复杂的Internet看成一个网络,化简问题。虚拟互联网络就是逻辑互联网络,他的意思就是互联起来的各种物理网络的异构性本来就是客观存在的, 但是我们利用IP协议就可以使这些性能各异的网络从用户看起来好像是一个统一的网络,而不用考虑具体的网络异构细节

互联网中间设备

又称为中间系统或中继(relay)系统

  • 物理层中继系统:转发器(repeater),有点像集线器
  • 数据链路层中继系统:网桥或桥接器(bridge)
  • 网络层中继系统:路由器(router),上图的蓝色圆都是路由器。
  • 传输层/应用层中继系统:网关(gateway)器,网关就是路由器接口的地址。一般是本网段第一个地址

数据包的路由过程

发送端(封装数据):

(1)应用层准备要传输的数据;
(2)传输层把文件进行分段并编号;(数据段)
(3)网络层把传输层的每一个数据包增加原IP地址和目标IP地址;(数据包)
(4)数据链路层把每个数据加上MAC地址;(数据帧)

  • 使用自己的子网掩码,判断自己和目标地址分别在哪个网段,若在同一个网段(不通过路由器),通过ARP协议广播的方式得到目标IP地址的MAC地址,然后就能封装出一个数据帧进行组播协议发送;

  • 如果子网掩码不是一个网段,通过ARP协议广播的方式得到路由器(网关)的MAC地址,然后把数据通过交换机发送到路由器M2(图中路由器)因为M2和M3是点对点通信,没有别的主机,所以它们之间的MAC地址就是FF

    (5)物理层把数据帧变成数字信号(bit流),交给物理层传输

接收端(解封):

(1)交换机Switch1(图中的交换机)接收bit流,能对数据进行存储转发。它根据数据帧的MAC地址,确定数据是从哪来的(是上一跳不是发送端),要去哪
(2)路由器M2获取交换机的数据包,识别其中的IP地址,根据路由表选择出口,它无法识别数据段内容
(3)路由器M2到M3是点对点通信,遵守PPP协议
(4)PC3收到bit流后,数据链路层发现MAC地址是自己的,去掉MAC地址给它的网络层,网络层去掉IP地址给传输层,传输层把数据给应用层,应用层把各个数据拼接起来

扩展:

路由器/交换机/集线器不会中病毒,病毒是一个完整的应用程序,且在传输过程中因为分段机制可能变得不完整,无法运行

路由器不能识别数据内容,它只负责信息的传递。但是病毒会影响网络设备。因为病毒会占用网络流量

ARP协议与RARP

ARP(地址解析协议Address Resolution Protocol)

应用于局域网,不过路由

主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址

不管网络层使用的是什么协议,在实际网络的链路上传送数据帧时,最终还是必须使用硬件地址

每一个主机都设有一个 ARP 高速缓存(ARP cache),里面有所在的局域网上的各主机和路由器的 IP 地址到硬件地址的映射表

当主机 A 欲向本局域网上的某个主机 B 发送 IP 数据报时,就先在其 ARP 高速缓存中查看有无主机 B 的 IP 地址。如有,就可查出其对应的硬件地址,再将此硬件地址写入 MAC 帧,然后通过局域网将该 MAC 帧发往此硬件地址

ARP 是解决同一个局域网上的主机或路由器的 IP 地址和硬件地址的映射问题

如果所要找的主机和源主机不在同一个局域网上,那么就要通过 ARP 找到一个位于本局域网上的某个路由器的硬件地址,然后把分组发送给这个路由器,让这个路由器把分组转发给下一个网络。剩下的工作就由下一个网络来做

从IP地址到硬件地址的解析是自动进行的,这种地址解析过程对主机的用户是透明的

只要主机或路由器要和本网络上的另一个已知 IP 地址的主机或路由器进行通信,ARP 协议就会自动地将该 IP 地址解析为链路层所需要的硬件地址

ARP协议存在ARP欺骗的漏洞,本质是利用了主机发送数据需要先组播获取IP地址这个过程。

利用该漏洞可以截获主机将发送到外部的数据

ICMP协议

为了提高 IP 数据报交付成功的机会,在网落层使用了网际控制报文协议 ICMP (Internet Control Message Protocol)

ICMP 允许主机或路由器报告差错情况和提供有关异常情况的报告(所以有了ping command)。

ICMP 报文作为 IP 数据报的数据,加上数据报的首部,组成 IP 数据报发送出去。

ping command

PING是网络层命令,用于测试网络连接量的程序

ping发送一段ICMP回声请求消息给目的地并报告主机是否收到所希望的ICMP回声应答

ping中有一个重要参数TTL( Time To Live),数据包每过一个路由,TTL减一

TTL默认初始值如下:
Linux 64
Windows 128
Unix 256

可以根据TTL值+pathping command粗略判定对方是什么系统

pathping

pathping 能跟踪数据包路径

使用ping能够判断网络通还是不通,但是比如请求超时,你就不能判断什么位置出现的网络故障造成的请求超时。使用pathping命令能跟踪数据包的路径,能够查出故障点,并且能够计算路由器转发丢包率和链路丢包率以及延迟,据此能够判断出网络拥塞情况

Internet组播管理协议 IGMP

网络直播的数据发送需求:

使用多播可明显地减少网络中资源的消耗

IP 多播的一些特点

  • 多播使用组地址:即IP 使用 D 类地址支持多播。多播地址只能用于目的地址,而不能用于源地址

  • 永久组地址—由因特网号码指派管理局 IANA 负责指派

  • 动态的组成员

  • 使用硬件进行多播

IGMP 使路由器知道多播组成员信息

IGMP 可分为两个阶段

第一阶段:当某个主机加入新的多播组时,该主机应向多播组的多播地址发送IGMP 报文,声明自己要成为该组的成员。本地的多播路由器收到 IGMP 报文后,将组成员关系转发给因特网上的其他多播路由器

第二阶段:因为组成员关系是动态的,因此本地多播路由器要周期性地探询本地局域网上的主机,以便知道这些主机是否还继续是组的成员,如果不是,则不再向该主机发送信号。

IP数据报

上面多次提到IP数据报,这里正式说下IP数据报

这是IP数据报的模型

首部:固定长度,20字节(5*32位),是所有IP数据包必须具有的。后一部分是可选字段,长度可变

  • 版本:用来表示TCP/IP是哪个版本,ipv4还是ipv6
  • 区分服务:确定更高的传输优先级(如聊天信息优先级高于大文件传输)
  • 总长度:确定数据部分长度。一共是16位,最多有2^16-1=65535字节

注意,网络层,数据包最大65535字节;而数据链路层数据最大是1500字节,是不一样的。所以说,一旦超过数据链路层的最大要求时(网络层数据部分超过1480字节),数据包会分片

数据包分片:把数据分割,分别添加IP地址,通过网络发给目标MAC地址。目标在通过网络层拼接。传送过程中可能会丢包,或者后发的先到(解决方法后面讲(按序分组))

  • 标识:如果出现数据包分片,那么标识用来确定哪些数据包是需要组合的,属于一个包的片标识相同

  • 标志:确定该数据包是完整的还是分片中的一部分。占3位,只有前两位有用,标志字段最低位是MF(More Fragment),MF=1表示后面还有分片,MF=0表示最后一个分片。标志字段中间一位是DF(Don’t Fragment),只有DF=0才允许分片

  • 片偏移:偏移等于当前字节在数据部分的第几个再除以8,依次表达分片后的数据包的先后顺序

  • 生存时间:上面讲的TTL

  • 协议:

    ICMP协议号:1;
    IGMP协议号:2;
    TCP协议号:6;
    UDP协议号:17;域名解析
    IPv6协议号:41;
    OSPF协议号:89;

  • 首部检验和:16位,只检验数据报的首部,不检验数据部分。这里不是采用CRC循环冗余检验码而是采用简单的计算方法。每经过一个路由器就会检验一次

  • 可选字段:用来支持排错、测量以及安全等措施,内容很丰富,选项字段的长度可变,从 1 个字节到 40 个字节不等,取决于所选择的项目,可惜,实际上这些选项很少被使用


http://chatgpt.dhexx.cn/article/CyvhBiyy.shtml

相关文章

应用层、传输层、网络层、数据链路层

应用层 包括:应用服务 (FTP(FileTransfer Protocol,文件传输协议)和DNS(Domain NameSystem,域名系统))发送HTTP请求DNS域名解析系统:提供通过域名&#xff0…

计算机网络之网络层

一、概述 网络层介于传输层和数据链路层之间,其主要作用是实现两个网络系统之间的数据透明传送,具体包括路由选择,拥塞控制和网际互连等。网络层是网络与网络之间通信的最底层,在数据从数据链路层向传输层进行数据传输的通信中&a…

计算机网络-网络层详细讲解

目录 网络层概述 网络层提供的两种服务 面向连接的虚电路服务 无连接的数据报服务 IPv4地址 IPv4地址概述 概述 表示方法 分类编址的IPv4 A类地址 B类地址 C类地址 练习 划分子网的IPv4地址 子网掩码 32比特的子网掩码可以表明分类IP地址的主机号部分被借用了几个比特…

网络层

一、概述 1、网络层是OSI参考模型中的第三层,介于传输层和数据链路层之间,它在数据链路层提供的两个相邻端点之间的数据帧的传送功能上,进一步管理网络中的数据通信,将数据设法从源端经过若干个中间节点传送到目的端,从…

网络五大层介绍,看完你就懂

当前的网络协议是分层的:应用层,传输层,网络层,数据链路层,物理层 目录 应用层 传输层 UDP协议 数据报格式 TCP(传输控制协议) 报文格式 1.确认应答(核心) 2.超时重传 3.连接…

Android 4.4 沉浸式状态栏的实现

Android 4.4(kitkat)之后,Android Window 提供一个新的属性: WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS从名字上可以看出,这个属性可以用来设置状态栏是否透明,我们就可以利用这个属性来实现沉浸…

总结系列-一文搞懂沉浸式状态栏

近期做到与状态栏相关一些需求,网上关于沉浸式状态栏的文章有很多,基本上都先讲一堆概念,然后接着推出一个自己写的轮子,这类轮子面对很多不同场景的情况不能百分之百满足使用需求,过度地使用轮子也往往会让开发者不了解代码到底是怎么实现沉浸式的,基于…

安卓沉浸式状态栏

安卓沉浸式状态栏 前言安卓版本Android4.4之前Android4.4(API 19) - Android 5.0(API 21)1.图片沉浸1.1 xml实现1.2代码实现 2.ToolBar沉浸2.1xml实现2.1.1 设置 fitsSystemWindows 属性2.1.2 布局里添加占位状态栏 2.2代码实现2.…

Android-StatusBarUtil沉浸式状态栏

文章目录 一、前言二、去掉标题栏三、StatusBarUtil属性四、沉浸状态栏颜色五、沉浸状态栏图片 一、前言 大家再开发过程中会遇到上面这种情况,它不影响使用但是在美观上面差点意思,接下来教给大家一种方式来使它美观 二、去掉标题栏 只需要改变NoAction…

沉浸式状态栏(一)

我们知道IOS上的应用,状态栏的颜色总能与应用标题栏颜色保持一致,用户体验很不错,那安卓是否可以呢?若是在安卓4.4之前,答案是否定的,但在4.4之后,谷歌允许开发者自定义状态栏背景颜色啦&#x…

安卓沉浸式状态栏,android沉浸式状态栏工具类封装

文章目录 前言二、使用步骤1.定义2.使用3.效果 前言 沉浸式状态栏对安卓6.0以上版本很简单,今天分享一个封装好的工具,供大家参考 二、使用步骤 1.定义 代码如下: package com.example.mystudy_kotlin.utilsimport android.app.Activity …

沉浸式状态栏实现

文章目录 郭霖的博客这样实现透明状态栏隐藏导航栏真正的沉浸式模式 轮子 郭霖的博客这样实现 Android状态栏微技巧,带你真正理解沉浸式模式 透明状态栏 新建一个项目,只放一张图片 可以看到 状态栏、ActionBar、底部导航栏都显示,现在修…

flutter沉浸式状态栏

方法1:修改MainActivity 在MainActivity.kt或MainActivity.java,判断一下版本号然后将状态栏颜色修改设置成透明,因为他本身是黑色半透明: Kotlin: class MainActivity: FlutterActivity() {override fun configure…

uniapp 沉浸式状态栏

uniapp 沉浸式状态栏 1.page.json 中设置 :“navigationStyle”:"custom" "globalStyle": {"navigationBarTextStyle": "black","navigationBarTitleText": "uni-app","navigationStyle":…

Android使用沉浸式状态栏

Android使用沉浸式状态栏 为什么使用? 我们App里面目前都没有做沉浸式状态栏,会导致状态栏呈黑色条状,而且下面这个的黑色条状与App红色主界面有很明显的区别。这样在一定程度上牺牲了视觉高度,界面面积变小。 可以对照比较这三张图 代码…

【Android实战】沉浸式状态栏实现(上)

传统的手机状态栏是呈现出黑色条状的,有的和手机主界面有很明显的区别。这样就在一定程度上牺牲了视觉宽度,界面面积变小。 沉浸模式的状态栏和主界面完全融为了一体,在设计上有不同的视觉感受。 我们先上两张图,很容易看出区别&a…

Android 沉浸式状态栏

文章目录 Android 沉浸式状态栏前提情况一:使用FrameLayout情况二:使用CoordinatorLayoutfitsSystemWindows属性原理情况三:在CoordinatorLayout中添加子控件问题:解决: 情况四:使用FrameLayout实现沉浸式效…

Android实现沉浸式状态栏效果

关于沉浸式状态栏,给大家推荐一个非常好的博文android标题栏、状态栏图标文字颜色及背景动态变化 另外说明下,沉浸式状态栏的实现仅适用于 android 4.4及以上版本,4.4以下的就不要想了。 1. 实现秀明状态栏常规方法 //是否使用特殊的标题栏背…

适配“沉浸式”状态栏

传送门: fitSystemWindow属性的作用 http://blog.csdn.net/wangxp423/article/details/79564244 fitSystemWindow属性实战 http://blog.csdn.net/wangxp423/article/details/79566465 上两篇我们讲了fitSystemWindows实现沉浸式状态栏,本篇主要讲解适…

Android 实现沉浸式状态栏(包含顶部栏吸顶Layout CoordinatorLayout实现沉浸式状态栏)

前言 Android状态栏默认是固定的黑底白字,这肯定是不被伟大的设计师所喜爱的,更有甚者,某些时候设计希望内容能够延伸到状态栏上部(例如顶部是大图的情况)。所幸的是随着Android版本的迭代,开发者对状态栏…