文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

图解 TCP 三次握手:一步步构建网络会话

2024-11-28 16:02

关注

TCP基础认识

让我们一起来探索一下TCP头部的格式吧。其中,用颜色标注的部分是与我们讨论的主题关系比较密切的字段,而其余部分我们就暂时不深入探讨了。

(1) 序列号:在建立连接的过程中,由计算机生成的一个随机数值被用作初始序列号,并通过SYN数据包传递给接收端主机。每当发送数据时,该序列号会根据所发送的数据字节数进行相应的递增。这种方法有助于解决网络传输中可能出现的数据包乱序问题。

(2) 确认应答号:下次预期接收的数据序列号,即为确认应答(ACK)中所指的序列号。当发送端接收到此确认应答后,可以认为该序列号之前的所有数据均已成功传输至接收端。这一机制主要用于解决网络传输过程中可能出现的数据包丢失问题。

(3) 控制位:

TCP连接建立

TCP是一种需要先建立连接才能使用的协议。在开始传输数据之前,双方得通过一个叫做“三次握手”的过程来建立起这个连接。具体怎么握手的步骤可以看下面的图。

1.TCP三次握手过程

一开始,客户端和服务端都处于CLOSED状态。先是服务端主动监听某个端口,处于LISTEN状态。

第一个报文:SYN报文

客户端会随机初始化序号client_isn,将此序号置于TCP 首部的序号字段中,同时把SYN标志位置为1 ,表示SYN 报文。接着把第一个SYN报文发送给服务端,表示向服务端发起连接,该报文不包含应用层数据,之后客户端处于SYN-SENT状态。

第二个报文:SYN+ACK报文

服务端收到客户端的SYN报文后,首先服务端也随机初始化自己的序号server_isn,将此序号填入TCP首部的序号字段中,其次把TCP首部的确认应答号字段填入client_isn+1, 接着把SYN和ACK标志位置为1。最后把该报文发给客户端,该报文也不包含应用层数据,之后服务端处于SYN-RCVD状态。

第三个报文:ACK报文

客户端收到服务端报文后,还要向服务端回应最后一个应答报文,首先该应答报文TCP首部ACK标志位置为1 ,其次确认应答号字段填入server_isn+1 ,最后把报文发送给服务端,这次报文可以携带客户到服务器的数据,之后客户端处于ESTABLISHED状态。

服务器收到客户端的应答报文后,也进入ESTABLISHED状态。

通过ENSP搭建一个简单的实验环境,如下图

为了让大家直观了解三次握手的过程,以下通过Wireshark抓包软件,抓取三次握手的数据包。

三次握手数据包

(1) 第一次握手标志位

从标志位看出,同步位有值,在做请求SYN:Syn同步位为1

第一次握手数据包

(2) 第二次握手标志位

从标志位看出,确认位、同步位有值,在做应答SYN+ACK:Syn同步位为1、Acknowledgment 确认位为1。

第二次握手数据包

(3) 第三次握手标志位

从标志位看出,只有确认位有值,在做再次确认SYN:Acknowledgment确认位为1

第三次握手数据包

常见面试题

1.TCP 建立连接为什么要三次握手而不是两次?

TCP连接需要三次握手,而不是两次,主要是为了保证两边都能顺利通信,而且连接稳定。第一次握手时,客户端告诉服务器想建立连接;第二次握手,服务器回复说它已经准备好接受连接了;第三次握手是客户端再次确认,确保双方都已经准备好发送数据了。如果只有两次握手的话,有时候可能会导致客户端和服务器之间的情况不对等,造成数据丢失或者连接不稳定的问题。所以,通过三次握手,可以确保两边都确认好了,为后面的数据传输做好准备。

2.TCP 建立连接为什么要三次握手而不是四次?

TCP用三次握手而不是四次来建立连接,是因为三次已经足够确认双方状态和同步序列号了。第一次握手是客户端发出请求,第二次握手是服务器回应,第三次握手是客户端再次确认,这样就能可靠地建立起连接。如果改成四次握手,反而会增加不必要的等待时间和资源浪费。三次握手既能保证双方都准备好通信,又能快速有效地完成连接。

3.有一种网络攻击是利用了TCP建立连接机制的漏洞,你了解吗?这个问题怎么解决?

一种利用TCP连接建立过程中潜在安全漏洞的网络攻击手段被称为TCP SYN Flood攻击。此类攻击策略性地利用了TCP三次握手协议的特性,通过向目标服务器发送大量SYN(同步序列编号)请求报文,但故意不响应最终的ACK(确认应答)报文来完成握手过程。这种行为会导致目标服务器上开放大量的半开连接状态,进而消耗其有限的资源,如内存和处理能力,最终使得服务器难以或无法为合法用户提供服务。

解决方案:

来源:攻城狮成长日记内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