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

相关文章

java连接opcua的常见问题及解决方法

《java连接opcua的常见问题及解决方法》本文将使用EclipseMilo作为示例库,演示如何在Java中使用匿名、用户名密码以及证书加密三种方式连接到OPCUA服务器,若需要使用其他SDK,原理... 目录一、前言二、准备工作三、匿名方式连接3.1 匿名方式简介3.2 示例代码四、用户名密码方式连接4

MySQL 表的内外连接案例详解

《MySQL表的内外连接案例详解》本文给大家介绍MySQL表的内外连接,结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录表的内外连接(重点)内连接外连接表的内外连接(重点)内连接内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我

Apache 高级配置实战之从连接保持到日志分析的完整指南

《Apache高级配置实战之从连接保持到日志分析的完整指南》本文带你从连接保持优化开始,一路走到访问控制和日志管理,最后用AWStats来分析网站数据,对Apache配置日志分析相关知识感兴趣的朋友... 目录Apache 高级配置实战:从连接保持到日志分析的完整指南前言 一、Apache 连接保持 - 性

电脑蓝牙连不上怎么办? 5 招教你轻松修复Mac蓝牙连接问题的技巧

《电脑蓝牙连不上怎么办?5招教你轻松修复Mac蓝牙连接问题的技巧》蓝牙连接问题是一些Mac用户经常遇到的常见问题之一,在本文章中,我们将提供一些有用的提示和技巧,帮助您解决可能出现的蓝牙连接问... 蓝牙作为一种流行的无线技术,已经成为我们连接各种设备的重要工具。在 MAC 上,你可以根据自己的需求,轻松地

宝塔安装的MySQL无法连接的情况及解决方案

《宝塔安装的MySQL无法连接的情况及解决方案》宝塔面板是一款流行的服务器管理工具,其中集成的MySQL数据库有时会出现连接问题,本文详细介绍两种最常见的MySQL连接错误:“1130-Hostisn... 目录一、错误 1130:Host ‘xxx.xxx.xxx.xxx’ is not allowed

SpringBoot快速搭建TCP服务端和客户端全过程

《SpringBoot快速搭建TCP服务端和客户端全过程》:本文主要介绍SpringBoot快速搭建TCP服务端和客户端全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录TCPServerTCPClient总结由于工作需要,研究了SpringBoot搭建TCP通信的过程

MySQL 多表连接操作方法(INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN)

《MySQL多表连接操作方法(INNERJOIN、LEFTJOIN、RIGHTJOIN、FULLOUTERJOIN)》多表连接是一种将两个或多个表中的数据组合在一起的SQL操作,通过连接,... 目录一、 什么是多表连接?二、 mysql 支持的连接类型三、 多表连接的语法四、实战示例 数据准备五、连接的性

MySQL中的分组和多表连接详解

《MySQL中的分组和多表连接详解》:本文主要介绍MySQL中的分组和多表连接的相关操作,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录mysql中的分组和多表连接一、MySQL的分组(group javascriptby )二、多表连接(表连接会产生大量的数据垃圾)MySQL中的

MySQL中的交叉连接、自然连接和内连接查询详解

《MySQL中的交叉连接、自然连接和内连接查询详解》:本文主要介绍MySQL中的交叉连接、自然连接和内连接查询,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、引入二、交php叉连接(cross join)三、自然连接(naturalandroid join)四

python连接本地SQL server详细图文教程

《python连接本地SQLserver详细图文教程》在数据分析领域,经常需要从数据库中获取数据进行分析和处理,下面:本文主要介绍python连接本地SQLserver的相关资料,文中通过代码... 目录一.设置本地账号1.新建用户2.开启双重验证3,开启TCP/IP本地服务二js.python连接实例1.