JavaEE:网络初识

路由器VS交换机

组件局域网的方式是通过路由器或者交换机

交换机:上面有很多对接口,所有的口都是等价的,电脑可以连到任意的口上,连上的电脑就构成了局域网

路由器:又叫WiFi/猫

猫:调制解调器,把电话线中的模拟信号转成以太网的数字信号

光猫:把光纤中的光信号转成以太网的电信号

上面的口分成两种:WAN口和LAN口;构成局域网的电脑都连到LAN口,WAN口对接运营商网线

LAN口还可以继续接交换机,对路由器现有的端口进行扩展

 

通信行业公司:做交换机和路由器,比如:华为,中兴,华硕等


IP地址

描述一个设备在网络上的位置

本质上是32位,4个字节的整数,为了方便表示,把IP地址表示成“点分十进制”的形式。使用3个“.”把4个字节分成4个部分,每个部分1个字节。取值范围是0~255

比如 192.168.2.101


端口号

描述一个主机/设备上的哪个程序正在使用网络(IP确定主机)

端口号可以是用户手动指定的,也可能是系统自动分配的

同一个主机上,程序之间使用的端口号不能冲突(端口号是一个整数)

进行一次网络通信的过程中,涉及到的IP和端口其实各有两个。与我们网购买东西一样

收件人地址  ---->  目的IP

收件人电话  ---->  目的端口

发件人地址  ---->  源IP

发件人电话  ---->  源端口


协议

通信过程中的一种约定。发送方和接收方需要提前商量好数据的格式,才能确保二者之间能正确进行沟通

通信的两个计算机可能来自不同的两个厂商,协议就能够使两个厂商产出的设备相互配合

五元组

为啥有协议号?

网络通信过程中的细节很多,如果只靠一个协议把这些庞杂的细节记录下来,非常不利于学习和维护。所以就要把一个高大全的协议拆分成多个小而美的协议

协议太多怎么办?协议号可以给每个协议做标识

引入协议分层。--》相当于公司

功能相似的协议放到同一层之中,上层协议可以调用下层协议的功能,下层协议为上层协议提供服务。--》相当于一个公司的组织架构,上级领导管理下层员工,下层员工给上级领导打工

只有相邻层级的协议可以进行沟通,不能跨层调用(会引起混乱)--》相当于越级汇报

附带好处

1.下层协议把细节都封装好了,上层协议可以直接使用下层协议,不需要了解下层协议的细节

 2.某一层的协议进行替换之后,对于其他层没啥影响

具体的分层

OSI七层网络协议化简之后变成TCP/IP五层(或四层)网络协议

或四层?不算物理层(硬件)的情况,也就是纯软件的情况

应用层:程序拿到数据包之后要用来干啥,解决什么问题(快递到手后随买主自由操作)

传输层:负责关注网络数据包的起点和终点,端到端之间的传输(快递从哪送到哪)

网络层:负责关注从起点到终点要走哪条路(路径规划)(快递怎么送过来)

数据链路层:负责两个相邻结点的传输(快递包中转点)

物理层:通信中的基础设施(快递传输中的公路,铁路等)

对于一台主机,其操作内核实现了从传输层到物理层的内容,就是TCP/IP的下四层

对于一台路由器,实现了从网络层到物理层,就是TCP/IP下三层,工作在网络层

对于一台交换机,实现了从数据链路层到物理层,就是TCP/IP下两层,工作在数据链路层

对于集线器,只实现物理层


封装

比如A给B的QQ发送了hello,A发出去的过程需要将这段信息层层封装成一个信号/电磁波

1.应用层(应用程序) 

QQ在输入框获取hello,把这个数据按照QQ预先设置的应用层协议构成一个应用层的数据包

这里的应用层协议是一个字符串拼接的格式,应用程序就会调用操作系统提供的API,把这个数据包交给传输层


2.传输层

传输层把从应用层获取的数据作为一个整体重新构成一个传输层的数据包。

传输层的协议主要是TCP和UDP。假设用UDP,就会造一个UDP数据包

添加报头的过程就叫封装(其实是字符串拼接,拼完的报头有一定的结构)

报头的作用并不是保护数据,可以起到贴标签类似的效果,可以承载源端口和目的端口这类用来转发的信息


3.网络层

核心协议:IP协议

把刚才的传输层UDP数据包作为一个整体,再拼上一个IP协议的报头,构成一个IP数据包

IP报头最重要的信息就是源IP和目的IP


4.数据链路层

涉及的核心协议:以太网("以太"用来表示网络传输的介质)

以太网就是我们日常见到的有线网络,网口:以太网口;网线:以太网线;交换机:以太交换机

以IP数据包为一个整体,添加上帧头和帧尾,构成一个以太网数据帧


5.物理层 (硬件设备)

把上述的以太网数据帧(是二进制结构),转换成光信号(光纤)/电信号(网线)/电磁波(无线WiFi),然后进行发送


分用

假定数据包已经到达B的网卡了,B将A封装的东西层层解析过程就叫分用

