在解释HTTP、TCP和UDP之前的区别之前,先为大家介绍一下三者的含义。

TCP:传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793 [1] 定义。

TCP旨在适应支持多网络应用的分层协议层次结构。 连接到不同但互连的计算机通信网络的主计算机中的成对进程之间依靠TCP提供可靠的通信服务。TCP假设它可以从较低级别的协议获得简单的,可能不可靠的数据报服务。 原则上,TCP应该能够在从硬线连接到分组交换或电路交换网络的各种通信系统之上操作。

UDP:Internet 协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,User Datagram Protocol)。UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法。RFC 768 [1] 描述了 UDP。

Internet 的传输层有两个主要协议,互为补充。无连接的是 UDP,它除了给应用程序发送数据包功能并允许它们在所需的层次上架构自己的协议之外,几乎没有做什么特别的事情。面向连接的是 TCP,该协议几乎做了所有的事情。

HTTPS:超文本传输协议(Hypertext Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而消息内容则具有一个类似MIME的格式。这个简单模型是早期Web成功的有功之臣,因为它使开发和部署非常地直截了当。

看到这里如果你还不是很理解三者的意思,你可以简单的记住:TCP是一种传输可靠连接的协议;UDP是一种传输不可靠的连接;HTTP是基于TCP的一种超文本连接;下面我会详细的给大家介绍。

TCP连接

为了能实现计算机在因特网之间的数据传输,就需要使用TCP/IP的概念.TCP/IP不是一种协议,而是一个协议族的统称,其中包括IP协议、IMCP协议、TCP协议,以及我们常见的http、ftp协议等。计算机定义了协议,就像两个不同国籍的人之间约定使用国际通用语言交流一样,双方都能准确的理解对方所表达的意思。

上面也介绍了TCP是一种可靠的数据传输连接,那么究竟可靠在哪里呢?首先我们看一下TCP与其他协议的网络结构图。

简述tcp和udp的区别和优缺点(HTTPTCP和UDP之间的区别你真的清楚吗)(1)

TCP三次握手

TCP在传输层中由一个确认和重传操作,可以保证我们传输文件的完成性。TCP传输文件在连接之前需要建立连接,这个连接就是三次握手,计算机通过三次握手建立一个持久性、稳定的连接。就像是两个人之间打电话,当电话打通时,两个人就建立起一条持久性的连接,别人是没办法去干扰通话的。

简述tcp和udp的区别和优缺点(HTTPTCP和UDP之间的区别你真的清楚吗)(2)

第一次握手:客户主动(activate open)去connect服务器,并且发送SYN假设序列号为J,服务器是被动打开(passive open)。

第二次握手:服务器在收到SYN后,它会发送一个SYN以及一个ACK(应答)给客户,ACK的序列号是J 1,表示是给SYN J的应答,新发送的SYN K 序列号是K。

第三次握手:客户在收到新SYN K,ACK J 1,也回应了ACK K 1以表示收到了,然后两边就可以开始数据发送和接收了。

看到上面的描述,如果你没有学过计算机网络是很难搞懂上面的专业术语的,下面我来详细的说明一下TCP报文结构。

TCP报文结构:

简述tcp和udp的区别和优缺点(HTTPTCP和UDP之间的区别你真的清楚吗)(3)

TCP报文格式详解:TCP四次挥手

由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

第一次挥手:客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送(报文段4)。

第二次挥手:服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5)。和 SYN一样,一个FIN将占用一个序号。

第三次挥手:服务器B关闭与客户端A的连接,发送一个FIN给客户端A(报文段6)。

第四次挥手:客户端A发回ACK报文确认,并将确认序号设置为收到序号加1(报文段7)

TCP采用四次挥手关闭连接,为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?

这是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的建连请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可以未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。

UDP

UDP协议与TCP协议一样用于处理数据包,在OSI模型中,两者都位于传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。

UDP用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但即使在今天UDP仍然不失为一项非常实用和可行的网络传输层协议。

UDP报文

简述tcp和udp的区别和优缺点(HTTPTCP和UDP之间的区别你真的清楚吗)(4)

特点

UDP是一个无连接协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。

由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消息。

UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包而言UDP的额外开销很小。

TCP和UDP协议对比

UDP和TCP协议的主要区别是两者在如何实现信息的可靠传递方面不同。TCP协议中包含了专门的传递保证机制,当数据接收方收到发送方传来的信息时,会自动向发送方发出确认消息;发送方只有在接收到该确认消息之后才继续传送其它信息,否则将一直等待直到收到确认信息为止。与TCP不同,UDP协议并不提供数据传送的保证机制。如果在从发送方到接收方的传递过程中出现数据包的丢失,协议本身并不能做出任何检测或提示。因此,通常人们把UDP协议称为不可靠的传输协议。

TCP 是面向连接的传输控制协议,而UDP 提供了无连接的数据报服务;TCP 具有高可靠性,确保传输数据的正确性,不出现丢失或乱序;UDP在传输数据前不建立连接,不对数据报进行检查与修改,无须等待对方的应答,所以会出现分组丢失、重复、乱序,应用程序需要负责传输可靠性方面的所有工作;UDP具有较好的实时性,工作效率较 TCP 协议高;UDP 段结构比 TCP 的段结构简单,因此网络开销也小。TCP协议可以保证接收端毫无差错地接收到发送端发出的字节流,为应用程序提供可靠的通信服务。对可靠性要求高的通信系统往往使用 TCP 传输数据

HTTP协议

HTTP是基于TCP完成的,HTTP是应用层协议,同其他应用层协议一样,是为了实现某一类具体应用的协议,并由某一运行在用户空间的应用程序来实现其功能。HTTP是一种协议规范,这种规范记录在文档上,为真正通过HTTP进行通信的HTTP的实现程序。

现在我们所常见的超文本传输协议是HTTPS,HTTPS是HTTP的一种升级版,HTTPS 协议是由 HTTP 加上 TLS/SSL 协议构建的可进行加密传输、身份认证的网络协议,主要通过数字证书、加密算法、非对称密钥等技术完成互联网数据传输加密,实现互联网传输安全保护。

HTTP报文

简述tcp和udp的区别和优缺点(HTTPTCP和UDP之间的区别你真的清楚吗)(5)

HTTP工作原理

HTTP是基于客户/服务器模式,且面向连接的。典型的HTTP事务处理有如下的过程:

原文链接:https://mp.weixin.qq.com/s/OqYW8WCJhctH8f2uLnO6gw

,