首页 > 其他分享 >ETH-TCP协议与常见问题分析

ETH-TCP协议与常见问题分析

时间:2023-06-29 12:23:19浏览次数:48  
标签:常见问题 重传 报文 TCP 连接 服务器 ETH 序列号

Source Port:源端口,标识发送方的应用进程

Destination Port:目的端口,标识接收方的应用进程

Sequence Number:序列号,用于标识从发送端发出的不同的TCP数据段的序号。数据段在网络中传输时,它们的顺序可能会发生变化;接收端依据此序列号,便可按照正确的顺序重组数据。保证数据传输的有序性

Acknowledge Number:确认号:对收到的数据进行确认,确认序列号为成功收到的数据序列号加1。

Header length:表示头部占32bit字的数目,它能表达的TCP头部最大长度为60字节

FLAG字段(8位)

ACK:确认号标志,置1表示确认号有效,表示收到端对端的特定数据

RST:复位标志,

1、置1表示拒绝错误和非法的数据包,如果接收到RST位时候,通常发生了某些错误

2、复位错误的连接也用来拒绝非法数据和请求。

3、RST可能被接收方或者中间设备置位

RST置位的原因

1、服务器端口没有打开(listen)

2、服务器响应太慢,用户终止连接

3、网络攻击

4、其他

所以,正常关闭TCP连接的方法有两种:四次挥手和RST置位的报文

SYN:同步序号标志,置1表示同步序号,用来建立连接

FIN:结束标志,置1表示连接将被断开,用于拆除连接

URG:紧急标志,置1的会先发送

window:窗口,表示接收端期望通过单次确认而收到的数据的大小。由于该字段为16位,所以窗口大小的最大值为65535字节,该机制通常用来进行流量控制。

checksum:校验整个TCP报文段,包括TCP头部和TCP数据。该值由发送端计算和记录并由接收端进行验证。

(1)客户A(通常也称为客户端)发送一个标识了SYN的数据段,表示期望与服务器B建立连接,此数据段的序列号(seq)为x。

(2)服务器B回复标识了SYN+ACK(回应客户A的SYN报文,并发送SYN请求建立连接报文)的数据段,此数据段的序列号(seq)为y,确认序列号为客户A的序列号加1(x+1),以此作为对客户A的SYN报文的确认。

(3)客户A发送一个标识了ACK的数据段,此数据段的序列号(seq)为x+1,确认序列号为服务器B的序列号加1(y+1),以此作为对服务器B的SYN报文的确认。

即过程为:客户A发送建立连接请求,然后服务器B回应并发送服务器B建立连接请求,最后客户A进行回应,建立完成。

TCP的流量控制

(1)TCP滑动窗口技术通过动态改变窗口大小来实现对端到端设备之间的数据传输进行流量控制。

(2)主机A和服务器A之间通过滑动窗口来实现流量控制。如图只考虑主机A发送数据给服务器A时,服务器A通过滑动窗口进行流量控制。

主机A向服务器发送4个长度为1024字节的数据段,其中主机的窗口大小为4096个字节。

服务器A收到第3个数据段后,缓存区满,第4个数据段被丢弃。

服务器以ACK 3073响应,窗口大小调整为3072,表明服务器的缓冲区只能处理3072个字节的数据段。于是主机A改变其发送速率,发送窗口大小为3072的数据段。

TCP关闭连接的过程

TCP支持全双工模式传输数据,同一时刻两个方向都可以进行数据的传输。在传输数据之前,TCP通过三次握手建立的实际上是两个方向的连接,因此在传输完毕后,两个方向的连接必须都关闭。TCP连接的建立是一个三次握手的过程,而TCP连接的终止则要经过四次握手。

如图所示:

(1)客户A想终止连接,于是发送一个标识了FIN,ACK的数据段,序列号为u。

(2)服务器B回应一个标识了ACK的数据段,序列号为v,确认序号为u+1,作为对客户A的FIN报文的确认。

(3)服务器B想终止连接,于是向客户A发送一个标识了FIN,ACK的数据段,序列号为w,确认序列号为u+1。