1.B的物理层

B的物理层收到了光信号/电信号/电磁波。就会把这些物理信号转换成数字信号,得到一个以太网数据帧,进一步地把这个数据帧交给数据链路层处理

2.数据链路层 -- 以太网

3.网络层 -- IP协议

4.传输层 -- UDP协议

5.应用层

QQ在B窗口弹出提示,把消息/消息发送者/发送时间显示在聊天窗口上

分用的过程就是封装的逆过程


真实情况下,两台主机一般不会通过网线直连,而是通过一系列交换机或者路由器来进行数据转发

即使经过交换机或路由器,封装分用的过程也是适用的

经典的交换机只封装分用到数据链路层;经典的路由器只封装分用到网络层


描述网络上传输数据的单位的术语 

包(packet) 比如IP数据包

段(segment) 比如TCP数据段

报(datagram) 比如UDP数据报

帧(frame) 比如以太网数据帧

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

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

相关文章

全网最最最详细“Jupyter command ‘jupyter-notebook‘ not found.“的解决方案

"Jupyter command jupyter-notebook not found."。这通常意味着 jupyter-notebook 命令在当前的虚拟环境中未安装或未正确安装,因此系统无法识别此命令。 原因分析 未安装 Jupyter Notebook: 可能你的虚拟环境中还没有安装 Jupyter Notebook。虽然 Jupyt…

生存预后不显著?最佳阈值来帮你!| 附完整代码 + 注释

大家在进行生存预后分析时发现结果不显著,是不是当头一棒!两眼一黑!难不成这就代表我们的研究没意义吗?NONONO!别慌!说不定还有救!快来看看最佳阈值能不能捞你一把! 对生存分析感兴趣…

18. 查看帖子详情

文章目录 一、建立路由二、开发GetPostDetailHandler三、编写logic四、编写dao层五、编译测试运行 一、建立路由 router/route.go v1.GET("/post/:id", controller.GetPostDetailHandler)二、开发GetPostDetailHandler controller/post.go func GetPostDetailHand…

matplotlib系统学习记录

日期:2024.03.12 内容:将matplotlib的常用方法做一个记录,方便后续查找。 基本使用 # demo01 from matplotlib import pyplot as plt # 设置图片大小,也就是画布大小 fig plt.figure(figsize(20,8),dpi80)#图片大小,清晰度# 准…

机试:蛇形矩阵

问题描述: 代码示例: //蛇形矩阵 #include <bits/stdc.h> using namespace std;int main(){int n;cout << "输入样例" << endl; cin >> n;int k 1; for(int i 0; i < n; i){if( i %2 0){//单数行for(int j 0; j < n; j){ cout &…

网络计算机

TCP/IP四层模型 应用层&#xff1a;位于传输层之上&#xff0c;主要提供两个设备上的应用程序之间信息交换的服务&#xff0c;它定义了信息交换的格式&#xff0c;消息会交给下一层传输层来传递。我们把应用层交互的数据单元称为报文。应用层工作在操作系统的用户态&#xff0…

JS向指定位置添加元素

内容参考来源 splice方法 splice() 方法向/从数组中添加/删除项目&#xff0c;然后返回被删除的项目。 //在数组指定位置插入 var fruits ["Banana", "Orange", "Apple", "Mango"]; fruits.splice(2, 0, "Lemon", "…

26 easy 35. 搜索插入位置

//给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 // // 请必须使用时间复杂度为 O(log n) 的算法。 // // // // 示例 1: // // //输入: nums [1,3,5,6], …

C++之继承

目录 一、继承的关系 二、继承方式和子类权限 三、子类构造函数 四、继承的种类 一、继承的关系 继承一定要的关系&#xff1a;子类是父类 学生是人 狗是动物 继承的实现形式&#xff1a; class 子类名&#xff1a;继承方式 父类名 { 成员变量&#xff1a; 成员函数&a…

2024-03-13 作业

网络编程&#xff1a; 1.思维导图&#xff1a; 2.上课写的代码&#xff1a; 2.1网络字节序与主机字节序转换 运行代码&#xff1a; #include <myhead.h> int main() {int num 0x12345678;short int value 0x1234;int num_n htonl(num);int value_n htons(value);…

从汇编来角度剖析C语言函数调用过程

目录 1.引言 2.寄存器 3.栈帧 4.函数调用前调用者的动作 5.被调用者在函数调用后的动作 6.被调用者返回前的动作 7.调用者在返回后的动作 8.总结 1.引言 当一个c函数被调用时&#xff0c;一个栈帧(stack frame)是如何被建立&#xff0c;又如何被消除的。这些细节跟操作…

代码随想录算法训练营Day46 ||leetCode 139.单词拆分 || 322. 零钱兑换 || 279.完全平方数

139.单词拆分 class Solution { public:bool wordBreak(string s, vector<string>& wordDict) {unordered_set<string> wordSet(wordDict.begin(), wordDict.end());vector<bool> dp(s.size() 1, false);dp[0] true;for (int i 1; i < s.size(); …