Linux网络原理及编程(7)——第十七节 网络层

news2024/11/19 13:41:51

目录

IP报头

网段划分

私有IP地址和公网IP地址

补充一下路由器 的有关知识:

路由


各位好,博主新建了个公众号《自学编程村》,拉到底部即可看到,有情趣可以关注看看哈哈,关注后还可以加博主wx呦~~~(公众号拉到底部就能看到呦~~)

我们根据前面的学习,知道:

1、HTTP:是用来构建与解析 request && response -》调用recv和send来解决自己的问题。注意,这里的recv和send是tcp提供的接口。

2、TCP :可靠性、效率、什么时候发送、怎么发、发多少

3、IP:解决端到端、点到点的问题。将数据经过路径选择、送达对方主机的过程——IP负责

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

IP报头

我们同样采用列点式来进行分析:

IP也是需要解决两个最基本的问题:实现数据和有效载荷分离以及交付给上层哪一个协议的问题。

1、我们在IP报文中的8位协议即解决交付给上层的哪一个协议。

2、在IP中的四位首部长度即为解决数据报头和有效载荷分离的问题。(并且这一点和TCP是一样的)

3、4为版本基本就是IPV4.(相对于IPV6)

4、8位服务类型:在最小延时, 最大吞吐量, 最高可靠性, 最小成本 这四个选项当中选一个(四者本身相互冲突,所以只能够选一个)。就是选择哪一个优先的问题

5、8位生存时间:真正在网络上面跑的都是一个个IP报文。这里的生存时间 的作用就是如果生存时间到了,那么就将该报文丢弃。(例如每经过一个路由器,生存时间就--,当其为0的时候,就直接丢弃,为了防止游离报文被无限循环转发,浪费网络资源)(如果要发送的很远,会有极限器将你的数据报文信号放大)

6、16位首部校验和:校验首部。(TCP校验的是校验整个,IP不需要,因为这属于可靠性的问题,是属于TCP管的)

7、32位源IP和32位目的IP:

我们知道,路由查找的过程是先查找到目标网络,再查找到目标主机。

源IP和目的IP分别存储着的是源IP地址和目的IP地址。

8、关于16位标识、3位标志和13位片偏移:

在MAC中,有一个MTU,即单次发送的最大值(最大发送单元),一般为1500字节,可以用ifconfig来查看。

所以,一旦数据大小超了,就要进行分片。但是呢,分片这种事情并不是底层的MAC来做,那MAC不做,就只能够是上层的IP来做喽。(即每个IP+有效载荷最大==1500)

当上层的TCP一次交付给下层的IP很大的数据时,就要逼着IP分片。并且每一个分片都要包含着一个IP报头。

这个过程叫做分片。

可是TCP并不知道这些细节。只关心当我要回来的时候,到TCP阶段也是一个完整的报文。

所以,当接收方接收到这些分片的时候,需要将其还原,重新拼接在一起。

那我们怎么办才能将其组装好交付给上层呢?

(1)先将分片的挑出来;在三位标志中有一个标志位用来表示是否被分片。

(2)将同一组的分片挑出来(即同一个发送方发送过来的);同一组的16位标识是一样的。(拷贝过来的)

(3)将一组的收集起来之后,我们将其组装起来这里我们用13位片偏移。根据13位片偏移进行排序,将其重新拼接起来。

并且假如中间有一个报文丢了,我们也能够很快速的识别出来。(如果一个丢了,那么这整个报文就会需要全部重发,因为TCP是不关心底层IP分片的,它没有能力去识别出具体哪个丢了哪个没丢)

按照这种理解方式,我们实际在检测的时候,首先检测13位片偏移,当片偏移不为0那其一定就是被分片的;而如果其为0,如果其为第一片,那么其更多分片的标志位就会被设置为0。

仅当片偏移为0并且更多标志位为1的时候,才标识其为未分片

网段划分

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

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

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

如上图是由一个路由器连接的两个不同的局域网。

而路由器在每个局域网当中也需要配备IP。(如上分别为192.168.128.x  和192.168.144.x)

一个IP地址是可以由4个字节,32个比特位来表示的

