Linux网络——网络层

目录

一.IP协议(IPv4)

二.子网划分

三.特殊的IP地址

四.IP地址的数量限制

五.私有IP地址和公网IP地址

六.路由

 七.分片


一.IP协议(IPv4)

IP协议:提供一种能力使得数据从一个主机发送到另一个主机的能力。

TCP协议:提供了一套解决方案,主使得IP报文数据可以从一个主机可靠的发送给另一个机。

IP+TCP:提供了一种能力,将数据可靠的,跨网络的从一个主机传输给另一个主机。

基本概念:是指任何能够连接网络的设备,这些设备包括但不限于手机、平板电脑、电视、游戏机、汽车等。

1.IP协议格式

  1. 4位版本号(version): 指定IP协议的版本, 对于IPv4来说, 就是4.
  2. 4位头部长度(header length): IP头部的长度是多少个32bit, 也就是 length * 4 的字节数. 4bit表示最大的数字是15, 因此IP头部最大长度是60字节.
  3. 8位服务类型(Type Of Service): 3位优先权字段(已经弃用), 4位TOS字段, 和1位保留字段(必须置为0). 4位TOS分别表示: 最小延时, 最大吞吐量, 最高可靠性, 最小成本. 这四者相互冲突, 只能选择一个. 对于ssh/telnet这样的应用程序, 最小延时比较重要; 对于ftp这样的程序, 最大吞吐量比较重要,针对不同得场景来调节。
  4. 16位总长度(total length): IP数据报整体占多少个字节.
  5. 16位标识(id): 唯一的标识主机发送的报文. 如果IP报文在数据链路层被分片了, 那么每一个片里面的这个id都是相同的.
  6. 3位标志字段: 第一位保留(保留的意思是现在不用, 但是还没想好说不定以后要用到). 第二位置为1表示禁止分片, 这时候如果报文长度超过MTU(后面说), IP模块就会丢弃报文. 第三位表示"更多分片", 如果分片了的话,最后一个分片置为0, 其他是1. 类似于一个结束标记.
  7. 13位分片偏移(framegament offset): 是分片相对于原始IP报文开始处的偏移. 其实就是在表示当前分片在原报文中处在哪个位置. 实际偏移的字节数是这个值 * 8 得到的. 因此, 除了最后一个报文之外, 其他报文的长度必须是8的整数倍(否则报文就不连续了).
  8. 8位生存时间(Time To Live, TTL): 数据报到达目的地的最大报文跳数. 一般是64. 每次经过一个路由, TTL= 1, 一直减到0还没到达, 那么就丢弃了. 这个字段主要是用来防止出现路由循环,导致报文持续占用网络,而不消散。
  9. 8位协议: 表示上层协议的类型。
  10. 16位头部校验和: 使用CRC进行校验, 来鉴别头部是否损坏.
  11. 32位源地址和32位目标地址: 表示发送端和接收端.
  12. 选项字段(不定长, 最多40字节): 略

报头和有效载荷如何分离?

读取报头得到首部长度字段,和IP总字节长度字段。有效载荷=IP总字节长度-首部长度字段。

如何向上交付?

报头字段中有8位协议字段,代表需要交给的上层协议。

二.子网划分

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

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

例如:

不同的子网其实就是把网络号相同的主机放到一起.
如果在子网中新增一台主机, 则这台主机的网络号和这个子网的网络号一致, 但是主机号必须不能和子网中的其他主机重复. 

通过合理设置主机号和网络号, 就可以保证在相互连接的网络中, 每台主机的IP地址都不相同。

手动管理子网内的IP, 是一个相当麻烦的事情:

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

 如何子网划分:

过去曾经提出一种划分网络号和主机号的方案, 把所有IP 地址分为五类, 如下图所示:

  1. A类 0.0.0.0到127.255.255.255
  2. B类 128.0.0.0到191.255.255.255
  3. C类 192.0.0.0到223.255.255.255
  4. D类 224.0.0.0到239.255.255.255
  5. E类 240.0.0.0到247.255.255.255 

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

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

针对这种情况提出了新的划分方案, 称为CIDR(Classless Interdomain Routing):

  1. 引入一个额外的子网掩码(subnet mask)来区分网络号和主机号;
  2. 子网掩码也是一个32位的正整数. 通常用一串 "0" 来结尾;
  3. 将IP地址和子网掩码进行 "按位与" 操作, 得到的结果就是网络号;
  4. 网络号和主机号的划分与这个IP地址是A类、B类还是C类无关; 

这种划分方式更加灵活的分配IP地址的比特位,减少了浪费。

子网掩码:

也是一个32位的二进制数,与IP网络地址对应,用来快速计算出一个IP地址所处的网络地址。

对应的网络号全是1,主机号全是0.与某一个IP相与,就能得到该IP网络号。

例如:

现在的子网划分:

