计算机网络笔记——网络层、传输层、应用层(方老师408课程)(持续更新)

news2024/11/25 13:27:23

文章目录

  • 前言
  • 网络层
    • 网络层提供的两种服务
    • 网际协议——IP
      • 虚拟互联网络
      • IP数据报格式
        • 逐一理解
        • 整体理解
        • IP数据报分片与长度精算
      • IP地址
        • IP地址概述
        • 分类的IP地址——ABCDE
        • 分类IP的子网划分
        • 不分类的IP地址——CIDR
        • IP地址总结
    • IP分组的转发
    • 网际控制报文协议——ICMP
    • 下一代网络协议——IPV6
    • 路由选择协议
    • IP多播
    • 虚拟专用网VPN和网络地址转换NAT
    • 多协议标记交换MPLS
    • 软件定义网络SDN

前言

这学期学计算机网络,但是我感觉我们学校的某位任课老师讲的不太行,听完introduction部分以后,我决定脱离学校课程,直接按照408去学习,备战考研。

我购买了408推荐参考教材《计算机网络》,是谢希仁版本的第八版,网上对应的视频不是很多,我找到了方诗虹老师的课程,他用的书就是408的。虽然方老师的任职学校并不是很好,但是就我的经历来说,408本来就没什么特别深的东西,关键在于能不能讲好,经过我的调查,方老师评价还不错,所以我就直接来听她的课,搭配书籍食用。

本文是系列笔记中的第二篇,内容为网络层、传输层、应用层。

计算机网络笔记——概述、物理层、链路层(方老师408课程)
计算机网络笔记——网络层、传输层、应用层(方老师408课程)
[考研整理——还没写]

网络层

最重要的一层,没有之一。

链路层解决了局域网内部的传输,而网络层的关键任务是将世界上不同的局域网连接在一起,即异构网络之间的连接和资源共享问题,细分为如下方面:

  1. 跨局域网互联
  2. 主机标识。如何区分不同主机
  3. 路由选择。选择哪条道路
  4. 分组转发。数据如何转发

网络层提供的两种服务

在设计网络层前,关键的问题是网络层到底要实现什么功能?进一步说,就是网络层是否应该负责可靠传输

因为全球互联网络的传输路径太长了,每一个节点都有一定概率出问题,叠加起来难以保证传输质量。因此现在是以不可靠传输为主,可靠传输为辅:

  1. 少数——网络负责
    • 首先建立虚电路逻辑连接,占领资源,沿着这条路进行存储转发,结束后释放资源
    • 成本较高,容易出错
  2. 绝对主流——端系统负责
    • 向上层提供简单的灵活地、无连接的、尽最大努力交付的数据报服务
    • 由主机上运行的传输层协议保证可靠传输

在这里插入图片描述

最开始人们认为分组交换比较好,后面大家觉得为语音、视频服务的电路交换更好,现在随着互联网邮件,web应用的出现,大家又觉得为这种突发流量服务的分组交换更好。

时至今日,分组交换已经占据绝对主流,物理网络也已经定型。改变硬件是很困难的,所以现在的应用程序也都是在适应分组交换网络,不需要保证带宽。

目前使用虚电路网络的只有MPLS和租用专线等,很少,很贵。

网际协议——IP

虚拟互联网络

不同局域网使用的技术不同,无法直接通信。把世界的所有网络技术统一不够现实,也会限制技术发展,不如就使用中间设备转发。

这个中间设备叫路由器,IP协议运行在路由器上。

在这里插入图片描述
使用路由器将世界上的局域网连在一起后,就形成了一个虚拟互联网络,即互联网,用户只需要接入互联网,就可以和另一台接入互联网的设备通讯。

网络层其实不止有一个IP协议,而是有三大类:

  1. 下层协议
    • ARP(Address Resolution):负责IP地址和MAC地址的解析转换
  2. 核心协议
    • IP(Internet):网际协议
  3. 上层辅助协议
    • ICMP(Internet Control Message):网际控制报文协议
    • IGMP(Internet Group Message):网际组管理协议

在这里插入图片描述

下图中,一个信息要经过5跳,前4跳都是交付给路由器,是间接交付。而最后一跳是交付给目标主机,这是直接交付。

在这里插入图片描述

IP数据报格式

逐一理解

IP数据报有如下部分:

  1. 首部
    • 固定部分,有20B(5行,为5×8字节=5×32bit)
    • 可变部分,最长40B,原因后面说
  2. 数据部分

在这里插入图片描述

接下来逐步解析首部:

  1. 版本(4):
    • 0100代表IPv4
    • 0110代表IPv6
  2. 首部长度(4):
    • 范围为5-15
    • 实际要×4,即首部长度范围是20-60,且必须是4的倍数
  3. 区分服务(8):略,不怎么用
  4. 总长度(16):
    • 范围为0-65535。
    • 总长度指的是一个完整的IP数据报长度,但是链路层MTU长度会限制这个,所以IP数据报可能被先分片后合并。
    • TODO 实际应用中,切分了以后总长度可以超过1500吗?
  5. 标识(16):
    • 来自于同一个IP数据报的IP报文分片的标识相同
  6. 标志(3):
    • 有三位,保留位无意义
    • DF=1代表不分片,此时MF位无意义,当DF=0,MF才有意义
    • MF=1代表后面还有分片
  7. 片偏移(13):
    • 用来表达报文片的先后顺序
    • 偏移=当前片段的第一个bit在原始数据报数据部分中的bit位/8。
    • 之所以÷8,是因为标志位占了3bit,为了扩大13位片偏移的表达范围,就弄成8倍。巧合的是,上述计算一定可以整除。
  8. 生存时间(8):
    • TTL,给定初始值,通过一个路由器就-1。
    • TTL=64代表最多经过64个路由器,之后再经过路由器就会被丢弃,防止无休止路由浪费资源。
    • TTL=0还是可以被主机接收的,只是不能转路由器了
  9. 协议(8):
    • 表示应该交付给上层的哪个协议
      在这里插入图片描述
  10. 首部检验和(16):
    • 只考虑首部计算的校验码
    • 检验流程类似于CRC,但是计算方法不同。
  11. 源地址(32)。源头IP
  12. 目的地址(32)。目标IP
  13. 可选部分功能丰富,但是一般不用,成本较大

整体理解

核心其实就是3个,从哪里来,到哪里去,干什么用。

其他的各种字段都是用来辅助的。

在这里插入图片描述

IP数据报分片与长度精算

举个具体的例子。一个ICMP数据报,20B的首部,8B的ICMP首部,3500B的其他数据,所以数据部分为3508B。

以太网MTU=1500字节(以太网帧最大是1518字节,MTU只是其数据部分,即IP数据报),所以假设报头只有20B,则IP数据报片的数据部分最多只有1500-20=1480B

所以3508B切分为3片,bit位为0-1479,1480-2959,2960-3507。

在这里插入图片描述
逐部分解析:

  1. 标志位。分片,所以DF=0。前两个MF=1,代表后面还有片,最后一片MF=0
  2. 偏移量。1480恰好是8的倍数,我们分片的第一个bit所在的位置恰好是1480的倍数,自然也一定能整除8

IP地址

IP地址概述

IP地址和接口一一对应,不会重复。一般一台电脑只有一个接口,也就只有一个IP地址,但是一个路由器有很多接口,则会有很多IP地址。

IP地址是32位的,人手一个都不够用,更别说一个人有好几台设备了,毕竟当时也没想着给全世界的人用。于是现在诞生了128位的IPv6,号称给地球的每一粒沙子一个IP地址,但是此处我认为,现在的视野还是局限在地球的,万一以后扩展到了宇宙,IPv6还是不够用,还得用新的网络协议。

因为IPv4不够用,所以在管理方面是很严格的。最上面是世界,之后是地区级(RIR),地区下面是国家(NIR),国家下面是ISP(比如移动联通电信)

ISP拿到一批IP,之后根据自己的业务自行分配。

在这里插入图片描述
基本的IP地址结构分为两部分,网络号代表了你在哪个局域网,主机号代表了你是这个局域网里的哪个设备。
在这里插入图片描述
这种分级结构优点如下:

  1. 便于管理。IP地址管理机构分配网络号,单位内部分配主机号。
  2. 减轻路由负担。路由转发是在局域网之间的,因此其负担和网络号数量正相关。主机号的存在将一部分压力分到了局域网内部。

32位2进制太难记,于是切分成4部分记录,即点分十进制记法。每一部分占8bit,所以其范围是0-255。

在这里插入图片描述

分类的IP地址——ABCDE

一个地址对应一个局域网,两个局域网是不可以合并的,所以一个IP地址的主机号位数越多,那么其所在的局域网可以容纳的主机数量(IP数量)也就越多,由此根据位数对IP地址分级,通过开头的bit位特殊序列区分类别,A最高,C最低。

