灵魂拷问:TCPPUDP全懂了吗?
TCP协议和UDP协议大家应该都听说过。 TCP协议和UDP协议都工作在传输层,它们的目标都是在应用程序之间传输数据。我们常用的网络通信,如浏览网页、查收邮件、电话通信等,都是使用这两种协议进行数据传输。
01.TCP和UDP的区别这两个协议有什么区别?它们是如何工作的?跟着文档君往下看~
TCP协议和UDP协议的核心区别是什么?看看下图你就知道了。
TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。可靠性是TCP最大的特点,主要体现在:不丢失数据、不出错、不乱序、不重复到达。就像上图一样,TCP可以非常安全地将“孩子”(数据包)传送给接收方。
UDP(User Datagram Protocol,用户数据报协议)是一种无连接、不可靠、传输速度快的传输层通信协议。传输速度快是UDP最大的特点,主要体现在:在发送数据之前,不需要提前建立连接,可以更高效地传输数据,但不能保证可靠性。就像上图一样,UDP只负责把“children”(数据包)送出去,而不管接收者有没有收到。
在直观感受了TCP协议和UDP协议的区别之后,我们来看看TCP协议是如何工作的?
02. TCP是如何工作的? TCP通讯:总结的连接管理机制(可靠机制)是:三次握手建立连接,四次握手断开连接。
三向握手建立连接TCP是面向连接的协议,所以每次请求都需要对方确认。 TCP客户端与TCP服务器通信之前,需要进行三次握手建立连接。
第一次握手
目的:这是一个请求建立连接的数据包。客户端首先向服务器发送一个同步数据包。
数据包的TCP头内容:
同步SYN=1(客户端请求建立连接)
Sequence number seq=x(客户端传输的数据第一个字节的序号)
第二次握手
目的:服务器收到客户端发送的第一个数据包后,判断为主动建立连接的数据包。如果服务器同意连接,服务器将发送一个数据包作为响应。
数据包的TCP头内容:
Sync SYN=1(服务器建立连接)
确认标志ACK=1(服务器同意连接)
Sequence number seq=y(服务器发送的数据第一个字节的序号)
确认号ack=x+1(客户端发送的x字节数据已经收到,客户端下次从数据的第x+1字节开始发送)
第三次握手
目的:客户端收到服务器的确认后,向服务器发送一个数据包。
数据包的TCP头内容:
Sync SYN=1(双方同意建立连接)
确认标志ACK=1(从服务器收到确认包)
序列号seq=x+1(发送的数据包为数据的第x+1个字节)
确认号ack=y+1(收到服务器发送的y字节数据,告诉服务器下次从数据的第y+1字节开始发送)
尖端
在client和server之间传输的TCP数据中,双方的序号seq和确认号ack的值是根据对方的seq和ack值计算出来的,保证了TCP数据传输的连续性.一旦一方发送的TCP数据丢失,就无法继续“握手”,从而保证了“三次握手”的顺利完成。
四次挥手断开连接在采集结束时,有时,当数据传输完成后,TCP客户端和TCP服务器需要通过四次会话断开连接。这个过程称为四次挥动。
第一波
目的:客户端向服务器发送连接释放请求包,停止发送数据。
在连接释放数据包的TCP 头中:
Terminate FIN=1(客户端应主动释放客户端与服务器之间的TCP连接)
序号seq=x(x由客户端指定。然后等待服务端确认)
第二波
目的:服务器收到连接释放报文后,向客户端发送确认报文。因此,client-to-server方向的连接被释放,此时TCP连接处于半关闭状态。半关闭是因为客户端不能再向服务器发送数据,半开放是因为服务器仍然可以向客户端发送数据并被其接收。
在服务端发送给客户端的确认报文的TCP头中:
确认标志ACK=1(收到客户端发送的数据包,同意客户端释放连接)
确认号ack=x+1(在收到客户端消息的基础上,将其序号seq值加1作为该段消息的确认号ack的值)
序号seq=y(y由服务端指定。然后等待客户端确认)
第三波
目的:如果服务器已经停止向客户端发送数据,则释放连接并向客户端发送确认消息。
在确认消息的TCP 标头中:
Terminate FIN=1(服务器端释放服务器端到客户端的TCP连接,不再向客户端发送数据)
确认标志ACK=1(服务器到客户端的数据传输完成)
确认号ack=x+1(在收到客户端消息的基础上,将其序号seq值加1作为该段消息的确认号ack的值)
序号seq=z(z由服务端指定。然后等待客户端确认)
第四波
目的:客户端收到服务器的连接释放报文段后,向服务器发送确认报文。
在确认消息的TCP 标头中:
terminate FIN=1(客户端和服务器断开连接)
确认标志ACK=1(收到服务器的确认报文,同意释放与服务器的连接)
确认号ack=z+1(在收到服务器报文的基础上,将其序列号seq值加1,作为该段报文的确认号ack的值)
序号seq=x+1(在收到服务器报文的基础上,将其确认号作为本段报文序号的值)
了解完TCP,我们再了解一下UDP是怎么工作的~
03.UDP是如何工作的? UDP协议是无连接的,即在发送数据之前不需要建立连接(没有TCP协议复杂的三次握手和四次握手过程)。发送数据就是简单的封装数据包,然后从网卡发送出去。包之间没有状态连接。 UDP协议基本上是IP协议和上层协议之间的接口。 UDP协议利用IP层提供的服务,将应用层获得的数据从一台主机的应用进程传送到另一台主机的应用进程。
举个栗子~
当传输层收到来自IP层的UDP数据包时,根据UDP数据包包头中的目的端口,将UDP数据包通过相应的端口传递给应用进程,如下图所示。
如上图,应用进程4和端口2,如果接收方UDP发现收到的报文中的目的端口号不正确(即没有该端口号对应的应用进程),报文就会被丢弃并由ICMP“端口不可达”错误消息发送给发送方。
尖端
ICMP(Internet Control Message Protocol,互联网控制消息协议)是TCP/IP协议族的一个子协议,用于在IP主机和路由器之间传输控制消息。控制消息是指网络本身的消息,如网络是否不可达、主机是否可达、路由是否可用等。
04.总结数据传输看似简单,其实很智能~
TCP和UDP是为程序服务的,但是程序和人是一样的。可以过来聊聊,也可以聊聊天。 TCP 就是关于彼此之间诚实的通信。消息是否收到,收到的信息是否一致,可以及时反馈。
优点:可靠。
缺点:传输速度慢。
适用场景:通讯软件的账号登录、支付等相关功能,使用可靠的TCP。
UDP在说话,我不管你听不听,不管你有没有反馈,我都会一直说下去。
优点:传输速度快。
缺点:不可靠。
适用场景:QQ、微信等即时通讯软件进行点对点通讯,或者音视频通话,通常使用UDP,传输速度快。
TCP和UDP各有优缺点,就看你的实际需求了~
更多TCP干货请戳三向握手四次挥手,原来TCP这么客气!
05、如何将UDP从不可靠传输变为可靠传输?
为什么TCP是三次握手而不是两次或四次?
为什么是四波而不是三波?
本文来自微信公众号:中兴文档(ID:ztedoc)
本文由网络整理发布,不代表东辰网立场,转载联系作者并注明出处:https://www.ktwxcd.com/sszx/253715.html