PX4遇到的连接问题

目录

一、问题

二、解决方法

 三、分析

四、UDP、TCP

TCP基于连接(打电话)

UDP基于非连接(写信)

 UDP VS TCP

 为什么要三次握手而不是两次握手?

为什么客户端需要等待超时时间?

为什么要四次挥手?


一、问题

(1)校准传感器时,提示“performing sensor calibration over a WiFi connection is known to be unreliable. you should disconnect and perform calibration using a direct USB connection instead” 。

(2)主页面仪表盘一直动,还有中间起飞点红色箭头也一直动,左上角飞行模式他一直在自己切换 ,还有左上角显示"UDP Link (AutoConnect)"。

二、解决方法

Application Settings -> AutoConnect to the following devices -> 不勾选UDP

 三、分析

地面站通过UDP自动连接了其他设备,我所处的环境中可能存在该端口的UDP链路。

四、UDP、TCP

TCP、UDP是传输协议,位于传输层。

TCP基于连接(打电话)

三次握手(在不稳定的信道上建立稳定的连接)

 四次挥手(在不稳定的信道上建立稳定的断开)

UDP基于非连接(写信)

 UDP VS TCP

 为什么要三次握手而不是两次握手?

为了保证在不可靠的网络链路中,建立起可靠的连接

客户端向服务端发送了一个syn包,来请求建立连接,因为某些未知原因,并没有到达服务器,在中间某个网络节点产生了滞留。为了建立连接客户端会重发syn包。这次的数据包正常送达,服务端回复syn+ack之后建立了连接。但是第一包数据阻塞的网点节点,突然恢复,第一包syn包又送达到服务端,这时服务端会误认为是客户端又发起了一个新的连接,从而在两次握手之后,进入等待数据状态,服务端认为是两个连接,而客户端认为是一个连接,造成了状态不一致。如果在三次握手的情况下,服务端收不到最后的ack包,自然不会认为连接建立成功,所有三次握手本质上来说,就是为了保证在不可靠的网络链路中,建立起可靠的连接。如syn包阻塞重发会导致服务器创建多重连接,而客户端只接受唯一连接。从而造成状态不一致的情况。 

为什么客户端需要等待超时时间?

这是为了保证服务端已收到ack包。

因为假设客户端发送完最后一包ack包后就释放了连接,一旦ack包在网络中丢失,服务端将一直停留在最后确认状态。如果客户端发送最后一包ack包后,等待一段时间,这时服务端因为没有收到ack包,会重发fin包,客户端会响应这个fin包,重发ack包并刷新超时时间。保证在不可靠的网络链路中,进行可靠的连接断开确认。

为什么要四次挥手?

由于 TCP 的半关闭(half-close)特性,任何一方都可以在数据传送结束后,发出连接关闭的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接关闭通知,对方确认后就完全关闭了TCP连接。通俗的来说,两次挥手就可以释放一端到另一端的 TCP 连接,完全释放连接一共需要四次挥手。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值