按地区划分,由各个地区当地的运营商,同一规划和构建,运营商搭建各种路由器和集群。按照地区分化IP地址种的比特位作为网络号,当到了一定小的范围的时候,此时我们的IP地址不再划分,此时的IP地址,剩下的IP地址位数,就可以分配给该地区的网络主机。此时的主机上的IP地址就天然的有了网络号和主机号。

所以IP地址这种,网络号+主机号的构成,就是子网划分的结果。

当我们拿到一个IP地址的时候,我们就可以迅速的根据网络号,和主机号,定位该主机。

当有数据需要发送的时候,首先查看目的IP在不在自己子网中,不在交过当前子网的路由器,有路由器对比目的IP给交其他子网。

子网划分的目的:快速定位主机。

三.特殊的IP地址

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

四.IP地址的数量限制

我们知道, IP地址(IPv4)是一个4字节32位的正整数. 那么一共只有 2的32次方 个IP地址, 大概是43亿左右. 而TCP/IP协议规定, 每个主机都需要有一个IP地址.
这意味着, 一共只有43亿台主机能接入网络么?
实际上, 由于一些特殊的IP地址的存在, 数量远不足43亿; 另外IP地址并非是按照主机台数来配置的, 而是每一个网卡都需要配置一个或多个IP地址.
CIDR在一定程度上缓解了IP地址不够用的问题(提高了利用率, 减少了浪费, 但是IP地址的绝对上限并没有增加), 仍然不是很够用. 这时候有三种方式来解决:

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

五.私有IP地址和公网IP地址

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

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

包含在这个范围中的, 都称为私有IP, 其余的则称为全局IP(或公网IP); 

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

六.路由

在复杂的网络结构中, 找出一条通往终点的路线;

数据报文路由的过程,非常想唐僧问路:

我从东土大唐而来去往西天求取真经,上一站我从女儿国来,下一站要去哪里只知道吗?

路由的过程, 就是这样一跳一跳(Hop by Hop) "问路" 的过程.
所谓 "一跳" 就是数据链路层中的一个区间. 具体在以太网中指从源MAC地址到目的MAC地址之间的帧传输区间.

IP数据包的传输过程也和问路一样:

  1. 当IP数据包, 到达路由器时, 路由器会先查看目的IP;
  2. 路由器决定这个数据包是能直接发送给目标主机, 还是需要发送给下一个路由器;
  3. 依次反复, 一直到达目标IP地址;

那么如何判定当前这个数据包该发送到哪里呢? 这个就依靠每个节点内部维护一个路由表; 

路由表:就是路由器内部建立的一张自己和周围连接的路由器表。

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

示例1:如果要发送的数据包的目的地址是192.168.56.3

  1. 跟第一行的子网掩码做与运算得 到192.168.56.0,与第一行的目的网络地址不符。
  2. 再跟第二行的子网掩码做与运算得 到192.168.56.0,正是第二行的目的网络地址,因此从eth1接口发送出去;
  3. 由于192.168.56.0/24正 是与eth1 接口直接相连的网络,因此可以直接发到目的主机,不需要经路由器转发;

示例2:如果要发送的数据包的目的地址是202.10.1.2

  1. 依次和路由表前几项进行对比, 发现都不匹配;
  2. 按缺省路由条目, 从eth0接口发出去, 发往192.168.10.1路由器;
  3. 由(默认)192.168.10.1路由器根据它的路由表决定下一跳地址;

路由表生成算法(了解):

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

 七.分片

提出问题:在传输层,TCP发送缓冲区内部有滑动窗口,为什么要将滑动窗口内的数据分成一个一个小的报文发送,为什么不直接封装成一个大的报文发送这样不是更加的方便吗?

原因在于数据链路层:

 如果在网络层,接收到了封装好以后的报文大于1500字节,那么网络层就必须将报文分片成多个小于等于1500字节的报文,才能向下交付。

怎么分片和组装?

分片和组装是必须同时考虑的两个问题,因为一端分片发送了,对端就必须能够组装出来原始的报文才行。

 一台机器可能同时收到大量的分片后IP报文,来自不同的客户端的分片IP报文,可能会有相同的16位标识位,如何区分来自不同客户端,相同的标识位的IP报文。

不同的客户端,发送来的IP报文,源IP必然不同。

我怎么知道一个报文是分片的还是没有分片的?

  1. 3位标志中的第二位如果是1,必然不是分片报文。
  2. 片偏移不是0,必然是一个分片报文。
  3. 3位标志中的第三位(更多分片)如果是1,必然分片。
  4. 片偏移是0,更多分片也是0,不是一个分片报文。

 怎么保证分片收齐了,并组装。

  1. 保证头尾丢失我们能知道,头报文片偏移为0,尾报文更多分片为0.
  2. 中间报文排序组装。

怎么保证组合一起的报文一定是对的?

由报头中的16位首部检验和来保证。

