56 网络层

本节重点

理解网络层的作用,深入理解IP协议的基本原理
对整个TCP/IP协议有系统的理解
对TCP/IP协议体系下的其他重要协议和技术有一定的了解

目录

  1. 前置认识
  2. ip协议
  3. 基本概念
  4. 协议头格式
  5. 网段划分
  6. 特殊的ip地址
  7. ip地址的数量限制
  8. 私有ip和公有ip
  9. 路由
  10. 路由表生成算法

在复杂的网络环境中确定一个合适的路径

1. 前置认识

传输层提供了很多策略,保证数据传输的各种策略,数据丢包等如何处理,那么将数据传输的跑腿活,这个具体工作是由谁来做。这就是接下来要说的网络层,用户需要的是将数据可靠的从A主机到B主机,ip协议本质工作,提供将数据从A主机到B主机的能力

2. IP协议

在这里插入图片描述
网络要对所有的主机进行表示。源ip,目的ip来标识源主机和目的主机。每一个局部网络通过路由器和其他局部网络相连,想要到达目的主机,需要先到达目标网络,再找到目标主机,然后是目标进程

3. 基本概念

主机:配有IP地址,但是不进行路由控制的设备
路由器:即配有ip地址,又能进行路由控制
节点:主机和路由器的统称

ip地址就像身份证号一样,每一部分都是设计好,有代表的意义,身份证号由地区码+出生年月和签发机构等构成

4. 协议头格式

在这里插入图片描述

  • 4位版本号(version):指定IP协议的版本,对于ipv4来说,就是4
  • 4位头部长度(header length):IP头部的长度是多少个32bit,也就是length*4的字节数,4bit表示最大的数字是15,单位是4,因此ip头部最大长度是60字节
  • 8位服务类型(Type Of Service):3位优先权字段(已经弃用),4位TOS字段,和1位保留字段(必须置为0),4位TOS分别表示:最小延时,最大吞吐量,最高可靠性,最小成本,这四者相互冲突,只能选择一个,对于ssh/telent这样的应用程序,最小延时比较重要,对于ftp这样的程序,最大吞吐量比较重要
  • 16位总长度(total length):IP数据报整体占多少个字节
  • 8位生存时间(Time To Live,TTL):是数据报到达目的地的最大报文跳数,一般是64,每次经过一个路由,TTL-1,一直减到0还没到达,那么就丢弃了,这个字段主要是用来防止游离报文出现路由循环
  • 8位协议:表示上层协议的类型
  • 16位头部校验和:使用CRC校验,鉴别头部是否损坏,坏了就丢弃
  • 32位源地址和32位目标地址:表示发送端和接收端
  • 选项字段(不定长,最多40字节):略

分片与组装
MTU对报文的大小做了限制,规定最大1500字节,如果发出的过大,网络层就需要分片交付,到达目标网络层完成拼接

  • 16位标识(id):唯一的标识主机发送的报文,如果ip报文在数据链路层被分片了,那么每一个片里的id是相同的
  • 3位标志字段:第一位保留(保留的意思是现在不用,没想好以后用不用),第二位置为1表示禁止分片,这时候如果报文长度超过MTU,ip模块会丢弃报文,第三位标识“更多分片”,如果分片了的话,最后一个分片位置为1,其他为0是一个结束标记
  • 13位分片偏移(framegament offset):是分片相对于原始ip报文开始处的偏移,其实就是在表示当前分片在报文中哪个位置,实际便宜的字节数是这个值*8得到的,因此,除了最后一个报文之外,其他报文的长度必须是8的整数倍(否则报文就不连续了)

如何知道分片了
如果分片了,那么片偏移不等于0,或者更多分片等于1

如何分片
比如一个3000字节的报文,超过了1500,需要分片,先将头部1500字节取出来,设置片偏移为1,然后第二个分片取1480字节,设置报头更多分片1,偏移1500,拼接上去,最后部分添加报头,设置偏移2980,更多分片为0表示结束。这三个标识id是统一的

如何组装
根据偏移排序,去掉除第一个报文的报头,拼接数据。丢弃哪一个都可以通过偏移和标志查出来。如果丢了一个就要全部重发。所以不建议分片,会增加丢包概率

5. 网段划分(重要)