上图的/24表示的是前24个都是1,后8个是0的子网掩码,具体点说,就是其子网掩码为255.255.255.0

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

 那么问题来了, 手动管理子网内的IP, 是一个相当麻烦的事情.【IP地址分配】

有一种技术叫做DHCP, 能够自动的给子网内新增主机节点分配IP地址, 避免了手动管理IP的不便.

一般的路由器都带有DHCP功能. 因此路由器也可以看做一个DHCP服务器.

过去曾经提出一种划分网络号和主机号的方案, 把所有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类却浪费了大量地址;

 

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

 

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

 引入一个额外的子网掩码(subnet mask)来区分网络号和主机号;

 

子网掩码也是一个32位的正整数. 通常用一串 "0" 来结尾;

将IP地址和子网掩码进行 "按位与" 操作, 得到的结果就是网络号;

网络号和主机号的划分与这个IP地址是A类、B类还是C类无关;

可见,IP地址与子网掩码做与运算可以得到网络号, 主机号从全0到全1就是子网的地址范围;

IP地址和子网掩码还有一种更简洁的表示方法,例如140.252.20.68/24,表示IP地址为140.252.20.68, 子网掩码的高24位是1,也就是255.255.255.0(刚刚说过)

注意:如果主机号为全0,我们一般叫做网段号(或者网关号,即局域网的入口号);如果为全1,我们一般叫做广播号

私有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

(1)假如我们有一个数据,从上述画红圈的地方发送到122.77.241.3/24中去,那应该怎么发?

首先,从主机到家用路由器:

源IP:192.168.1.200 /24  目的IP:122.77.241.3/24

从家用路由器到运营商路由器:

源IP:10.1.1.3/24(WAN口IP作为其源IP地址) 目的IP:122.77.241.3/24

从运营商路由器到目标主机:

源IP:122.77.241.4/24  目的IP:122.77.241.3/24

(2)从上述过程可以看出,在这个过程当中,源IP是在不断发生变化着的。

这个过程就是数据从局域网到公网当中的过程。这种技术就叫做NAT技术(更改的是源IP地址)

(3)为什么要这么做呢?首先,私有IP不能出现在公网中,因为在不同的局域网当中,IP可能重复。如果你发出去的是一个私有IP,那返回来的时候目的IP怎么填呢?

(4)NAT技术很好地解决了IP地址不足的问题。

(5)那数据回来呢?我们这个过程我们需要查表。(即在数据出去的过程当中在路由器中是会建立一张映射关系表的)

补充一下路由器 的有关知识:

(1)一个路由器可以配置两个IP地址, 一个是WAN口IP, 一个是LAN口IP(子网IP)。路由器LAN口连接的主机, 都从属于当前这个路由器的子网中.

(2)不同的路由器, 子网IP其实都是一样的(通常都是192.168.1.1). 子网内的主机IP地址不能重复. 但是子网之间的IP地址就可以重复了.

(3)每一个家用路由器, 其实又作为运营商路由器的子网中的一个节点. 这样的运营商路由器可能会有很多级,最外层的运营商路由器, WAN口IP就是一个公网IP了.

(4)子网内的主机需要和外网进行通信时, 路由器将IP首部中的IP地址进行替换(替换成WAN口IP), 这样逐级替换, 最终数据包中的IP地址成为一个公网IP. 这种技术称为NAT(Network Address Translation,网络地址转换)(上面说到过)。

(5)如果希望我们自己实现的服务器程序, 能够在公网上被访问到, 就需要把程序部署在一台具有外网IP的服务器上. 这样的服务器可以在阿里云/腾讯云上进行购买.

路由

路由的过程, 就是这样一跳一跳(Hop by Hop) "问路" 的过程.

所谓 "一跳" 就是数据链路层中的一个区间. 具体在以太网中指从源MAC地址到目的MAC地址之间的帧传输区间

当IP数据包, 到达路由器时, 路由器会先查看目的IP;

路由器决定这个数据包是能直接发送给目标主机, 还是需要发送给下一个路由器;

依次反复, 一直到达目标IP地址;

 

查看我的路由表

