赞
踩
1.简介
网络协议是 计算机网络中进行数据交换而建立的规则、标准或约定的集合。
2.组成要素
网络协议由三个要素组成:
<1> 语义。语义是解释控制信息每个部分的意义。它规定了需要发出何种控制信息,以及完成的动作与做出什么样的响应。
<2> 语法。语法是用户数据与控制信息的结构与格式,以及数据出现的顺序。
<3> 时序。时序是对事件发生顺序的详细说明。(也可称为“同步”)。
这三个要素可以描述为:语义表示要做什么,语法表示要怎么做,时序表示做的顺序。
3.层次划分
计算机网络体系结构的通信协议划分为七层,自下而上依次为:物理层(Physics Layer)、数据链路层(Data Link Layer)、网络层(Network Layer)、传输层(Transport Layer)、会话层(Session Layer)、表示层(Presentation Layer)、应用层(Application Layer)。
1.简介
TCP属于网络分层中的传输层。
所谓的“三次握手”:为了对每次发送的数据量进行跟踪与协商,确保数据段的发送和接收同步,根据所接收到的数据量而确认数据发送、接收完毕后何时撤消联系,并建立虚连接。
为了提供可靠的传送,TCP在发送新的数据之前,以特定的顺序将数据包的序号,并需要这些包传送给目标机之后的确认消息。TCP总是用来发送大批量的数据。当应用程序在收到数据后要做出确认时也要用到TCP。
2.握手过程
<1> 图解
<2> 文字描述
第一次
第一次握手:建立连接时,客户端发送syn包(seq=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
总结:第一次握手就是客户端告诉服务端,客户端要发送数据。
第二次
第二次握手:服务器收到syn包,必须确认客户端的SYN(ack=j+1),同时自己也发送一个SYN包(seq=k),即SYN+ACK包,此时服务器进入SYN_RECV状态。
总结:第二次握手就是服务端反馈给客户端,服务端收到了客户端要发送数据的通知。
第三次
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
总结:第三次握手就是客户端开始真正的向服务端发送数据。
3.总结
完成三次握手,客户端与服务器开始传送数据。
1.简介
UDP协议全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。属于网络分层中的传输层。
UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。
2.特点
<1> 面向无连接
UDP是不需要和 TCP一样在发送数据前进行三次握手建立连接的,想发数据就可以开始发送了。并且也只是数据报文的搬运工,不会对数据报文进行任何拆分和拼接操作。
<2> 有单播,多播,广播的功能
UDP 不止支持一对一的传输方式,同样支持一对多,多对多,多对一的方式,也就是说 UDP 提供了单播,多播,广播的功能。
<3> UDP是面向报文的
发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付IP层。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。因此,应用程序必须选择合适大小的报文
<4> 不可靠性
首先不可靠性体现在无连接上,通信都不需要建立连接,想发就发,这样的情况肯定不可靠。并且收到什么数据就传递什么数据,并且也不会备份数据,发送数据也不会关心对方是否已经正确接收到数据了。
再者网络环境时好时坏,但是 UDP 因为没有拥塞控制,一直会以恒定的速度发送数据。即使网络条件不好,也不会对发送速率进行调整。这样实现的弊端就是在网络条件不好的情况下可能会导致丢包,但是优点也很明显,在某些实时性要求高的场景(比如电话会议)就需要使用 UDP 而不是 TCP。
<5> 头部开销小,传输数据报文时是很高效的。如下图
UDP 头部包含了以下几个数据
(1) 两个十六位的端口号,分别为源端口(可选字段)和目标端口。
(2) 整个数据报文的长度。
(3) 整个数据报文的检验和(IPv4 可选 字段),该字段用于发现头部信息和数据中的错误。
因此 UDP 的头部开销小,只有八字节,相比 TCP 的至少二十字节要少得多,在传输数据报文时是很高效的。
1.对比
协议 | UDP | TCP |
是否连接 | 面向无连接。 | 面向连接。 |
是否可靠 | 不可靠传输,不能确保发出去的数据包一定能被接收。 | 可靠传输,确保发出去的数据包一定能被接收。 |
连接对象个数 | 支持一对一,一对多,多对一和多对多交互通信。 | 只能是一对一通信。 |
传输方式 | 面向报文。 | 面向字节流。 |
头部开销 | 头部开销小,仅8字节。 | 头部最小20字节,最大60字节。 |
适用场景 | 适用于实时应用(IP电话、视频会议、直播等) | 适用于要求可靠传输的应用,例如文件传输 |
2.总结
<1> TCP向上层提供面向连接的可靠服务 ,UDP向上层提供无连接不可靠服务。
<2> 虽然 UDP 并没有 TCP 传输来的准确,但是也能在很多实时性要求高的地方有所作为。
<3> 对数据准确性要求高,速度可以相对较慢的,可以选用TCP。
<1> 新的二进制格式(Binary Format),HTTP1.x的解析是基于文本。基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多,二进制则不同,只认0和1的组合。基于这种考虑HTTP2.0的协议解析决定采用二进制格式,实现方便且健壮。
<2> 多路复用(MultiPlexing),即连接共享,即每一个request都是是用作连接共享机制的。一个request对应一个id,这样一个连接上可以有多个request,每个连接的request可以随机的混杂在一起,接收方可以根据request的 id将request再归属到各自不同的服务端请求里面。
<3> header压缩,如上文中所言,对前面提到过HTTP1.x的header带有大量信息,而且每次都要重复发送,HTTP2.0使用encoder来减少需要传输的header大小,通讯双方各自cache一份header fields表,既避免了重复header的传输,又减小了需要传输的大小。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。