对TCP和UDP的简单理解——通俗易懂,图文并茂

6 篇文章 0 订阅
1 篇文章 0 订阅

前言

tcp协议和udp协议都在传输层工作,他们的目标都是在程序之间传输数据(可是文本,图片,视频)对于tcp和udp都是二进制数。

TCP和UDP之间的区别是什么?

TCP是基于连接的,而UDP是基于非连接
将人与人的通信比喻为进程和进程之间的通信,基本有两种方式:
第一种为书信方式,第二种方式为打电话(不考虑速度因素)
在这里插入图片描述

TCP运行的三个过程:

三次握手,运输确认,四次挥手

三次握手:建立连接的过程

当客户端向服务端发起连接时,会先发一包连接请求数据过去询问,能否与你建立连接,这包数据我们称为SYN包
在这里插入图片描述
如果对端同意连接则回复一包SYN+ACK包
在这里插入图片描述
客户端收到之后回复一包ACK包,连接建立
在这里插入图片描述
因为这个过程中互相发送了三包数据,所以称之为三次握手。

为什么叫三次握手而不是两次握手?

服务端回复完SYN+ACK后就建立了连接,这是为了防止因为已失效的请求报文,突然传到服务器引起错误,假设采用两次握手建立连接,客户端向服务端发送了一个SYN包来请求建立连接,因为某些未知的原因SYN包并没有到达服务器,在中间某个网络节点产生了滞留
在这里插入图片描述
为了建立连接客户端会重发SYN包,这次的数据包正常送达,服务端回复SYN+ACK之后建立了连接
在这里插入图片描述
在这里插入图片描述
但是第一包数据阻塞的网络节点突然恢复,第一包SYN包又送达服务端,这时服务端会认为是服务端又发起了一个新的连接,从而在两次握手之后,进入等待数据状态
在这里插入图片描述
服务端认为是两个连接,而客户端认为是一个连接,造成了状态不一致,如果在三次握手的情况下,服务端收不到最后的ACK包,自然认为连接建立不成功
在这里插入图片描述
所以三次握手本质上来说,就是为了解决信道不可靠的问题,为了在不可靠的信道上建立可靠的连接,经过三次握手之后,客户端和服务端都进入了数据传输状态。

传输确认

tcp协议需要在不可靠的信道上保证建立可靠的连接,一包数据可能会被拆成多包发送,如何处理丢包问题,这些数据包到达的先后顺序不同,如何处理乱序问题
发送缓冲: 针对此问题,tcp协议为每一个连接建立了一个发送缓冲区
在这里插入图片描述
发送报文: 从建立连接的第一个序列号为0,后面每个字节的序列号就会增加1,发送数据时,取一部分数据组成发送报文
在其tcp协议头中,互附带序列号和长度,接收端在收到数据后,需要回复确认报文。
回复确认: 确认报文中的ACK= 接收序列号+长度,也就是下一包数据需要发送的起始序列号,一问一答的发送方式能够使得发送端确认发送的数据已经被对方收到,发送端也可以一次连续发送多包数据,接收端只需要回复一次ACK就可以了
在这里插入图片描述
切割发送: 这样发送端可以把待发送的数据,分隔成一系列的碎片,发送到对端,对端根据序列号和长度,在接收后重构出来完成的数据,假设其中丢失了某些数据包,在接收端可以要求发送端重传。
比如丢失了100-199这100个字节,接收端向发送端发送ACK = 100 的报文,发送端收到后重传中的一包数据,接收端进行补齐。以上过程不区分客户端和服务端,tcp是全双工的,两端均采用上述机制。
在这里插入图片描述

四次挥手

处于连接状态的客户端和服务端,都可发起关闭连接请求,此时需要四次挥手来进行连接关闭。假设客户端主动发起连接关闭的请求,它需要向服务端发起FIN包,表示要关闭连接,自己进入终止等待1状态,这是第一次挥手。
在这里插入图片描述
服务端收到FIN包,发送ACK包,表示自己进入了关闭等待状态,客户端进入终止等待2状态,这是第二次挥手。
在这里插入图片描述
服务端此时还可以发送未发送的数据,而客户端还可以接收数据,待服务端发送完数据以后,发送一包FIN包,进入最后确认状态,这是第三次挥手
在这里插入图片描述
客户端收到之后回复ACK包,进入超时等待状态,经过超时时间互关闭连接,而服务端收到ACK包后,立即关闭连接,这是第四次挥手。
在这里插入图片描述

为什么客户端需要等待超时时间?

这是保证对方已经收到ACK包,因为假设客户端送完最后一包ACK包后就释放了连接,一旦ACK包在网络中丢失,服务端将一直保留在最后确认状态
在这里插入图片描述
在这里插入图片描述

UCP协议

首先udp协议是基于非连接的,发送数据就是简单的把数据包简单的封装一下,然后从网卡发出去就可以了,数据包之间并没有状态上的联系,正因为UDP这种简单的数据处理模式,导致他们的性能损耗非常少,对于CPU内存资源的占用也远小于tcp,但是对于网络传输过程中产生的丢包,udp协议并不能保证,所以UDP在传输稳定性上要弱于tcp。
在这里插入图片描述

TCP和UDP之间的主要区别

TCP:
稳定可靠(适用于要求较高的场景,需要准确无误的传输给对方,比如传输文件,发送邮件,浏览网页等)
UDP:
速度快,但是可能产生丢包,所以适用于对实时性要求较高,但是对少量丢包,并没有太大要求的场景,比如域名查询,电话通信,视频直播等
udp还有重要的应用场景:即隧道网络(即常用的VPN,以及在SDN中用到的VXLAN也是一种)
在这里插入图片描述

心若所向,何惧道阻且长!

文章为个人总结,若有不正之处,欢迎大家评论留言指正!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值