网络号:保证相互连接的两个网段具有不同的标识
主机号:同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号

在这里插入图片描述
不同的子网其实就是把网络号相同的主机放在一起
如果在子网中新增一台主机,这台主机的网络号和这个子网的网络号一致,但是主机号必须不能和子网的其他主机重复

路由器本质也是特定一个子网的主机,也要配置ip地址。一定要至少连接2个子网,也就相当于同时在两个子网,暂时认为路由器有多张网卡就行,路由器可以配置多个ip的。一般是一个子网中第一台设备,一般它的ip地址都是:网络号.1,路由器不仅可以进行ip报文的转发,还可以构建子网(局域网)

通过合理设置主机号和网络号,就可以保证在相互连接的网络中,每台主机的ip地址都不相同
那么问题来了,手动管理子网内的ip,是一个相当麻烦的事情

  • 有一种技术叫DHCP,能够自动的给子网内新增主机节点分配ip地址,避免了手动管理ip的不便
  • 一般的路由器都带有DHCP功能,因此路由器也可以看做一个DHCP服务器

ipv4是4字节的,最多只有42亿个,属于有限的资源,所以需要对ip资源合理的分配

五类划分

过去曾经提出一种划分网络号和主机号的方案,把所有ip地址分为五类,如下图所示(该图出自[TCPIP])
在这里插入图片描述
A类 0.0.0.0到127.255.255.255
B类 128.0.0.0到191.255.255.255
C类 192.0.0.0到223.255.255.255
D类 224.0.0.0到239.255.255.255
E类 240.0.0.0到247.255.255.255

随着internet的发展,这种划分方案的局限性很快显现出来,大多数组织都申请B类网络地址,导致B类地址很快就分配完了,而A类却浪费了大量地址

  • 例如,申请了一个B类地址,理论上一个子网内能允许6万五千多个主机,A类地址的子网内的主机数更多
  • 然而实际网络架设中,不会存在一个子网内有这么多的情况,因此大量的ip地址都被浪费掉了

CIDR

针对这种情况提出了新的划分方案,称为CIDR(classless interdomain routing)

  • 引入一个额外的子网掩码(subnet mask)来区分网络号和主机号
  • 子网掩码也是一个32位的正整数,通常用一串“0”来结尾
  • 将ip地址和子网掩码进行“按位与”操作,得到的结果就是网络号
  • 子网掩码为1,表示对应网络位,0表示主机位
  • 网络号和主机号的划分与这个ip地址是A类、B类还是C类无关

下面举两个例子:
划分子网的例子1
在这里插入图片描述

划分子网的例子2
在这里插入图片描述

可见,子网掩码和ip运算可以得到网络号,主机号从全0到全1就是子网的地址范围
ip地址和子网掩码还有一种更简洁的方法,例如140.252.20.68/24,表示ip地址为140.252.20.68,子网掩码的高24位是1,也就是255.255.255.0

子网掩码可以对ip32位,进行任意划分,内网建设,比如B类主机号16位太多了,可以划出12位给网络,剩下4位作为主机号

6. 特殊的ip地址

将ip地址中的主机地址全部设为0,就成为了网络号,代表这个局域网
ip地址中的主机地址全部设为1,就成为了广播地址,用于给同一个链路中相互连接的所有主机发送数据包
127.*的ip地址用于本机环回(loop back)测试,通常是127.0.0.1

在这里插入图片描述

7. ip地址的数量限制

我们知道,ip地址(ipv4)是一个4字节32位的正整数,那么一共只有2的32次方个ip地址,大概是43亿左右,而tcp/ip协议规定,每个主机都需要一个ip地址。这意味着,一共有43亿台主机接入网络吗?实际上,由于一些特殊的ip地址存在,数量远远不足43亿,另外ip地址并非是按照主机台数来配置的,而是每一个网卡都需要配置一个或多个ip地址

CIDR在一定程度上缓解了ip地址不够用的问题(提高了利用率,减少了浪费,但是ip地址的绝对上限并没有增加),仍然不是很够用,这时候有三种方式来解决:

  • 动态分配ip地址:只给接入网络的设备分配ip地址,因此同一个mac地址的设备,每次接入互联网中,得到的ip地址不一定是相同的
  • NAT技术(后面重点介绍)
  • ipv6:ipv6并不是ipv4的简单升级版,这时互不相干的两个协议,彼此病不兼容,ipv6用16字节128位来表示一个ip地址,但是目前ipv6还没有普及

