当前位置: 首页 > news >正文

Linux -- 网络层

网络层

我们在传输层中已经详细讲解了主机是如何在传输层进行收发报文,以及知道了UDP是一种不可靠的传输层协议,TCP通过确认应答机制,滑动窗口,流量控制,拥塞控制以及三次握手四次挥手等一些策略来保证可靠性和效率。但是这里我们只能知道是如何收发报文,并不知道报文在不同的主机是如何转发的,而网络层就是为了解决不同主机报文转发以及主机距离变远以后如何在网络环境中选择路径的问题的。

IP协议

基本概念

主机:配有IP地址,MAC地址,也要进行路由控制的设备。

路由器:既有IP地址,又能进行路由控制。

节点:主机和路由器的统称。

IP协议格式

IP数据报与传输层的数据报类似,也是以报头和数据两部分组成。首部的前一部分是固定长度,共 20 字节,是所有 IP 数据报必须具有的。在首部的固定部分的后面是一些可选字段,其长度是可变的。

四位版本号:表示通信双方使用的IP协议版本,双方的版本协议必须一致。目前主流的协议是IPV4。

四位首部长度:最小值是5,最大是15,基本单位是4,所以首部大小的固定部分为20个字节,如果有可选字段的话就会增加,最大值是60个字节。

八位区分服务: 3位优先权字段(已经弃⽤), 4位TOS字段, 和1位保留字段(必须置 为0). 4位TOS分别表⽰: 最⼩延时, 最⼤吞吐量, 最⾼可靠性, 最⼩成本. 这四者相互冲突, 只能选择 ⼀个. 对于ssh/telnet这样的应⽤程序, 最⼩延时⽐较重要; 对于ftp这样的程序, 最⼤吞吐量⽐较重要。

十六位总长度:首部和数据之和,数据报最大长度为65535字节。

十六位标识:用来标识数据报是否超过MTU而进行了分片。

三位标志:占 3 位。第一位未使用,其值为 0。第二位称为 DF(不分片),表示是否允许分片。取值为 0 时,表示允许分片;取值为 1 时,表示不允许分片。第三位称为 MF(更多分片),表示是否还有分片正在传输,设置为 0 时,表示没有更多分片需要发送,或数据报没有分片。

十三位片偏移:占 13 位。当报文被分片后,该字段标记该分片在原报文中的相对位置。片偏移以 8 个字节为偏移单位。所以,除了最后一个分片,其他分片的偏移值都是 8 字节(64 位)的整数倍。当数据不是8字节的整数倍是会自动填充。

八位生存时间:表示数据报在网络中的寿命,占 8 位。该字段由发出数据报的源主机设置。其目的是防止无法交付的数据报无限制地在网络中传输,从而消耗网络资源。路由器在转发数据报之前,先把 TTL 值减 1。若 TTL 值减少到 0,则丢弃这个数据报,不再转发。因此,TTL 指明数据报在网络中最多可经过多少个路由器。TTL 的最大数值为 255。若把 TTL 的初始值设为 1,则表示这个数据报只能在本局域网中传送。 

八位协议号:表示该数据报文所携带的数据所使用的协议类型,占 8 位。该字段可以方便目的主机的 IP 层知道按照什么协议来处理数据部分。不同的协议有专门不同的协议号。例如,TCP 的协议号为 6,UDP 的协议号为 17,ICMP 的协议号为 1。

十六位首部校验和:用于校验数据报的首部,占 16 位。数据报每经过一个路由器,首部的字段都可能发生变化(如TTL),所以需要重新校验。而数据部分不发生变化,所以不用重新生成校验值。

三十二位源地址:表示数据报的源 IP 地址。

三十二位目的地址:表示数据报的目的 IP 地址。

填充字段:由于可选字段中的长度不是固定的,使用若干个 0 填充该字段,可以保证整个报头的长度是 32 位的整数倍。

数据部分:表示传输层的数据,如保存 TCP、UDP、ICMP 或 IGMP 的数据。数据部分的长度不固定。

网段划分

IP地址分为两个部分网络号和主机号。

网络号:保证互相连接的两个网段具有不同的标识。

主机号:在同一网段中,主机之间具有相同的网络号,但是必须具有不同的主机号。

所以通过合理的设置就可以保证互相连接的网络中每个主机的IP地址都是不同的。

