
一、功能
首先,tcp和udp都工作在传输层,用来在程序之间传输数据。数据一般包括:文件类型、文章类型、jpg图片等。
二、差异
TCP是基于连接的,而UDP是无连接的。
Tcp传输数据稳定可靠,适用于对网络通信质量要求较高的场景,需要准确传输给对方,比如传输文件、发送邮件、浏览网页等。
udp的优势是速度快,但可能会造成丢包,所以适用于实时性要求高但丢包不太多的场景。比如:域名查询、语音通话、文章文章等。udp另一个很重要的应用场景是隧道网络,比如VXLAN。
以人与人之间的通信为例:UDP协议相当于给对方写了一封信。信发出后,你无法知道对方是否收到了信,信的内容是否完整,也无法得到及时的反馈。TCP协议就像电话沟通一样,可以在这一系列的过程中得到及时的反馈,保证对方及时收到。如下图:
三、 TCP通信的过程:
tcp是如何保证上述过程的?
分为三步:三次握手,传输确认,四波。三次握手是建立连接的过程。
四、三次握手:
当客户端发起到服务器的连接时,它将首先发送一个连接请求数据包。去问问有没有可能和你建立联系。这种数据包称为SYN包。如果对等体同意连接,它将回复一个SYN ACK数据包。客户端收到后,会发送一个ACK包,连接就建立了。因为在这个过程中三个数据包相互发送,所以称为三次握手。
为什么是三次握手而不是两次握手?
这是为了防止,因为无效的请求消息突然传输到服务器,造成错误。这是什么意思?
假设通过两次握手建立了连接,客户端向服务器发送一个syn包来请求连接。由于一些未知的原因,没有到达服务器,中间滞留了一个网络节点。为了建立连接,客户端将重新发送syn数据包。这一次数据包正常投递,服务器发送syn ack后建立连接。
然而,被第一个数据包阻断的网络突然恢复了,第一个syn包被发送到服务器。此时服务器会认为客户端发起了新的连接,从而在两次握手后进入等待数据的状态。服务器认为是两个连接,而客户端认为是一个连接,导致状态不一致。如果服务器在三次握手中没有收到最后一个ack包,自然不会认为连接已经建立成功。
所以三次握手本质上是解决网络通道不可靠的问题。为了在不可靠的信道上建立可靠的连接,经过三次握手后,客户端和服务器都进入了数据传输的状态。
五、数据传输
数据传输:
一个数据分组可以被分成多个分组并被发送。如何处理丢包的问题?这些数据包以不同的顺序到达。如何处理无序的问题?
为了解决这些问题,tcp协议为每个连接建立一个发送缓冲区。由于链路建立后第一个字节的序列号为0,所以每个字节的序列号都会增加1。发送数据时,从数据缓冲区中取出一部分数据形成发送消息,该消息会在tcp协议头中附带序列号和长度。接收到数据后,接收端需要回复确认消息,确认消息中的ack等于接受的序列号加上长度。即下一次分组数据传输的起始序列号。在这种问答式传输模式下,发送方可以确认传输的数据已经被对方收到,发送方也可以一次连续发送多包数据,接收方只需要回复一次ack即可。如图所示:
六、四波:
处于连接状态的客户端和服务器都可以发起关闭连接的请求,关闭连接需要4个waves。假设客户端主动发起关闭连接请求,他向服务器发送一个FIN包表示要关闭连接,他进入终止等待1填充。服务器接收FIN包,发送ACK包表示自己已经进入关闭等待状态,客户端进入终止等待2状态。这是第二波,此时服务器仍然可以发送未发送的数据,客户端也可以接受数据。服务器发送完数据后,发送一包FIN包,最后进入确认状态。这是第三波。客户端收到ACK包后,恢复超时等待状态,超时后关闭连接。服务器收到ACK包后,会立即关闭连接。这是第四波。
为什么客户端等待超时?这是为了确保对方已经收到ack包,因为假设客户端在发送最后一个ack包后释放连接。一旦ACK包在网络中丢失,服务器将停留在最终确认状态。如果等待一段时间,服务器会因为没有收到ACK包而重新发送FIN包,客户端会响应这个FIN包重新发送ACK包并刷新超时。这种机制与三次握手的机制相同。而且在不可靠的网络链路中确保可靠的断开确认。
七、UDP协议
Udp:首先,udp协议是无连接的。发送数据只是封装一个简单的数据包,然后从网卡发送出去。数据包之间没有状态连接。由于这种简单的处理方式,udp的性能损失非常小,cpu和内存资源也远不如tcp。但是udp不能保证网络传输过程中的丢包,所以udp在传输稳定性上弱于tcp。
所以tcp和udp的主要区别在于,tcp传输的数据稳定可靠,适用于对网络通信质量要求较高,需要准确传输给对方的场景。比如传输文件,发邮件,浏览网页等。udp的优点是速度快,但可能会造成丢包,所以适用于实时性要求高但丢包不太多的场景。比如:域名查询、语音通话、文章文章等。
udp另一个很重要的应用场景是隧道网络,比如VXLAN。
审计郭婷