(4)客户A回应一个标识了ACK的数据段,序列号为u+1,确认序号为w+1,作为对服务器B的FIN报文的确认。

以上四次交互便完成了两个方向连接的关闭。

TCP的状态总结

TCP抓包常见问题分析

1、TCP Previous segment not captured

在TCP传输过程中,同一台主机发出的数据段应该是连续的,即后一个包的Seq号等于前一个包的Seq + Len。如果Wireshark发现后一个包的Seq号大于前一个包的Seq+Len,就知道中间缺失了一段数据。如图所示例:147154之后应该是148514,之后是149874、151234。此时未收到149874,提示TCP Previous segment not captured。

前一个分片丢失,有可能是网络中确实丢失了,或者晚到了,也有可能是wireshark本身并没有抓到

2、TCP Out-Of-Order

TCP Out-Of-Order指的是TCP发送端传输过程中报文乱序了。Wireshark判断TCP out-of-order是基于TCP包中SEQ number并非期望收到的下一个SEQ number,则判断为out-of-order。因此,出现TCP out-of-order时,很大可能是TCP存在乱序或丢包,导致接收端的seq number不连续。如果抓包中出现大量的out-of-order包,则说明网络存在较大的TCP乱序或丢包。

3、TCP Dup ack XXX #X

TCP dup ack XXX#X表示第几次重新请求某一个包,#前面的XXX表示第几个包(不是Seq),#后的X表示第几次请求。重复ack,当网络中存在乱序或者丢包时,将会导致接收端接收到的seq number不连续。此时接收端会向发送端回复重复ack,ack值为期望收到的下一个seq number。重复ack数大于等于3次将会触发快速重传重复ACK标志,丢包或者乱序的情况下,会出现该标志。

4、TCP Retransmission

TCP超时重传。当同时抓到2次同一数据报文,且没有抓到初传包的反馈ack,wireshark就会判断发生了重传,标记为TCP Retransmission。

如果一个包丢了,又没有后续包可以在接收方触发Dup Ack,或者Dup Ack也丢失的话就不会快速重传。这种情况下发送方只能等到超时再重传。

5、TCP Fast Retransmission

TCP快速重传,一般快速重传算法在收到三次冗余的Ack,即三次TCP dup ack XXX#3后,发送端进行快速重传。

6、TCP Spurious Retransmission

TCP虚假重传。当抓到2次同一包数据时,wireshark判断网络发生了重传,同时,wireshark抓到初传包的反馈ack,因此wireshark判断初传包实际并没有丢失,因此称为虚假重传。

7、TCP RST

是TCP协议结束异常连接的一种方式,通过flag中的reset=1标记。当TCP连接无法通过正常的4次挥手结束时,一方可以通过发送携带reset标志的TCP包结束TCP连接。

旁挂设备进行阻断可以伪造RST报文达到阻断的效果收到RST置位报文可能的原因:

1)、被安全设备拦截;

2)、对方端口未打开,发生在连接建立;

3)、全连接队列满,发生在连接建立;

4)、长时间无流量超时,导致连接被清除

5)、超过超时重传次数、网络暂时不可达

6)、非正常报文等

8、TCP acked unseen segment

ACK指向未知的TCP片段。wireshark上反馈是ACK指到不存在的TCP包。很可能是wireshark漏抓了这个包,但却抓到了对端反馈的该报文的ack包。如图。

9、TCP port numbers reused

tcp端口重复使用。在高并发的场景下,TIME_WAIT连接存在,属于正常现象。 线上场景中,持续的高并发场景一些部分TIME_WAIT连接被回收,但新的TIME_WAIT连接产生;一些极端情况下,会出现大量的TIME_WAIT。在出现大量TIME_WAIT的情况下,可能就会发生此种现象

 

标签:常见问题,重传,报文,TCP,连接,服务器,ETH,序列号
From: https://www.cnblogs.com/wchmcu/p/17513863.html

相关文章

  • MODBUS RTU转 EtherNet/IP 网关连接森兰变频器与欧姆龙系统通讯
     捷米特JM-EIP-RTU(Modbus转Ethernet/Ip)网关,用于将多个 MODBUS 从站设备接入 ETHERNET/IP 主站网络,实现 MODBUS 转 ETHERNET/IP 功能。配上 捷米特JM-EIP-RTU网关专用的 EDS 文件,实现 ETHERNET/IP 主 站对 MODBUS 从站设备的控制。   使用欧姆龙系统的......
  • Kong入门学习实践(6)HTTPS与TCP流代理
    最近在学习Kong网关,因此根据老习惯,我会将我的学习过程记录下来,一来体系化整理,二来作为笔记供将来翻看。由于我司会直接使用Kong企业版,学习过程中我会使用Kong开源版。本篇,我们学习快速配置HTTPS跳转与TCP流代理。HTTPS跳转配置HTTP协议虽然应用广泛,简单易用,但存在着巨大的安......
  • nethttp和gin 路由
    net/http路由注册functest1(){http.HandleFunc("/",func(whttp.ResponseWriter,r*http.Request){fmt.Fprintf(w,"Helloworld!")})err:=http.ListenAndServe(":9001",nil)iferr!=nil{log.F......
  • TCP的拥塞发生时为什么超时重传触发的是cwnd重置为1,而快速恢复触发的cwnd设置为cwnd/2
    首先要明确的是超时重传的情况相对于快速恢复而言是更恶劣的,发生了超时重传可以理解为超过了设定的时间都没有收到3个相同的ACK,那么网络肯定拥堵的更严重。所以超时重传时将cwnd重置为1,尽可能少的向网络中发送数据。而快速恢复不以时间为标度,触发条件是接收到了三个相同的ACK。......
  • python 常见问题
    1、pycharm的terminal报错virtualenv无法加载文件activate.ps1python打开项目遇到报错:pycharm的terminal报错virtualenv无法加载文件activate.ps1解决办法Win+R命令,输入powershell,然后确定进入终端需要执行Start-Processpowershell-VerbrunAs切换到管理员命令窗......
  • 强化学习从基础到进阶-常见问题和面试必知必答[7]:深度确定性策略梯度DDPG算法、双延迟
    强化学习从基础到进阶-常见问题和面试必知必答[7]:深度确定性策略梯度DDPG算法、双延迟深度确定性策略梯度TD3算法详解1.核心词汇深度确定性策略梯度(deepdeterministicpolicygradient,DDPG):在连续控制领域经典的强化学习算法,是深度Q网络在处定性”表示其输出的是一个确定的动作,......
  • 强化学习从基础到进阶-常见问题和面试必知必答[7]:深度确定性策略梯度DDPG算法、双延迟
    强化学习从基础到进阶-常见问题和面试必知必答[7]:深度确定性策略梯度DDPG算法、双延迟深度确定性策略梯度TD3算法详解1.核心词汇深度确定性策略梯度(deepdeterministicpolicygradient,DDPG):在连续控制领域经典的强化学习算法,是深度Q网络在处定性”表示其输出的是一个确定的动作,可......
  • tcp_bbr 代码分析
     brr算法流程:bbr算是一个完全独立的拥塞算法,具有自己的拥塞状态机.tcp_cong_control函数已经被bbr_main函数接管了 staticvoidtcp_cong_control(structsock*sk,u32ack,u32acked_sacked,intflag,conststructrate_sample*rs){conststr......
  • TCP相关知识
    1、TCP可靠传输是怎么实现的?TCP(TransmissionControlProtocol,传输控制协议)是一种面向连接的、可靠的传输协议。在TCP中,可靠传输是通过以下几种机制来实现的:序列号和确认应答机制:在TCP通信过程中,每个数据包都有一个唯一的序列号。接收方通过确认应答机制来告诉发送方已经正......
  • TCP连接中CLOSE_WAIT状态的原因与解决方法?
        关闭socket分为主动关闭和被动关闭两种情况。前者是指有本地主机主动发起的关闭;而后者则是指本地主机检测到远程主机发起关闭之后,作出回应,从而关闭整个连接;将关闭部分的状态转移摘出来,就得到了下图: 产生原因?通过图上,我们来分析,什么情况下,连接处于CLOSE_WAIT状......