第一个是目的网络,GeteWay表示下一跳,Genmask表示子网掩码。

目的IP与子网掩码按位与,如果与目的网络的IP匹配上,那么就送到相应的网段中。如果没有,那就送到默认路由路径(默认网关)

好啦,本节的内容就到这里啦~~

原创不易,如果觉得写的不错,就点个赞呗~~~笔芯~~~~

下面是笔者的微信公众号,也欢迎来关注呀~~~

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【玩转c++】c++ 中 STL 简介

本期主题:介绍cSTL(标准模板库)博客主页:小峰同学分享小编的在Linux中学习到的知识和遇到的问题小编的能力有限,出现错误希望大家不吝赐身为程序员 ,不会有人没有女朋友吧。 🍁1.什么是STL&…

[趣味][人工智能生成文字]chatGPT使用教程

ChatGPT 首先点击sign up注册,注册需要非中国手机号获取验证码,这里感谢一下alice的支援,没有好朋友的各位看到这里可以先去逛逛淘宝 注册后点击log in登录 然后直接输入想要生成的内容,点击右侧的小箭头 注意:根据Op…

cef浏览器加载过程实测ILoadHandler和IRequestHandler

针对方法GetResourceRequestHandler获取资源请求过程中,会多次发生请求,不知道何时加载完的问题,IRequestHandler没有了OnResourceLoadComplete和OnBeforeResourceLoad方法,如何判断是否加载完。使用browser.isLoading并不能真正的判断。所以想到了 OnFrameLoadEnd OnFram…

【STM32】详解独立看门狗的本质和使用步骤代码

一、看门狗 1、介绍 作为一个检测装置,发生意外情况能够报告并处理突发意外——复位。 复位中断属于不可屏蔽中断,属于优先级最高的中断 2、作用 两个看门狗(独立看门狗和窗口看门狗)均可用于检测并解决由软件错误导致的故障&…

设计没灵感,一定要逛这5个网站。

本期给大家分享几个设计灵感网站,希望对设计师们有所帮助,话不多说直接上内容。 1、dribbble Dribbble - Discover the World’s Top Designers & Creative Professionals Dribble是一个很大的设计作品共享网站,也涵盖了很丰富的设计作…

HTTP 和 HTTPS 它们之间的区别在哪里?

您可能已经听说过很多有关互联网术语 HTTP 和 HTTPS 的信息。您知道两者之间的区别是什么吗?HTTP 在随着技术的不断更新已经慢慢开始消失在互联网之中。在浏览器的地址栏中,您访问的每个网站的 URL 始终以 HTTP 或 HTTPS 开头,而目前 HTTPS 协…

SSM校园网报修系统计算机毕业论文java毕业设计选题源代码

💖💖更多项目资源,最下方联系我们✨✨✨✨✨✨ 目录 Java项目介绍 资料获取 Java项目介绍 《SSM校园网报修系统》该项目采用技术:jsp springmvcspringmybatis cssjs等相关技术,项目含有源码、文档、配套开发软件、…

02源码分析-ThreadLocal详解-并发编程(Java)

文章目录1 ThreadLocal内部结构2 主要方法源码分析2.1 set()方法2.1.1 getMap()2.1.2 createMap()2.1.3 ThreadLocalMap.set()2.1.4 replaceStaleEntry()2.1.5 expungeStaleEntry()2.1.6 cleanSomeSlots()2.1.7 rehash()2.1.8 expungeStaleEntries()2.1.9 resize()2.2 get()方法…

Minitab使用图形渲染和数据描述

Minitab使用图形渲染和数据描述 Minitab是最流行的质量、分发和分析程序之一,实际上是OMNITAB软件的一个较小版本。六西格玛的软件是开发组织质量开发和改进的合适工具,具有处理、计算、分析、报告和其他数据工具的强大能力。的确如此。在本软件的上下文…

HTML列表与表格详解_高效学习攻略

HTML列表与表格HTML篇_第六章、HTML列表与表格一、列表1.1定义1.2列表的分类1.3列表的对比二、表格2.1表格的定义2.2表格的边框2.3表格的表头单元格2.4表格标题 <caption>2.5表格的高度和宽度2.6表格背景2.7表格空间2.8合并单元格2.9表格头部、主题和页脚2.10表格的嵌套H…

