目录
[1.1 单机时代](#1.1 单机时代)
[1.2 局域网时代](#1.2 局域网时代)
[1.3 广域网时代](#1.3 广域网时代)
[1.4 移动互联时代](#1.4 移动互联时代)
[1.5 组建网络的核心设备](#1.5 组建网络的核心设备)
[2.6 网络数据通信的基本流程](#2.6 网络数据通信的基本流程)
[1.应用程序 获取用户输入,构造一个应用层的数据包](#1.应用程序 获取用户输入,构造一个应用层的数据包)
[2.应用程序调用 传输层 提供的接口(API)(socket API,后续详细介绍),把数据交给传输层](#2.应用程序调用 传输层 提供的接口(API)(socket API,后续详细介绍),把数据交给传输层)
[3.传输层构造好数据之后,继续调用网络层的 API,把传输层的数据包交给网络层](#3.传输层构造好数据之后,继续调用网络层的 API,把传输层的数据包交给网络层)
[4.IP协议继续调用 数据链路层的API,把 IP 数据包交给数据链路层](#4.IP协议继续调用 数据链路层的API,把 IP 数据包交给数据链路层)
1.数据到达接受方的网卡,这时是光电信号,网卡把光电信号还原成二进制0101
[3.网络层拿到这个数据之后,按照 IP 协议的格式解析,再把载荷数据交给传输层](#3.网络层拿到这个数据之后,按照 IP 协议的格式解析,再把载荷数据交给传输层)
[4.传输层拿到数据之后,也是类似,按照 TCP 协议来解析,取出载荷,交给应用层](#4.传输层拿到数据之后,也是类似,按照 TCP 协议来解析,取出载荷,交给应用层)
5.QQ应用程序,解析应用层数据,拿到关键信息,展示到界面上,给出提示
1.网络发展史
网络,是整个课程中非常关键的环节~~
现在除了Windows 自带的画图板、计算器,很难找到一个程序,完全不需要网络
现在像 水、电、煤气、网络,都成了我们日常生活中的基础设施~~
后续 Java EE 进阶的内容,都是基于网络展开的,基于网络写一些应用程序~~
现在 Java EE 初阶讲的是基础知识和基本原理
1.1 单机时代
国内,在 2000 年之前,网络属于一种"稀罕物",虽然有些家庭已经有电脑了,但是没有网~~
当时各个电脑之间相互独立,大家都在玩极品飞车、CS、大航海时代、三国群英传、侠盗飞车(GTA3)等单机游戏~~
1.2 局域网时代
2000年之后,网络就开始逐渐多了,也因此产生了网吧~~
当时上初中的计算机课的时候,就有同学把一些家里的游戏拷贝到学校的机房,就可以联机对战~~
比如红警、流星蝴蝶剑、星际争霸、CS
其中流星蝴蝶剑的主程带着团队,后续就去做永劫无间了~~
像以上这些游戏只能在一个机房里/在一个网吧中进行联机~~
这就属于局域网,把两个设备连到同一个路由器上,就在同一个局域网中了~~
1.3 广域网时代
随着时间进一步推移~~
有一个游戏横空出世,横扫了游戏市场,成为了绝对的王者~~
传奇~~网游开山之作~~
后续像贪玩蓝月,就是网页版本的传奇,属于传奇类游戏
这种游戏跨越地点的限制,只要你的机器能联网,就能进行PK~~
这种就属于广域网,其实就是把很多局域网连到一起,形成了一个相对较大的局域网~~
全世界最大的广域网:"因特网"(The Internet)
闲聊:
当时国内最大的代理商:盛大~~
当年那个时代,盛大就属于互联网公司中最牛逼的存在,地位相当于现在的腾讯字节~~
当年互联网行业,刚刚发展
一超多强:搜狐、新浪、网易~~
当年,阿里、腾讯、百度,才刚刚开始搞
而美团、字节、滴滴、米哈游这些,还在娘胎里~~
其中网易属于"上古的遗老"~~很早就有了,现在依旧在蓬勃发展
而新浪要不是靠着微博在支撑,早凉了~~
对于搜狐的话,搜狐有两个最牛逼的团队:搜狐畅游和搜狗,但是都独立运营了,现在搜狗都被腾讯收购了~~
而搜狐现在也支撑不住了,搜狐的老板张朝阳,现在天天在B站/抖音上更新视频上课,讲物理(量子力学)、讲英语~~
因为一些原因,其实咱们在国内,有些网站是不能访问的,因为有墙~~
但是对于墙,其实是利大于弊的
虽然咱们现在生活在和平年代,但其实战争一直都存在,只是咱们被保护的很好
意识形态的战争,从来没有停止过~~
翻墙行为虽然是"违法"行为,但实际上只要你不做坏事(传播一些不当言论),其实也未必会管,这些等未来咱们在全世界舆论战场上,有绝对优势了,就自然不需要了~~
其实现在就已经产生了一些优势了,比如 tiktok 就把欧美舆论的绝对掌控权,撕开了一个大口子~~
1.4 移动互联时代
后来又产生了天龙八部、魔兽世界、CF、LOL等一系列网游
但最具标志性的进入移动互联网时代的是:2007年 乔布斯发布苹果手机(初代 IPhone)
标志着,移动互联网时代,拉开序幕了~~
但是,诺基亚这类传统的手机仍然是主流~~
等到 2011/2012 年左右
真神 IPhone 4出现,使得诺基亚等传统手机厂商一夜之间就G了~~
影响力就大到,甚至有人卖肾去买 苹果手机~~
后续包括华为,小米,三星等一系列厂商,也把 安卓 推上风口浪尖~~
游戏的形态,也在往手机游戏发展,比如王者荣耀~~层出不穷~~
闲聊:
其实 2017 年左右,有一波风口,VR/AR,但是当时的条件不足以把这个事情做好~~
而且最近这两年,AR眼镜(微缩版显示器),本质上还是和手机联动~~
其实这些都属于客观的硬件设备不足,包括现在图形渲染巅峰的显卡4090(A6000也就比4090强半步而已)也算力不足~~
还需要再发展几年~~
在国内,我们可能觉得时代发展很快,但其实是因为国内入局的晚,单机时代、局域网时代,在国外,已经经历很久了~~
1.5 组建网络的核心设备
路由器
上网肯定要连网线,如果就两台机器,那肯定很好连,但要是很多机器的话,连在一起的时候,会连的非常乱👇
而路由器就解决了这个问题,将所有设备都连接到路由器上就行了,可以通过路由器组建成一个网络👇
想组建成更大的网络,就可以通过路由器连路由器解决👇
交换机
路由器的接口总归是有限的,交换机就可以视为是"对路由器的接口进行了扩展"
家用路由器,一般是插4个网线(有1个是 WAN口连 运营商的设备)
如果在宿舍,就四个口,但是有八个人咋办?可以使用交换机~~
交换机不会进行组局域网功能~~但是可以把路由器的接口进行扩展~~
多个电脑连在交换机上等价于连在路由器上👇
交换机口不够用还可以接更多交换机,引入更多的接口👇
答疑
Q1:信号怎么样??
有线传输几乎无延迟
Q2:那不是路由器的负荷会增大??
路由器接的东西太多了,就处理不过来了
家用的路由器,普通的,一般接20个设备,差不多就是极限了~~
要是买贵的好的,就支持的更多,比如ROG、八爪鱼~~
路由器还有企业级的路由器(动不动就几千块钱),带几百个设备,都没啥压力~~
关键就是你得有钱~~
Q3:WAN 口是干嘛的??
后面细说~~
课件补充内容
1.1独立模型
独立模式:计算机之间相互独立
1.2网络互连
随着时代的发展,越来越需要计算机之间互相通信,共享软件和数据,即以多个计算机协同工作来完成业务,就有了网络互联
网络互联:讲多台计算机连接在一起,完成数据共享
数据共享本质是网络数据传输,即计算机之间通过网络来传输数据,也称为网络通信
根据网络互联的规模不同,可以划分为局域网和广域网
1.3局域网LAN
局域网:即 Local Area Network,简称 LAN
Local 即标识了局域网是本地,局部组建的一种私有网络
局域网内的主机之间能方便的进行网络通信,又称为内网;局域网和局域网之间在没有连接的情况下,是无法通信的
局域网组建网络的方式有很多种
(1)基于网线直连
(2)基于集线器组建
(3)基于交换机组建
(4)基于交换机和路由器组建
1.4广域网WAN
广域网,即 Wide Area Network,简称 WAN
通过路由器,将多个局域网连接起来,在物理上组成很大范围的网络,就形成了广域网,广域网内部的局域网都属于其子网
如果有北、中、南等分公司,甚至海外分公司,把这些分公司以专线方式连接起来,即称为"广域网"
如果属于全球化的公共型广域网,则称为互联网(又称公网,外网),属于广域网的一个子集
有时在不严格的环境下说的广域网,其实是指互联网
所谓"局域网"和"广域网"只是一个相对的概念,比如,我们有"天朝特色"的广域网,也可以看做一个比较大的局域网
2.网络通信基础
网络互连的目的是进行网络通信,也是网络数据传输,更具体一点,是网络主机中的不同进程间,基于网络传输数据
那么,在组建的网络中,如何判断到底是从哪台主机,将数据传输到哪台主机呢?这就需要使用 IP 地址来标识
2.1IP地址
概念
我们当时学 MySQL 的 JDBC 部分时,涉及到以下操作:
创建 DataSource
往 DataSource 设置一些关键属性
其中就包括 URL:jdbc:mysql://127.0.0.1:3306/java?characterEncoding=utf8
其中标黄部分就是一个IP地址
我们也可以打开命令行,输入 ipconfig 查看自己电脑的 IP 地址👇
IP 地址的作用:标识网络一台设备所在的位置
格式(课件内容)
IP 地址是一个32位的二进制数,通常被分割为4个"8位二进制数"(也就是4个字节),如:
01100100.00000100.00000101.00000110
通常用"点分十进制"的方式来表示,即 a.b.c.d 的形式(a,b,c,d 都是 0~255 之间的十进制整数),如 100.4.5.6
2.2端口号
概念
与 IP 地址配合使用的是端口号
比如我买个快递,IP 地址相当于我的地址,辽宁省阜新市......,那么到达地点之后,这一片区域有很多人,要送给谁呢??端口号就相当于我的手机号,到地方了给我打电话,通过手机号把包裹送到我手里
在网络层面也类似,一台主机上可能有多个程序,同时使用网络(比如酷狗音乐、QQ......)~~
端口号就是用于区分一台主机上多个应用程序的~~
格式(课件内容)
端口号是 0~65535范围的数字,在网络通信中,进程可以通过绑定一个端口号,来发送及接收网络数据
问题(课件内容)
有了 IP 地址和端口号,可以定位到网络中唯一的一个进程,但还存在一个问题,网络通信是基于二进制 0/1 数据来传输,如何告诉对方发送的数据是什么样的呢?
网络通信传输的数据类型可能有多种:图片,视频,文本等,同一个类型的数据,格式可能也不同,如发送一个文本字符串"你好!",如何标识发送的数据是文本类型及文本的编码格式呢?
基于网络数据传输,需要使用协议来规定双方的数据格式
2.3认识协议
概念
程序已经收到数据了,程序如何理解数据的含义??这就需要"协议"了
其实网络知识的学习,相当大的部分就是网络协议的学习~~
网络协议:通信双方对于 发送/接收 数据格式的约定~~
我的数据怎么发,你收到就得怎么解析~~
本质上,协议,就是一个约定,怎么约定?随心所欲~~
比如灯管烧了,需要换灯管~~
如何确保你买的新灯管和原来的灯座能匹配上??
直接闭着眼睛买!只要你的灯管的大小差不多能放进灯罩就可以了
因为灯管和灯座之间的通信的插头,是一定能插上去的~~
在国内,无论你灯管和灯座是哪个厂商,插电的插头、插座,都是完全匹配的~~
这就类似手机充电器的充电口,要么是 type-c,要么是 lighting......
这就属于国内的协议~~国内都通用的
但是出了国,其中要准备一个东西:插座转换器~~
因为国内电是220V,50~60Hz,到国外可能就是110V~~
闲聊:
这是一个关于相亲的悲伤的故事~~
俺有一个朋友~~
老大不小了,家里人催着相亲,有一天和一个妹子约定去天桥见面,到了之后看见一个妹子,就聊上了,一边散步一边聊,聊的还挺好,但是聊着聊着发现,这个妹子不是经过介绍的,也是相亲,俺的这个朋友的选择是,抛下了这个妹子,折回去找之前的妹子,结果发现之前的妹子早就不见了~~
如果当时初次见面的时候,约定好"暗号"(协议),比如说下次相亲,和妹子约定好,女生穿红色的裙子,男生胸前别一个玫瑰花,就能有效杜绝这种认错的现象~~
答疑:没看过照片吗??都不发照片看一下吗??
照骗了解一下~~
网络通信中,协议非常关键
多个主机设备都能认同并遵守同一套协议,此时通信才是有意义的~~
协议最终体现为在网络上传输的数据包的格式
答疑:有点好奇以前电报怎么进行语言翻译的~
其实也是协议~~
本质上是通过摩尔斯电码,就是电报的二进制数据
用"滴"和"哒"表示0和1,然后查一下表,是对应哪个汉字,本质上和 UTF-8 这样的码表是类似的~~
摩尔斯电码还是挺简单的~~
2.4五元组
进行一次网络通信,涉及到 5 个非常关键的信息:五元组~~
1.源 IP:标识源主机
2.源 端口:标识源主机中该次通信发送数据的进程
3.目的 IP:标识目的主机
4.目的端口:标识目的主机中该次通信接收数据的进程
5.协议类型:标识发送进程和接收进程双方约定的数据格式
五元组在网络通信中的作用,类似于发送快递:
可以在 cmd 中,输入 netstat-ano 查看网络数据传输中的五元组信息:
如果需要过滤(一般是通过端口号或者进程 PID 过滤),可以使用 netstat -ano | findstr 过滤字符串
这就类似西游记中唐僧的那句话:贫僧自东土大唐而来,到西方拜佛求经而去
源 IP:东土大唐
源 端口:贫僧
目的 IP:西方
目的 端口:如来佛祖
协议类型:普通话
2.5协议分层
什么是协议分层
网络通信是非常复杂的,如果我们设计一个协议,完成网络通信中方方面面的问题,势必会使这个协议非常复杂,非常庞大~~
这就需要进行拆分~~
写的方法大了,就可以拆成多个方法,这个类写的太大了,就可以拆成多个类,文件写的太大了,就可以拆成多个文件,把大的拆成小的,就能使每个部分,功能更单一,功能更简单,更容易理解
把一个大的协议,拆成若干个小的,功能单一的协议
但是现在又来了个新问题:拆完之后,小的协议,太多了!!!甚至有几十个/上百个......
这就需要把这些小的协议归类~~
这个时候分层就体现出来了:只有相邻两层协议之间可以进行交互
上层协议可以调用下层协议,下层协议可以给上层协议提供服务,也可以说,协议之间的交互,不能跨层进行
这就好比:
小公司就10~20个人,老板直接管理这些人即可~~
公司要是有100~200人,就需要分成若干组,比如每个组里10~20人,老板只是管理每个组的组长,组长管理组员~~
要是公司更大,就需要分成多个部门~~
这个过程在汇报工作中,跨级汇报,是职场大忌~~
打电话就涉及到协议分层👇
在这个例子中,我们的协议只有两层;但是实际的网络通信会更加复杂,需要分更多的层次
1.封装
上层协议,不需要了解下层协议的细节~~
打电话的人,会说话就行了,不需要理解电话机的工作原理
2.解耦
分成之后,灵活的替换其中某一层,对于整体的工作过程影响很小
分层的作用(课件内容)
为什么需要网络协议的分层?
分层最大的好处,类似于面向接口编程:定义好两层间的接口规范,让双方遵循这个规范来对接
在代码中,类似于定义好一个接口,一方为接口实现类(提供方,提供服务),一方为接口的使用类(使用方,使用服务):
对于使用方来说,并不关心提供方是如何实现的,只需要使用接口即可
对于提供方来说,利用封装的特性,隐藏了实现的细节,只需要开放接口即可
这样能更好的扩展和维护,如下图:
OSI七层模型
真实的互联网,具体是怎么分层的??
这就涉及 OSI 七层网络模型
闲聊:
太多同学,简历上写 IOS、ISO、OIS......这种专业术语拼写错了,简历很难通过筛选~~
尤其是你投测试岗,这么简单的Bug都看不见,还能测试别人的Bug??
OSI:即 Open System Interconnection,开放系统互连
OSI 七层网络模型是一个逻辑上的定义和规范,把网络从逻辑上分为了七层
OSI 七层模型是一种框架性的设计方法,其最主要的功能就是帮助不同类型的主机实现数据传输
OSI 七层模型划分为以下七层👇
这一套分层的体系,只是存在于教科书上
由于体系太复杂了,实际真实的网络分层方式,是更加简化的👇
TCP / IP 五层(四层)协议模型~~
TCP/IP五层(或四层)模型
这个模型究竟是五层还是四层呢??
都对~~这只是说法上的差异,视角不同罢了~~不过我们还是按五层来讲解
经典面试题这个五个层次叫啥,大概的用途,非常重要,重点掌握,需要大家背下来~~
1.物理层
物理层规定了网络通信中的一些硬件设施符合的要求~~
比如网线、WiFi、光纤(光猫)......
闲聊:千万不要把光纤对着眼睛看~~
激光的功率可能很高,会灼伤视网膜~~
网络就像一个物流系统,而物理层就是在铺桥修路,有句老话叫"要想富,先修路"~~
物理层的协议,就是约定这些硬件设施要符合的要求是怎样的~~
2.数据链路层
在物理层的基础上,完成两个相邻的设备之间如何进行通信的
比如通过网线,把电脑连到路由器/交换机上
此时电脑和路由器/交换机 就属于 相邻节点/设备
先考虑一小步怎么走~~
3.网络层
则是两个任意设备之间如何进行通信
这俩设备之间,可能隔着很多的交换机和路由器
网络层传输的时候,是基于数据链路层的
打个比方:
数据链路层:你和你的同桌传纸条~~
网络层:你要把纸条传到教室中的另一个同学手里~~
就需要把纸条交给前排同学,告诉他:传给XXX
他再继续交给前排同学,也告诉他:传给XXX
闲聊:最怕中间出Bug,一个人突然偷看
偷看还差着,更怕篡改~~
网络层考虑通讯的中间过程是怎样的~~
4.传输层
也是两个任意设备之间的通信,但不考虑中间过程
只考虑,起点和终点~~
5.应用层
包裹拿到之后怎样使用~~
打个比方:我在淘宝看到床刷子~~
应用层:我关心床刷子买到之后,我要如何使用
传输层:卖家只要关心,收件人信息
网络层:物流公司则关心,包裹怎样路径传输的
数据链路层:快递小哥/货车司机,考虑的是相邻节点
答疑:为啥有的资料又叫四层的??
因为数据链路层和物理层耦合度非常高,把这俩看成一个整体了
物理层和硬件设备直接相关,通常物理层改变了,数据链路层也要跟着改变,所以就把这俩算在一起了~~
上述分层体系也叫做 TCP/IP 协议 栈(类似于方法的 调用栈)
这里最重要的协议:TCP 协议 和 IP 协议,后续我们详细讲~~
课件补充内容
TCP/IP 是一组协议的代名词,它还包括许多协议,组成了 TCP/IP 协议簇
TCP/IP 通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求
1.应用层
负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(TeInet)等,我们的网络编程主要就是针对应用层
2.传输层
负责两台主机之间的数据传输,如传输控制协议(TCP),能够确保数据可靠的从源主机发送到目标主机
3.网络层
负责地址管理和路由选择,例如在 IP 协议中,通过 IP 地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由),路由器(Router)工作在网路层
4.数据链路层
负责设备之间的数据帧的传送和识别,例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作,有以太网、令牌环网,无线LAN等标准,交换机(Switch)工作在数据链路层
5.物理层
负责光/电信号的传递方式,比如现在以太网通用的网线(双绞线)、早期以太网采用的同轴电缆(现在主要用于有线电视)、光纤,现在的WiFi无线网使用电磁波等都属于物理层的概念,物理层的能力决定了最大传输速率、传输距离、抗干扰性等,集线器(Hub)工作在物理层
物理层我们考虑的比较少,因此很多时候也可以称为 TCP/IP 四层模型
参考资料👉 TCP/IP 四层模型和 OSI 七层模型的概念
网络设备所在分层经典面试题
主机 :工作过程涉及到 从物理层→应用层→通过应用程序满足网络通信的需求~~
路由器:工作过程涉及到 从物理层→网络层→组建局域网,进行网络数据包的转发
交换机:工作过程涉及到 从物理层→数据链路层→对路由器的接口的扩展,不需要考虑组网的问题
对于面试题,肯定是有固定答案的~~
但是真实情况,还不太一样~~
真实的路由器和交换机,功能是更丰富,更强大的
现代的交换机,很多都有路由器功能
路由器也可以开启特殊的模式(mesh),就可以起到"交换机"的效果
甚至还有更多的功能~~现在路由器和交换机的边界变得更加模糊了~~
比如,你通过微信发一个数据(数据属于应用层)
数据经过某个运营商的路由器,给你解析出来你发的内容(此时,路由器就相当于工作在应用层)
可以说,网上本来就没有秘密~~
网络分层对应
网络数据传输时,经过不同的网络节点(主机、路由器)时,网络分层需要对应
以下为同一个网段内的两台主机进行文件传输:
以下为跨网段的主机的文件传输:数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器
2.6 网络数据通信的基本流程
拿 我通过QQ,发送 hello 给对方 为例⬇️
封装
1.应用程序 获取用户输入,构造一个应用层的数据包
这个应用层数据包 就会遵守 应用层协议
①应用层数据包
往往是"结构化数据"(类似C的结构体,有很多属性)
网络传输的数据,本质上就是"字符串"或者"二进制的bit流"
序列化:发送数据的时候,把结构化数据=>字符串/二进制bit流
反序列化:接受数据的时候,字符串/二进制比特流=>结构化数据
更本质一点,网络传输本质上就是 二进制bit流,也就是0101这样的数据
网线:电信号,通过高低电瓶 表示01
光纤:光信号,通过高频光/低频光 表示01
WIFI:电磁波(光信号),通过高低频电磁波 表示01
答疑:序列化之后速度更快吗??
序列化是为了"能够传输",而不是"传输更快"
比如说你买快递,买个大件,比如说是一个电竞椅~~
发货之前,卖家手里需要先对椅子进行测试,这时候还是个囫囵个椅子
发给你的时候,就要把囫囵个的椅子,拆成多个部分、多个零件
一个个的零件,你收到之后,需要自己再组装回囫囵个的椅子~~
②应用层协议
往往是开发这个程序的程序员自己定义的~~
此处假设是这样的协议格式⬇️
约定格式:发送者的QQ号,接受者的QQ号,消息的时间,消息正文
示例的数据⬇️(本质上就是"字符串拼接")
2.应用程序调用 传输层 提供的接口(API)(socket API,后续详细介绍),把数据交给传输层
传输层拿到数据之后,构造出"传输层数据包"
传输层的协议,主要是两个:TCP 和 UDP,这里拿 TCP 为例⬇️
TCP 数据包=TCP 报头(header)+ TCP 载荷(payload)
TCP 报头:包含TCP 功能相关的属性,属性非常多,后续详细介绍,当前阶段,只需知道这里包含了 源端口/目的端口
TCP 载荷:应用层数据包
这就好比俺买了一件衣服~~
卖家发货,把衣服交给快递小哥~~
一定不是直接把衣服团个球,交给快递小哥,一定是带有包装的!!
这个包装除了能保护衣服,最主要的,是有了包装之后,就可以贴标签~~
贴的这个标签(快递单),就包含了这次传输的关键信息~~
其实就是五元组的内容:源IP,源端口,目的IP,目的端口,协议类型~~
答疑:链路层是不是五元组中的
数据链路层是TCP/IP 五层协议里的~~
而且这叫"数据链路层",不叫链路层~~
3.传输层构造好数据之后,继续调用网络层的 API,把传输层的数据包交给网络层
网络层继续进行处理
网络层最主要的协议:IP 协议
IP 协议继续对上述数据包进行加工=>拼上 IP 报头~~
IP 数据包=IP报头+IP载荷(整个传输层的数据包)
其中 IP报头包含的信息也是很多的,其中就包括 源IP/目的IP
到这里我们的五元组就都全了(虽然是分开的,但也不影响):源端口,目的端口,源IP,目的IP,协议类型~~
答疑:不对啊,还缺一个协议类型呢??
协议类型,其实不只是一份数据,而是有很多层~~
其中 IP报头 里就会记录当前传输层使用的是哪个协议~~
传输报头中,也会记录应用层使用的是哪个协议(准确的说,是数据交给哪个应用程序)
数据链路层报头中,也会记录 网络层使用哪个协议~~
这些协议(IP协议、TCP协议......)中,并不关心载荷内容是啥~~
到目前为止,数据还在当前主机上转悠,还没出门呢~~
4.IP协议继续调用 数据链路层的API,把 IP 数据包交给数据链路层
数据链路层中,核心的协议:"以太网"
以太网这个协议,也会在网络层数据包的基础上进一步加工~~
与上面不同,多了个尾巴~~
以太网数据包=报头+载荷+报尾~~
严格意义上叫:以太网数据帧=帧头+载荷+帧尾
其实谈到网络传输的"基本数据单位"涉及到多个术语~~
网络数据包/帧/报/段
段(segment)=>TCP的,叫TCP数据段
报(Datagram)=>UDP的,叫UDP数据报
包(packet)=> IP的,叫IP数据包
帧(frame)=>数据链路层用的,叫以太网数据帧
咱们这里对这几个术语不做严格区分(混着用了)
日常工作中,确实也不会明确区分这些概念~~
毕竟咱也不是写论文,你写论文肯定要细分,但咱只是一个牛马程序员~~
5.以太网继续把这样的数据交给硬件设备(网卡)
网卡会把上述二进制数据,最终以 光信号/电信号/电磁波信号 传播出去~~
到物理层这里,数据才终于出门了~~
从上层到下层,数据都要进一步加工(添加报头)
这个过程也叫做封装(和面向对象的封装,不是一个封装)
接收方是从下到上依次解析,这个过程叫做分用~~封装的逆向过程~~
分用
闲聊:其实咱们自己的主机和公司的硬件设备,没有本质区别
无非你的机器配置低点,便宜一点
公司的服务器配置高点,贵一点~~
完全可以给你自己的电脑安装一些服务器程序,作为服务器来使用~~
但也千万别拿爱好挑战职业~~
最牛逼的家用的CPU:9950x,也就是16核32线程的水平,但是人家公司服务器动不动就64核128线程,差的不是一点半点,比不了~~
一般来说,一根网线连两个电脑,这两个电脑之间是可以通信的(当然也有例外)
两个电脑之间可能连着许许多多的路由器,这个过程是非常复杂的,咱们先不考虑中间过程,只考虑数据收到之后的事情
分用:数据到达接受方主机,逐层进行解析~~
1.数据到达接受方的网卡,这时是光电信号,网卡把光电信号还原成二进制0101
然后把二进制数据交给上层数据链路层
物理层数据信号咋来的,和数据链路层是直接相关的~~
网线/光纤来的数据,数据链路层=>以太网
WIFI来的数据,数据链路层=>802.11 协议
......
2.数据链路层按照以太网协议进行解析
把报头和报尾取出来,剩下的载荷,往上传递给网络层
以太网的帧头中就有专门的属性,描述了网络层使用哪个协议
3.网络层拿到这个数据之后,按照 IP 协议的格式解析,再把载荷数据交给传输层
IP 报头中也有专门的属性,描述了传输层使用哪个协议
4.传输层拿到数据之后,也是类似,按照 TCP 协议来解析,取出载荷,交给应用层
传输层报头中,通过目的端口号,告知我们数据交给哪个应用程序
5.QQ应用程序,解析应用层数据,拿到关键信息,展示到界面上,给出提示
不同的应用程序,自然使用不同的应用层协议来解析~~
虽然上述过程,听起来听复杂,但是对于计算机来说,是极快的过程~~
上面我们只是分析了接收数据之后的事情,但传输的过程中,也是涉及到封装分用的
面试考的
1.交换机工作在数据链路层(二层转发)
交换机,只需要封装分用到 数据链路层即可
主机的数据=>交换机,交换机收到之后,物理层解析,数据链路层解析(没有网络层了),重新构造出新的以太网数据帧,发给下一个设备
因为在数据链路层中,得到的以太网数据帧的帧头,信息就足以支持交换机进行下一步工作
2.路由器工作在网络层(三层转发)
主机的数据=>路由器,路由器收到之后,物理层,数据链路层,网络层解析(没有传输层),重新构造出新的网络数据包,构造出以太网数据帧,构造出二进制数据,进行转发~~
拓展内容面试不考
3.是否有设备工作在传输层??
这样的设备也有,比如防火墙/网关~~就是封装分用到传输层~~
有同学会说:我电脑上就有防火墙~~
注意,咱们说的这个防火墙,是企业级的防火墙,会把专门的功能软件,部署到专门的设备上~~
4.是否有设备工作在物理层??
也有的,比如说集线器/网线延长线~~
这个网线延长线,就是单纯的把电信号传播过去了~~
闲聊:
Q1:那无线网是不是更复杂一点,有些用热点WIFI
无线用的协议是 802.11,和以太网是并列的关系,本质是一样的,同样的封装和分用
封装分用的帧头是不一样的~~数据格式也不一样,可以说功能上略有差别~~
Q2:协议不同,传输过程,信号会递减吗??
在物理层考虑信号衰减这个事情~~
无线和有线都会衰减
只不过无线衰减的快,有线衰减的慢~~
其实也问题不大,因为到达下一个节点之后,下一个节点重新发送数据的时候,把信号又加强了~~
最典型的例子就是家里,如果家是一个大house,可能一个路由器,无线信号无法覆盖全屋~~
这个时候,再买一个路由器,通过有线网络把路由器接到其他房间,由这个新的路由器提供另一个区域的信号覆盖~~
有的同学会说:那我买一个特别牛逼(几千块钱)的路由器,能不能覆盖我家三层大别墅??
白花冤枉钱~~
多买几个入门的路由器来组网,都比买一个好的路由器成本低,效果更好~~
无线衰减的厉害,有线就好很多~~
最牛逼的无线,也不一定比有线好~~
当年5G刚出的时候,就被吹上天了~~
但其实5G、6G再牛逼,也低不上一根普通的网线,更不论光纤大杀器了~~
5G也不是说不好,5G最主要的用途:工业场景、车联网~~
Q3:无线优点:防老鼠😹
网线也有三六九等
好的网线,质量非常好的,老鼠不一定能啃动~~
Q4:挖国防光缆😹
那可就不是上民事法庭那么简单了,那得上军事法庭!!
课件内容(封装和分用)
不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据段(datagram),在链路层叫做帧(frame)
应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation)
首部信息中包含了一些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息
数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的"上层协议字段"将数据交给对应的上层协议处理
下图为数据封装的过程👇
下图为数据分用分过程👇
阶段性小结
协议
协议分层
TCP / IP 五层协议栈
封装 / 分用



