那么为什么要进行网段划分?直接给每一个主机设置一个唯一的IP也可以识别每一个不同的主机啊?我们需要知道IP地址只有2^32也就是42亿多个,如果一个主机想要将数据发送给另外一个主句那么就意味着需要线性遍历这42亿个IP地址才能够将数据准确发送,那效率也太低了。所以就产生了网段划分,这里我们可以以大学中每个人的学号来举例。

在大学中我们每个人的学号都是不同的,而每个学院都有自己的标识符,所以学号就可以由学院号+个人号组成。当我们需要根据学号找一个人的时候,我们首先将他的学院号和自己的对比就可以知道不是本学院的,只用一次就淘汰了其他相同学院的学号。然后我们继续用学院号进行比较就很快能找到他所在的学院,再根据他的个人号就可以找到这个人了。

段划分的本质实际上是提高了淘汰的效率,能够通过网络号一次性淘汰同一子网下的其他主机,大大提高网络的传输速率。

过去曾经提出⼀种划分⽹络号和主机号的⽅案, 把所有IP 地址分为五类, 如下图所⽰

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类却浪费了⼤量地址。
由于这种情况所以提出了新的划分方案,称为CIDR(无类别路由)。引⼊⼀个额外的⼦⽹掩码(subnet mask)来区分⽹络号和主机号;⼦⽹掩码也是⼀个32位的正整数. 通常⽤⼀串 "0" 来结尾; 将IP地址和⼦⽹掩码进⾏ "按位与" 操作, 得到的结果就是⽹络号; ⽹络号和主机号的划分与这个IP地址是A类、B类还是C类⽆关。

在网络中有一些特殊的IP地址:

IP地址中的主机地址全部设置为0,就成为了网络号,代表这个局域网。

IP地址中的主机地址全部设置为1,姐成为了广播地址,用于给同一链路中相互连接的所有主机发送数据包。

127.*的IP地址用于本机环回测试,通常是127.0.0.1

IP地址的数量限制

上面我们说到IP地址是一个32位的正整数,那么也就只有42亿多的主机能够入网,因为每一个主机都需要有IP地址。

虽然CIDR一定程度上缓解了IP浪费,但是还是远不够实际需要上网的设备数量,那么提出了以下三种方案:
动态分配IP地址:只给接入网络的设备分配IP地址,所以即使相同的MAC地址的设备,每次接入网络的IP地址也可能是不一样的。

NAT技术。

IPV6:IPV6用128个字节表示一个地址,但是IPV6协议并没有普及,普及难度较大。

私有IP地址以及公网IP地址的划分

RFC 1918规定了一部分IP地址用于组建局域网地私有IP地址

10.*,前8位是⽹络号,共16,777,216个地址
172.16.*到172.31.*,前12位是⽹络号,共1,048,576个地址
192.168.*,前16位是⽹络号,共65,536个地址

除了这个范围内的IP都是公有IP。一个公网可以组建局域网,而公网中局域网中的一个私有IP地址又可以组建局域网,如此反复操作,IP地址就可以达到理论上的很大数量足以支撑目前需要入网络的设备数量,其中所有局域网的设备只需要将数据层层向上传输最终通过公网将数据传输到互联网中即可实现所有设备的通信。

组建局域网的工作一般由运营商来完成,个人难以完成如此庞大且复杂的工作,其中包括挖光纤,组建不同子网等。

这是一个运营商下的公网IP组建的局域网的示例图:

一个路由器可以配置两个IP地址,一个是WAN口IP,一个是LAN口IP,子网IP。

路由器LAN口连接的主机,都从属于这个路由器的子网中。

不同路的由器,子网IP其实都是一样的,通常是192.168.1.1.子网内的IP地址不能重复,子网中不同主机的IP地址一般是由路由器通过DHCP自动完成分配的。

每一个家用的路由器作为运营商路由器子网中的一个节点,这样运营商的路由器就可以有很多级,最外层的运营商路由器的WAN口IP就是一个公网IP。

⼦⽹内的主机需要和外⽹进⾏通信时, 路由器将IP⾸部中的IP地址进⾏替换(替换成WAN⼝IP), 这 样逐级替换, 最终数据包中的IP地址成为⼀个公⽹IP. 这种技术称为NAT(Network Address Translation,⽹络地址转换).

路由

路由就是在复杂的网络结构中找到一条通往终点的路线。

