网络协议等
Posted xjy20170907
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络协议等相关的知识,希望对你有一定的参考价值。
七层网络模型
自下往上分为:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,每一层都靠下一层的支持。所有有关通信的都离不开它,下面这张图片介绍了各层所对应的一些协议和硬件:
1.物理层:
主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后在转化为1、0,也就是我们常说的数模转换与模数转换)。这一层的数据叫做比特。
2.数据链路层:
定义了如何格式化数据以进行传输,以及如何让控制对物理介质的访问。这一层通常还提供错误检测和纠正,以确保数据的可靠传输。
3.网络层:
在位于不同地理位置的网络中的两个主机系统之间提供连接和路径选择。Internet的发展使得从世界各站点访问信息的用户数大大增加,而网络层正是管理这种连接的层。
4.传输层:
定义了一些传输数据的协议和端口号(WWW端口80等),如:
TCP(transmission control protocol –传输控制协议,传输效率低,可靠性强,用于传输可靠性要求高,数据量大的数据)
UDP(user datagram protocol–用户数据报协议,与TCP特性恰恰相反,用于传输可靠性要求不高,数据量小的数据,如QQ聊天数据就是通过这种方式传输的)。 主要是将从下层接收的数据进行分段和传输,到达目的地址后再进行重组。常常把这一层数据叫做段。
5.会话层:
通过运输层(端口号:传输端口与接收端口)建立数据传输的通路。主要在你的系统之间发起会话或者接受会话请求(设备之间需要互相认识可以是IP也可以是MAC或者是主机名)
6.表示层:
可确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取。例如,PC程序与另一台计算机进行通信,其中一台计算机使用扩展二一十进制交换码(EBCDIC),而另一台则使用美国信息交换标准码(ASCII)来表示相同的字符。如有必要,表示层会通过使用一种通格式来实现多种数据格式之间的转换。
7.应用层:
是最靠近用户的OSI层。这一层为用户的应用程序(例如电子邮件、文件传输和终端仿真)提供网络服务。
计算机中的协议和现实中的协议是一样的,一式双份或多份,双方或多方都遵从共同的一个规范,这个规范称之为协议。
TCP和UDP连接
? 关于传输层TCP、UDP协议可能我们平时遇见的会比较多,有人说TCP是安全的,UDP是不安全的,UDP传输比TCP快,那为什么呢,我们先从TCP的连接建立的过程开始分析,然后解释UDP和TCP的区别。
tcp连接时的三次握手和断开时的四次挥手:
可以看到一次tcp请求的建立及关闭至少进行7次通信,这还不包过数据的通信,而UDP不需3次握手和4次分手。
TCP和UDP的区别
1、TCP是面向链接的,虽然说网络的不安全不稳定特性决定了多少次握手都不能保证连接的可靠性,但TCP的三次握手在最低限度上(实际上也很大程度上保证了)保证了连接的可靠性;而UDP不是面向连接的,UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号,发送端不知道数据是否会正确接收,当然也不用重发,所以说UDP是无连接的、不可靠的一种数据传输协议。
2、也正由于1所说的特点,使得UDP的开销更小数据传输速率更高,因为不必进行收发数据的确认,所以UDP的实时性更好。知道了TCP和UDP的区别,就不难理解为何采用TCP传输协议的MSN比采用UDP的QQ传输文件慢了,但并不能说QQ的通信是不安全的,因为程序员可以手动对UDP的数据收发进行验证,比如发送方对每个数据包进行编号然后由接收方进行验证啊什么的,即使是这样,UDP因为在底层协议的封装上没有采用类似TCP的“三次握手”而实现了TCP所无法达到的传输效率。
HTTP协议
关于TCP/IP和HTTP协议的关系,网络有一段比较容易理解的介绍:“我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容。如果想要使传输的数据有意义,则必须使用到应用层协议。应用层协议有很多,比如HTTP、FTP、TELNET等,也可以自己定义应用层协议。
HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,WEB使用HTTP协议作应用层协议,以封装HTTP文本信息,然后使用TCP/IP做传输层协议将它发到网络上。
由于HTTP在每次请求结束后都会主动释放连接,因此HTTP连接是一种“短连接”,要保持客户端程序的在线状态,需要不断地向服务器发起连接请求。通常 的做法是即时不需要获得任何数据,客户端也保持每隔一段固定的时间向服务器发送一次“保持连接”的请求,服务器在收到该请求后对客户端进行回复,表明知道 客户端“在线”。若服务器长时间无法收到客户端的请求,则认为客户端“下线”,若客户端长时间无法收到服务器的回复,则认为网络已经断开。
下面是一个简单的HTTP Post application/json数据内容的请求:
POST HTTP/1.1 Host: 127.0.0.1:9017 Content-Type: application/json Cache-Control: no-cache {"a":"a"}
TCP/IP协议诞生
早期的网络可以把两台计算机连在一起,这只是迈出了建立互联网的一小步。人们很快发现,如果要把更多的不同型号的计算机,通过不同规格的网络连接在一起,还要让它们能共享内容,就非得发明一套更先进的技术不可。
因此大名鼎鼎的两位科学家罗伯特·卡恩和文顿·瑟夫发明了TCP/IP协议。
两位科学家首先着眼于给每台电脑都分配一个唯一的确定的地址,就像住宅的门牌号一样,有了它快递员才能把包裹准确投递到位——这就是IP。而TCP则负责监督传输过程,一出现问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。在1973年问世并被持续不断改进的TCP/IP协议至今仍然是全球互联网得以稳定运作的保证。
从输入的 URL 里我们可以从中获取服务器端的 IP 地址与端口号,建立一条 TCP 连接。建立连接之后,在客户端和服务器端之间交换的报文,不会丢失,受损,或者失序。
TCP / IP 协议族里最重要的特征就是分层,每一层都靠下一层的支持。TCP / IP 按层次分,分为四层:应用层、传输层、网络层、数据链路层。HTTPS 就是在应用层与传输层之间多了一层安全层。
应用层决定了向用户提供应用服务时通信的活动(规定传输的数据格式)。比如 FTP 文件传输协议,DNS 域名解析系统,HTTP 超文本传输协议也位于此层。
传输层提供处于网络连接中的两台计算机之间的数据传输,在传输层有两个不同的协议,TCP 和 UDP 协议。
网络层用来处理网络上流动的数据包,数据包是网络传输的最小数据单位,该层规定了通过怎样的路径到达对方计算机,并把数据包传送给对方。
链路层用来处理网络的硬件部分。如操作系统,设备驱动等。
HTTP
以 HTTP 为例,在进行网络通信时,发送端会从应用层往下走,接收端则会往应用层往上走。
建立 TCP 连接之后,从客户端发送一条 HTTP 请求报文,会以流的形式,至传输层(TCP协议), 传输层会把从应用层出收到的请求报文进行分割,并在各个报文打上标记序号,及端口号转发给网络层。到达网络层(IP协议)后,增加作为通信目的地的 MAC 地址后转发给链路层。
作为接收端的服务器在链路层接收到数据之后,会一级一级往上传至应用层。
发送端在层与层之间传输数据时,每经过一层,会被打上属于该层的首部信息。
接收端在层与层之间传输数据时,会把每层对应的首部去掉。
HTTPS
HTTPS 方案的 URL 以 https:// 开头,而不是以 http:// 开头,使用 HTTPS时,所有的 HTTP 请求和响应数据在发送到网络之前,都要进行加密。
在发送已加密的 HTTP 报文之前,客户端和服务端会进行一次 SSL 握手,在这次握手过程中,他们主要完成以下工作:
- 交换协议版本号;
- 选择一个两端都了解的密码;
- 对两端身份验证;
- 生成临时的会话秘钥,以便加密通道。
HTTP 发展历史
HTTP/0.9
- 只有一个命令GET
- 响应类型: 仅超文本
- 没有header等描述数据的信息
- 服务器发送完毕,就关闭TCP连接
HTTP/1.0
- 增加了很多命令(post HESD )
- 增加status code 和 header
- 多字符集支持、多部分发送、权限、缓存等
- 响应:不再只限于超文本 (Content-Type 头部提供了传输 html 之外文件的能力 — 如脚本、样式或媒体文件)
HTTP/1.1
- 持久连接。TCP三次握手会在任何连接被建立之前发生一次。最终,当发送了所有数据之后,服务器发送一个消息,表示不会再有更多数据向客户端发送了;则客户端才会关闭连接(断开 TCP)
- 支持的方法:
GET
,HEAD
,POST
,PUT
,DELETE
,TRACE
,OPTIONS
- 进行了重大的性能优化和特性增强,分块传输、压缩/解压、内容缓存磋商、虚拟主机(有单个IP地址的主机具有多个域名)、更快的响应,以及通过增加缓存节省了更多的带宽
HTTP2
- 所有数据以二进制传输。HTTP1.x是基于文本的,无法保证健壮性,HTTP2.0绝对使用新的二进制格式,方便且健壮
- 同一个连接里面发送多个请求不再需要按照顺序来
- 头信息压缩以及推送等提高效率的功能
URI、URL、URN
URI:统一资源标识符;
URN:统一资源名称;
URL:统一资源定位符;
web上的各种资源(html、图片、视频、音频等)都由一个URI标识定位。URI相当于它们的详细“家庭住址”。
URI包含了URL和URN:
URL是URI的一种,不仅标识了Web 资源,还指定了操作或者获取方式,同时指出了主要访问机制和网络位置。
URN是URI的一种,用特定命名空间的名字标识资源。使用URN可以在不知道其网络位置及访问方式的情况下讨论资源。
// 这是一个URI http://bitpoetry.io/posts/hello.html#intro // 资源访问方式 http:// // 资源存储位置 bitpoetry.io/posts/hello.html #intro // 资源 // URL http://bitpoetry.io/posts/hello.html // URN bitpoetry.io/posts/hello.html#intro
原文:
https://segmentfault.com/a/1190000014044351?utm_source=tag-newest
https://segmentfault.com/a/1190000010209843
https://segmentfault.com/a/1190000015493580
以上是关于网络协议等的主要内容,如果未能解决你的问题,请参考以下文章
VSCode自定义代码片段14——Vue的axios网络请求封装
VSCode自定义代码片段14——Vue的axios网络请求封装