除此之外,还有一个1110开头的多播地址,后面会说。1111开头的特殊地址保留备用。
在这里插入图片描述
IP地址细节很多,首先要理解固定位以及两类特例:

  1. 固定位。每一类网络都会固定特殊前缀
    • A类固定一位(0),B两位(10),C三位(100)
    • 去掉固定的前缀剩余的bit位才是这一类IP网络号的可变部分
  2. 网络号特例,只存在于A类网络
    • 0代表本网络
    • 127代表本地软件环回测试
  3. 主机地址特例,存在于所有网络
    • 全0代表本机IP的主机号,即默认值(比如本机是192.168.199.108,那么全0就代表108)
    • 全1代表该网络的所有主机,即广播。

由上即可得出下表,括号里是具体计算过程,先解释一下1,4列:

  1. 考虑固定位计算2次幂,那么A类是8-1=7,B类是16-2=14,C类是24-3=21
  2. 考虑网络号特例,因为只有A类有,所以A损失了两个网络号,BC类没有损失,直接就是2的n次方
  3. 考虑主机号特例,ABC类都有,所以就都是先计算2的24,16,8次幂后减2。

在这里插入图片描述
再解释2,3列:

刚开始学,可能会认为这三类分法会浪费掉一些网络号,其实不完全是,ABC三类的IP地址的范围是连续的

  1. A:0 000 0000到0 111 1111,即0-127
  2. B:10 00 0000.0到10 11 1111.255,即128.0到191.255
  3. C:110 0 0000.0.0到
    110 1 1111.255.255,即192.0.0到223.255.255
  4. D(多播):1110 0000.0.0.0到
    1110 1111.255.255.255,即224.0.0.0到239.255.255.255
  5. E(预留):1111 0000.0.0.0到
    1111 1111.255.255.255,即240.0.0.0到255.255.255.255

也就是说,从0.0.0.0到255.255.255.255,这5大类网络的划分理论上是连续的,只不过具体上有一些浪费,浪费在哪里呢?

  1. 网络号特例:A类地址头尾损失了两个网络号,所以实际范围是1-126
  2. 主机号特例:ABC类地址每个网络损失了两个主机号
    • A类区间是x.0.0.1到x.255.255.254
    • B类区间是x.x.0.1到x.x.255.254
    • C类区间是x.x.x.1到x.x.x.254
  3. 多播:其实这不算浪费,2.6亿个多播组并没有那么多。
  4. E类:预留其实也不算是浪费

所以说到头,实际上没有浪费,只需要知道两个特例让IP地址不完全连续,并且知道断在哪里即可。

分类IP的子网划分

一个网络号里主机号太多,可以划分几个子网出来,便于管理。

在这里插入图片描述
简单来说,子网号就是取原来主机号的前m位,因此,m取决于你要分的子网数量。如果是5-8个子网,那么就取m=3

在这里插入图片描述
可以看出,子网划分会浪费一些IP地址:

  1. 子网号特例:
    • 一开始子网号不允许全0,全1
    • 现在可以,所以子网号特例不浪费
  2. 不够2的n次幂个子网
    • m位子网号对应2的m次幂个子网号,如果要的子网不够这个数量,就会浪费一些子网号
  3. 主机号特例
    • 每个子网内部,主机号都是不允许全0全1的
    • 不分子网,其实就是子网数量=1
    • 假设子网号m bit,则子网数量为 2 m 2^{m} 2m,则浪费的主机号数量为 2 m × 2 2^m\times 2 2m×2,m越大,浪费的数量指数上升

因为路由器是以网络号转发的,那么可变长度的子网号就是个问题。由此,干脆就制造一个固定长度的子网掩码,网络号部分全1,其他全0,只需要让IP地址与子网掩码进行与运算即可得到网络号+子网号=当前子网的网络地址

在这里插入图片描述
如何判断多个IP地址是否在同一个网络?其实就是从子网掩码上下手:

  1. 子网掩码长度相同
  2. 网络地址相同

这两个是充要条件,代表两个IP的网络地址位数与值一样,其实就是网络地址完全一样。

不分类的IP地址——CIDR

IPv4分类IP地址便于管理,在前期做出巨大贡献,但是缺点很多,后期逐渐凸显:

  1. IPv4设计有缺陷,数量不够
  2. 大地址块(A类)浪费地址
  3. 大变小浪费:大网络划分子网只是便于管理,并不增加IP地址,反而浪费地址
  4. 小变大不行:不同网络号之间的网络无法合并

CIDR做了若干改变:
在这里插入图片描述

  1. 合并:网络号和子网号=网络前缀,子网不复存在
  2. 改名:一个网络前缀对应一个地址块,对应一片局域网
  3. 斜线记法:子网掩码直接用斜线记法十进制数字表示,比如255.255.1111 0000.0,有20个1则就写20
    在这里插入图片描述

