全国服务热线:

15861139266

TCP通信灵魂二十问【下】_苏州机器视觉培训_苏州上位机培训_苏州工业机器人培训
发布时间:2023-05-12 10:06:07 点击次数:1298

TCP通信灵魂二十问【下】

11. 四次挥手中的TIME_WAIT状态?

首先要明确一点:主动关闭连接的一方,才会有TIME_WAIT状态。


之所以需要TIME_WAIT状态,主要是两个原因:


防止相同的端口重新连接时,服务器收到的是停留在网络间的数据包

保证被动关闭连接的一方能被正确的关闭,即保证最后的 ACK 能让被动关闭方接收,从而帮助其正常关闭

12. 为什么TIME_WAIT时间为2MSL?

MSL 是 Maximum Segment Lifetime,报文最大生存时间,它是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。比如如果被动关闭方没有收到断开连接的最后的 ACK 报文,就会触发超时重发 FIN 报文,另一方接收到 FIN 后,会重发 ACK 给被动关闭方,一来一去正好 2 个 MSL。

2MSL 的时间是从客户端接收到 FIN 后发送 ACK 开始计时的。如果在 TIME-WAIT 时间内,因为客户端的 ACK 没有传输到服务端,客户端又接收到了服务端重发的 FIN 报文,那么 2MSL 时间将重新计时。在Linux系统中,2MSL默认值是60秒。


13. 什么是TCP的保活机制?

定义一个时间段,在这个时间段内,如果没有任何连接相关的活动,TCP保活机制会开始作用,每隔一个时间间隔,发送一个探测报文,该探测报文包含的数据非常少,如果连续几个探测报文都没有得到响应,则认为当前的TCP 连接已经死亡,系统内核将错误信息通知给上层应用程序。


14. 已经建立连接,客户端故障怎么办?

这种情况就会触发TCP的保活机制,对应的参数包括保活时间、保活探测的次数、保活探测的时间间隔,其中保活时间默认为7200秒,保活探测次数为9,保活探测时间间隔为75秒。


也就意味着,如果客户端突然故障,会经过7200+75*9=7875秒即2小时11分15后,服务器才会判断该连接失效,以上参数可以手动设置。


15. TCP/IP协议与Socket之间是什么关系?

网络有一段关于Socket和TCP/IP协议关系的说法比较容易理解:


TCP/IP只是一个协议栈,就像操作系统的运行机制一样,必须要具体实现,同时还要提供对外的操作接口。这个就像操作系统会提供标准的编程接口,比如Win32编程接口一样,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口。


所以,Socket跟TCP/IP并没有必然的联系,Socket编程接口在设计的时候,就希望能适应其他的网络协议。Socket的出现只是可以更方便的使用TCP/IP协议栈而已,其对TCP/IP进行了抽象,形成了一些最基本的函数接口,比如Send,Listen等。


16. 什么是SYN攻击?

我们都知道 TCP 连接建立是需要三次握手,假设攻击者短时间伪造不同 IP 地址的 SYN 报文,服务端每接收到一个SVN 报文,就进入SYN_RCVD 状态,但服务端发送出去的 ACK + SYN 报文,无法得到未知IP 主机的 ACK 应答,久而久之就会占满服务端的 SYN 接收队列(未连接队列),使得服务器不能为正常用户服务。


17. 如何避免SYN攻击?

避免SYN攻击的两个方案:


通过修改内核参数,控制队列大小,并确定好当队列满之后应该如何处理,比如队列满之后,对新的SYN直接回复RST,丢弃连接。

当SYN队列满了之后,后续收到的SYN,不直接进入SYN队列,而是先计算Cookie值,再发送,后续可以验证ACK包的合法性

18. TCP服务器Socket编程流程

服务端初始化 Socket,得到文件描述符

服务端调用 Bind,将绑定在 IP 地址和端口

服务端调用 Listen,进行监听

服务端调用 Accept,建立客户端连接

通过Send向客户端发送消息

通过Receive接收客户端消息

19. TCP客户端Socket编程?

客户端初始化 Socket,得到文件描述符

客户端调用Connect,连接服务器

连接成功调用Send向客户端发送消息

通过Receive接收客户端消息

20. Listen中的backlog参数什么意义?

Linux内核中会维护两个队列:


未完成连接队列(SYN 队列):接收到一个 SYN 建立连接请求,处于 SYN_RCVD 状态; 已完成连接队列(Accpet 队列):已完成 TCP 三次握手过程,处于 ESTABLISHED 状态;


在内核 2.2 之后,backlog 变成 Accept 队列,也就是已完成连接建立的队列长度,所以现在通常认为 backlog 是 Accept 队列。







立即咨询
  • 品质服务

    服务贴心周到

  • 快速响应

    全天24小时随时沟通

  • 专业服务

    授权率高,保密性强

  • 完善售后服务

    快速响应需求,及时性服务

直播课程
软件开发基础课程
上位机软件开发课
机器视觉软件开发课
专题课
联系方式
电话:15861139266
邮箱:75607802@qq.com
地址:苏州吴中区木渎镇尧峰路69号
关注我们

版权所有:大林机器视觉培训苏州办事处所有 备案号:苏ICP备14016686号-6

技术支持: 新易维软件