IP 地址
在网络通信中,如果想要与对方通信,需要知道对方的 IP 地址,IP 地址主要用于标识网络主机、其他网络设备(如路由器)的网络地址。简单来说呢,IP 地址用于定位主机的网络地址。
举个栗子:当我们网购的时候,快递小哥要找到我们,需要知道我们的收货地址对吧?这样快递小哥才能将包裹送达到目的地。
IP 格式
IP 地址是一个 4 字节,32 位的二进制数,通常被分割位 4 个 “8 位二进制数” 。如:01111111.00000000.00000000.00000001。通常采用 “点分十进制”的方式来表示如:127.0.0.1。点分十进制顾名思义,用点分开用十进制表示。
端口号
在网络通信中,IP 地址用于来表明位置,端口号可以用来表明 发送数据 和 接收数据 的 进程。简单来说呢,端口号用于定位主机中的进程。
举个栗子:在上面的网购中,我们不光要指定收货地址(IP 地址),我们还应该指定收货人(端口号)。
端口号格式
端口号是一个 2 个字节的整数(0-65535),虽然是 0-65535 这样的范围,但是 0-1023 这些端口,都是有一定的特殊含义的。一般自己写代码用的端口号,都是1023开外的(<65535)。
协议
协议 是网络通信中 最核心 的概念,是进行一系列通信的基础。简单来说,协议 就是通信双方规定的 交互规则。
举个栗子:现在大家要和网友面基了,但是茫茫人海,大家该怎么找到网友呢?如果现在相互规定,一人穿黑色裙子,另一个人穿白色裙子,一个人背白色包包,另一个人背黑色包包,当到车站的时候,根据对方开始约定好的,去排除,然后找到对方。穿着的规定其实也是一种协议。
相信由上面不难看出,协议 的规定是非常重要的,但是在网络通信中,规定协议又何尝容易呢??用一个协议约定所有的网络通信,会致使这个协议非常的复杂,庞大!因为涉及 通信双方地址/是谁,数据传输方式 ,数据传输路径等等一系列原因。相信大家都听过 大事化小,小事化了。既然一个协议太复杂麻烦,那我们就多制定一些 协议,不同的协议分管不同的模块是不是就好了呢?不得不引出下一个概念----协议分层。
协议分层(important)
把一个大的协议拆分成多个小的协议。将功能类似的协议划分为一层。不同层之间解决的问题不一样。并且约定跨度大的层之间不能互相交互,只有相邻层才可以互相交互。下面模拟做汉堡包的过程帮助大家更好的理解协议分层。
从上面这张滑稽老哥点餐可以看出,店里的每一位大厨只会一个功能,且每一位大厨之间的工作是互不干涉的,我不用去关注其他大厨的细节,如果一位大厨辞职了,我也可以只找一个,不用找四个。当前互联网体系的现状,就是“协议分层”。
协议分层的好处:
降低了使用的成本,使用某个协议的时候,不需要关注其他协议的实现细节。
降低整个体系的耦合性,灵活的变更某个层次的协议。
相信大家看到现在,是不是也好奇当前的互联网协议分层,具体是怎么样的呢??
- OSI 七层网络模型
注意:是 OSI 不是 ISO 也不是 IOS ,建议大家每天早上起床,晚上睡觉前,问三遍自己到底是什么。
- TCP/IP 五层网络模型(当前世界上最主流的网络协议模型)
五层、五层是那五层呢???分别是应用层、传输层、网络层、数据链路层、物理层(炒鸡重要喔)。
应用层:用户操作的层面
传输层:关注通信双方的 “起点和终点”
网络层:通过传输层得知的起点和终点,规划出一条路径,同时负责 IP 地址的管理
数据链路层:通过网络层规划出的路径,具体实施
物理层:描述的为硬件设备,可以认为是通信过程中需要用到的硬件设备,eg:网线……
为了便于理解,给大家举一个具体的栗子。
我在 🍑bao 上买了一条裙子(用户的操作-应用层),下单后,现在我需要填写收货信息,首先填写了姓名和联系方式(终点拿货人-传输层),然后是家庭住址重庆市xxx山卡卡A,与此同时商家也会填写他的姓名和联系方式(起点发货人-传输层)以及地址B,现在包裹打包后被快递小哥拿走了,从 A->B 的路径有很多条,现在选出了一条最快的路径(路由-网络层),在运快递的过程中,会先空运然后是大卡车运(具体的实例-数据链路层),在这整个运输中需要用到飞机、卡车(设备-物理层)。
封装
为了更好的描述封装和分用,我们直接栗子起手,一举拿下这两个概念
背景:小美和小帅通过扣扣聊天……
👦🏻[小帅视角]
- 小帅在输入框中输入“小美明天去自习室嘛?”,点击 发送 按钮
扣扣会把 “小美明天去自习室嘛?” 这句话从输入框读取到。构成一个 应用层数据包。应用层的网络协议,就描述了这个数据包的构造。
猜测格式可能为:
- 扣扣这样的应用程序就会调用操作系统的 API (传输层给应用层提供的 API)将这个数据包传输给传输层。操作系统会调用一个类似“发送数据”这样的 API ,然后应用程序会把上述组织好的 应用层数据包,作为参数传递进来,于是 应用层数据包,就到了系统内核里就进入到传输层代码部分了。
此时,传输层会进一步将 应用层数据包 再进行封装(在计算机网络中封装其实就是字符串的拼接)成一个 传输层数据包。由于传输层的协议有很多个,其中最主要的两个是 TCP 协议和 UDP 协议。假设此时是 UDP 协议。如下:
- 此时当 传输层数据包 打造完毕后,此时会调用操作系统提供的 API(没错!是网络层给传输层提供的 API )。此时 又会将上述组织好的 传输层数据包,作为参数传递进来,于是 传输层数据包,就到了网络层 ,网络层 也有很多协议,其中最主要的是 ipv4 协议(简称为 IP 协议)。此时又会进一步 **封装 **,将 传输层数据包 封装为 网络层数据包。
4.网络层 又会继续调用数据链路层的 API,把数据交给 数据链路层 处理。数据链路层的常见协议,以太网协议(插网线进行上网),
- 将上面一步一步封装好的,交给物理层(硬件设备),网卡会针对上述的二进制数据(图中的文本方便于理解,其实全是由01组成的二进制数值),进行真正的传输操作。需要将这些转变为 光信号/电信号/电磁波……
注意:
①:网络传输数据的基本单位,大概有以下几个:
- 数据包(packet)->IP
2.数据报(Datagram)-> UDP
数据段(segment)-> TCP
数据帧(frame)-> 以太网
虽然说有区分,但是在日常交流中,不会刻意区分呐~~,上文方便大家理解,就同一用的报
②:在网络上传输的数据都是“二进制的”字符串,所以说就需要将“结构化”的数据转化为二进制形式的字符串
结构化数据=》二进制字符串 ----->序列化
二进制字符串=》数据化结果 ----->反序列化 **(当接收方收到数据时,需要进行将刚刚传输过来的 二进制字符串 分用为结构化数据,就像剥洋葱,一层一层剥开) **
分用
👧🏻[小美视角]
接收方物理层收到光信号,把这样的光信号还原成 二进制字符串。
物理层转换回来的数据,交给数据链路层,以太网拿到这个数据包,会对这个包进行解析,拿出这里的报头、载荷,根据报头中的信息,做一些处理。决定这个数据包时丢弃还是转化,还是自己保留(进一步向上解析)。
- 网络层拿到上述解析好的数据后,IP协议,也要对这个数据包进行解析,拿出报头和载荷,根据报头中的信息,决定这个数据包时丢弃还是转化,还是自己保留(进一步向上解析)。
- 传输层这边拿到解析好的数据后,也要对数据进行解析,取出 UDP 的报头和载荷。
- 数据就到了扣扣这样的应用程序这里了。
现在就需要对上述数据进行 反序列化,针对这里做出一些逻辑上的处理
1)弹窗到界面上
2)播放“滴滴滴”这样的声音
3)把收到的消息,显示到界面上
……
以上就是今天分享的全部内容呐~~,干货篇以后持续更新哒~~~敬请期待趴。如果觉得对你有帮助的话就一键三连吧(超大声!!)。
🚩文化篇:每一汗滴皆非虚耗,乃筑梦巅峰之基础也。
版权归原作者 赛姐在努力. 所有, 如有侵权,请联系我们删除。