1.网络发展史
国内2000年前后才真正进入网络时代
2000年之前网络是稀罕物,虽然有些家庭已经有电脑了,但是没有网。
2000年之后网络逐渐多了起来(网吧),联机玩游戏只能在同一个机房/网吧(局域网)
局域网:把两个设备连到同一个路由器上,就是在同一个局域网中了
广域网:把很多的局域网连到一起
全世界最大的因特网(The Internet)
2007年乔布斯发布苹果手机(初代IPhone)标志着移动互联网时代拉开了序幕,当时诺基亚这类传统手机仍然是主流
差不多2011/2012年左右,真身IPhone4 出现,是的诺基亚等传统手机厂商一夜就G了,包括华为、小米、三星等一系列厂商也把安卓推上风口浪尖
单机时代 =》局域网时代 =》广域网时代 =》移动互联网时代 =》???
组件网络的核心装备
路由器
交换机:交换机可以视为"对路由器的接口进行拓展"
家用路由器一般就是可以接4根网线,交换机不会进行组局域网的功能,可以把路由器的接口进行拓展
某个电脑连接到交换机上等价于链接到路由器上,交换机接口不够用可以接更多的交换机,引入更多的接口
路由器接的东西太多了就处理不过来了,家用路由器一般接20个装备差不多就是极限了,但是企业级的路由器带动几百个设备都是没有什么压力的
2.网络通信基础
IP地址
jdbc:mysql://127.0.0.1:3306/java113?characterEncoding=utf8
上述的127.0.0.1就是IP地址
IP地址可以标识网络一台设备所在的位置
端口号
一台主机上可能有很多的程序同时使用网络,端口号区分一台主机上的多个应用程序
认识协议
网络协议:通信双方对于发送/接受 数据可是的约定,我的数据怎么发,你收到就得怎么解析
网路通信中协议非常关键,多个主机设备都能认同并遵守同一套协议,此时通信才是有意义的
五元组
源IP,源端口、目的IP、目的端口、协议类型
西游记的唐僧:
贫僧(源端口)自东土大唐(源IP)而来,到西方(目的IP)拜佛(目的端口)求经去
协议分层
网络通信非常复杂,如果我们设计一个协议完成通信中方方面面的问题,势必会使这个协议非常复杂,非常庞大
把一个大的协议拆成若干个小的,功能单一的协议,拆完之后小的协议太多了,甚至有几百上千个
所以要把这些小的协议归类
分层
只有相邻两层协议之间可以进行交互,上层协议可以调用下层协议,下层协议可以给上层提供服务(协议之间的交互不能跨层进行)
封装
1.上层协议不需要了解下层协议的细节
2.分层之后,灵活的替换某一层,对于整体工作过程影响很小
真正的互联网怎么分层
OSI其层互联网模型


OSI七层模型既复杂也不实用:所以OSI七层模型没有落地实现
实际组件网络的时候,只是以OSI七层模型设计中的部分分层,也即是一下TCP/IP五层(或四层)模型来实现
RCP/IP五层或四层模型
TCP/IP是一组协议的代名词,还包括许多协议,组成了TCP/IP簇
TCP/IP通信协议采用了5层级结构,每一层都呼叫它的下一级锁提供的网络来完成自己的需求
- 应用层:负责应⽤程序间沟通(负责使用)
- 传输层:负责两台主机之间的数据传输(两个任意设备之间的通信,不考虑中间过程,只考虑起点和终点)
- 网络层:负责地址管理和路径选择(两个任意设备之间如何进行通信,这两个设备之间可能隔着很多的交换机和路由器)
- 数据链路层:负责设备之间的数据帧的传送和识别(完成两个相邻的设备之间如何通信的,通过网线,把地哦啊闹连接到路由器/交换机上)
- 物理层:负责光/电信号的传递方式(网线/光纤/wifi)物理层的协议就是约定这些硬件设施要符合的要求是怎么样的
叫做四层是将数据链路层和物理层(硬件设备直接相关)看做一个整体