8. 私有ip地址和公网ip地址

理解运营商和全球网络

我们是怎么上网,通过调试解调器将模拟光电信号转为数字信号,再交给路由器,路由器构建了局域网,网络在运营商上网需要账号密码,交钱。路由器的管理也有一个账号密码。每个国家的基站等网络都是由运营商和国家完成的

全球网络中,将ip按国家进行了划分。每个国家和地区都有自己的ip地址段。在国内,再次划分,每个ip地址还包含了省和市网段的匹配的信息,市的定位不一定准确。如果别国想访问国内的一台主机,先拿目标ip在全球范围的路由器对比,发现是中国的,然后再交由国内的路由器,判断子网掩码后的所属,到省,到市,一直往下
在这里插入图片描述

数据发送过程

如果一个组织内部组建局域网,ip地址只用于局域网内的通信,而不直接连到internet上,理论上,使用任意的ip地址都可以,但是RFC1918规定了用于组建局域网的私有ip地址

  • 10.*,前8位是网络号,共16,777,216个地址
  • 172.16.到172.31,前12位是网络号,共1,048,576个地址
  • 192.168.*,前16位是网络号,共65536个地址
  • 包含在这个范围内,都称为私有ip,其余的则称为全局ip(或公网ip)

在这里插入图片描述

  • 一个路由器可以配置两个IP地址,一个是WAN口IP,一个是LAN口IP(子网IP)
  • 路由器LAN口连接的主机,都从属于当前这个路由器的子网中
  • 不同的路由器,子网IP其实都是一样的(通常都是192.168.1.1),子网内的主机IP地址不能重复,但是子网之间的ip地址就可以重复了
  • 每一个家用路由器,其实又作为运营商路由器的子网中的一个节点,这样的运营商可能会有很多级,最外层的运营商路由器WAN口IP就是一个公网IP
  • 子网内的主机需要和外网进行通信时,路由器将Ip首部中的ip地址进行替换(替换成WAN口ip),这样逐级替换,最终数据包中的ip地址成为一个公网ip,这种技术称为NAT(Network Address Translation),网络地址转换
  • 如果希望我们自己实现的服务器程序,能够在公网上被访问到,就需要把程序部署在一台具有外网ip的服务器上,这样的服务器可以在阿里云/腾讯云上购买

比如上面192.168.1.201主机想访问一个ip是201,100,1,1的公网,它自己是私有ip,所以到达自己所在的路由器后要替换,将源ip替换为路由器的WANip,就是10.1.1.2,由家用路由器再发送给运营商路由器,源ip是它的子网,继续替换为122.77.241.4,这个过程可能会重复,直到有一个路由器发送到广域网中,以省为例,判断这个ip是不是国内的,是就转给这个省,不断向下,根据目的ip就可以确定发送的主机

nat路由器在这个替换过程中会保存映射关系,当数据要发送回来的时候,不断还原ip

大企业的网络也由内网构成,但会提供一个公网路由器

9. 路由

在复杂的网络结构中,找出一条通往终点的路线,路由的过程,就是这样一跳一跳(Hop by Hop)“问路”的过程
所谓“一跳”就是数据链路层中的一个区间,具体在以太网中指从源MAC地址到目的MAC地址之间的帧传输区间
在这里插入图片描述

ip数据报的传输过程和纹路一样,当ip数据报,到达路由器时,会先查看目的ip。路由器决定这个数据报时能直接发送给目标主机,还是需要发送给下一个路由器,依次反复,一直到达目标ip地址
那么如何判定这个数据包该发送到哪里?每个节点内部维护一个路由表

当路由器找路时,不会出现不知道的情况,那样数据就无法发送了。会有下面的结果:
给你具体下一跳的路
路由器不清楚,但转入默认路由器
到达入口路由器

在这里插入图片描述

路由表

可以用route命令查看
在这里插入图片描述
如果目的ip命中了路由表,就直接转发即可。路由表中的最后一行们主要由下一跳地址和发送接口两部分组成,当目的地址与路由表其他行都不匹配时,就会按缺省路由条目规定的接口发送到下一跳地址

