赞
踩
发展过程:
单机 —> 局域网 —> 广域网 —> 移动互联网
Local Area Network
,简称 LAN
。Local
即标识了局域⽹是本地,局部组建的⼀种私有⽹络。把几个电脑连接到一起,就构成了局域网
但当电脑多了之后,就不方便两两相连,就创造了“路由器”
[!quote] 调制解调器(猫)
- 不同种类的信号转换
- 这个是宽带普及之前,上网操作是通过“电话线”进行的,猫的作用是将电话线中的模拟新欢转换成网络中的“数字信号”
- “光猫”就是把光信号和电信号之间进行相互转换(一般带有路由功能)
[!quote] IP 地址和端口号
类似发送快递时,不光需要指定收货地址(IP地址),还需要指定收货⼈(端⼝号)
网络中最核心的概念
- 比如,我虽然在重庆上学,但我是湖北人,如果周围有人说重庆话,我有时候就听不到。
- 这就属于无效的通信
所以,如何进行网络通信的问题,就转为了如何设计网络通信协议。
网络上传输的数据:光信号(光纤,激光的光)/电信号(网线里的)/电磁波(WiFi、5G…)
由于网络通信,是一件非常复杂的事情,如果只使用一个协议,去约定所有的网络通信细节,就会导致这个协议非常庞大,非常复杂
为了对抗这种复杂度,我们就进行“拆分”。将一个大的协议,拆分成多个小的协议,让每个小的协议,专注于解决一个/一类问题,再让这些协议相互配合
分层的好处:
当前互联网体系的现状就是“协议分层”的效果
这种划分方式,只是存在于教科书里,并没有被真正的采用
当前世界上最主流的网络协议模型
四层就是不散物理层,物理层和硬件相关,距离程序员非常遥远
- 比如,你在网上买了个东西
- 下单的时候,需要填写“收件人信息”
- 卖家给你发快递的时候,也需要填写“发件人信息”
- 最后卖家就把快递给快递小哥,快递小哥最后将快递送到你手上
- 在这个过程中,传输层就只关注发货地和收货地,并不关心快递是如何到你手上的、如何运输的…
- 比如快递小哥揽收你的包裹之后,需要进行包裹运输
- 就要规划选择一条合适的路径将包裹送到你手中
- 合适的选择不是绝对的,可能看路程、可能看速度、可能看成本…
- 使用地图导航,也是类似于网络层“路由选择”的过程
- 比如,你的包裹要从上海运往西安,选择的路径是:上海 —> 南京 —> 西安
- 上海 —> 南京:走水路,坐船
- 南京 —> 上海:走铁路,火车
- 西安 —> 驿站:走公路,坐卡车
- 驿站 —> 收货地:骑三轮
- 在这每两个地点之间的交通选择,都是数据链路层负责的
- 董事长(传输层) —> 制定一个公司的发展目标(今年营业额要达到 xxx 小目标)
- 高管(网络层) —> 规划一下,如何达到上述目标,明确达到上述目标,分成几个步骤,先做什么再做什么。路径规划/路由选择的过程
- 基层员工(数据链路层) —> 进行具体实施,第一步到第二步,第二步到第三步… 具体咋办
- 办公用到的基础设施(物理层) —> 办公室、工位、电脑、打印机、网络…
这四层都是程序员干预不了的,操作系统/硬件设施已经实现好了的
TCP/IP
五层模型的下四层;TCP/IP
五层模型的下三层;TCP/IP
五层模型的下两层;真实情况下,交换机也可能是工作在网络层,甚至是传输层/应用层
路由器也可能是工作在数据链路层,也可能是传输层,也可能是应用层
通过 QQ,发送一个 hello
给另一个人
hello
”字符串,点击“发送”按钮
hello
这个内容从输入框读取到,构成一个“应用层数据包”[!quote] 序列化/反序列化
- 将结构化数据 —> 二进制字符串:序列化
- 将二进制字符串 —> 结构化数据:反序列化
- 进行网络传输数据,通常就需要把一个“结构化”(C 的结构体/Java 的类,包含很多属性)数据转成一个“字符串”(二进制字符串,不需要非得在码表上可以查到,任何的 01 序列都可以接在一起)
[!quote] 应用层数据包
- 主要是做了一个“序列化”的工作,将传入的信息整合成一个“字符串”
- “应用层数据包”是应用层的协议,描述了这个数据包的构造,此处的应用层协议,往往是开发 QQ 的程序员自行定义的
- 如果是我来开发 QQ,我可能会按照下列的方式定义这个应用层数据包的结构(定义方式有很多种)
- 数据包格式:发送者的 QQ 号;接收者的 QQ 号;发送时间;消息正文\n
- 数据包样例:
123456789;987654321;2024-01-14 23:50:10;hello\n
应用层数据包准备就绪后,QQ 这样的应用程序,就会调用操作系统提供的 API
(传输层给应用层提供的 API)
API
,然后应用程序就会把上述组织好的应用层数据包作为参数传进来,于是应用层数据包就到了系统内核里,就进入到传输层的代码部分了TCP
和 UDP
),这些协议给应用层提供的 API
是不同的,看应用程序种使用哪组 API
就使用哪个协议
UDP
协议,则会在刚刚整合的“字符串”前面加一个“UDP 报头
”,这串“字符串”叫“UDP 正文
/载荷
(payload
)”UDP报头
中就包含了一些 UDP
相关的信息,比如发送者的端口号和接受者的端口号传输层构造好数据之后,就会继续调用网络层提供给传输层的 API
,把数据进一步交给网络层
网络层继续调用数据链路层的 API
,把数据交给数据链路层处理
[!quote] 网络传输数据的基本单位
- 数据包(packet)
- 数据报(Datagram)
- 数据段(segment)
- 数据帧(frame)
这几个术语严格来说是有区别的,但平时日常交流的时候,不会刻意区分
接收方物理层收到光电信号,把这样的光电信号还原成 010101 这样的二进制字符串
物理层转换回来的数据,交给数据链路层,以太网拿到这个数据包,就会对这个数据包进行解析
- 此处接收方做的工作就是发送方工作的“逆向工作”
- 发送方的“封装”,认为是“打包快递”
- 接收方的“分用”,认为是“拆快递“
一个电脑,会先连到交换机上,交换机可能连到路由器上,路由器可能又连到另一个交换机上,交换机又连到另一个路由器上… 总之,这中间会连接很多的交换机和路由器,来完成数据转发的过程
中间过程的交换机和路由器,也会涉及到封装和分用(不会像主机这样复杂)
封装分用这么麻烦,会不会导致交换机、路由器、主机之间的通信效率很低呢?
- 得看和谁比
- 如果是那网络通信和人的反应时间相比,速度还是很快的
- 如果拿网络通信和读写硬盘相比,通常认为,网络的速度比硬盘的速度更慢
- 更不必说和内存比了
也有特殊情况:
- 如果拿网络中最强的“万兆网卡”和硬盘中最弱的“机械硬盘”相比,网络的速度更快
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。