我们在和他人谈话时,需要遵循一定的规则,比如确保对方能听懂我的语言。如果跟一个不懂中文的外国人说中文,是不可能很好地进行交流的。
计算机之间的通信也是如此,必须遵循一定的规则才能顺利“交流”。
tcp与udp是什么
在tcp/ip协议栈(互联网协议系列)中,tcp(transmission control protocol ,传输控制协议)与udp(user datagram protocol ,用户数据报协议)是传输层中的两种协议,我们平时刷视频、打游戏、看新闻等都要通过这两种协议进行数据传输。
那么这两种协议有什么区别呢?
tcp udp
区别 面向连接
可靠
提供流量控制
仅支持一对一通信 非面向连接
不可靠
不提供流量控制
支持一对一、一对多、多对一、多对多通信
优势 传输数据安全可靠 传输速度快,占用资源少
看完上面的表格,是不是还是有点懵,下面小编用一个比喻来告诉你二者究竟有什么不同。
我们把两个应用之间的通信当作是两个人在通信,在不考虑时间因素的前提下,我们把tcp看成是打电话,把udp看成是写信。
两个人打电话时,需要提前拨通对方的电话,这就是需要建立连接;通话过程中,双方能及时确认消息,如果听不清楚可以要求对方重新说一次,这就是安全可靠。
写信只需要根据地址把信发出去,这就是不需要建立连接;发出去的信也不知道对方能否收到,这就是不可靠。
tcp为了保证传输文件的完整性,会根据接收方的接收速率控制发送方的发送速率,即实行流量控制,所以tcp的传输速度低于udp。
这两种协议不存在哪个好哪个差,都有着各自适合的应用场景。
比如传输文件时对速度没有要求,但是必须保证文件完整送达,没有数据丢失,这时就应该采用tcp协议,而我们在视频聊天时,时效性要求高而准确性要求略低,这时就采用udp协议。
tcp是面向连接的协议,正如打电话时需要提前拨通电话,结束通话后需要挂断电话,那么tcp是如何建立连接与断开连接的呢?
计算机之间的通信也是如此,必须遵循一定的规则才能顺利“交流”。
tcp的三次握手
在传输数据前,两台主机需要通过三次会话建立连接,这个过程我们称为三次握手。
第一次握手:客户端向服务端请求建立连接,
syn=1(建立连接),
seq=x(序列号),
客户端进入syn_sent状态。
第二次握手:服务端向客户端返回确认并请求建立连接,
syn=1(建立连接),
ack=1 (已收到),
ack=x+1(确认号为收到的序列号加一),
seq=y(序列号),
服务端进入syn_rcvd状态。
第三次握手:客户端向服务端发送确认报文,
ack=1 (已收到),
ack=y+1(确认号为收到的序列号加一),
seq=x+1(序列号),
三次握手完成以后,2个主机之间,就可以传输数据啦~
tcp的四次挥手
当数据传输完成后,两台主机需要通过四次会话断开连接,这个过程我们称为四次挥手。
第一次挥手:客户端向服务端请求断开连接,
fin=1(断开连接),
seq=u(序列号),
客户端进入fin_wait_1状态。
第二次挥手:服务端向客户端返回确认报文,
ack=1 (已收到),
ack=u+1(确认号为收到的序列号加一),
seq=v(序列号),
服务端进入close_wait状态,客户端进入fin_wait_2状态。
第三次挥手:服务端完成数据传输后,向客户端发送断开连接请求,
fin=1(断开连接),
ack=1 (已收到),
ack=u+1(确认号为收到的序列号加一),
seq=w(序列号),
服务端进入last_ack状态。
第四次挥手:客户端向服务端返回确认报文,
ack=1 (已收到),
ack=w+1(确认号为收到的序列号加一),
seq=u+1(序列号),
客户端进入time_wait状态,服务端进入closed状态。
客户端处于time_wait状态时,tcp连接还未释放掉,等待2个msl(maximum segment lifetime,最大段生命周期)的时长后,客户端进入close状态。
看到这里,相信大家还有些疑问,下面就由小编来一一解答。
为什么是三次握手,两次握手或者四次握手不可以吗?
如果是两次握手,就可能出现下面这种情况。
客户端发送建立连接请求,由于网络拥塞,迟迟没有得到回应。客户端再次发送连接请求,服务端回应,连接建立。
一段时间后,客户端第一次发送的连接请求到达服务端,服务端以为客户端重新请求建立连接(其实并没有),此时服务端会返回响应报文并一直处于待连接状态,这就造成了资源浪费,如下图所示。
那为什么不是四次握手呢?
四次握手也能达到三次握手的效果,也就是将原本的第二次握手拆分成两次,一次发送确认报文,一次分开发送请求建立连接报文,但这同样造成了资源浪费,如下图所示。所以最终确定通过三次握手建立连接。
为什么是四次挥手,三次挥手不可以吗?
不可以。当客户端发送断开连接请求后停止发送数据(客户端还能接收数据),有可能此时服务端还有数据需要发给客户端,所以它先回一个确认报文,等发送完所有数据,再发送断开连接的报文,通知客户端可以断开连接了。
四次挥手结束后,
为什么客户端没有立刻关闭呢?
客户端没有立刻关闭,而是进入time_wait状态,等待2个msl的时长后,客户端才进入close状态,这是为了确保第四次挥手的确认消息到达服务端。
如果服务端在规定时间内未收到最后的确认消息,会重新进行第三次挥手请求断开连接,客户端重新发送确认消息,如下图所示。
msl是报文的最长生存时间,2个msl是在网络中来回两个报文所需要的最长时间,如果超过这个时间,客户端没有重新收到断开连接的请求,说明四次挥手顺利完成,可以断开连接了。
总结
今天的内容就到这里了,和小编一起复习一下今天的内容吧:
tcp和udp是传输层中的两种协议,tcp安全可靠但传输速度慢,udp传速度快但可能丢失数据,这两种协议各有优势,适合不同的应用场景。
两台主机建立连接和断开连接的过程被称为“三次握手”和“四次挥手”。
了解了为什么一定是三次握手和四次挥手。
广和通与多家企业联合成立深圳市5G-A应用创新产业联盟
功率放大器的性能特点和使用步骤
地平线与智能汽车计算平台方案商国汽智控签署战略合作协议
LED灯珠内氯的来源及解决办法
典型案例中电源管理解决方案应用探讨
为什么一定是三次握手和四次挥手
3月新能源汽车上险数据的一些基本分析
回顾了快200个bug,这个老工程师总结这些教训
英飞凌与格芯达成合作协议
NFC功能将成为国内智能手机标配
Vivado中PLL开发调用IP的方法
Gartner:二季全球PC销量8750万台同比降0.1%
艾为电子推出新一代低插损高隔离SP4T射频开关-AW13504HFLR
安防行业或将迎来艰难挑战和考验,民族企业当自强!
华为的冬天已来,春天还会远吗?
华曦达北交所IPO丨新增专利“一种双频MIMO天线路由器”
企业网络中的 4 个现实世界挑战以及 SD-WAN 如何解决这些挑战
电阻和运算放大器中的温度漂移——闪烁噪声和信号平均
工控系统该如何防御来自病毒的威胁
细数云栖大会出现的智能产品