🎇🎉🎉🎉点进来你就是我的人了
博主主页:🙈🙈🙈戳一戳,欢迎大佬指点!
人生格言: 当你的才华撑不起你的野心的时候,你就应该静下心来学习!
欢迎志同道合的朋友一起加油喔 💪💪💪
目标梦想:进大厂,立志成为一个牛掰的Java程序猿,虽然现在还是一个🐒嘿嘿
谢谢你这么帅气美丽还给我点赞!比个心
目录
- 1.IP地址(区分不同的主机)
- 2.端口号(标识一个主机上不同的应用程序)
- 3.协议(⭐⭐⭐⭐⭐最核心的概念)
- 4.协议分层
- 5.TCP/IP五层(或四层)模型
- 6.封装、分用
-
- [📚6.1 举个发送消息的例子](#📚6.1 举个发送消息的例子)
- [6.1.1 A通过QQ给B发送hello(应用层)](#6.1.1 A通过QQ给B发送hello(应用层))
- [6.1.2 A通过QQ给B发送hello(传输层)](#6.1.2 A通过QQ给B发送hello(传输层))
- [6.1.3 A通过QQ给B发送hello(网络层)](#6.1.3 A通过QQ给B发送hello(网络层))
- [6.1.4 A通过QQ给B发送hello(数据链路层)](#6.1.4 A通过QQ给B发送hello(数据链路层))
- [6.1.5 A通过QQ给B发送hello(物理层)](#6.1.5 A通过QQ给B发送hello(物理层))
- [6.2 下图为数据封装的过程](#6.2 下图为数据封装的过程)
- [6.3 下图为数据分用的过程](#6.3 下图为数据分用的过程)
-
- [6.3.1 B接收到A发送的hello信息(五层解析)](#6.3.1 B接收到A发送的hello信息(五层解析))
- [6.3.2 数据分用](#6.3.2 数据分用)
- 7.客户端(Client)
- 8.服务器(Server)
1.IP地址(区分不同的主机)
1.1概念
- IP地址主要⽤于标识⽹络主机、其他⽹络设备(如路由器) 的⽹络地址。简单说 ,IP地址⽤于定位主 机的⽹络地址。
就像我们发送快递⼀样 ,需要知道对⽅的收货地址 ,快递员才能将包裹送到⽬的地。
1.2格式
- IP地址(IPv4)是⼀个32位的⼆进制数 ,通常被分割为4个" 8位⼆进制数"(也就是4个字节),如:
01100100.00000100.00000101.00000110。 - 通常⽤ " 点分⼗进制" 的⽅式来表⽰ ,即 a.b.c.d 的形式(a,b,c,d都是0~255之间 0~255之间的⼗进制整数)。 如 :100.4.5.6。
- 先简单了解,后续详细介绍
2.端口号(标识一个主机上不同的应用程序)
2.1概念
- 在⽹络通信中 ,IP地址⽤于标识主机⽹络地址 ,端⼝号可以标识主机中发送数据、接收数据的进程。 简单说:端⼝号⽤于定位主机中的进程。
类似发送快递时 ,不光需要指定收货地址( IP地址),还需要指定收货⼈(端⼝号)。
2.2格式
- 端⼝号是0~65535范围的数字 ,在⽹络通信中 ,进程可以通过绑定⼀个端⼝号 ,来发送及接收⽹络数 据。
- 端口号是一个2个字节的整数
2.3要求
- 主机上每个程序在启动的时候,就需要关联上(也可以叫做绑定)一个和别人不重复的端口号
- 有的时候,可能会谈到,有的程序,是有固定端口号的,这个说法源自于一个概念"知名端口号"。
- 有的时候可能会谈到,有的程序,是有固定的端口号的,这个说法源自于一个概念"知名端口号"。
- 上古时期,大佬们,为了避免当时的一些程序,端口之间发生冲突.就给这些知名的程序,分配了不同的端口.
- 比如,http服务器,80
- ssh服务器22
- ftp服务器23
- https 443 等等...
- 这些知名端口当时一共分了1024个
- 不包含mysql,也不包含tomcat,更不包含java(这些都是后来的)
- 随着时间的发展,知名端口,更多的是"建议"而不是约束.你搞一个http服务器,你可以使用80,也可以使用别的.想用哪个,你自己说了算~~
问题:
有了IP地址和端⼝号 ,可以定位到⽹络中唯⼀的⼀个进程 ,但还存在⼀个问题 ,⽹络通信是基于⼆进 制0/1数据来传输 ,如何告诉对⽅发送的数据是什么样的呢?
⽹络通信传输的数据类型可能有多种: 图⽚ ,视频 ,⽂本等。 同⼀个类型的数据 ,格式可能也不同, 如发送⼀个⽂本字符串"你好!":如何标识发送的数据是⽂本类型 ,及⽂本的编码格式呢?
基于⽹络数据传输 ,需要使⽤协议来规定双⽅的数据格式。
3.协议(⭐⭐⭐⭐⭐最核心的概念)
3.1概念
- 协议 ,⽹络协议的简称 ,⽹络协议是⽹络通信(即⽹络数据传输)经过的所有⽹络设备都必须共同遵 从的⼀组约定、规则。如怎么样建⽴连接、怎么样互相识别等。只有遵守这个约定 ,计算机之间才能 相互通信交流。
协议( protocol) 最终体现为在⽹络上传输的数据包的格式。
3.2作用
- 为什么需要协议?
- 就好⽐见⽹友 ,彼此协商胸⼝插⽀玫瑰花见⾯ ,这就是⼀种提前的约定 ,也可以称之为协议。
计算机之间的传输媒介是光信号和电信号。通过 "频率" 和 "强弱" 来表⽰ 0 和 1 这样的信息。要想传递 各种不同的信息 ,就需要约定好双⽅的数据格式。
- 计算机⽣产⼚商有很多;
- 计算机操作系统 ,也有很多;
- 计算机⽹络硬件设备 ,还是有很多;
如何让这些不同⼚商之间⽣产的计算机能够相互顺畅的通信?
- 就需要有⼈站出来 ,约定⼀个共同的标准 ,⼤家都来遵守 ,这就是网络协议
进行网络通信的时候,一定是需要通信协议的
主要是,两个用来通信的主机设备,不同的硬件,不同的操作系统,不同的应用程序
即使上述内容不同,通信也能够正确进行.
进行网络通信的时候,通信协议是非常关键的环节
4.协议分层
4.1简单理解分层
-
网络通信,是一个非常复杂的事情.这个过程中涉及到很多的细节问题
-
如果你使用一个协议来约定上述所有的细节,这个协议就会非常庞大,非常复杂
-
此时,就可以把一个功能复杂的协议,拆分成
多个功能更单一的协议了. -
确实是拆分了,但是,拆出来的协议,太多了.
于是,就要对这些协议,进行分类,甚至,要进行"分层"
-
对于⽹络协议来说 ,往往分成⼏个层次进⾏定义。
4.2什么是协议分层
- 协议分层,也就是上述类似的效果,把很多协议,按照功能分成不同的层级,每个层级都有对应的主线任务(目标/要解决的问题)
- 上层协议会调用下层协议的功能,下层协议会给上层协议提供服务
(不能够"越级调用)
4.3分层的作用(为什么需要网络协议的分层?)
- 分层最大的好处 ,类似于⾯向接⼝编程:定义好两层间的接⼝规范 ,让双⽅遵循这个规范来对接。
- 在代码中 ,类似于定义好⼀个接口,一方为接口的实现类(提供方 ,提供服务),一方为接口的使用类(使用方,使用服务):
- 对于使用方来说 ,并不关⼼提供方是如何实现的 ,只需要使用接口即可
- 对于提供方来说 ,利⽤封装的特性 ,隐藏了实现的细节 ,只需要开放接⼝即可。 这样能更好的扩展和维护 ,如下图:
5.TCP/IP五层(或四层)模型
TCP/IP是⼀组协议的代名词 ,它还包括许多协议 ,组成了TCP/IP协议簇。
TCP/IP通讯协议采⽤了5层的层级结构 ,每⼀层都呼叫它的下⼀层所提供的⽹络来完成⾃⼰的需求。4G/5G通信,就是另一套专门的模型协议(手机流量上网)
- 第一层 物理层:
负责光/电信号的传递⽅式。 比如现在以太网通⽤的网线(双绞 线)、早期以太网采⽤的的同 轴电缆(现在主要⽤于有线电视)、光纤 ,现在的wifi⽆线网使⽤电磁波等都属于物理层的概念。物理 层的能力决定了最⼤传输速率、传输距离、抗干扰性等。集线器( Hub)工作在物理层。
硬件层面上的相关约定 (网线、网口...)
- 第二层 数据链路层:
负责设备之间的数据帧的传送和识别。例如⽹卡设备的驱动、帧同步(就是说从⽹线上 检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就⾃动重发)、数据差错校验等⼯作。 有以太⽹ 、令牌环⽹ ,⽆线LAN等标准。交换机(Switch) ⼯作在数据链路层。
关注的是,通信过程中,两个相邻结点 之间的 通信。
- 第三层 ⽹络层:
负责地址管理和路由选择。例如在IP协议中 ,通过IP地址来标识⼀台主机 ,并通过路由表 的⽅式规划出两台主机之间的数据传输的线路(路由) 。路由器( Router) ⼯作在⽹路层。
关注的是 通信中 :通信路径的规划
规划出的路径,就决定了,数据要经过那些结点
" 点 " 到 " 点 " 的传输
- 第四层 传输层:
负责两台主机之间的数据传输。如传输控制协议 (TCP) ,能够确保数据可靠的从源主机发 送到⽬标主机。
关注的是 通信双方的 " 起点 " 和 " 终点 "
" 端 " 到 " 端 " 的传输
- 第五层 应⽤层:
负责应⽤程序间沟通 ,如简单电⼦邮件传输(SMTP) 、⽂件传输协议( FTP) 、⽹络远 程访问协议(Telnet)等。我们的⽹络编程主要就是针对应⽤层。
和具体应用程序相关
传输的数据是干啥用的 ~~~~ 如何使用 ----- 有何意义 ~~~~~
📚以上五层和送快递比较相似📚
- 接下来看图:
主要关注 应用层 + 传输层
物理层我们考虑的⽐较少。 因此很多时候也可以称为 TCP/IP四层模型。
5.1网络设备所在分层
- 对于⼀台主机 ,它的操作系统内核实现了从传输层到物理层的内容 ,也即是TCP/IP五层模型的下四 层;
- 对于⼀台路由器 ,它实现了从⽹络层到物理层 ,也即是TCP/IP五层模型的下三层
- 对于⼀台交换机 ,它实现了从数据链路层到物理层 ,也即是TCP/IP五层模型的下两层;
- 对于集线器 ,它只实现了物理层;
注意我们这⾥说的是传统意义上的交换机和路由器 ,也称为⼆层交换机( ⼯作在TCP/IP五层模型的下 两层) 、三层路由器( ⼯作在TCP/IP五层模型的下三层)。
随着现在⽹络设备技术的不断发展 ,也出现了很多3层或4层交换机 ,4层路由器。我们以下说的⽹络设 备都是传统意义上的交换机和路由器。
5.2网络分层对应
- ⽹络数据传输时 ,经过不同的⽹络节点(主机、路由器) 时 ,⽹络分层需要对应。 以下为同⼀个⽹段内的两台主机进⾏⽂件传输:
- 以下为跨⽹段的主机的⽂件传输:数据从⼀台计算机到另⼀台计算机传输过程中要经过⼀个或多个路由器
6.封装、分用
📚6.1 举个发送消息的例子
6.1.1 A通过QQ给B发送hello(应用层)
- A通过QQ发送hello给B
- A在聊天窗口里,输入hello,点击发送
- QQ应用程序就要负责实现上述逻辑~~
- 很明显,上述信息都需要通过网络来传输~~
- QQ应用程序,首先就会把上述要传递的内容,组织成"应用层数据包"
- QQ里就会有个应用层网络协议.
- 协议,就是约定,约定了,数据,按照什么样的格式来组织~~
- 假设,QQ的应用层协议是这样的~~四个信息,为了组织成字符串,就通过,来分割各个部分,使用结束标志
- 发送人的qq号,接收人的qq号,发送时间,消息正文\n
6.1.2 A通过QQ给B发送hello(传输层)
- 应用层数据包,已经有了.
QQ程序,就要调用系统的api,来进行传输 - 应用层接下来要把数据交给,传输层
怎么交给传输层?传输层(操作系统内核)提供了api让应用程序去调用 - 称为socket api
类似于包装快递
6.1.3 A通过QQ给B发送hello(网络层)
6.1.4 A通过QQ给B发送hello(数据链路层)
6.1.5 A通过QQ给B发送hello(物理层)
上述层层包装数据,不停的加数据报头的过程,称为"封装"
6.2 下图为数据封装的过程
6.3 下图为数据分用的过程
6.3.1 B接收到A发送的hello信息(五层解析)
6.3.2 数据分用
7.客户端(Client)
- 客户端(Client) 或称用户端,是指与服务器相对应,为客户提供本地服务的程序。除了一些只在本地运行的应用程序之外,一般安装在客户机上,需要与服务端互相配合运行。例如:下载 QQ 或者微信时,实际上我们下载的是腾讯开发的客户端程序(在我们电脑或者手机执行的程序)。
- 客户端获取服务资源
- 客户端保存资源在服务端
好⽐在银⾏办事:
- 银⾏提供存款服务:⽤户(客户端)保存资源(现⾦) 在银⾏ (服务端)
- 银⾏提供取款服务:⽤户(客户端) 获取服务端资源(银⾏替⽤户保管的现⾦) 常见的客户端服务端模型
最常见的场景 ,客户端是指给⽤户使⽤的程序 ,服务端是提供⽤户服务的程序:
- 客户端先发送请求到服务端
- 服务端根据请求数据 ,执⾏相应的业务处理
- 服务端返回响应:发送业务处理结果
- 客户端根据响应数据 ,展⽰处理结果(展⽰获取的资源 ,或提⽰保存资源的处理结果)
8.服务器(Server)
- 服务器(Server)也是计算机,不过它比普通计算机运行更快、负载更高。通俗点说它也是一台电脑,它的某些性能可能比我们的普通电脑高。服务器上运行着服务器端程序(客户机不用下载的程序),主要负责根据客户端发送过来的请求进行业务逻辑和数据的处理。
对于服务器要求不高的话我们的电脑也可以充当一台服务器(将服务器端程序在本机运行),平时我们线下开发就是这么做的。不过服务器都是一直工作(开机)着的,因为一旦软件上线,一般都要一直为其使用者提供服务的。
生产环境下的服务器一般都是放置在机房中,由专业人员进行远程操控和维护(没有屏幕和键盘等其它部件,跟一台高性能主机差不多)。