| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> 网络协议杂谈(一) -> 正文阅读 |
|
[网络协议]网络协议杂谈(一) |
网络协议杂谈(一)前言本篇笔记记录各种网络协议的原理以及一些逻辑问题,同时也会对网络协议特征的记忆方法进行整理,其中包括使用各种网络协议时会遇到的各种问题及原理,实际操作和解决办法会在下一篇笔记中记录。 PS:本篇笔记的记录风格以及详细程度与其他笔记不同,完全依照某个人的思维喜好,不喜欢看的出门右拐,别来喷! 文章目录网络协议概述本节讲述计算机网络的相关概念,属于基础知识中的基础概念,这一部分在其他笔记中有过描述,所以不做赘述。较为详细的说明,文章链接如下: 网络层次概述上一节中我们简单介绍了网络以及网络协议的含义,我们暂且可以这样理解。在说明技术的笔记中会说明更深层次的含义。 我们都知道网络在逻辑上被分为七层,并称之为OSI模型。然而这只是人为划分的一个不存在的模型。该模型依旧是TCP/IP四层协议。即:应用层、传输层、Internet层、网络接口层。 我们现在来对网络协议进行分层。 【注】:在上图中我们可以看到,网络一共被分为七层。在这七层中有很多网络协议,其实我们主要应用且研究的协议都在网络接口层、传输层中,应用层在服务器之间的数据传输会涉及到一些,Internet层中的协议理解即可。 接下来开始说明各层的主要功能。 各层网络的功能(TCP/IP)本篇笔记中所说的各层是将网络层次按照TCP/IP四层协议进行分层,在TCP/IP四层协议说明完毕后才会说明OSI七层模型的相关概念。 网络接口层根据上图中可以看出,该图中主要是计算机硬件中的分层。之前我们有说明过,数据在各个节点之间通过网络传输是以二进制格式传输的,有过基础的同学会知道,二进制(0与1)在计算机中是通过电路中的高低电平来表示,所以我们的数据在网络中通过媒介(网线?光纤?都可以)传递的时候其实是一种信号(电信号/光信号)。 网络接口层就是用来接收并简单处理这些二进制数据的层次。这一层将负责接收传递过来的数据并加以分组处理,等待上层的进一步处理。 Internet层我们在JavaSE进阶(五)——网络编程概述中关于IP地址在国际上的分配问题,我们知道我们的IP地址随之公民日益增长的网络设备需求而逐渐的不够用,所以我们选择了使用公网IP与内网IP的方式来使IP地址利用率最大化。即通过这一层来判断两个计算机设备是否属于同一个子网。这套地址就是所谓的IP地址。 该层在使用的时候,需要通过公网IP找到对应的子网,并在子网中找到对应的计算机,并将数据包传递过来。 传输层该层的作用很简单,主要是我们的计算机接收或者将要发送的数据是哪个应用程序(线程)来使用,也就是我们究竟使用哪个端口来操作该数据。 其实,该层的功能简单来说就是建立端口到端口的通信。对比Internet层与传输层我们可以发现,前者完成的是设备到设备的通信,后者完成的是端口到端口的通信(即线程与线程之间的通信)。我们的程序在执行的过程中就是通过一个一个线程来操作计算机中的数据。所以我们所谓的端口到端口的通信指的就是程序与程序之间数据的相互传输。 该层在数据传输的过程中,除了需要Internet层的相关操作参数以外,还需要端口号作为参数来操作数据包。 应用层该层完成的是更加复杂的功能,我们的程序与程序之间的连接、断开以及连接的时长都由该层完成;同时还会对接收或者发送的数据进行对应格式的转换,具体请参考JavaSE进阶(五)——网络编程概述中对于MIME类型的描述,我们的二进制数据可能是音频、图片、甚至是视频,我们将对应的数据从设备固有格式转换为数据的对应格式。 补充说明,MIME类型的诞生源于互联网的发展。最早的互联网只被用来发送邮件,而没有发送现在这么多种类型数据包的功能,但是互联网已经建立完成,我们无法更改互联网的架构,所以我们在计算机中加入了一些规则。任何数据都会被转换为二进制进行传输,所以在传输过程中不会出现问题,那么我们就在数据包的解析中做一套规则,按照规则进行封装以及解析,这样就完成复杂媒体数据包的传输问题。 在这一层中,我们会了解到很多网络协议,这些网络协议经常出现在面试题中,这些理论为了更深刻理解网络以及应对以后的面试。 PS:记住,大部分互联网公司已经没有懂得专业技术的人来做面试官了,他们的面试题都配着一套标准答案,技术只有核心特性以及规则或规范,除此之外哪有标准答案。 OSI网络协议各层介绍OSI网络协议中对于网络的分层在实际中是不存在的,它的出现源自于TCP/IP四层协议并不能满足我们现有的程序的支持,所以我们便认为规定了一个机遇TCP/IP四层协议的规则。 接下来根据TCP/IP四层协议的分层来具体说明一下OSI七层协议的各层功能。 网络接口层上文说过,网络接口层是属于计算机网络硬件中的层次。在OSI协议中,网络接口层中细分为两个层次:物理层以及数据链路层。 物理层该层主要完成的是将计算机网络中的计算机等设备通过物理手段(硬件)连接起来,连接方式一般通过光缆、电缆、无线电波、双绞线(电话线,现在的电话线其实也是光纤)。将计算机等设备连接后,通过连接的媒介来传递数据(数据包)。官方解释:物理层负责将设备连接并规定了电气特性。说白了就是通过某种物理手段将设备连接并通过该手段传递以二进制(01)为格式的数据包、 数据链路层作为同属于物理接口层中的一个理论层次,它的功能与硬件层次没有什么太大的区别。由于单纯的二进制数据不具备任何意义,所以我们在将数据封装为二进制数据包的时候,就人为定义了一些规则,规定二进制数据中的一些位置的数据具有一些特殊的含义。而数据链路层就是按照这个人为定义的规则来对二进制数据进行分组,并对二进制数据中具有特殊含义的电信号进行相应处理。 简单来说,数据链路层就是对于二进制数据的分组,使其成为有意义的数据。 Internet层网络层由于网络层仅仅是对IP地址的操作,与TCP/IP一样(也没办法进行细分了,如果IPV6与IPV4之间的关系出现一些其他问题可能会有其他的分层)。故该层在此不做赘述。 传输层传输层该层也是单纯的端口对端口的通信,如果民用普及的计算机没有大变革(比如打破了冯·诺依曼结构)就不会有什么大变化。 【注】:计算机有两种结构,一种为冯·诺依曼(也成普林斯顿结构),另一种是哈佛结构(其实还有一种改进型哈佛结构)。这二者之间的区别主要体现在数据存储与地址空间是否分开,前者放在一起,后者分开。 详细说明一下(不说过深的知识点),哈佛结构将程序与存储在计算机中的数据分开存放、处理。其认为,如果程序与数据放在一起,首先是安全性以及系统稳定性可能会受到影响,如果我们尝试修改系统程序很有可能会造成系统崩溃,普通民用计算机可能会选择重装系统来将系统恢复到可以正常使用的状态,代价是可能会出现数据丢失等问题(没遇到丢失学习资料的别杠,没遇到并不代表不存在!),如果是有特殊用途的计算机出现这种情况,很可能是毁灭性的问题。 冯·诺依曼结构认为程序也是一种数据,我在JavaSE进阶(十)——I/O流中对文件、数据等概念进行过说明:万物皆文件,我们的程序也是被编码成一个一个文件存放在电脑中,所有数据存储的方式都是二进制的方式持久化在外存中。所以,该结构的计算机将程序与数据放在一起。 总结一下,哈佛结构其实也没有完全打破冯·诺依曼结构,所以我们还是认为当前计算机基于冯·诺依曼结构。可能有些版本资料认为当今计算机已经不是冯·诺依曼结构,只能说仁者见仁,智者见智。大家没必要为了这种问题而喷,学术讨论就好。 应用层会话层在该层中提供的是数据通信的最基本操作,包括:建立连接、断开连接等相关的管控。比如我们使用JavaI/O流时,读取文件放入缓存中,然后将读取的数据写入外存中,这就是一个连接的过程。在此过程中,我们通过流(通道)的方法将数据在两个端口中传输,这个时候便开始建立两个端口之间的连接;当传输结束后,我们便将流(通道)关掉,至此两个端口之间的连接便断开了。 需要注意的是,建立连接是为了通信,原则上通信过程中不会断开连接(可以手动断开);当通信结束后,该链接如果没有人为规定或系统定义的其他操作,那么该连接会断开。 表示层我们可以可以通过名字来思考问题。表示,顾名思义,我们将某种东西方法表面,展示给他人看。说到这里可能会有一些迷惑。这样说,我们把表示层对应的角色明确一下。直观观测表示层的是各种软件,比如视频播放器、图片浏览器、音乐播放器等,这些软件是按照一定的规范将数据解析。 也就是说该层的处理流程对用户是透明的,它仅仅是将数据包进行解析,把这些通过数据链路层中分组处理的数据再次按照规则处理。 应用层这层是我们现今计算机网络(基础)最高的一层,这一层次它主要做的是嘴原本的网络通信行为。之前说明过,互联网最早的时候仅仅是为了发送邮件的,随着我们的需求日益增长,我们出现了越来越多的专门面向各种业务的网络协议,在这一层中我们包括HTTP、SSH、FTP等协议。HTTP协议一帮是在建立连接的时候使用;SSH协议在一些远程连接以及安全认证的时候会用到该协议;FTP协议在基本网络协议中对于文件传输来说还是比较强大的。 网络协议的相关概念对于计算机网络协议中的众多协议,我仅仅会对一些现在依旧在使用或者具有代表意义的协议进行说明。 Internet层IP协议在这里我们将对IPV4以及IPV6协议进行解释说明。在解释说明之前需要注意几个要点。 首先,IP协议是一种无连接协议,与UDP有相似的地方; 其次,IP协议中包含一定补充长度的无意义数据(其特征可以理解为,固定了存储空间大小,但是没存满的数组一样存在默认值); 最后,IP地址中有些也并不是很重要(复杂且对于现阶段来说没有研究意义)的部分,对于这部分会说明它是什么,但是不会有详细解释。 接下来开始详细说明: 【注】:上图为自己手绘,文字较为潦草,凑合看。 图中我们将IPV4数据报分为了七行,仅为了方便理解,其物理存储与我们之前讲过的多维数组一样,实际是连续的地址空间(就那么一长条)。 IPV4数据报共分为两部分,分别为首部以及数据部分。其中数据部分存储的就是IP协议传送的数据。首部中包含多个部分,接下来我们来说一下数据报中首部的各个部分的含义及格式:
传输层TCP协议对于TCP协议中,大家最熟悉的就是三次握手,四次挥手;其具体的连接方式在另一篇笔记中有过描述:链接如下: 接下来说明一下TCP协议的组成: TCP数据格式在大体上与与IPV4协议没有特别大的区别,那么区别就出现在内部:
UDP协议UDP协议与IP协议一样都是无连接协议,但是UDP与IP协议有很大的不同。UDP是一个公认的流氓协议。 UDP在传送数据的时候不需要建立连接,就像我们用手机发送短信,发送方只需要将数据发送出去,不需要接收端实际接收到消息。其主要特点是效率高,数据长度在64k(65536字节),数据传输不安全,容易丢包; 举一个具体的例子:一个同学在前一天晚上吼了大半夜的***NB,所以第二天迟到了,并且在课堂上昏昏欲睡。这趟课上老师一直在讲课,结果老师说了三句话只听到了两句话,并且由于精神状态不好,这两句话中有一句半听错了……这就是UDP协议。 接下来说一下UDP协议数据报的结构:
会话层DNSDNS就是一个解析设备地址的服务器。地址的表现形式有什么呢?一个是域名,另一个是IP地址,域名和IP地址是相互绑定的,也可以理解为域名是IP地址的一个名字,记住域名比记住IP地址要容易的多。 比如我们访问CSDN可以在地址栏上输入:https://www.csdn.net。这样就会将这个域名通过DNS解析找到对应的地址来访问我们的CSDN。 在具体解释DNS之前需要先了解几个概念: 域名等级域名分为顶级域名(一级域名)、二级域名、三级域名等;在这里需要注意的是,www是我们主机名字,有些时候我们成www也是域名,或者称之为万维网,这些我都不想解释。 域名是按照 . ** 来划分的,比如百度baidu.com**,在这个域名中,我们的baidu就是一个二级域名,我们的其他服务,比如tieba.baidu.com ,表示的就是tieba隶属于baidu这个域名的统一管理。说到这里我们发现后面还有一个com,那么那么我们可以理解,baidu等域名都是隶属于com管理的,和com同等级别的还有**.net,.edu,.cn**等,这些域名同属于根域名管理,根域名由 . 表示,所以完整的域名输入中,最后需要加上根域名的表示符,但是一般来说我们是忽略掉的。 表示层FTPFTP协议是基于TCP协议的一种文件传输协议,共包含两个端口,一般默认为20端口(数据端口)与21端口(控制端口),FTP协议其分为两种模式:主动模式与被动模式;
HTTP该协议为超文本传输协议,该协议基于请求与响应、无状态的应用层协议,通常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议。设计HTTP的初衷是提供一种发布和HTML页面的方法。 上面的DNS服务的说明中,我们得知DNS会将我们的域名通过查找的方式来相应的IP地址,最终我们是通过IP地址来找到目标副武器的。 HTTP协议是应用层的主要协议。在文章开篇就解释过,网络自始至终都是TCP/IP四层结构,OSI只是一个逻辑概念,所以这四层中的应用层在很久之前只有HTTP协议。 至于接下来需要解释的HTTPS协议则是基于安全考虑出现的衍生品。 HTTPS是以安全为目标的 HTTP 通道,是 HTTP 的安全版。HTTPS 的安全基础是 SSL。SSL 协议位于TCP/IP 协议与各种应用层协议之间,为数据通讯提供安全支持。 SSL协议分为两层,分别为:SSL记录协议以及SSL握手协议;SSL记录协议建立在TCP协议之上,为数据提供封装、压缩、加密等基本安全操作;SSL 握手协议(SSL Handshake Protocol),它建立在 SSL 记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。 HTTPS协议特点:
HTTPS协议的安全主要基于上述三个特点,这就像特点中举的例子。数据包就像是邮包,我们通过邮寄双方的信息来标注源地址以及目标地址;同时重要文件上还有封条,如果封条破损我们可以知道邮包的真实性。 SSL协议SSL协议最主要的是SSL记录协议和SSL握手协议,SSL协议基于TCP协议之上,应用层协议之下。具体结构如下: HTTP与HTTPS的区别
应用层本小节会将SMTP协议与POP3协议放在一起说明,这两个协议正巧是在相互配合,SMTP负责发邮件,而POP3负责收邮件。 SMTP官名:简单邮件传输协议;该协议是一种可靠、高校的传输邮件协议,基于C/S架构,如果在计算机中使用的话需要安装相关的支持软件(现在基于浏览器的邮件发送协议不属于SMTP);该协议默认端口为25。 SMTP协议也是基于TCP协议的,所以在连接过程中,会经过三次握手后再进行连接。三次握手之后将会进行正文的发送。 POP3POP3协议是邮局协议版本,是用来接收邮件的协议。其本质是将存储在邮件服务器上的邮件离线下载到本地;同样基于C/S架构,默认端口为110。 该协议返回消息只有两种,+OK为正响应;-ERR为负响应 总结本篇笔记记录了一些基本网络协议的概念和结构,其中有许多协议并没有涉及,并不是不重要,而是有些没有必要说,因为它的本质可能不需要了解,下一篇笔记的记录要点将是通过技术来实现一些网络连接。 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/9 2:11:47- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |