首页 > 其他分享 >TCP协议

TCP协议

时间:2023-11-03 10:47:30浏览次数:26  
标签:协议 SYN TCP cookie 服务器 序列号 连接

引言

在之前的内容中,我们已经详细讲解了TCP面试中最常见的问题,如三次握手和四次挥手等。而今天,我们将继续深入探讨TCP协议的其他方面,比如序列号和TCP Fast Open(TFO)等重要细节问题。这些内容将为你在面试中提供更全面的知识储备。

为什么 SYN/FIN 不包含数据却要消耗⼀个序列号?

SYN/FIN 是 TCP 协议中的标志位,用于建立和关闭连接。它们不包含数据,但需要消耗一个序列号的原因是为了保持 TCP 连接的可靠性。

在 TCP 连接建立时,客户端发送 SYN 包给服务器端,服务器端接收到后发送 SYN+ACK 包给客户端,最后客户端发送 ACK 包确认连接建立。这个过程中,每个包都需要有一个序列号来标识数据的顺序和确认接收。

类似地,在 TCP 连接关闭时,FIN 包被用来表示一端希望关闭连接。发送 FIN 包的一端会等待对方发送 ACK 包来确认关闭,然后再发送 ACK 包进行最终确认。同样,这个过程中的每个包都需要有一个序列号。

通过使用序列号,TCP 协议可以保证数据的可靠传输,确保数据按照正确的顺序到达目标。因此,即使 SYN/FIN 包本身不携带数据,它们仍然需要消耗一个序列号来维护连接的可靠性。

image

如果在建立或关闭TCP连接时不发送序列号,将会导致连接的可靠性和数据的顺序无法保证。

在建立连接时,发送方的SYN包没有序列号,接收方无法准确地判断数据包的顺序。这可能导致接收方无法正确地响应SYN+ACK包,从而导致连接无法建立。

在关闭连接时,如果不发送序列号,接收方无法准确地确认关闭请求,并且无法确定关闭顺序。这可能导致连接无法成功关闭,或者导致数据丢失或混乱。

什么是半连接队列?什么是SYN Flood攻击?

半连接队列(Half-open connection queue)是指TCP服务器在处理连接请求时,当收到客户端发送的SYN包(同步包)时,会将该连接请求添加到半连接队列中。半连接队列中保存了已收到SYN包但还未完成三次握手的连接请求。

SYN Flood攻击是一种网络攻击方式,它利用TCP协议的漏洞,大量地向目标服务器发送伪造的SYN包,使服务器的半连接队列被耗尽。当服务器的半连接队列被耗尽后,正常的连接请求无法得到处理,导致服务不可用。

image

在SYN Flood攻击中,攻击者发送大量的伪造源IP地址的SYN包给目标服务器,但攻击者并不真正完成三次握手建立连接,而是让服务器一直等待,从而消耗服务器的资源。由于服务器需要为每个未完成的连接请求分配一些资源,当半连接队列被耗尽时,服务器将无法处理正常的连接请求,导致服务崩溃或变得不可用。

为了防止SYN Flood攻击,服务器可以采取一些防御措施,例如使用防火墙过滤掉伪造源IP的SYN包、增加半连接队列的大小、限制每个IP地址的连接请求数量等。这些措施可以帮助服务器抵御SYN Flood攻击并保持正常的服务运行。

说说TCP快速打开(TFO)的原理

在TCP快速打开(TFO)中,服务器端在收到客户端的初始连接请求(SYN包)时,会生成一个cookie,并将该cookie携带在返回给客户端的SYN-ACK包中。客户端收到SYN-ACK包后,会将服务器返回的cookie缓存在本地。

以下是第一次请求获取cookie值的全过程图:

image

在后续的连接请求中,客户端可以利用缓存的cookie直接发送给服务器,从而减少握手次数。以下是使用缓存的cookie值开始快速传输数据的流程图示例:

image

TCP Fast Open的优势

image

快速打开(TFO)在TCP协议中的一个最显著的优点是可以利用握手去除一个往返 RTT。当服务器收到带有TFO cookie的连接请求时,可以直接使用该cookie进行验证,而无需进行完整的三次握手过程。这样可以极大地减少了连接建立的时间,提高了网络性能和响应速度。

此外,TFO还可以有效地防止SYN-Flood攻击等恶意行为。通过使用TFO技术,服务器可以在接收到带有TFO cookie的连接请求时,直接验证cookie,并将请求放入半连接队列,而不会消耗服务器资源进行完整的三次握手。这样可以有效地减轻服务器的负载,并且只有合法的连接请求才能通过验证,从而防止了SYN-Flood攻击等恶意攻击。

TCP报文中的时间戳有什么作用?

image

TCP Timestamps Option是由四个主要部分构成的。这四个部分分别是类别(kind)、长度(Length)、发送方时间戳(TS value)和回显时间戳(TS Echo Reply)。其中,发送方时间戳和回显时间戳被认为是该选项中最重要的两个字段。

image

TCP 的时间戳主要解决两大问题

计算往返时延 RTT(Round-Trip Time)

image

在启用Timestamps选项之后,由于ACK包中包含了TSval和TSecr,因此无论是正常的确认包还是重传的确认包,都可以通过这两个值来计算出往返时间(RTT)。这样一来,我们可以更准确地估算网络的延迟情况。

防止序列号的回绕问题

TCP的序列号使用32位来表示,因此在传输了232字节的数据之后,序列号会发生溢出并重新开始计数。为了解决这个问题,TCP引入了窗口缩放选项,可以将窗口大小最大扩展到1GB(230),这样在高速网络中,序列号可以在很短的时间内被重复使用,从而更好地支持高速数据传输。

image

假设我们发送了6个数据包,每个数据包的大小为1GB。在这个过程中,由于序列号的回绕,第5个包的序列号与前面要发送的包序列号完全相同。同时,第2个包由于某些原因延迟导致需要进行重传,直到时间t7才到达。如果没有一些措施进行区分,这个阻塞数据包会导致数据的紊乱。

然而,由于存在Timestamps,我们可以通过TSval和TSecr来区分阻塞数据包与第6个包。通过比较这两个值,我们可以确定数据包的先后顺序,从而避免数据的混乱。因此,Timestamps的存在对于解决这种情况非常重要。

总结

通过本文的讨论,我们对TCP协议的一些重要细节有了更深入的了解。首先,我们了解到为什么SYN/FIN包需要消耗一个序列号,这是为了保证TCP连接的可靠性和数据的顺序。其次,我们探讨了半连接队列和SYN Flood攻击,了解了它们在TCP连接建立和安全性方面的作用。然后,我们学习了TCP快速打开(TFO)的原理和优势,它可以减少连接建立时间,并有效防止恶意攻击。最后,我们了解了TCP报文中的时间戳的作用,它可以帮助计算往返时延和解决序列号回绕问题。通过对这些细节的了解,我们可以更好地理解和应用TCP协议,提高网络性能和安全性。以上只是一篇关于TCP协议的面试文章的一小部分内容。后续将会提供更多有针对性的面试题,以深入探讨TCP协议的相关细节。

标签:协议,SYN,TCP,cookie,服务器,序列号,连接
From: https://www.cnblogs.com/blizzard8204/p/17807065.html

相关文章

  • 大华主动上报协议:架构、特点和优点
    大华主动上报协议的技术框架主要包括以下几个部分:数据采集层:这一层主要负责采集各种数据,包括但不限于视频、音频、传感器数据等。大华主动上报协议可以与各种不同类型的设备进行集成,从各种设备中采集需要的数据。数据处理层:这一层主要负责对采集到的数据进行处理,包括但不限于数......
  • 你以为你了解TCP协议?这些你可能不知道的细节才是关键!
    引言在之前的内容中,我们已经详细讲解了TCP面试中最常见的问题,如三次握手和四次挥手等。而今天,我们将继续深入探讨TCP协议的其他方面,比如序列号和TCPFastOpen(TFO)等重要细节问题。这些内容将为你在面试中提供更全面的知识储备。为什么SYN/FIN不包含数据却要消耗⼀个序列号?SYN......
  • EtherNET/IP转Mpdbus Tcp协议网关协议
    EtherNET/IP转MpdbusTcp协议网关协议 JM-EIP-TCP是一款ETHERNET/IP从站功能的通讯网关。该产品主要功能是将各种MODBUS-TCP设备接入到ETHERNET/IP网络中。本网关连接到ETHERNET/IP总线中做为从站使用,连接到MODBUS-TCP总线中做为主站(客户端)或从站(服......
  • 海康ISUP协议二次开发
    一。功能支持:1.设备注册。支持接入秘钥2.实时预览。支持H264/H265视频,不支持音频。3.录像回放。支持H264/H265视频,不支持音频。同一个通道只支持一路回放。4.云台控制。5.在线状态查询。二。技术架构: 三。关键代码: 四。项目地址: ......
  • 7. 从零开始编写一个类nginx工具, HTTP及TCP内网穿透原理及运行篇
    wmproxywmproxy是由Rust编写,已实现http/https代理,socks5代理,反向代理,静态文件服务器,内网穿透,配置热更新等,后续将实现websocket代理等,同时会将实现过程分享出来,感兴趣的可以一起造个轮子法项目++wmproxy++gite:https://gitee.com/tickbh/wmproxygithub:https://github.com/tic......
  • WSD、USB 和 TCP/IP 端口是连接和使用打印机的三种不同方法
    WSD、USB和TCP/IP端口是连接和使用打印机的三种不同方法,各自的特点如下:WSD(WebServicesonDevices)端口:WSD是一种基于网络的打印服务,允许计算机和打印机在局域网中通过网络发现彼此。它使用的是一种标准的网络协议,支持动态设备发现和配置。通常用于无线和有线的网络打......
  • 使用LiveNVR将局域网Onvif/RTSP/SDK等协议转GB28181级联输出或GB35114级联输出,上级平
    1、第一步:抓包工具准备1.1、Linux使用tcpdump进行抓包,如果系统无此命令,自行安装1.2、windows下载安装wireshark进行抓包2、第二步:找到上级平台ip在基础配置里面GB28181级联配置中SIP服务IP3、第三步:执行命令抓设备出口ip3.1Linux在Linux系统中切换到root用户,执行下......
  • 新品发布:信驰达TI CC1352P7双频段多协议模块RF-TI1352P2,支持Matter over Thread
    近日,领先的无线物联网通信模块厂商深圳市信驰达科技推出了基于TICC1352P7为核心的双频段(Sub-1GHz和2.4GHz)多协议无线模块RF-TI1352P2。RF-TI1352P2模块除了集成负责应用逻辑的高性能48MHz ARMCortex-M4F主处理器与一个专用于负责射频核心的ARMCortex-M0处理器之外,还......
  • 一台服务器最大能支持多少条 TCP 连接?
    一台服务器最大能打开的文件数调整服务器能打开的最大文件数示例一台服务器最大能支持多少连接一台客户端机器最多能发起多少条连接其他相关实际问题之前有一位读者向我诉苦,有次面试,好不容易(今年行情大家都懂的)熬到到技术终面,谁知道面试官突然放个大招问他:一台服务器最大......
  • TCP三次握手,四次挥手
    #TCP三次握手,四次挥手首先,讲一讲tcp的特点。tcp市一种可靠的传输层协议。它的特点如下:①面向连接TCP是面向客户端和服务器端连接的通讯协议,即面向B/S的通讯协议。数据通信之前,必须要有一个连接通道建立。②可靠性是指无论网络环境多差,TCP都可以保证信息一定能够传递到接......