《可解释机器学习公开课》来了!

Datawhale开源 联合发布&#xff1a;同济子豪兄、Datawhale文章目录1.什么是机器学习的可解释性分析。2.学可解释机器学习有什么用&#xff1f;3.可解释机器学习开源学习计划&#xff0c;同济子豪兄和 Datawhale 联合发布。什么是可解释AI现代的机器学习和人工智能&#xff0c;…

redis 的雪崩、穿透和击穿

面试题 了解什么是 redis 的雪崩、穿透和击穿&#xff1f;redis 崩溃之后会怎么样&#xff1f;系统该如何应对这种情况&#xff1f;如何处理 redis 的穿透&#xff1f; 面试官心理分析 其实这是问到缓存必问的&#xff0c;因为缓存雪崩和穿透&#xff0c;是缓存最大的两个问…

【C++】list的模拟实现来咯

文章目录一、整体框架二、迭代器1、list迭代器的引入2、迭代器的区分3、list迭代器的实现4、模板三、增删查改1、insert和erase2、push_back和push_front3、pop_back和pop_front四、list的接口1、构造2、析构3、赋值重载五、list和vector的对比一、整体框架 list的本质就是带头…

中润光学通过科创板注册:预计年营收4亿 拟募资4亿

雷递网 雷建平 12月9日嘉兴中润光学科技股份有限公司&#xff08;简称&#xff1a;“中润光学”&#xff09;日前通过注册&#xff0c;准备在科创板上市。中润光学计划募资4.05亿&#xff0c;其中&#xff0c;2.7亿元用于高端光学镜头智能制造项目&#xff0c;5629万元用于高端…

【HDU No. 2243】单词情结 考研路茫茫——单词情结

【HDU No. 2243】单词情结 考研路茫茫——单词情结 杭电OJ 题目地址 【题意】 单词和词根仅由小写字母组成。给定N个词根&#xff0c;求长度不超过L 且至少包含一个词根的单词可能有多少个&#xff1f; 若有两个词根aa和ab&#xff0c;则长度不超过3且至少包含一个词根的单词…

IO流,,

标题1. 文件基础知识1.1 文件基础知识-文件流1.2 创建文件的3种方式(不是目录)3. 获取文件的相关信息4. 删除文件及创建多级(一极)目录2. IO流原理及流的分类2.1 InputStream 字节输入流2.1.1 FileInputStream2.1.2 FileOutStream2.1.3 拷贝文件2.2 FileReader2.3 FileWriter2.…

MyCat教程【mysql主从复制实现】

单个mysql数据库在处理业务的时候肯定是有限的&#xff0c;这时我们扩展数据库的第一种方式就是对数据库做读写分离&#xff08;主从复制&#xff09;,本文我们就先来介绍下怎么来实现mysql的主从复制操作。 1. 读写分离 原理&#xff1a;需要搭建主从模式&#xff0c;让主数…

Python实现房产数据分析与可视化 数据分析 实战

Python库的选择 话说&#xff0c;工欲善其事&#xff0c;必先利其器&#xff0c;虽然我们已经选择Python来完成剩余的工作&#xff0c;但是我们需要考虑具体选择使用Pytho的哪些利器来帮助我们更快更好地完成剩余的工作。 我们可以看一下&#xff0c;在这个任务中&#xff0c…

elasticsearch global 、 filters 和 cardinality 聚合

文章目录1. 背景2、解释1、global2、filters3、cardinality3、需求4、前置条件4.1 创建mapping4.2 准备数据5、实现3的需求5.1 dsl5.2 java 代码5.3 运行结果6、实现代码7、参考文档1. 背景 此处将单记录一下 global 、 filters和cardinality的聚合操作。 2、解释 1、global…

C++学习笔记(十八)——stack和queue

stack stack的介绍 stack接口的介绍 queue queue的介绍 queue接口的介绍 stack stack的介绍 stack是一种先进后出的容器. stack是一种容器适配器,专门用在具有后进先出(last-in first-out)操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作.stack是作…