假如某主机网络接口配置和路由表如下:
在这里插入图片描述

这台主机由两个网络接口,一个网络接口连到192.168.10.0/24网络,另一个网络镰刀192.168.56.0/24网络
路由表的Destination是目的网络地址,Genmask是子网掩码,Gateway是下一跳地址,Iface是发送接口,Flags中的U标志标识此条目有效(可以禁用某些条目),G表示此条目的下一跳地址是某个路由器的地址,没有G标志的条目表示目的网络地址是与本机接口直接相连的网络,不闭经路由器转发

转发过程例1,发送数据报目的192.168.56.3
跟第一行的子网掩码左与运算的到,192.168.56.0,与第一行目的网络不符
第二行同样计算,正式第二行的目的网络,经由eth1接口发送。是与eth1接口直连的网络,可以直接发到目的主机,不需要转发

转发过程例2,发送数据包目的202.10.1.2
和前几项对比都不是
按缺省条目,从eht0发乎,去往192.168.10.1路由器,由这个路由器根据它的路由表决定如何发

10. 路由表生成算法

路由表可以由网络管理员手动维护(静态路由),也可以通过一些算法自动生成(动态路由)。例如距离向量算法,LS算法啊,Dijkstra算法等

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/381771.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【专题】百度萝卜快跑体验:Robotaxi发展现状与展望报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p37054 百度“萝卜快跑”近期因事故与抵制引发关注,武汉部署超300辆全无人驾驶车。体验显示其安全但策略保守,行驶效率低于人类司机,价格亲民。阅读原文,获取专题报告合集全文&#xf…

力扣高频SQL 50题(基础版)第六题

文章目录 1378. 使用唯一标识码替换员工ID题目说明思路分析实现过程结果截图总结 1378. 使用唯一标识码替换员工ID 题目说明 Employees 表: ---------------------- | Column Name | Type | ---------------------- | id | int | | name | varchar | ------…

PWM再理解(1)

前言 昨天过于劳累,十点睡觉,本来想梳理一下PWM,今天补上。 PWM内涵 PWM全称:Pulse Width Modulation,也就是脉宽调制的意思,字面意思理解就是对脉冲的宽度进行改变。准确就是通过数字输出对模拟电路进行…

python+pyqt开发海康相机数据采集系统

pythonpyqt开发海康相机数据采集系统 pythonpyqt开发海康相机数据采集系统 1 开发软件功能: 支持搜索相机:Gige相机设备和USB相机设备支持两种触发模式:软件触发和编码器触发支持数据采集过程中图像实时保存支持参数调节和实时预览&#xff…

ssh到huawei交换机