前缀长度灵活可变,因此地址块大小是任意的,而不是ABCDE这几类大小。其中有三个特殊前缀长:

其中注意31,其实按照规定,主机号是不能全0全1的,但是31比较特殊,就允许这么做了。所以用30替代31也是可以的,30的话,就有4个主机,按规定去除00和11,同样是只剩下两个主机号可用。

总的来说,30和31都可以用,老习惯用30,新规定可以用31。
在这里插入图片描述

连续的网络前缀可以合并(路由聚合,构成超网),变成一个更大的局域网,而网络号不可以,两个C类就是两个C类。

下图中,四个25长度的前缀先两两合并,变成两个24长度前缀,再两两合并成一个23前缀。

在这里插入图片描述
聚合有什么好处呢?虽然没办法解决IP地址不足的问题,但是可以让网络前缀总量变少,这样就可以减轻路由表的条目数量,提高路由速度。

IP地址总结

  1. 网络前缀+主机号=IP地址,网络前缀不分等级,只有地址块大小之分
  2. 一个IP对应一个接口,一条链路两端有两个接口,其IP各不相同
  3. 局域网内部使用交换机连接,局域网之间只能用路由器连接
    • 一个局域网对应一个网络前缀,网里除了和外部打交道的接口,其他接口的IP地址网络前缀必须一样。
    • 一个网络前缀可以分多个局域网(用路由器隔离,交换机起不到局域网隔离作用),但是一个局域网内部网络前缀一定一样
    • 网络号(网络前缀)不同,则一定代表两个局域网,必须用路由器连接

来个真实的例子:

  1. 局域网。
    • L A N 1 LAN_1 LAN1是一个局域网,其网络前缀是10.0.0.0/24。
    • 内部的所有机器网络前缀都是一样的
  2. 网关。
    • 10.0.0.1是 L A N 1 LAN_1 LAN1和外接交流的唯一(有待考证)接口,因此叫“关”。
    • 记住,网关这个接口IP也是属于局域网的,所以前缀也要保持一致。
    • 网关IP,一般来说,我们习惯于把网关配成局域网的第一个IP,所以主机号往往是1
  3. 路由器之间的局域网。
    • 路由器之间的每对接口都是一个局域网,网络前缀长度是31,代表点对点,用30也行。
    • 图中似乎是有一点小问题,网络前缀重复,也可能是我不知道的知识点,有待考证。
      在这里插入图片描述

IP分组的转发

网际控制报文协议——ICMP

下一代网络协议——IPV6

路由选择协议

IP多播

虚拟专用网VPN和网络地址转换NAT

多协议标记交换MPLS

软件定义网络SDN

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

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

相关文章

我用 ChatGPT 干的 18 件事!【人工智能中文站创始人:mydear麦田访谈】

新建了一个网站 https://ai.weoknow.com/ 每天给大家更新可用的国内可用chatGPT 你确定你可以使用ChatGPT吗? 今天我整理了18种ChatGPT的使用方法,让大家看看你可以使用哪些。 1.语法修正 2.文本翻译 3.语言转换 4.代码解释 5.修复代码错误 6.作为百科…

初识HTML的基础知识点!!!

初识HTML!!! 一、系统构架 1.B/S构架 (1)B/S构架(Browser / Server) 就是(浏览器/服务器的交互形式) Browser支持HTML、CSS、JavaScript (2)优缺点 优点…

UI--基本组件

目录 1. Designer 设计师 2. Layout 布局 3. 基本组件 3.1 QWidget 3.2 ui指针 3.3 QLabel 标签(掌握) 示例代码: dialog.h dialog.cpp 3.4 QAbstractButton 按钮类(掌握) 示例代码: dialog.ui dialog.h di…

【MyBaits】SpringBoot整合MyBatis之动态SQL

目录 一、背景 二、if标签 三、trim标签 四、where标签 五、set标签 六、foreach标签 一、背景 如果我们要执行的SQL语句中不确定有哪些参数,此时我们如果使用传统的就必须列举所有的可能通过判断分支来解决这种问题,显示这是十分繁琐的。在Spring…

linux查看服务端口号、查看端口(netstat、lsof)以及PID对应服务

linux查看服务端口号、查看端口(netstat、lsof) netstat - atulnp会显示所有端口和所有对应的程序,用grep管道可以过滤出想要的字段 -a :all,表示列出所有的连接,服务监听,Socket资料 -t &…

说服审稿人,只需牢记这 8 大返修套路!

本文作者:雁门飞雪 如果说科研是一场修炼,那么学术界就是江湖,投稿就是作者与审稿人或编辑之间的高手博弈。 在这一轮轮的对决中,有时靠的是实力,有时靠的是技巧,然而只有实力和技巧双加持的作者才能长久立…

