网络通信协议整体框架
通信协议综述协议三要素
语法
就是这一段内容要符合一定的规则和格式。例如,括号要成对,结束要使用分号等。
语义
就是这一段内容要代表某种意义。例如数字减去数字是有意义的,数字减去文本一般来说就没有意义。
顺序
就是先干啥,后干啥。例如,可以先加上某个数值,然后再减去某个数值。
通过编程语言我们可以学会了如何使用计算机及其让计算机完成特定的任务。 但这只是一台计算机的作用, 如果想要使用很多计算机 ,那么就需要借助网络, 而通过网络协议,才能使很多机器互相协作、共同完成一件事。
各个协议详情(自顶向下)
应用层
传输层
网络层
链路层
程序如何工作以用户访问某个页面点击操作为例
简单想想一下”你“这个程序是如何工作的。
用户点击某个链接, 就会有一个网络包发送至服务器端, 当一个网络包从一个网口经过的时候,你看到了,首先先看看要不要请进来,处理一把。有的网口配置了混杂模式,凡是经过的,全部拿进来。
拿进来以后,就要交给一段程序来处理。于是,你调用 一个函数process_layer2(buffer)。当然,这是一个假的函数。但是你明白其中的意思,知道肯定是有这么个函数的。 ...
力扣每日一刷(2023.9.8)
738题目
当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。
给定一个整数 n ,返回 小于或等于 n 的最大数字,且数字呈 单调递增 。
示例 1:
12输入: n = 10输出: 9
示例 2:
12输入: n = 1234输出: 1234
示例 3:
12输入: n = 332输出: 299
提示:
0 <= n <= 109
思路刚开始,看到这种题上来就是一个暴力 ,感觉AC很舒服, 但是一提交就是超时 ,所以对于这种简单的题,我们想的一定要多,不然最后结果一定是false的。
可惜的是,如果不使用暴力。我好像找不到别的思路…. 最后看了卡哥的思路, 才慢慢想通。
先将数字转换为String类型, 然后再使用String的toCharArray() 转换为数组。每个位上的数都在数组中, 而且他们的顺序也是按照0123的顺序排列的。 这样我们就可以通过判断arr[3]> arr[2]来判断它是否有序【假设数字为51233】,如果不是, 那么arr[2]--减到比arr[3]小为值, 然后再继 ...
力扣每日一刷(2023.9.7)
452题目:
在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以纵坐标并不重要,因此只要知道开始和结束的横坐标就足够了。开始坐标总是小于结束坐标。
一支弓箭可以沿着 x 轴从不同点完全垂直地射出。在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend,则该气球会被引爆。可以射出的弓箭的数量没有限制。 弓箭一旦被射出之后,可以无限地前进。我们想找到使得所有气球全部被引爆,所需的弓箭的最小数量。
给你一个数组 points ,其中 points [i] = [xstart,xend] ,返回引爆所有气球所必须射出的最小弓箭数。
示例 1:
输入:points = [[10,16],[2,8],[1,6],[7,12]]
输出:2
解释:对于该样例,x = 6 可以射爆 [2,8],[1,6] 两个气球,以及 x = 11 射爆另外两个气球
示例 2:
输入:points = [[1,2],[3 ...
力扣每日一刷(2023.9.6)
406题目:
假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] = [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高大于或等于 hi 的人。
请你重新构造并返回输入数组 people 所表示的队列。返回的队列应该格式化为数组 queue ,其中 queue[j] = [hj, kj] 是队列中第 j 个人的属性(queue[0] 是排在队列前面的人)。
示例 1:
12345678910>输入:people = [[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]]输出:[[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]]>解释:编号为 0 的人身高为 5 ,没有身高更高或者相同的人排在他前面。编号为 1 的人身高为 7 ,没有身高更高或者相同的人排在他前面。编号为 2 的人身高为 5 ,有 2 个身高更高或者相同的人排在他前面,即编号为 0 和 1 的人。编号为 3 的人身高为 6 ,有 1 个身高更高或者相同的人排在他前面, ...
虚拟机类加载机制
概述在详细讲述类加载机制之前, 我们先了解一下JVM的内存结构图, 通过内存结构图,再理解类加载中的相关细节就会简单很多。
内存结构图
根据内存简图。 我们可以知道,Java中我们书写的Java类通过编译成为字节码文件(Class Files), 然后就会到达类加载子系统
通过类加载子系统加载完成后,就会加载到内存中去
下面是详细的内存结构图
注意:方法区只有HotSpot虚拟机有,J9,JRockit都没有
虚拟机 == 类加载器 + 执行引擎
通过上述的内存详细结构图我们可以得知,类加载子系统也分为三个阶段。 加载、链接、初始化。
下面我们就来详细的了解一下这些阶段要完成的事情, 以及完成这些阶段需要具备什么条件等等。至于剩余的部分, 后续会慢慢学习了解。
类加载的时机首先,让我们看看类的生命周期
通过图片可以知道, 类的整个生命周期将会经历加载 (Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化 (Initialization)、使用(Using)和卸载(Unloadin ...
力扣每日一刷(2023.9.5)
1005题目
给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组:
选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。
重复这个过程恰好 k 次。可以多次选择同一个下标 i 。
以这种方式修改数组后,返回数组 可能的最大和 。
示例 1:
123输入:nums = [4,2,3], k = 1输出:5解释:选择下标 1 ,nums 变为 [4,-2,3] 。
示例 2:
123输入:nums = [3,-1,0,2], k = 3输出:6解释:选择下标 (1, 2, 2) ,nums 变为 [3,1,0,2] 。
示例 3:
123输入:nums = [2,-3,-1,5,-4], k = 2输出:13解释:选择下标 (1, 4) ,nums 变为 [2,3,-1,5,4] 。
提示:
1 <= nums.length <= 104
-100 <= nums[i] <= 100
1 <= k <= 104
思路这种类型的题 ,在力扣上都是简单的。 基本上都不需要使用贪心算法的思路。 直接使用简单的思路 ...
力扣每日一刷(2023.9.4)
122买卖股票的最佳时机问题:
题目:给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。
设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
示例 1:
输入: [7,1,5,3,6,4]
输出: 7
解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6-3 = 3 。
示例 2:
输入: [1,2,3,4,5]
输出: 4
解释: 在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。注意你不能在第 1 天和第 2 天接连购买股票,之后再将它们卖 ...
LANs
addressing, ARPMAC 地址和ARP 32bitIP地址:
网络层地址
前n-1跳:用于使数据报到达目的IP子网
最后一跳:到达子网中的目标节点
LAN(MAC/物理/以太网)地址:
用于使帧从一个网卡传递到与其物理连接的另一个网卡 (在同一个物理网络中)
48bit MAC地址固化在适配器的ROM,有时也可以通 过软件设定
理论上全球任何2个网卡的MAC地址都不相同
e.g.: 1A-2F-BB-76-09-AD
网络地址和mac地址分离
IP地址和MAC地址的作用不同
a) IP地址是分层的
一个子网所有站点网络号一致,路由聚集,减少路由表
需要一个网络中的站点地址网络号一致,如果捆绑 需要定制网卡非常麻烦
希望网络层地址是配置的;IP地址完成网络到网络的 交付
b) mac地址是一个平面的
网卡在生产时不知道被用于哪个网络,因此给网卡一个 唯一的标示,用于区分一个网络内部不同的网卡即可
可以完成一个物理网络内部的节点到节点的数据交付
分离好处
a) 网卡坏了,ip不变,可以捆绑到另外一个网卡 ...
链路层和局域网
目标:
理解数据链路层服务的原理:
检错和纠错
共享广播信道:多点接入(多路访问)
链路层寻址
LAN:以太网、WLAN、VLANs
可靠数据传输,流控制: 解决
引论 和 服务相关术语:主机和路由器是节点(网桥和 交换机也是):nodes
沿着通信路径,连接个相邻节 点通信信道的是链路:links
有线链路
无线链路
局域网,共享性链路
第二层协议数据单元帧frame ,封装数据报
数据链路层负责从一个节点通过链路将 (帧中的)数据报发送到相邻的物理节点 (一个子网内部的2节点)
链路层上下文:数据报(分组)在不同的链路上以不同的链路协议传送:
第一跳链路:以太网
中间链路:帧中继链路
最后一跳802.11 :
不同的链路协议提供不同的服务
e.g., 比如在链路层上提供( 或没有)可靠数据传送
链路层服务成帧,链路接入:
将数据报封装在帧中,加上帧头[包括原mac地址、目标mac地址及其他字段]、帧尾部
如果采用的是共享性介质,信道接入获得信道访问权
在帧头部使用“MAC”(物理)地址来标示源和目的 [ 不同于I ...
网络层控制平面
主要学习网络层控制平面的工作原理
路由(route)的概念**路由: 按照某种指标(传输延迟,所经过的站点数目等)找到一条 从源节点到目标节点的较好路径 **
较好路径: 按照某种指标较小的路径
指标:站数, 延迟,费用,队列长度等, 或者是一些单纯指标的加权平均
采用什么样的指标,表示网络使用者希望网络在什么方面表现突出,什 么指标网络使用者比较重视
** 以网络为单位进行路由(路由信息通告+路由计算) **
网络为单位进行路由,路由信息传输、计算和匹配的代价低
前提条件是:一个网络所有节点地址前缀相同,且物理上聚集
路由就是:计算网络 到其他网络如何走的问题
** 路由选择算法(routing algorithm):网络层软件的一部分,完成 路由功能 **
网络的图抽象N = 路由器集合 = { u, v, w, x, y, z }E = 链路集合 ={ (u,v), (u,x), (v,x), (v,w), (x,w), (x,y), (w,y), (w,z), (y,z) }边有代价**边的代价: **
c( ...