import re from netmiko import ConnectHandlerips [ 10.32.5.130, 10.32.5.131, 10.32.5.132, 10.32.5.133, 10.32.5.134, 10.32.5.135, ]for ip in ips:hw_fw {device_type: huawei,host: ip, username: 493031,password: 密码,port: 22 }net_connect ConnectHandler(*…

threejs零基础搭建3D可视化汽车展厅

前置知识(最下面有完整代码) 每个代码都有注释,零基础也能看懂 中文官方文档教程 创建项目 创建空文件夹 执行如下命令初始化package.json文件 npm init -y安装threejs包 yarn add three安装tween.js动画库,用于做动画 tweenjs文档 yarn add @tweenjs/tween.js安装gui调…

电子印章生成器在线制作免费工具

电子印章生成器在线制作免费工具 电子印章生成器是一种在线工具,用户可以通过它快速生成各种类型的电子印章。输入文字即可制作电子印章,并且支持下载透明无背景的PNG格式图。可以自定义印章的文字、颜色、老化、边线等参数,并选择本地字体或…

第2章-数学建模

目录 一、数据类型 【函数】: (1)find()、rfind()、index()、rindex()、count() (2)split()、rsplit() (3)join() (4)strip()、rstrip()、lstrip() (5&…

怎样使用 Juicer tools 的 dump 命令将.hic文件转换为交互矩阵matrix计数文件 (Windows)

创作日志: 万恶的生信…一个scHiC数据集没有提供处理好的计数文件,需要从.hic转换。Github一个个好长的文档看了好久才定位到 juicer tools 的dump命令,使用起来比想象中简单。 一、下载Juicer tools 注意:使用Juicer tools的前提…

vxe-table——实现切换页码时排序状态的回显问题(ant-design+elementUi中table排序不同时回显的bug)——js技能提升

之前写的后台管理系统,都是用的antdelement,table组件中的【排序】问题是有一定的缺陷的。 想要实现的效果: antv——table组件一次只支持一个参数的排序 如下图: 就算是可以自行将排序字段拼接到列表接口的入参中&#xff0c…

Qt实战:专栏内容介绍及目录

1、专栏介绍 Qt相比Visual Studio (VS) 的优势主要体现在跨平台能力、‌丰富的功能、‌高性能、‌现代UI设计、‌社区支持和企业支持等方面。‌ 跨平台能力:‌Qt 允许应用程序在多个操作系统上编译和运行,‌无需为每个平台编写特定的代码,‌…

设计模式第二天|设计模式创建型:工厂模式、抽象工厂模式、单例模式、建造者模式

文章目录 设计模式的分类工厂模式简单工厂定义核心俗话说优点缺点具体实现 工厂模式(Spring IOC控制反转)定义核心**组成****俗话说****实现思路****具体实现****使用场景** 抽象工厂模式**前提概念****定义****缺点****具体实现** 单例模式**定义****俗…

Django学习第一天(如何创建和运行app)

前置知识: URL组成部分详解: 一个url由以下几部分组成: scheme://host:port/path/?query-stringxxx#anchor scheme:代表的是访问的协议,一般为http或者ftp等 host:主机名,域名,…

《低代码指南》——Oracle APEX : AI在低代码开发中的创新应用

在低代码开发领域,我们正在目睹人工智能(AI)集成所带来的显著进展。Oracle公司最新推出的APEX 24.1版本,便是这一趋势的明显体现,其集成的AI功能旨在极大提高开发者的生产力,同时简化应用程序的创建过程。 Contents 将变革性的AI整合到低代码平台 将AI技术引入低代码平台…

二、BIO、NIO、直接内存与零拷贝

一、网络通信编程基础 1、Socket Socket是应用层与TCP/IP协议族通信的中间软件抽象层,是一组接口,由操作系统提供; Socket将复杂的TCP/IP协议处理和通信缓存管理都隐藏在接口后面,对用户来说就是使用简单的接口进行网络应用编程…

MySQL定时备份数据,并上传到oss

1.环境准备 1.安装阿里云的ossutil 2.安装mysql 2.编写脚本 脚本内容如下 #!/bin/bash # 数据库的配置信息,根据自己的情况进行填写 db_hostlocalhost db_usernameroot db_passwordroot db_namedb_root # oss 存贮数据的bucket地址 bucket_namerbsy-backup-buck…

SpringBoot:SpringBoot通过注解监测Controller接口

一、前言 在Spring Boot中,度量指标(Metrics)是监控和诊断应用性能与行为的重要工具。Spring Boot通过集成Micrometer和Spring Boot Actuator,提供了强大的度量指标收集与暴露功能。 二、度量指标 1. Micrometer Micrometer是一…

基于FPGA的以太网设计(2)----以太网的硬件架构(MAC+PHY)

1、概述 以太网的电路架构一般由MAC、PHY、变压器、RJ45和传输介质组成,示意图如下所示: 需要注意的是,上图是一个简化了的模型,它描述的是两台主机之间的直接连接,但在实际应用中基本都是多台主机构成的局域网,它们之间并不直接相连,而是通过交换机Switch来进行…

Linux云计算 |【第一阶段】SERVICES-DAY5

主要内容: 源码编译安装、rsync同步操作、inotify实时同步、数据库服务基础 实操前骤:(所需tools.tar.gz与users.sql) 1.两台主机设置SELinnx和关闭防火墙 setenforce 0 systemctl stop firewalld.service //停止防火墙 sy…

scss基本语法---嵌套、循环、条件(@for,@if),混入@mixin,继承@extend,导入@import,

scss是css预编译器,可以简化css代码的书写,并可以编译成css文件使用; 有关scss的安装使用可以参考:Sass语法---sass的安装和引用_引入sass-CSDN博客 嵌套、循环、条件(for,if) 嵌套 scss支持选择器的嵌套…