经典面试题:
主机 工作过程涉及到 从物理层 =》应用层(通过应用程序满足网络通信的要求)
路由器 工作涉及到 从物理层 =》网络层 (组建局域网,进行网络数据包的转发)
交换机 工作涉及到 从物理层 =》数据链路层(对路由器接口的扩展,不需要考虑组网的问题)
真实情况可能不太一样
真实的路由器交换机功能更丰富,更强大
现代的交换机很多都有路由器的功能,路由器也可以开启特殊的模式,就可以起到"交换机"的效果
封装和分用
网路数据通信的基本流程
封装:
通过qq发送hello
1.应用程序获取到用户输入,构造一个应用层的数据包
这个应用层数据包就会遵守应用层协议(往往是开发这个程序的程序员自己定义的)
此处假设这样的协议格式(约定格式)
发送者的qq号,接受者的qq号,消息时间,消息正文

示例的数据本质上就是"字符串拼接"
2.应用程序调用传输层提供的接口(socket api)把数据交给传输层,传输层拿到数据之后,构造出"传输层数据包",传输层的协议主要有两个(TCP、UDP)

TCP数据包=TCP报头(header)+TCP载荷(payload)
TCP报头 =》TCP功能相关的属性(属性很多,当前阶段只需知道这里包含了源端口和目的端口)
3.传输层构造好数据之后,继续调用网络层的api,把传输层的数据包交给网络层,网络层继续进行处理
网络层最主要的协议是IP协议
IP协议继续对上述数据包进行加工 =》拼上IP报头

IP数据包=IP报头+IP荷载(这个传输层的数据包)
IP报头的信息页很多(源IP和目的IP)
协议类型其实不只是一份数据,有很多层
其中IP报头会记录当前放入传输层使用的是哪个协议
传输层报头中夜壶已记录应用层使用哪个协议(准确来说是数据交给哪个应用程序)
数据链路层报头中也会记录网络层使用哪个协议
4.IP协议继续调用,数据链路的api把IP数据包交给数据链路层,数据链路层中,核心协议"以太网"
以太网这个协议也会在网络层数据包的基础上进一步加工

以太网的数据帧=帧头+载荷+帧尾
目前为止,数据还在当前手机上转悠没有出门
谈到网络传输的"基本数据单位"涉及到多个术语
网络数据报包/帧/报/段
段(segment)TCP用的
报(Datagram) UDP用的
包(packet)IP用的
zhen(frame)数据链路层,以太网数据帧
5.以太网继续把这样的数据交给硬件设备(网卡)
网卡会把上述二进制数据,最终以 光信号/电信号/电磁波信号 传播出去
数据终于出门了
从上层到下层数据都要进一步加工(添加报头)
封装(和面向对象的封装不一样)
接受方法是从下到上一次解析,分用,封装是逆向过程
分用
数据达到接受方的主机,逐层进行解析
1.数据到达接受方的网卡,光电信号,网卡把光电信号还原成二进制010101
把二进制数据交给上层的数据链路层
物理层数据信号是咋来的和数据链路层都是直接相关的
2.数据链路按照以太网协议进行解析,把报头和报尾取出来,剩下的载荷往上传递给网络层

以太网的帧头中有专门的属性,描述网络层使用哪些协议
3.网络层拿到这个数据之后,按照IP协议进行解析,再把载荷交给传输层

IP报头中也有专门的属性,描述了传输层使用哪个协议
4.传输层拿到数据之后,也是类似,按照TCP协议来解析没取出载荷交给引用层

传输层报头中,通过目的端口号告知我们数据交给哪个应用程序
5.qq应用程序,解析应用程数据,拿到关键信息,展示到界面上给出提示

不同的应用程序自然使用不同的应用层协议来解析
虽然上述过程听起来挺复杂,对于计算机来说是极快的过程
传输的过程中也会涉及到封装分用
交换机只需要分装到数据链路层即可(二层转发)
主机的数据 =》交换机 交换机收到之后,物理层解析,数据链路解析,重新构造出新的以太网数据帧,交给下一步工作
主机的数据 =》路由器 路由器收到之后物理层、数据链路层、网络层解析,重新构造出新的网络数据包,构造出以太网数据帧,构造出二进制数据(三层转发)
是否有设备工作在传输层:比如防火墙