所以IP协议主要解决,将报文在网络路由器中,通过路由表中记录的连接的子网,和报文中携带的目的IP对比,来将报文进行转发给下一个子网还是当前子网,依次往复找到目的子网络。

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

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

相关文章

工业级 S25HS01GTDPBHV030 NOR闪存,L9305EP汽车级驱动器IC,LMK03318RHSR时钟发生器,PLL(中文资料)

一、工业级 S25HS01GTDPBHV030 Semper™ NOR闪存 S25HS01GT SEMPER™ NOR Flash闪存系列是英飞凌高性能、安全而可靠的 NOR Flash解决方案。 它集成了适用于汽车、工业、通信等广泛应用的关键安全功能。 凭借 SEMPER™ NOR Flash闪存,英飞凌推出了业界首款符合 ASI…

ArcGis如何用点连线?

这里指的是根据已有坐标点手动连线,类似于mapgis中的“用点连线”,线的每个拐点是可以自动捕捉到坐标点的,比直接画精确。 我也相信这么强大的软件一定可以实现类似于比我的软件上坐标时自动生成的线,但是目前我还没接触到那里&a…

MIPI 打怪升级之DSI篇

MIPI 打怪升级之DSI篇 目录 1 Overview2 DSI Mode 2.1 Video 模式2.2 Command 模式3 DSI Physical Layer 3.1 数据流控3.2 双向性3.3 Video Mode Interfaces3.4 Command Mode Interfaces3.5 Clock4 多通道管理 4.1 通道数匹配4.2 线上数据分布5 DSI 协议 5.1 包格式 5.1.1 短包…

模拟退火算法应用——求解一元函数的最小值

仅作自己学习使用 一、问题 需求: 计算函数 的极小值,其中个体x的维数n10,即x(x1,x2,…,x10),其中每一个分量xi均需在[-20,20]内。因此可以知道,这个函数只有一个极小值点x (0,0,…,0),且其极小值是0&…

Spring - Mybatis-设计模式总结

Mybatis-设计模式总结 1、Builder模式 2、工厂模式 3、单例模式 4、代理模式 5、组合模式 6、模板方法模式 7、适配器模式 8、装饰者模式 9、迭代器模式 虽然我们都知道有26个设计模式,但是大多停留在概念层面,真实开发中很少遇到,…

流量分析-PhishingEmail_WriteUp

一、题目问题 问题1:黑客的email名称 问题2:黑客向几人发送了钓鱼邮件 问题3:黑客传输的木马文件名 问题4:下载并运行了木马文件的人的email名称和ip地址,用“-”连接 问题5:黑客用于反弹shell的主机i…

YOLOv8 训练自己的分割数据集

之前写过一篇 使用YOLOv8训练自己的【目标检测】数据集-【收集数据集】-【标注数据集】-【划分数据集】-【配置训练环境】-【训练模型】-【评估模型】-【导出模型】,里面带大家整个流程走过一遍了, 这篇文章我们来介绍如何使用 YOLOv8 训练分割数据集&a…

JAVA小游戏“简易版王者荣耀”

第一步是创建项目 项目名自拟 第二部创建个包名 来规范class 然后是创建类 GameFrame 运行类 package com.sxt;import java.awt.Graphics; import java.awt.Image; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; im…

Leetcode—55.跳跃游戏【中等】

2023每日刷题&#xff08;四十&#xff09; Leetcode—55.跳跃游戏 贪心法实现代码 #define MAX(a, b) ((a > b)? (a): (b))bool canJump(int* nums, int numsSize) {int k 0;for(int i 0; i < numsSize; i) {if(i > k) {return false;}k MAX(k, i nums[i]);}r…

借助 XEOS V6, 农牧龙头企业实现原有存储的高效在线替换

面对旧有存储系统的应用不足&#xff0c;某大型现代农牧龙头企业采用了星辰天合的对象存储 XEOS V6 方案&#xff0c; 该方案以其卓越的技术架构和同城双活异地灾备的解决方案完整性&#xff0c;在无缝高效完成系统替换的同时&#xff0c;可以极大地提升系统的灵活性和业务的连…

自定义精美商品分类列表组件 侧边栏商品分类组件 category组件(适配vue3)

随着技术的发展&#xff0c;开发的复杂度也越来越高&#xff0c;传统开发方式将一个系统做成了整块应用&#xff0c;经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改&#xff0c;造成牵一发而动全身。通过组件化开发&#xff0c;可以有效实现单…

AT89S52单片机智能寻迹小车自动红外避障趋光检测发声发光设计

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;寻迹 获取完整说明报告源程序数据 小车具有以下几个功能&#xff1a;自动避障功能&#xff1b;寻迹功能&#xff08;按路面的黑色轨道行驶&#xff09;&#xff1b;趋光功能&#xff08;寻找前方的点光源并行驶到位&…