TCP和UDP都是在传输层上工作的协议,用于在网络中传输数据。
1、TCP和UDP之间的区别
TCP和UDP的主要区别在于它们提供的服务和特性。TCP提供可靠的、有序的、基于连接的数据传输,适用于对数据完整性和可靠性要求较高的应用(邮件、短信)。UDP提供不可靠的、无序的数据传输,适用于对实时性要求较高的应用(视频通话)。选择使用TCP还是UDP取决于应用的需求和优先级,需要权衡数据的可靠性、延迟和带宽利用率等因素。
TCP比作是打电话:必须要对方接通才能进行通话,最后进行挂断。
UDP比作写信:只管将要写的内容写入信中发出去,不管对方是否收到,内容是否被篡改等等。
2、TCP连接的工作流程:
TCP是一种面向连接的协议,TCP通过建立一个连接,确保数据包的可靠传递和按顺序接收。它使用序列号、确认和重传等机制来保证数据的准确传输。TCP还提供流量控制、拥塞控制和错误恢复等功能,以确保数据的完整性和可靠性。缺点就是他比起UDP来说消耗的性能更多,速度更慢。
2.1建立连接:
- 第一步:客户端向服务器发送一个带有SYN(同步)标志的TCP报文段,表示请求建立连接。
- 第二步:服务器收到客户端的请求后,向客户端发送一个带有SYN/ACK(同步/确认)标志的TCP报文段,表示同意建立连接。
- 第三步:客户端收到服务器的响应后,再向服务器发送一个带有ACK(确认)标志的TCP报文段,表示连接已建立。
为什么要进行三次握手呢,而不是两次握手就建立连接呢?
这是因为网络通信的不可靠性,假设一种情况,当客户端给服务端发送第一个SYN包,然后因为网络拥堵,没发到服务端,此时客户端又发了一个SYN包给服务端,服务端接到建立连接的请求,就给客户端发送SYN/ACK包,此时建立了连接,突然之前第一个SYN包发到了服务端,则服务端以为客户端又要建立一个连接请求,则给客户端发送SYN/ACK包,建立了第二条请求。
此时情况就是服务端以为和客户端建立了两条请求,而客户端这边认为只建立了一条请求,则服务端那边有一条连接一直接收不到数据,如果有第三次握手就不会出现这种情况了。
2.2数据传输
TCP协议通过一些机制来处理乱序问题和丢包问题,确保数据的可靠传输。
-
序列号和确认机制:TCP在每个数据包中使用序列号来标识数据的顺序。接收方收到数据包后,会发送一个确认(ACK)消息,其中包含下一个期望接收的序列号。如果发送方收到确认消息,就知道数据已经成功传输,如果没有收到确认消息,发送方会重新发送数据。
-
重传机制:如果发送方没有收到确认消息,或者接收方在一定时间内没有收到数据包,TCP会触发重传机制。发送方会重新发送丢失的数据包,确保数据的可靠传输。
-
滑动窗口机制:TCP使用滑动窗口机制来控制发送方发送数据的速率。接收方会告诉发送方它的接收窗口大小,发送方根据接收窗口大小来发送数据。如果接收方的窗口大小变小,发送方会相应地减少发送的数据量,以避免数据的丢失。
-
接收方缓冲区:接收方使用缓冲区来存储接收到的数据。如果数据包乱序到达,接收方会根据序列号将数据包重新排序,排序后如果发现某个包丢失会发送请求给发送端,请求他重发这段数据,待数据整合完毕。然后交付给应用程序。
通过这些机制,TCP可以有效地处理乱序问题和丢包问题。它确保数据的有序传输,并通过重传机制和滑动窗口机制来保证数据的可靠性。接收方的缓冲区可以处理乱序到达的数据包,确保数据按正确的顺序交付给应用程序。这些机制使得TCP成为一种可靠的传输协议。TCP是全双工的,所以客户端和服务端都可能是数据的接收方和发送方。
2.3四次挥手
- 第一步:客户端发送一个带有FIN(结束)标志的TCP报文段给服务器,表示客户端不再发送数据,但仍然可以接收数据。
- 第二步:服务器收到客户端的结束请求后,向客户端发送一个带有ACK(确认)标志的TCP报文段,确认收到了结束请求。服务器仍然可以发送数据给客户端。此时服务端处理之前未处理完的数据。
- 第三步:当服务端数据处理完毕,也可以关闭时,发送一个带有FIN标志的TCP报文段给客户端,表示服务器不再发送数据。
- 第四步:客户端收到服务器的结束请求后,向服务器发送一个带有ACK标志的TCP报文段,确认收到了服务器的结束请求。服务端马上进入了CLOSED状态,客户端等待超时时间后再进入CLOSED状态,连接成功关闭。
为什么客户端在发送ACK(最后一次挥手)后还要进行等待一段时间才正式关闭?
这也是因为不稳定网络通信。当客户端接收到服务端的FIN包时,会给服务端发送最后的ACK,此时这个ACK又因为某些因素没发送到服务端,服务端在等待一段时间后没有收到客户端的正式关闭连接的信息ACK包,就会再次给客户端发送FIN包。所以让客户端最后再等待超时时间,是为了看看还会不会收到这个FIN,如果再次收到,则会给服务端重发ACK包,刷新超时等待时间。
3、UDP连接的工作流程:
UDP的工作流程是简单的。UDP是一种无连接的协议,UDP将数据分割成数据报,每个数据报都是独立的,没有建立连接的过程。发送方将数据分割成数据报并直接发送给目标地址,接收方监听指定的端口号并等待数据报的到达。UDP不提供可靠性保证,数据报可能会丢失、重复或乱序到达。UDP的优势在于它的简单性和低延迟性,适用于那些对实时性要求较高的应用。