首页 > 其他分享 >??TCP协议:三次握手、四次挥手,你真的了解吗?

??TCP协议:三次握手、四次挥手,你真的了解吗?

时间:2023-11-12 23:32:09浏览次数:34  
标签:握手 TCP 发送 四次 服务器 连接 客户端

什么是TCP网络分层

image

应⽤层

应用层是网络协议栈中的最顶层,主要负责应用程序之间的通信。其中一种常见的应用层协议是HTTP协议,它定义了应用程序之间如何传递报文。

传输层

传输层是为两台主机之间的应用进程提供端到端的逻辑通信的层级。其中一种常见的传输层协议是TCP协议,它负责可靠的数据传输。

⽹络互连层

网络互连层负责主机之间的通信,它将传输层产生的数据包封装成分组数据包,并通过路由选择将其发送到目标主机。IP协议是网络互连层的主要协议,TCP和UDP协议都使用IP协议作为网络层协议。该层的主要作用是为数据包添加源地址和目标地址,并将数据包传送到目标地址。

⽹络访问层

网络访问层,也称为网络接口层,负责主机连接到物理网络所需的硬件和相关协议。以太网、Wi-Fi和蓝牙工作在这一层。网络访问层提供了主机与物理网络之间的接口。

网络协议栈中的分层结构有许多优点:

  1. 各层独立:分层结构限制了依赖关系的范围,使得各层之间可以使用标准化的接口进行通信。每一层不需要了解上下层的具体工作方式,这样增加或修改一个应用层协议不会对传输层协议造成影响。
  2. 灵活性更好:分层结构使得路由器等网络设备可以只加载较少数量的协议,不需要应用层和传输层的功能。这样可以根据设备的需求选择加载的协议,提高了设备的灵活性。
  3. 易于测试和维护:分层结构提高了可测试性,可以独立地测试特定层的功能。此外,如果某一层有了更好的实现,可以整体替换掉该层,而无需对其他层进行修改,简化了系统的维护工作。
  4. 能促进标准化:分层结构使得每一层的职责清晰明确,便于进行标准化工作。每一层都有自己的规范和接口,使得不同厂商或组织可以遵循相同的标准进行开发,提高了网络设备和应用程序的互操作性。

TCP的三次握手中为什么是三次?为什么不是两次、四次?

image

TCP的三次握手是为了建立可靠的连接,确保通信双方都能够正常发送和接收数据。下面是三次握手的过程:

  1. 第一次握手:客户端向服务器发送一个带有SYN标志的数据包,表示请求建立连接。客户端将随机生成一个初始序列号(ISN)并将其放入SYN字段中。
  2. 第二次握手:服务器接收到客户端的请求后,会发送一个带有SYN和ACK标志的数据包作为响应。服务器将确认序列号(ACK)设置为客户端的ISN加一,并生成自己的初始序列号。
  3. 第三次握手:客户端收到服务器的响应后,会发送一个带有ACK标志的数据包作为确认。客户端将确认序列号设置为服务器的ISN加一。

通过三次握手,双方确认了彼此的收发能力和初始序列号,并建立了可靠的连接。为什么是三次握手而不是两次或四次呢?

如果只有两次握手,那么在某些情况下可能会导致不可靠的连接建立。例如,客户端发送了一个建立连接的请求,但由于网络延迟或其他原因,该请求在传输过程中被延迟到达服务器。服务器此时会误认为客户端要建立连接,于是发送确认响应。然而,客户端并未发送过请求,因此不会回复确认。这样就会导致服务器一直等待客户端的回复,浪费资源。

通过引入第三次握手,可以解决上述问题。在第一次握手时,客户端发出建立连接的请求,服务器接收到后进行响应。但是如果响应丢失了,客户端会再次发送请求,即第二次握手。服务器接收到后再次响应,这样就确保了双方都能正确地建立连接。

至于为什么不是四次握手,主要是因为虽然四次握手也可以实现可靠地同步双方的初始序列号,但由于第二步和第三步可以合并为一步,所以最终演变成了三次握手。而两次握手只能保证一方的初始序列号被对方成功接收,无法保证双方的初始序列号都能被确认接收。因此,三次握手是为了确保TCP连接的稳定性和可靠性而采取的最佳选择。

TCP的四次挥手为什么是四次?为什么不能是三次?

image

TCP的四次挥手是为了结束已建立的连接,确保双方都能正确地关闭连接并释放资源。下面是四次挥手的过程:

  1. 第一次挥手:客户端发送一个带有FIN(结束)标志的数据包,表示自己已经没有数据要发送了,请求关闭连接。
  2. 第二次挥手:服务器接收到客户端的结束请求后,会发送一个带有ACK(确认)标志的数据包作为响应,表示已收到客户端的结束请求。
  3. 第三次挥手:服务器发送一个带有FIN标志的数据包,表示自己也没有数据要发送了,请求关闭连接。
  4. 第四次挥手:客户端接收到服务器的结束请求后,会发送一个带有ACK标志的数据包作为确认,表示已收到服务器的结束请求。

通过四次挥手,双方确认彼此的结束请求,并最终关闭连接。为什么是四次挥手而不是三次?

在关闭连接时,需要确保双方都完成了数据的传输和接收,以防止数据丢失或错误。如果只有三次挥手,可能会导致一些问题。

假设只有三次挥手,当客户端发送结束请求后,服务器收到后会发送确认,表示已收到客户端的结束请求。但是在此过程中,服务器可能还有未发送完的数据,如果直接关闭连接,那么这些数据就会丢失。因此,引入第三次挥手,服务器在发送结束请求前,先发送所有未发送完的数据,并等待客户端的确认。客户端接收到服务器的结束请求后,会确认并处理完未接收的数据,然后发送确认,表示自己已准备好关闭连接。

