协议(protocol),网络协议(network protocol)的简称,网络协议是为了进行网络中的数据交换(通信),通信计算机双方必须共同遵从的一组约定、规则,只有遵守这些约定,计算机之间才能相互通信交流。
协议规定了通信实体之间所交换消息的格式、意义、顺序以及针对收到信息或发生事情所采取的行动。如怎么样建立连接、怎么样互相识别等。
1969年12月,美国国防部高级计划研究署的分组交换网ARPANET投入运行,从此计算机网络发展进入新纪元。ARPANET当时仅有4个结点,分别在美国国防部、原子能委员会、麻省理工学院和加利福利亚。这4台计算机之间进行数据通信仅有传送数据的通路是不够的,还必须遵守一些事先约定好的规则,由这些规则明确所交换数据的格式及有关同步问题。人与人之间交谈需要使用同一种语言,如果语言不同则需要翻译,否则两人之间无法沟通。计算机之间的通信过程和人与人之间的交谈过程非常相似,前者由计算机控制,后者由参加交谈的人控制。
语法:数据与控制信息的结构或形式(包含哪些字段域、长度、顺序)。
语义:要发出何种信息,要完成何种动作或是收到数据要做出何种响应。
比如浏览器要访问一个网站,会先组织请求数据,向服务器发送一个get请求报文,服务器收到后解析发现是个get请求,然后服务器会组织数据,并封装在响应报文中返回给浏览器客户端,客户端收到响应数据,解析并由浏览器内核进行渲染呈现出来。
时序: 事件实现顺序详细说明。
图 tcp三次握手图
TCP/IP协议:传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。
UDP协议:UDP是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送。
HTTP协议:http协议其实就是超文本传输协议,超文本传输协议 (HTTP-Hypertext transfer protocol) 是一种详细规定了浏览器和万维网服务器之间互相通信的规则。
FTP协议:文件传输协议,实现文件直接上传/下载。
Telnet协议:是 TCP/IP 协议族中应用最广泛的协议,是Internet远程登录服务的标准协议和主要方式。
SMTP协议:简单邮件传输协议,是一个相对简单的基于文本的协议。在其之上指定了一条消息的一个或多个接收者,然后消息文本会被传输。
NFS协议:网络文件系统,是一种用于文件共享的协议,允许一个系统在网络上与它人共享目录和文件。
在媒介上传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后在转化为1、0,也就是我们常说的数模转换与模数转换),提供机械和电气的规约,
将比特组合成字节,再将字节封装成帧,使用链路层地址 (以太网使用MAC地址)来访问介质,并进行差错检测。
Ethernet以太网协议(后续大部分协议基于以太网协议);PPP是点对点,PPPoE是基于以太网的点对点(拨号);
定义逻辑地址,实现从数据源到目标地址的转发。
本层通过 IP 寻址来建立两个节点之间的连接,为远端的运输层送来的分组,选择合适的路由和交换节点,正确无误地按照地址传送给目的端的运输层。就是通常说的 IP 层。这一层就是我们经常说的 IP 协议层。IP 协议是 Internet 的基础。
ICMP协议:ping命令基于的ICMP
IGMP协议:组播协议,IPTV基于它
提供一个端口号为上边应用提供服务。
建立、维护和取消一次端到端的数据传输过程,控制传输节奏的快慢,调整数据的排序等等
相较于网络层提供了一种可靠的机制。
TCP(transmission control protocol –传输控制协议,传输效率低,可靠性强,用于传输可靠性要求高,数据量大的数据)
UDP(user datagram protocol–用户数据报协议,与TCP特性恰恰相反,用于传输可靠性要求不高,数据量小的数据,如QQ聊天数据就是通过这种方式传输的)
通信双方建立、管理和终止会话
进行数据格式转换,以确保一个系统生成的应用层数据能被另外一个系统的应用层识别和理解
对应用程序提供接口
IETF ISO IEEE
1. 无状态协议:
无状态协议是客户端根据当前状态向服务器发送请求并返回服务器响应的网络协议类型。它不需要服务器为多个请求保留会话信息或每个通信伙伴的状态。
HTTP(超文本传输协议)、UDP(用户数据报协议)、DNS(域名系统)是无状态协议的例子。
无状态协议的静默特性:
无状态协议的静默特性:
无状态协议简化了服务器的设计。
无状态协议需要较少的资源,因为系统不需要跟踪多链路通信和会话细节。
在无状态协议中,每个信息包都是独立传输的,无需参考任何其他包。
无状态协议中的每个通信都是离散的,与之前或之后的通信无关。
2. 有状态协议:
在有状态协议中,如果客户端向服务器发送请求,那么它期望某种响应,如果它没有得到任何响应,那么它会重新发送请求。FTP(文件传输协议)、Telnet 是有状态协议的例子。
有状态协议的静默特性:
有状态协议通过跟踪连接信息为客户端提供更好的性能。
有状态的应用程序需要后备存储。
有状态的请求总是依赖于服务器端的状态。
TCP 会话遵循有状态协议,因为两个系统都在其生命周期内维护有关会话本身的信息。
格式一般都是header+body组合,header中包含数据类型、长度、起始符、版本号、任务类型等规则,body是真正的data数据。
参考:/?spm_id_from=333.337.search-card.all.click&vd_source=ca5cab1a33ec69b2daa8fb004c535cdd
REST(Resource Representational State Transfer),对资源的访问状态的变化通过url的变化表述出来。
Resource:资源。资源是REST架构或者说整个网络处理的核心
Representational:某种表现形式,比如用JSON,XML,JPEG等
State Transfer:状态变化。通过HTTP method实现
REST描述的是在网络中client和server的一种交互形式,是一种架构方式,并不是一种协议。
用大白话来说,就是通过URL就知道要什么资源,通过HTTP method就知道要干什么,通过HTTP status code就知道结果如何。
我们知道,API是服务和服务之间,客户端和服务端之间沟通的桥梁,通过API之间的调用,我们可以从服务器中获取到需要的资源信息。而RESTful API就是符合REST架构的API。
所以不是所有的HTTP协议的API都是RESTful API,它的前提是你的系统是REST架构的。
GET /tasks 获取所有任务
POST /tasks 创建新任务
GET /tasks/{id} 通过任务id获取任务
PUT /tasks/{id} 更新任务
DELETE /tasks/{id} 删除任务
GET代表获取一个资源,POST代表添加一个资源,PUT代表修改一个资源,DELETE代表删除一个资源。
server提供的RESTful API中,URL中只使用名词来指定资源,原则上不使用动词。
用HTTP Status Code传递server的状态信息。比如最常用的 200 表示成功,500 表示Server内部错误等。
总结一下,就是用URL定位资源,用HTTP描述操作
第一,风格统一,不会出现delUser/deleteUser/removeUser各种命名的代码了
第二,面向资源,一目了然,具有自解释性
第三,充分利用 HTTP 协议本身语义
RPC(Remote Procedure Call),(RFC-1831)远程调用协议 ,最初由RFC-1050定义。
是分布式通信方式,不是协议。原理马士兵老师讲的很清楚:/?p=2&spm_id_from=pageDriver&vd_source=ca5cab1a33ec69b2daa8fb004c535cdd
RPC的目标是要把2、3、4、7、8、9这些步骤都封装起来。
注意:无论是何种类型的数据,最终都需要转换成二进制流在网络上进行传输,数据的发送方需要将对象转换为二进制流,而数据的接收方则需要把二进制流再恢复为对象,这就是序列化和反序列化。
RPC思想产生前,最原始的方式就是网络通信和序列化反序列化,以及业务逻辑代码都耦合在一块,client和server端双方都要非常清楚数据交互的一切细节,增加或者变更一个参数、方法都要重新开发维护半天代码,维护起来特别麻烦。
RPC运用代理模式封装了网络和序列化部分的功能,对业务代码开发的工程师提供类似本地化调用服务的方法,并且运用代理模式的动态代理模式,最终实现代理类stub可以灵活生成多种interface类,并随意调用需要的method,随意传输参数args。
至此,RPC原理清楚了。
图中3和8步使用的网络协议可以是java的serializable,也可以是效率更高的Thrift、protobuf等,常见的如下:
1.java.io.Serializable
2.Hessian
3.google protobuf
4.facebook Thrift
5.kyro
6.fst
7.json序列化框架
a.Jackson
b.google Gson
c.Ali FastJson
8.xmlrpc (xstream)
至此,RPC序列化框架清楚了。
网络协议可以使用最原始的TCP/IP协议,也可以使用http1.X、http2.0,甚至是web service、mail协议,选什么网络协议无所谓,目的就是为了把序列化好的数据发送出去,不同的实现框架可能用不用的网络协议。
从单机到分布式产生了很多分布式通信方式:
永不过时、场景通用性极强的TCP、UDP,是应用层及其他很多协议的基础。
web service ,基于http+xml的标准化web API,数据格式是xml,采用http协议传输,并给出了很多标准约束,如SOA、SOAP、RDDI、ESDL,总体上比较复杂,效率较低。
RESTful,设计初衷是回归简单化本源,是基于http+json的web API,特点简单且效率较好了。
RMI,思路和RPC类似,但是是在java程序内部使用
JMS,为很多MQ所支持,还是太复杂
RPC,是cloud和Dubble等框架的基础,效率和灵活度很好。
DNS是域名解析协议,DNS 是域名系统 (Domain Name System) 的缩写,是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。
IP地址和图书馆图书目录管理一样,都是按照层级划分的。
>>错误认知:
. com 是二级域名,实际上这种两个一级域名组合还是一级域名。
主机.域名/ 二级域名,实际上斜杠后只是服务器一个目录了,虽然可以使用nginx这样的工具配置转发,给很多人一种错觉是域名,其实只是一个目录。
“根”节点是由一堆服务器组成的(不是13台服务器,已经有1400多个节点了),但是只使用了13个域名(从a到m开头),由12个独立运营的机构管理。
13个根服务器的分布地点:1个为主根服务器,放置在美国。其余12个均为辅根服务器,其中9个放置在美国,欧洲2个,位于英国和瑞典,亚洲1个,位于日本。
参考:/?spm_id_from=333.337.search-card.all.click&vd_source=ca5cab1a33ec69b2daa8fb004c535cdd
递归就是“传递”,迭代就是“反复”
参考:
参考:/?spm_id_from=333.337.search-card.all.click&vd_source=ca5cab1a33ec69b2daa8fb004c535cdd
可以使用nslookup命令进行DNS查询及wirekhark抓取DNS数据包:
114.114.114.114:是国内移动、电信和联通通用的DNS,手机和电脑端都可以使用,干净无广告,解析成功率相对来说更高,国内用户使用的比较多,而且速度相对快、稳定,是国内用户上网常用的DNS。
8.8.8.8:是GOOGLE(谷歌)公司提供的DNS,该地址是全球通用的,相对来说,更适合国外以及访问国外网站的用户使用,Google提供的另外一个免费DNS服务器的IP地址是:8.8.4.4
本文发布于:2024-01-29 17:30:30,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170652063217083.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |