2024年最新【计算机网络】TCP原理 可靠性机制分析(二)(1),2024年最新BAT大厂面试总结

本人从事网路安全工作12年,曾在2个大厂工作过,安全服务、售后服务、售前、攻防比赛、安全讲师、销售经理等职位都做过,对这个行业了解比较全面。

最近遍览了各种网络安全类的文章,内容参差不齐,其中不伐有大佬倾力教学,也有各种不良机构浑水摸鱼,在收到几条私信,发现大家对一套完整的系统的网络安全从学习路线到学习资料,甚至是工具有着不小的需求。

最后,我将这部分内容融会贯通成了一套282G的网络安全资料包,所有类目条理清晰,知识点层层递进,需要的小伙伴可以点击下方小卡片领取哦!下面就开始进入正题,如何从一个萌新一步一步进入网络安全行业。

学习路线图

其中最为瞩目也是最为基础的就是网络安全学习路线图,这里我给大家分享一份打磨了3个月,已经更新到4.0版本的网络安全学习路线图。

相比起繁琐的文字,还是生动的视频教程更加适合零基础的同学们学习,这里也是整理了一份与上述学习路线一一对应的网络安全视频教程。

网络安全工具箱

当然,当你入门之后,仅仅是视频教程已经不能满足你的需求了,你肯定需要学习各种工具的使用以及大量的实战项目,这里也分享一份我自己整理的网络安全入门工具以及使用教程和实战。

项目实战

最后就是项目实战,这里带来的是SRC资料&HW资料,毕竟实战是检验真理的唯一标准嘛~

面试题

归根结底,我们的最终目的都是为了就业,所以这份结合了多位朋友的亲身经验打磨的面试题合集你绝对不能错过!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

一、三次握手

在TCP协议中,三次握手是用于建立连接的过程。客户端和服务器通过互相发送特定的控制报文来确认彼此的可达性和同意建立连接。这个过程确保了双方的通信能力,并且在开始数据传输之前建立了可靠的连接。
四次挥手则是用于关闭连接的过程。当一方决定关闭连接时,它会发送一个关闭连接的请求给另一方。对方确认接收后,双方分别关闭自己的数据传输,并最终确认关闭连接。这个过程确保了双方在结束通信后,释放资源并关闭连接。

在现实生活中,握手一般用于和对方打招呼,然后再开启后面的话题。网络通信中也是如此,我们通过“握手”来发送一个打招呼的数据(用于触发某些特定的场景,这些数据并不包含业务信息)。

然而A和B要想完成建立连接的过程,就需要3次这样打招呼的数据交互。我们来画张图来表示A、B双方3次打招呼的过程,请看下图:
在这里插入图片描述
上图中的四次“交互”完毕之后,A和B之间的连接就算是建立好了,注意,重点来了,上图中的交互看起来好像是4次,但实际上只有3次交互(因为中间两次的交互合并在一起了)。如下图:
在这里插入图片描述
中间的两次交互为什么要合并在一起呢,这样做的好处是什么:我们想一下,如果中间的两次交互分开来进行发送的话,那么这两次发送的数据就需要分别来进行封装,这个时候就需要封装两次;但是如果两次交互合并在一起发送的话,此时就只需要封装一次,成本自然是比封装两次低。综上,三次握手本质上是4次数据交互,只不过对中间两次数据交互进行了合并,两次交互合并成一次交互既可以节省了两次封装和分用的过程,也降低了成本,提高了效率
在这里插入图片描述

三次握手的意义

  • 第一点:投石问路

三次握手也是TCP保证数据传输可靠性的一种方式:TCP要想保证数据传输的可靠性,就需要以网络传输、网络路径畅通为前提,还可以验证每个主机的发送能力和接收能力是否正常,简单来说三次握手的意义就是投石问路

  • 第二点:消息协商
    TCP通信过程中,有很多信息需要进行协商,协商这个信息是不是属于本次连接的。为什么这么说呢?是因为网络上传输的信息可能是后发先至的,比如说现在有一个信息迟到了,而此时这个信息所属的连接早就关闭了(服务器与客户端已经断开了上一个连接),此时是一个重新建立的连接,这个时候我们就可以通过消息的信号来明显的识别出这个消息是属于上一个连接的,所以直接将这个连接丢掉即可

综上三次握手主要有两个主要意义:意义1(投石问路):通过投石问路可以验证网络是否发生故障,也可以验证通信双方的发送接受能力是否正常。意义2(消息协商):通过协商必要的参数来使客户端和服务器使用相同的参数进行消息传输。

二、四次挥手

四次挥手即断开服务器和客户端之间的连接。我们只要连接的概念就是通信双方各自在内存中保有通向双方对端的信息,如果我们需要断开连接的话,我们就需要及时释放上面内存中的对端信息。

补充:三次挥手一定是客户端主动向服务器发起的请求;但是四次挥手不一定是谁向谁发起的请求,但绝大多数的情况下都是客户端主动向服务器发起请求建立连接的。

下面是四次挥手
在这里插入图片描述
经过上述的四个步骤之后,连接就彻底断开不再使用了,通信双方会各自释放内存中存储的对端信息。

四次挥手能不能3次来完成呢:这是不可以的,这里我们要明确,有些时候四次挥手确实是可以分为三次来完成的,但是有些时候就不能通过三次即必须通过四次来完成断开连接的任务。最主要的一个原因就是FIN的触发时应用程序的代码来进行控制的:通过调用socket.close()或者线程结束就会触发FIN(对比三次握手中的ACK,ACK(应答报文)并不是通过应用程序的代码来控制的,ACK是通过内核来进行控制的(接收到FIN之后就会立刻返回ACK,是瞬发的))。
如果 socket.close() 执行较慢,也就是客户端和服务器在关闭连接时耗费了一定的时间,即客户端发送FIN包后,服务器需要一定时间才能确认并回复ACK包。在这段时间内,服务器可能还有遗留的数据需要发送给客户端,而合并这两个步骤将无法保证服务器的数据顺利发送给客户端。
因此,为了确保数据的正常传输和保证双方的连接状态同步,四次挥手中间的两个步骤不能合并。它们分别代表了客户端和服务器关闭连接的过程,并且保证了数据的完整性和可靠性。

如果服务器始终不进行close会发生什么:
在这里插入图片描述
如果服务器始终不进行关闭的话,此时TCP的状态就会处于CLOSE_WAIT状态(如上图,调用close方法之后TCP的状态就转化为LAST_ACK状态),此时造成如下情况:
情况1:对于服务器来说此时的连接虽然没有关闭,但是此连接实际上是没办法使用的。
情况2:针对socket进行读操作的话,如果数据还没有读完(即缓冲区还有数据),那么数据依然可以正常读到;如果数据已经读完了的话,此时就会读到EOF(对于字节流来说,返回-1;如果是scanner,hashNext就会为false)。
情况3:针对socket进行写操作的话,此时就会直接触发异常。
其它情况:比如说代码忘记调用close方法了,对于客户端来说收不到对方的FIN此时就会等待,但是如果直接等不到的话,那么客户端就会单方面放弃连接,释放对端信息资源(当然理想状态下,我们希望客户端和服务器双方都能够释放对端信息资源,但是如果做不到的话,此时是不影响客户端或者服务器单方面释放对端信息资源的)

三、三次握手四次挥手的丢包问题

学习路线:

这个方向初期比较容易入门一些,掌握一些基本技术,拿起各种现成的工具就可以开黑了。不过,要想从脚本小子变成黑客大神,这个方向越往后,需要学习和掌握的东西就会越来越多以下是网络渗透需要学习的内容:
在这里插入图片描述

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值