网站内容更新教程泰安网站开发公司
news/
2025/9/28 8:37:03/
文章来源:
网站内容更新教程,泰安网站开发公司,app开发导入网站模板,外贸做包装袋哪个网站好1.三次握手的概述
我们在学网络的概念时#xff0c;每当讲到TCP都会听到三次握手和四次挥手#xff0c;一直以来可能都对这个概念模糊不清#xff0c;那么什么是三次握手和四次挥手呢#xff1f;简单的举一个例子#xff0c;如果我们和朋友打游戏#xff0c;我们要和朋友…1.三次握手的概述
我们在学网络的概念时每当讲到TCP都会听到三次握手和四次挥手一直以来可能都对这个概念模糊不清那么什么是三次握手和四次挥手呢简单的举一个例子如果我们和朋友打游戏我们要和朋友往往都是连麦打游戏那么我们和朋友之间需要相互确认我们都开麦了。这个过程我会发出一个信号说我开麦了与此同时呢朋友会确认他能够听到我的说话声同时给我发一个信号让我能够知道他开麦了最后我也返回一个信号说好的我能听到你也开麦了。其实这个过程就与三次握手的过程类似主要是进行一个测试的操作对连麦进行一个测试而不是在打游戏可以说不涉及到核心业务的操作不携带业务数据的数据报只是用来“打个招呼”。这里的确认能听到就类似于TCP传输过程中的确认应答的特性能够保证TCP的可靠传输我们的相互回答就对应了TCP传输过程中的ACK标志位设置为1。 2.三次握手的讲解
三次握手就是建立连接的过程其实就是通信双方各自保存对端的信息
具体完成上述过程需要经过三次网络的交互。
这里 SYN代表同步报文而ACK是应答报文。
三次握手的第一次一定是由客户端先发起的谁先发起谁就是客户端。 SYN数据报的一些作用
SYN数据报不携带任何业务数据。在网络通信中SYNSynchronize是TCP三次握手中的第一步用于建立TCP连接。SYN数据报仅包含TCP头部用于在客户端和服务器之间进行连接的初始化。它不携带任何实际的业务数据只包含一些必要的控制信息如源端口、目的端口、序号等。SYN数据报的目的是在发送端和接收端之间同步序号和其他连接参数以确保双方能够正确地建立连接并开始数据传输。一旦建立了连接后续的数据传输将使用带有有效业务数据的数据报。因此SYN数据报本身不携带任何业务数据。
实质上三次握手第二步合并了客户端所发来的信息本来是四次传输但是三次传输能带来更高的效率因此把接收方的回复合并在一起。而我也用一个暗恋对象的例子帮助大家理解这个过程 这真是个悲伤的故事 总结三次握手的时候通信双方让各自对方保存好自己的信息得是两边都把对方的信息保存好连接才算是真正建立完成而上述操作其实就是把第二步的ACK和SYN合并成一个网络数据三次握手相当于投石问路在正式传输业务数据之前先确认一下通信链路是否畅通。相当于TCP可靠传输的一种保证方式但是这只是辅助机制最核心的还是确认应答和超时重传。与此同时TCP三次握手的过程中还需要协商一些必要的参数比如说TCP通信时使用的序号可能序号不是从0或1开始。发送序号还会有一个确认序号这个确认序号和序号之间往往不会差很多因为是一个连接过程如果差的多说明出现了异常。 3.经典面试题
为什么TCP要进行三次握手两次行不行四次行不行
两次不行因为服务器这边对于通信双方的发送能力和接收能力的验证还没有完成。
四次行但是没有必要拆开中间的这次交互虽然不影响TCP的正常功能但是性能会有所损失。
如果在服务器这边见到了大量的CLOSE_WAIT状态说明了什么说明代码大概率有bug了代码很有可能忘记调用socket.close了 或则说socket.close调用的不够及时
4.TCP常见状态
Listen状态
listen是服务器出现的状态当服务器绑定端口成功后就会进入到listen状态。这时候就意味着随时可以有客户端可以过来连接。这里类比接电话的过程就是手机开机了信号还不错随时可以有人打电话过来了。
Established状态
Established:客户端喝服务器都会出现的状态表示建立完成可以随时进行后续的通信了。
CLOSE_WAIT状态
CLOSE_WAIT状态被动一方进入的状态等待代码调用close代码中调用的越及时越看不到这个状态。 5.四次挥手是为了释放资源
FIN结束报文就是finish的缩写。与三次握手不一样的是三次握手一定是客户端第一次发起请求而四次挥手就不一定了有可能是客户端发起也有可能是服务器发起请求。类比来说谈恋爱之前一般男追女分手的时候双方都有可能提出。断开连接是客户端和服务器通信双方删除对方的信息。在实际的代码中客户端可以调用socket.close方法或者客户端进程结束。 6. ACK、SYN、FIN和RST标识位
下面是对ACK、SYN、FIN和RST这些TCP标志的作用的简要总结 ACKAcknowledgment用于确认接收方已经成功接收到数据。ACK标志在数据包中被设置为1时表示该数据包是一个确认数据包用于确认对方发送的数据已经成功接收。 SYNSynchronize用于建立连接的同步标志。当客户端希望与服务器建立连接时它会发送一个带有SYN标志的数据包其中包含自己选择的初始序列号。这样可以告知服务器客户端的初始序列号并请求服务器分配自己的序列号。 FINFinish用于结束连接的标志。当一方希望关闭连接时它会发送一个带有FIN标志的数据包表示它已经完成了数据传输并要求对方确认关闭连接。 RSTReset用于重置连接的标志。当发生某种错误或异常情况时一方可以发送一个带有RST标志的数据包用于中断连接并强制对方重置连接。
这些TCP标志位在TCP协议中起着重要的作用用于控制连接的建立、终止和异常情况处理。它们的正确使用和处理对于建立可靠的连接和确保数据传输的正确性至关重要。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/920403.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!