Qt--项目打包

项目打包 一款正常的软件产品应该在任何的计算机中运行,不需要单独安装Qt的开发环境,因此需要把之前的项目打包成一个安装包。 1. 设置应用图标 设置应用程序图标的操作步骤如下所示。 1. 下载一个图标图片,格式要求png。(png包含…

学习Python的day.13

输入和输出 一、输入 标准输入:从键盘输入 input(promptNone) # prompt: 输入的提示符,可以为空 Read a string from standard input --- 译为:从标准输入读入一个字符串,输入读取的一定是字符串,返回值就是一个字符串 那我们…

基于知识图谱的个性化学习资源推荐系统的设计与实现(论文+源码)_kaic

摘 要 最近几年来,伴随着教育信息化、个性化教育和K12之类的新观念提出,一如既往的教育方法向信息化智能化的转变,学生群体都对这种不受时间和地点约束的学习方式有浓厚的兴趣。而现在市面上存在的推荐系统给学生推荐资料时不符合学生个人对知识获取的…

多态与虚函数

多态与虚函数 多态的引入多态与虚函数多态编译时多态运行时多态 多态的原理静态联编和动态联编 多态的引入 学过C继承的话应该都知道在继承中存在一种菱形继承,假设存在一个类(person),其派生出两个子类,分别是studen…

Template Method模式

文章目录 💡前言分类优点 💡问题引入💡概念💡例子💡总结 💡前言 此文是第一篇讲解设计模式的文章,而笔者我又不想另起一篇来概述设计模式的分类,作用,以及优点&#xff…

MySQL笔记(四) 函数、变量、存储过程、游标、索引、存储引擎、数据库维护、指定字符集、锁机制

MySQL笔记(四) 文章目录 MySQL笔记(四)函数文本处理函数日期和时间处理函数数值处理函数类型转换函数流程控制函数自定义函数基本语法 局部变量全局变量聚集函数 aggregate functionDISTINCT 存储过程为什么要使用使用创建 删除建…

调用api实现ChatGPT接口余额查询

先打个广告: 推荐一款不用科学上网就可以使用的ChatGPT工具:智能聊天助手 体验版入口:智能聊天助手体验版 在ChatGPT官网可以查询接口使用额度,但是官方并没有提供相应的API给开发者调用。但是可以通过破解的方式找到它的API。方法…

人生在世皆有过错,来一起看看Java中的异常吧!!!

Java中的异常问题详解 一、异常的概念与分类 1.异常概念 概念:Java异常是一个描述在代码段中发生异常的对象,当发生异常情况时,一个代表该异常的对象被创建并且在导致该异常的方法中被抛出,而该方法可以选择自己处理异常或者传…

Invicti v23.5 for Windows 发布 - 企业应用安全测试

Invicti v23.5 for Windows - 企业应用安全测试 Invicti Standard 11 May 2023 v23.5.0.40516 请访问原文链接:https://sysin.org/blog/invicti/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org Invicti 是一种自动…

[HFCTF2022]ezchain

环境分析 环境提供了docker-compose.yml,nginx.conf文件,从两个文件中可疑分析出是不出网的环境 nginx.conf: server { listen 80;server_name localhost;location / {root /usr/share/nginx/html; #收到/路径请求会访问/usr/sha…

Keil5----Debug时,watch1中全局变量数值不刷新问题解决方法

问题: 在Keil5-MDK中,Debug时,watch1中全局变量数值不刷新。 解决方法: 步骤1:进入Debug模式 将程序调试下载器(STlink,Jlink,Ulink)连接,编译程序后。 进行如下操作&#xff1a…

算法修炼之练气篇——练气十六层

博主:命运之光 专栏:算法修炼之练气篇 前言:每天练习五道题,炼气篇大概会练习200道题左右,题目有C语言网上的题,也有洛谷上面的题,题目简单适合新手入门。(代码都是命运之光自己写的…

MySQL --- 多表查询

多表查询、事物、以及提升查询效率最有手段的索引 一. 多表查询 1.1 多表查询 --- 概述 1.1.1 数据准备 将资料中准备好的多表查询数据准备的SQL脚本导入数据库中。 部门表: 员工表: 1.1.2 介绍 多表查询:指从多张表中查询数据&#…

2023年的深度学习入门指南(13) - 写后端

2023年的深度学习入门指南(13) - 写后端 我们前面学习了用python在本机上写前端,也学习了使用HTML在本机写前端。同理,我们可以写Windows应用,mac应用,iOS应用,Android应用等等以适合各种终端。其实,最通用…