通过四次挥手,可以确保双方都能正确地结束连接,并处理未发送和未接收的数据,保证数据的完整性和可靠性。因此,关闭连接需要四次挥手。

总结

分层结构具有多个优点。首先,每个层次都是相对独立的,这意味着可以在不影响其他层次的情况下进行修改和更新。其次,分层结构具有更好的灵活性,可以根据需要添加、删除或调整层次。第三,由于各层次之间的明确接口,易于测试和维护。最后,分层结构有助于促进标准化,因为每个层次的功能和接口都可以被规范化和标准化。

TCP协议中的三次握手用于建立可靠的连接。通过三次握手,客户端和服务器可以确认对方的可靠性和可用性,并同意建立连接。而四次挥手的设计则旨在确保连接可以正确关闭。在四次挥手过程中,双方通信结束前,首先向对方发送关闭连接的请求,然后等待对方确认关闭请求,最后确认对方关闭请求并关闭连接。这两个过程是TCP协议中非常重要的部分。

以上只是一篇关于TCP协议的面试文章的一小部分内容。后续将会提供更多有针对性的面试题,以深入探讨TCP协议的相关细节。

标签:握手,TCP,发送,四次,服务器,连接,客户端
From: https://blog.51cto.com/StudiousXiaoYu/8331873

相关文章

  • P1679 神奇的四次方数
    一个数可以被无限次的选,所以是完全背包,然后预处理一下就好啦#include<bits/stdc++.h>usingnamespacestd;constintN=1e5+10;intf[N];intmain(){ memset(f,0x3f,sizeoff); f[0]=0; intn; cin>>n; for(inti=1;i<=20;i++){ intx=i*i*i*i; for(intj=x;j<=n;......
  • 网络协议分析——实验九使用Wireshark分析TCP协议
    网络协议分析——实验九使用Wireshark分析TCP协议文章在线:https://www.cnblogs.com/rabbit-dayi/p/17826075.htmlhttps://type.dayiyi.top/index.php/archives/246/https://blog.dayi.inkhttps://cmd.dayi.ink/mXYpwNZfQXSEJWKHCoYAFg?both实验目的本实验旨在使用Wiresh......
  • 解决:tcpdump -w xxxxx.cap 提示 Permission denied
    出现的如题所示问题。经过多次调试查找资料,找到了一种好用的方法。解决方案1:我们只需进入/tmp所在的目录下,然后执行tcpdump命令即可解决。例如:解决方案2:将文件写入指定目录下,正常是可以利用参数-w将采集的文件写入指定的文件目录下,但是往往会出现如上图所示的错误。这时......
  • docker通过tcp推送镜像
    1,打包2,创建dockerFile文件FROManapsix/alpine-java:8_server-jre_unlimitedMAINTAINERLionLiRUNmkdir-p/hnapg/basedata/logs\/hnapg/basedata/temp\/hnapg/skywalking/agentWORKDIR/hnapg/basedataENVSERVER_PORT=9205EXPOSE${SERVER_PORT}......
  • 一台主机上只能保持最多 65535 个 TCP 连接吗?
    大家好,我是老杨。在知乎上刷到一个问题,叫做“一台主机上只能保持最多65535个TCP连接吗?”关注度极高,想着咱们粉丝也一定有兴趣,就展开聊一聊。对技术感兴趣,是做我们这一行必须要有的品质之一,但对技术有执念,想要一个个学深学透,是优秀的网工才会有的特点。如果你对技术有着无限热情......
  • linux MAC/IPV4/IPV6/网际互连/网关/网桥全面介绍,TCP/IP协议族模型、TCP/IP传输层协
    鱼弦:内容合伙人、新星导师、全栈领域创作新星创作者、51CTO(Top红人+专家博主)、github开源爱好者(go-zero源码二次开发、游戏后端架构https://github.com/Peakchen) Linux是一种自由和开放源代码的类Unix操作系统。它支持多种网络协议,其中包括TCP/IP协议族。在本回答中,我将介绍L......
  • tcpdump必知必会
    tcpdump原理&在tcp协议栈的位置tcpdump用法基于协议、主机、端口过滤使用andor逻辑运算符做复杂的过滤操作tcpdumpflags1.tcpdump原理linux中非常有用的网络工具,运行在用户态。数据包到达网卡,经过数据包过滤器bpf筛选后,拷贝至用户态的tcpdump程序。tcpdump抓包......
  • Error read ECONNRESET at TCP.onStreamRead报错的问题
    背景另一个同事在本地执行npmrunserve后,服务起来后,隔一段时间就会报错。然后我这边拉了代码,然后npmrunserve跑了下,发现也报错了。根本没有隔一段时间,而是直接跑不起来了。具体如下截图所示: 分析过程看报错信息,貌似是说socket服务监听和发送消息的过程出现问题了。然......
  • 第二十四次打靶
    靶机介绍1)靶机地址:https://download.vulnhub.com/tomato/Tomato.ova2)靶机难度:低3)打靶目标:取得root权限+Flag4)涉及攻击方法:主机发现、端口扫描、信息收集、路径爬取、源码分析、文件包含、写入日志、内核漏洞枚举、本地提权5)靶机简介:本次的靶机是一个低难度的靶机,靶机......
  • 一台服务器最大能支持多少条 TCP 连接(转)
    一、一台服务器最大能打开的文件数 1、限制参数我们知道在Linux中一切皆文件,那么一台服务器最大能打开多少个文件呢?Linux上能打开的最大文件数量受三个参数影响,分别是:fs.file-max(系统级别参数):该参数描述了整个系统可以打开的最大文件数量。但是root用户不会受该参数限制(比......