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

相关文章

W外链微信推广短连接怎么做?

制作微信推广链接的难点分析 一、内容创作难度 制作微信推广链接时,首先需要创作有吸引力的内容。这不仅要求内容本身有趣、有价值,还要能够激起人们的分享欲望。对于许多企业和个人来说,尤其是那些缺乏创意和写作能力的人来说,这是制作微信推广链接的一大难点。 二、精准定位难度 微信用户群体庞大,不同用户的需求和兴趣各异。因此,制作推广链接时需要精准定位目标受众,以便更有效地吸引他们点击并分享链接

Java 连接Sql sever 2008

Java 连接Sql sever 2008 /Sql sever 2008 R2 import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class TestJDBC

实例:如何统计当前主机的连接状态和连接数

统计当前主机的连接状态和连接数 在 Linux 中,可使用 ss 命令来查看主机的网络连接状态。以下是统计当前主机连接状态和连接主机数量的具体操作。 1. 统计当前主机的连接状态 使用 ss 命令结合 grep、cut、sort 和 uniq 命令来统计当前主机的 TCP 连接状态。 ss -nta | grep -v '^State' | cut -d " " -f 1 | sort |

【Go】go连接clickhouse使用TCP协议

离开你是傻是对是错 是看破是软弱 这结果是爱是恨或者是什么 如果是种解脱 怎么会还有眷恋在我心窝 那么爱你为什么                      🎵 黄品源/莫文蔚《那么爱你为什么》 package mainimport ("context""fmt""log""time""github.com/ClickHouse/clickhouse-go/v2")func main(

2024.9.8 TCP/IP协议学习笔记

1.所谓的层就是数据交换的深度,电脑点对点就是单层,物理层,加上集线器还是物理层,加上交换机就变成链路层了,有地址表,路由器就到了第三层网络层,每个端口都有一个mac地址 2.A 给 C 发数据包,怎么知道是否要通过路由器转发呢?答案:子网 3.将源 IP 与目的 IP 分别同这个子网掩码进行与运算****,相等则是在一个子网,不相等就是在不同子网 4.A 如何知道,哪个设备是路由器?答案:在 A

图解TCP三次握手|深度解析|为什么是三次

写在前面 这篇文章我们来讲解析 TCP三次握手。 TCP 报文段 传输控制块TCB:存储了每一个连接中的一些重要信息。比如TCP连接表,指向发送和接收缓冲的指针,指向重传队列的指针,当前的发送和接收序列等等。 我们再来看一下TCP报文段的组成结构 TCP 三次握手 过程 假设有一台客户端,B有一台服务器。最初两端的TCP进程都是处于CLOSED关闭状态,客户端A打开链接,服务器端

nginx长连接的问题

转自: http://www.360doc.com/content/12/1108/17/1073512_246644318.shtml

NGINX轻松管理10万长连接 --- 基于2GB内存的CentOS 6.5 x86-64

转自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=190176&id=4234854 一 前言 当管理大量连接时,特别是只有少量活跃连接,NGINX有比较好的CPU和RAM利用率,如今是多终端保持在线的时代,更能让NGINX发挥这个优点。本文做一个简单测试,NGINX在一个普通PC虚拟机上维护100k的HTTP

TL-Tomcat中长连接的底层源码原理实现

长连接:浏览器告诉tomcat不要将请求关掉。  如果不是长连接,tomcat响应后会告诉浏览器把这个连接关掉。    tomcat中有一个缓冲区  如果发送大批量数据后 又不处理  那么会堆积缓冲区 后面的请求会越来越慢。

DBeaver 连接 MySQL 报错 Public Key Retrieval is not allowed

DBeaver 连接 MySQL 报错 Public Key Retrieval is not allowed 文章目录 DBeaver 连接 MySQL 报错 Public Key Retrieval is not allowed问题解决办法 问题 使用 DBeaver 连接 MySQL 数据库的时候, 一直报错下面的错误 Public Key Retrieval is