关于TCP三次握手的简述,以及TCP与UDP的区别

1、TCP的简述

1.1、TCP三次握手建立连接

首先先来看看TCP的报文头,如下图所示。
在这里插入图片描述
其中要了解一下上图中的序号【seq】和确认号【ack】。由于TCP是可靠连接,所以TCP会为字节流中的每一个字节都添加一个编号,如果序号为0,则表示第一个要发送的字节编号为0,如果数据长度为10,那么报文的字节编号为0~9。确认号表示接收端正确的接收了序号为N的字节,要求发送端下一个应该发送字节序号为N+1的字节,举个例子来说,当前ack为10的话,说明前十个字节,即0~9编号的字节都已经被接收了,下一个需要被接收的字节是第十一个字节,即字节编号为10。
还需要来看看两个标志位,一个是确认标志位ACK,当ACK为1时表示确认号是有效的。还有一个时SYN字段,当SYN字段为1的时候表示这是一个连接请求或者连接接受报文。
接下来来看一下TCP三次握手的详细过程。
在这里插入图片描述
从上图中可以看出第一次握手,客户端将SYN标志位置为1,表示这是一个连接请求,并且随机产生一个序号x,并将含有SYN标志位和序号x的数据包发送到服务端,之后客户端便会进入一个sent的状态。第二次握手,当服务端收到客户端的数据包之后,通过SYN标志位的1可以知道,客户端想要建立连接,服务端将SYN标志位和ACK标志位都置为1、将ack的值置为x+1以及随机产生一个序号y,ACK标志位为1表示ack=x+1是有效的,ack的值为x+1说明服务端成功的接收了序号为x的字节。第三次握手,客户端再次进行一次确认,将要发送的数据的序号置为x+1,ACK置为1,ack置为y+1,序号置为x+1是因为第二次握手的时候服务端将发送出去的数据的ack置为x+1,表明服务端在下次接受来自客户端的数据序号应该是x+1,ACK置为1和ack置为y+1客户端已经成功接收到了来自服务端的第二次握手。至此,客户端和服务端就成功地建立了连接了。可以将上图中的三次握手简化为下图所示的步骤。
在这里插入图片描述
为什么TCP需要进行三次握手而不是两次呢?
在第一次握手的时候,服务端知道自己在接收数据和客户端在发送数据方面是正常的。第二次握手的时候,客户端知道自己的发送和接收以及服务端的发送和接收数据都是正常的。第三次握手的时候,服务端知道自己的发送和客户端的接收是正常的。所以三次握手之后客户端和服务端都能够彼此之间确认各自的数据发送和接收都是正常的,这才能够建立连接。

1.2、TCP四次挥手断开连接

首先先来看一看四次挥手的大概过程,如下图所示。
在这里插入图片描述
从上图中可以看出,当客户端想要关闭连接的时候会发送一个将FIN标志位置为1的报文给服务端,告诉服务端,客户端要关闭连接了,之后客户端进入WAIT1的等待状态,服务端在接收了客户端的报文之后会发送一个将ACK置为1的报文给客户端,表示服务端知道客户端要关闭连接了,不过此时服务端可能还有需要进行处理的数据,所以服务端会先将要处理的数据处理完之后,再给客户端发送一个将FIN置为1的报文告诉客户端,服务端已经将要处理的数据处理完了,可以关闭连接了,之后客户端会向服务端发送一个将ACK置为1的报文,进行信息的确认,之后服务端就可以关闭连接了。客户端在等待了一个2倍MSL【报文最大生存时间】的时间之后也会进行关闭。
为什么TCP握手需要进行三次而挥手需要进行四次?
其实从本质上来说TCP的握手其实也是四次,只不过中间的两次是可以进行合并的,而挥手的中间两步不能合并,因为发送ACK报文和发送FIN报文存在一个服务端数据处理的时间间隔,并不是同时发生的。

2、TCP与UDP的区别

TCP的报文头相比于UDP的报文头要复杂一点儿,前者固定长度达到20个字节,而UDP只有8个字节,传输效率比较高。两者的报文头分别如下图所示。
在这里插入图片描述
在这里插入图片描述
UDP是一种不可靠的通信协议,它是不需要建立连接的,不需要进行ack的确认,传输的数据发生乱序或者丢失都不负责,因此UDP适合实时视频通话和语音聊天。TCP是面向连接的可靠的数据传输服务,需要进行三次握手建立连接之后才能够进行数据的传输,TCP有超时重传机制以及滑动窗口流量控制等技术,保证数据在传输过程中不会出现丢失或者乱序,保证可靠性传输,因此TCP适合数据完整性以及通信质量较高的情况,比较适合文件下载,浏览网页等。
TCP是面向字节流的,这就意味着数据是以字节流的形式传递给接受者的,每个TCP会有一个发送缓冲区,如果字节流太长了,超过了发送缓冲区的容量,那么TCP会将字节流进行拆分,然后发送一个发送缓冲区容量的字节流,如果字节流太短,TCP会等待缓冲区的字节流到合适的时机再发送出去【比如,等发送缓冲区接收到了更多的字节流的时候】,因此接收方接受的数据可能是好几个数据包,也有可能是一个或者半个。而UDP传输报文是由应用层来控制的,不管报文有多长,UDP都会发送出去,既不拆分则不合并,保留报文的边界,因此可以得到下面关于两者区别的总结图。
在这里插入图片描述

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值