TCP连接延伸7小问

2024-01-12 14:08
文章标签 连接 tcp 延伸 小问

本文主要是介绍TCP连接延伸7小问,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.TCP三次握手和四次挥手

三次握手(Three-way Handshake)主要作用就是为了确认双方的接收能力和发送能力正常。其实就是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号,交换TCP窗口大小信息,为后面的可靠性传送做准备。
刚开始客户端处于 Closed 的状态,服务端处于 Listen 状态。
在这里插入图片描述
在这里插入图片描述

Q1:为什么两次握手不可以?(A客户端,B服务器)

为了防止已经失效的连接请求报文段突然又传送到了 B,因而产生错误。比如:A 发出的第一个连接请求报文段在网路结点上延误到之后的连接释放以后的某个时间段才到达 B。 B 收到此失效的请求报文段后,就误认为 A 又发出一次新的连接请求。如果不进行第三次握手,B 发出确认后就进入了新的运输连接状态,一直等待 A 发来数据。

Q2:接收端收到 客户端的 SYN 后,为什么还要传回 SYN?

接收端传回发送端所发送的 SYN 是告诉客户端接收到的信息确实是客户端所发送的信号了。
SYN 是 TCP / IP 建立连接时使用的握手信号。在客户机和服务器之间建立正常的 TCP 网络连接时,客户机首先发出一个

Q3:传了 SYN,为什么还要传 ACK?

传了 SYN,证明发送方到接收方的通道没有问题,但是接收方到发送方的通道还需要 ACK 信号来进行验证。

Q4:为什么 TIME-WAIT 状态必须等待 2MSL 的时间呢?(MSL:最长报文段寿命)

TCP释放连接时为什么time_wait状态必须等待2MSL时间
1.如果 接收端A 在 TIME-WAIT 状态不等待一段时间,那么就无法收到 B 重传的 FIN + ACK 报文段,因而也不会再发送一次确认报文段,这样,B 就无法按照正常步骤进入 CLOSED 状态。
2. 防止已失效的连接请求报文段出现在本连接中。A 在发送完最后一个 ACK 报文段后,再经过时间 2MSL,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失。下一个连接中不会出现旧的连接请求报文段。

Q5:为什么第二次跟第三次不能合并, 第二次和第三次之间的等待是什么?

当服务器执行第二次挥手之后, 客户端不会再向服务端请求任何数据, 但是服务端可能还正在给客户端发送数上一次请求的资源,所以服务端会等到把之前未传输完的数据传输完毕之后再发送关闭请求。

Q6:TCP 协议是如何保证可靠传输的?
  1. 数据包校验:检测数据在传输过程中若出错,则丢弃报文段并且不给响应, TCP 发送数据端超时后会重发数据;
  2. 对失序数据包重排序:既然 IP 数据报的到达可能会失序,TCP 报文段作为 IP 数据报来传输,到达也可能会失序。TCP 将失序重排,然后才交给应用层;
  3. 能够丢弃重复数据;
  4. 应答机制:收到发自 TCP 连接另一端的数据,将发送一个确认标志ACK。
  5. 超时重发:当 TCP 发出一个段后,就会启动一个定时器,设定时间内没有收到ACK将重发这个报文段;
  6. 流量控制:TCP 连接的双方都有固定大小的缓冲空间。不允许对方发送超过自己缓冲区容量的数据,以防较快主机致使较慢主机的缓冲区溢出。TCP 使用的流量控制协议是可变大小的滑动窗口协议。
Q7:Tcp握手成功后,如果一方宕机,没有主动请求关闭,连接会一直保存么?

当TCP连接发生一些物理上的意外情况时,例如网线断开,linux上的TCP实现会依然认为该连接有效,而windows则会在一定时间后返回错误信息。可以通过设置SO_KEEPALIVE选项来解决,不过不知道这个选项是否对于所有平台都有效。
连接断开过程-----四次挥手

这篇关于TCP连接延伸7小问的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/598118

相关文章

pycharm远程连接服务器运行pytorch的过程详解

《pycharm远程连接服务器运行pytorch的过程详解》:本文主要介绍在Linux环境下使用Anaconda管理不同版本的Python环境,并通过PyCharm远程连接服务器来运行PyTorc... 目录linux部署pytorch背景介绍Anaconda安装Linux安装pytorch虚拟环境安装cu

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

SQL 中多表查询的常见连接方式详解

《SQL中多表查询的常见连接方式详解》本文介绍SQL中多表查询的常见连接方式,包括内连接(INNERJOIN)、左连接(LEFTJOIN)、右连接(RIGHTJOIN)、全外连接(FULLOUTER... 目录一、连接类型图表(ASCII 形式)二、前置代码(创建示例表)三、连接方式代码示例1. 内连接(I

java如何通过Kerberos认证方式连接hive

《java如何通过Kerberos认证方式连接hive》该文主要介绍了如何在数据源管理功能中适配不同数据源(如MySQL、PostgreSQL和Hive),特别是如何在SpringBoot3框架下通过... 目录Java实现Kerberos认证主要方法依赖示例续期连接hive遇到的问题分析解决方式扩展思考总

Python中连接不同数据库的方法总结

《Python中连接不同数据库的方法总结》在数据驱动的现代应用开发中,Python凭借其丰富的库和强大的生态系统,成为连接各种数据库的理想编程语言,下面我们就来看看如何使用Python实现连接常用的几... 目录一、连接mysql数据库二、连接PostgreSQL数据库三、连接SQLite数据库四、连接Mo

oracle如何连接登陆SYS账号

《oracle如何连接登陆SYS账号》在Navicat12中连接Oracle11g的SYS用户时,如果设置了新密码但连接失败,可能是因为需要以SYSDBA或SYSOPER角色连接,解决方法是确保在连接... 目录oracle连接登陆NmOtMSYS账号工具问题解决SYS用户总结oracle连接登陆SYS账号

VScode连接远程Linux服务器环境配置图文教程

《VScode连接远程Linux服务器环境配置图文教程》:本文主要介绍如何安装和配置VSCode,包括安装步骤、环境配置(如汉化包、远程SSH连接)、语言包安装(如C/C++插件)等,文中给出了详... 目录一、安装vscode二、环境配置1.中文汉化包2.安装remote-ssh,用于远程连接2.1安装2

关于rpc长连接与短连接的思考记录

《关于rpc长连接与短连接的思考记录》文章总结了RPC项目中长连接和短连接的处理方式,包括RPC和HTTP的长连接与短连接的区别、TCP的保活机制、客户端与服务器的连接模式及其利弊分析,文章强调了在实... 目录rpc项目中的长连接与短连接的思考什么是rpc项目中的长连接和短连接与tcp和http的长连接短

Xshell远程连接失败以及解决方案

《Xshell远程连接失败以及解决方案》本文介绍了在Windows11家庭版和CentOS系统中解决Xshell无法连接远程服务器问题的步骤,在Windows11家庭版中,需要通过设置添加SSH功能并... 目录一.问题描述二.原因分析及解决办法2.1添加ssh功能2.2 在Windows中开启ssh服务2

Redis连接失败:客户端IP不在白名单中的问题分析与解决方案

《Redis连接失败:客户端IP不在白名单中的问题分析与解决方案》在现代分布式系统中,Redis作为一种高性能的内存数据库,被广泛应用于缓存、消息队列、会话存储等场景,然而,在实际使用过程中,我们可能... 目录一、问题背景二、错误分析1. 错误信息解读2. 根本原因三、解决方案1. 将客户端IP添加到Re