数据路由的过程不是一次性到达的,而是通过不同的路由器进行下一跳的许多这样的过程,所谓一跳是指在以太网中从源MAC地址到目的MAC地址之间的帧传输区间。

IP数据包的传输过程和问路一样,当数据包到达路由器时,路由器会查看目的IP,然后决定这个数据包是否在它的同一子网下,同一子网下就可以根据主机号直接发送给目标主机了,如果不是同一子网则需要发送给下一个路由器,重复这个过程,一直达到目标的IP地址。

其中每个节点中都会维护一个路由表,所以网络中的路都是设置好的!每个数据包在询问了节点以后都知道应该怎么去往下一个地点直到终点。

路由表中的最后⼀⾏,主要由下⼀跳地址和发送接⼝两部分组成,当⽬的地址与路由表中其它⾏都
不匹配时,就按缺省路由条⽬规定的接⼝发送到下⼀跳地址。
这台主机有两个⽹络接⼝,⼀个⽹络接⼝连到192.168.10.0/24⽹络,另⼀个⽹络接⼝连到
192.168.56.0/24⽹络。
路由表的Destination是⽬的⽹络地址,Genmask是⼦⽹掩码,Gateway是下⼀跳地址,Iface是发送
接⼝,Flags中的U标志表⽰此条⽬有效(可以禁⽤某些 条⽬),G标志表⽰此条⽬的下⼀跳地址是某个
路由器的地址,没有G标志的条⽬表⽰⽬的⽹络地址是与本机接⼝直接相连的⽹络,不必经路由器转
发。
转发过程例1:如果发送数据包的目的地址是192.168.56.10
此时查路由表跟第一行的子网掩码做与运算发现网络号不符合,接着跟第二行的子网掩码进行与运算,发现网络号相符,因此直接从eth1口将数据发送出去。由于·192.168.56.0/24是与eth1口直接相连的网络,因此可以直接发送到目标主机,不需要经过路由器转发。
转发过程例2: 如果要发送的数据包的⽬的地址是202.10.1.2
依次和路由表前⼏项进⾏对⽐, 发现都不匹配,按缺省路由条⽬, 从eth0接⼝发出去, 发往192.168.10.1路由器,由192.168.10.1路由器根据它的路由表决定下⼀跳地址。
http://www.dtcms.com/a/469725.html

相关文章:

  • 建设班级网站 沟通无限网络黄页进入有限公司
  • Labview项目01:标准可配置序列测试框架
  • 拌合楼软件开发(23)监测客户端在线情况并联动企业微信提醒客户端离线和恢复
  • 雄安网建 网站建设莞城微信网站建设
  • 基于Python的交通数据分析应用-hadoop+django
  • [特殊字符] 教程|打造一个 Telegram 币圈波场交易记录检测机器人
  • 高弹性不锈钢材质在技工钳应用中的优势分析
  • 东土科技连投三家核心企业 发力具身机器人领域
  • 建设行政主管部门官方网站张槎建网站服务
  • 【AI4S】利用大语言模型 LLM 进行分子设计
  • 零用贷网站如何做p2p网站建设公司排名
  • 从 Home Assistant 到 JetLinks:构建双层智能家居与社区管理平台实训全景
  • 什么是BUG,你对BUG的了解有多少?
  • 有哪些网站做任务有佣金手机活动网站模板
  • 阿里下场造“机器人”:从通义千问到具身智能,中国AI正走向“实体化”阶段
  • 盐城网站建设jsxmt公司网站域名管理
  • Cherry Studio 核心功能简介
  • 阿里巴巴国际站开店流程及费用网站建设与网络编辑综合实训课程指导手册pdf
  • 网站备案收费幕布用wordPress搭建图片库
  • Java版座位预约系统★共享自习室系统源码★学校/培训机构座位预约系统
  • 全网首发/Qt结合ffmpeg实现rist推拉流/可信赖的互联网流媒体协议/跨平台支持各个系统
  • leetcode二分查找(C++)
  • 生成对抗网络(Generative Adversarial Network,GAN)
  • 18-基于STM32的智能医嘱手环设计与实现
  • encodeURIComponent() 函数详解
  • 在JavaScript中,map方法使用指南
  • 手机网站好还是h5好找大学生做家教的网站
  • vue项目安装使用,npm、webpack版本问题注意
  • Arbess从入门到实战(12) - 使用Arbess+Gitee+SonarQube实现Node.js项目自动化构建部署
  • 旅游网站模板 手机网站构建