一、三次握手
在TCP协议中,三次握手是用于建立连接的过程。客户端和服务器同意通过向对方发送某些控制消息来确认彼此的可达性并建立连接。此过程确保双方能够进行通信并在数据传输开始之前建立可靠的连接。
使用四次挥手来关闭连接。当一方决定关闭连接时,将向另一方发送连接关闭请求。对方确认收到后,双方确认已发送完自己的数据,最后终止连接。此过程确保通信结束后双方释放资源并关闭连接。
在现实生活中,握手通常用于问候某人并随后开始对话。网络通信同样使用“握手”来发送问候数据(用于触发某些场景;这些数据不包含业务信息)。
然而,如果A和B想要完成建立连接的过程,则需要进行3次这样的问候数据交换。我们画一张图来表示甲乙双方的三个问候流程。看下面的图片。
一旦完成了上图中的四个“交互”,A和B之间的连接就建立了。你可以在这里看到重要的一点。在上图中,看起来有四个交互,但实际上只有三个。 (因为两者之间的交互被合并了)。如下所示:
为什么需要集成两个中间交互?这样做有什么好处?如果分开发送两个中间交互,那么这两个中间发送的数据必须分开封装。需要封装两次,但是如果将两个交互合并在一起发送,就只需要封装一次,这自然比封装两次要便宜。综上所述,三向握手本质上是四次数据交互,只是将两次中间数据交互合并为一次交互,省去了两次封装和去中心化的过程,降低了成本。
三次握手的意义
要点一:扔石头问路
三次握手也是TCP 确保数据可靠传输的方式。 TCP如果要保证数据传输的可靠性,还可以基于网络传输和网络路径是否畅通来验证传输是否发生。各主机接收能力正常。简单来说,三次握手就是寻求指示。
第2点:消息协商
TCP通信过程中,有很多信息需要协商来确定这些信息是否属于这个连接。为什么这么说?这是因为通过网络发送的信息可能首先被发送。例如,如果有一条消息被延迟,那么它所属的连接已经关闭很长时间了(服务器和客户端已经断开了之前的连接)。这次重新建立了连接。此时,我们可以通过消息信号清楚地识别出该消息属于之前的连接,因此我们可以简单地断开连接。
总而言之,三次握手有两个主要含义。 含义一(扔石头问路):通过扔石头问路,可以检查网络是否有问题,也可以检查传输、通讯是否正常。通讯对方接收能力正常。含义2(消息协商):协商必要的参数,以便客户端和服务器使用相同的参数来发送消息。
二、四次挥手
挥手四次将断开服务器和客户端的连接。连接的唯一概念是每个通信方都在内存中保存了通往双方对等方的信息,如果需要断开连接,则必须及时释放内存中的上述对等方信息。
旁注:这三波必须是客户端向服务器发起的请求。不过,四次挥手不一定是任何人的请求,大多数情况下是客户端主动向服务器发起请求建立连接。
下面是四次挥手
经过上述四个步骤后,连接完全断开,不再使用,通信双方释放内存中存储的对等信息。
3次能完成4波吗?这是不可能的。这里需要明确的是,虽然4浪运动确实可以3次完成,但也有3次无法完成的时候。这意味着切割过程必须分四次完成。主要原因是FIN触发器是由应用程序代码控制的。 FIN 由调用socket.close() 或线程终止触发(与三向握手中的ACK 相比,它不会触发ACK(响应消息))。这是由应用程序代码控制的,而ACK是由内核控制的(收到提示FIN后立即返回ACK)。
如果socket.close()运行缓慢,则意味着客户端和服务器需要一定的时间来关闭连接。这意味着客户端发送FIN数据包后,服务器需要一些时间来确认和响应。 ACK 数据包。在此期间,服务器可能仍然有数据需要发送给客户端,整合这两个步骤并不能保证服务器的数据能够顺利发送给客户端。
因此,四波中间的两个步骤不能合并,以保证数据的成功传输和双方连接状态的同步。其中每一个都代表关闭客户端和服务器之间的连接的过程,确保数据的完整性和可靠性。
如果服务器不关闭会发生什么:
如果服务器从未关闭,TCP状态将处于CLOSE_WAIT状态(调用close方法后,TCP状态将转换为LAST_ACK状态,如上图所示),并会出现以下情况:
情况一:此时与服务器的连接并未关闭,但连接实际上无法使用。
情况二:对socket进行读操作时,即使数据没有读完(即缓冲区中还有数据)(EOF),也成功读取了数据。此时会读取它(对于限制,它返回-1;对于扫描仪,hashNext 将为false)。
情况3:如果对socket进行写操作,此时会直接触发异常。
其他情况:比如代码忘记调用close方法,客户端收不到对方的FIN就会等待,但如果直接等待不到,客户端就会单方面放弃连接,调用对方的FIN。发布。信息资源(当然,理想情况下客户端和服务器端都能够释放对方的信息资源,但如果不能的话,也不影响客户端和服务器端单方面释放对方的信息资源。插件)
三、三次握手四次挥手的丢包问题
如果在3次握手和4次挥手过程中出现丢包,此时也会触发重传机制。也就是说,如果多次重传后仍不成功,则尽可能进行重传。触发重传机制,单方面放弃连接尝试并释放对端的信息资源。
如何自学黑客网络安全
黑客零基础入门学习路线规划
初级黑客
1.网络安全理论知识(2天)
了解行业背景和前景,决定发展方向。
学习有关网络安全的法律法规。
网络安全运营理念。
等保制度介绍、等保法规、流程、规范。 (很重要)
2.渗透测试基础知识(1周)
渗透测试流程、分类及标准
信息收集技术:主动/被动信息收集、Nmap工具、Google Hacking
漏洞扫描、漏洞利用、原理、使用、工具(MSF)、IDS绕过、防病毒侦察
主机攻防训练:MS17-010、MS08-067、MS10-046、MS12-20等。
3.操作系统基础知识(1周)
Windows系统常用功能及命令
Kali Linux系统常用功能及命令
操作系统安全(系统入侵调查/系统加固基础设施)
4.计算机网络基础(1周)
计算机网络基础、协议和体系结构
网络通信原理、OSI模型、数据传输流程
常用协议分析(HTTP、TCP/IP、ARP等)
网络攻击技术和网络安全防御技术
Web漏洞原理及防御:主动/被动攻击、DDOS攻击、CVE漏洞复现
5.数据库基础操作(2天)
数据库基础
SQL语言基础
加强数据库安全
6. 网络渗透(1周)
HTML、CSS 和JavaScript 简介
OWASP前10名
Web漏洞扫描工具
Web入侵工具:Nmap、BurpSuite、SQLMap、其他(Chopper、Miss Scan等)
恭喜。学会了这些,基本上就可以找到渗透测试、Web渗透、安全服务、安全分析等与网络安全相关的工作了。学好标准保护模块,您也可以找到下一份工作。标准保护工程师。薪资范围6,000-15,000
到现在已经过去一个月左右了。你已经成为一个“脚本小子”了。想要进一步探索吗?
如果你想参与网络安全黑客,作者为你准备了一份:282G,全网最全的网络安全资料包。评论区留言即可获取。
7. 脚本编程(初级/中级/高级)
在网络安全领域。编程能力是“脚本小子”与真正黑客之间的关键区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用的工具不能满足实际需求时,往往需要扩展现有工具或者可能需要创建工具或自动化脚本来满足要求。需要特定的编程技能。在分秒必争的CTF比赛中,需要具备一定的编程能力,才能有效地利用自制的脚本工具来实现各种目标。
如果您从基础开始,我们建议您选择一种脚本语言:Python/PHP/Go/Java,设置您的开发环境,然后选择IDE。强烈建议将Sublime 用于PHP 环境和IDE。 · 学习Python编程,学习内容包括:推荐语法、正则、文件、网络、多线程等常用库。请不要阅读所有内容。创建漏洞利用并使用Python 创建一个简单的网络爬虫。 · PHP基础学习语法,熟悉MVC架构,学习PHP框架或Python框架(可选)。 · 了解Bootstrap 或CSS 布局。
8.超级黑客
这部分内容对于没有基础知识的同学来说还是比较遥远的,所以我们就不细说了,附上学习路线。
网络安全工程师企业级学习路线
如果图片太大且被平台压缩导致看不清,请在评论区点赞留言。我一定会回复
视频支持材料国内外网络安全书籍和文档工具
当然,除了支持视频之外,我们还整理了各种文档、书籍、资源工具,并进行了分类。
有些视频教程是我购买的,其他平台上没有。
以上#【计算机网络】TCP原理可靠性机制分析(二)相关内容摘自网络,仅供大家参考。相关信息请参见官方公告。
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/92228.html