极短时间内重发DUP ACK,为什么?

最近,值班的同学反映,有个程序定时会在凌晨4点的时候挂起,重启后恢复,让开发的同事

查了一下,有可能挂起的地方只有在查询数据库,后来gdb也证明了是挂在otl的fetch函数,

这个问题让我想起了,也是同个程序,也是在查询数据库,所以就叫同事捉了个

包,一打开,比较奇怪:

04:17:19 向数据库发起数据,然后回了个ACK,再发了个数据,再回个ACK。紧接着就不停地重发那个ACK了。

会发重复ACK(Dup ACK)理论上是收到数据了,再会回ACK,而回重复ACK应该是收到的是乱序的包,有些

数据丢了,或者是服务器不停地重发同一个包。由于捉包的同事只捉了dst端口,所以来的数据包看不到,今晚

发现这个超时时间竟然跟TCP/IP详解的说明完全对得上,今天才发现数据库主机是AIX,原来unix的实现还是

这样,Linux做了不少改动。

从这两天发的包已经可以确认,是应用向数据发起请求,数据库收到了,回了数据,应用回了ACK,这个回得

到,接着应用再请求数据,这时数据库发了一个大包,应用只收到第一个包,回了ACK,这个ACK丢了,数据

库不停地重发那个包,应用是收到了,但回了ACK数据库一直收不到了,重发12次后,发了RST,这个RST也

没有收到。这个现象非常奇怪,现在还不知道原因为何:

}

1、背景:说到socket,我们需要先看一下它诞生的背景,假设一种情况: 我们想让不同的进程进行网络通信,那么就需要每个进程都需要有一个唯一的标识,但是在不同的操作系统上面进程的PID可能会出现重复的问题,由此也是行不通,为了解决这个问题,TCP/IP协议派上了用场,IP协议可以唯一的表示一台计算机,TCP中的协议类型和端口可以唯一的标示一个计算机中的进程这样就实现了不同计算机之间不同进程的网路通信问题。那么存在一个问题是我们在开发的时候每一次都需要按照面向过程的进行写代码,为了解决这个问题,Socket诞生啦;
2、概念: 它是位于TCP/IP基础之上的一层协议,是计算机进行通信的基石,是TCP/IP协议组的基本操作单元,进行socket需要一个必要元素: 协议类型是UDP或者是TCP、源主机地址、源主机地址进程的端口、目标主机地址、目标主机进程的端口;它不是一个协议而是基于TCP/IP封装了TCP/UDP类型对上层提供了一套基于c的api接口;
3、socket 主要分为两类,当使用的是字节流数据类型,当前的socket就是一个TCP协议Socket;当使用用户包,当前的socket就是一个UDP协议Socket,
TCP是一种面向连接、可靠性高位于传输层的通信协议:
面向连接: 因为TCP在进行通信之前会进行三次握手,断开连接会进行四次分手;
可靠性高: 因为TCP会对网路环境进行拥塞控制、流量控制;
3.2、拥塞控制、流量控制 、重发机制?

首先我们要直到什么情况下,需要进行拥塞控制、流量控制? 、拥塞控制和流量控制的原理?

拥塞控制: 我们在进行网络通信的时候需要用到网络资源,网络资源包括数据包缓存区、网络带宽、路由节点的处理能力;在某段时间内,若对网络中某一资源的需求超过了该资源能够提供的可用部分时,网络性能就会变坏,这种情况就叫做拥塞;拥塞发生的主要原因是网路能够提供可用资源不足以满足用户的需求;
产生拥塞控制过程: 在早期TCP发送数据包,一致直接发送最大数据量的包,这样很快,网络层的带宽资源、接收节点也处黎不过来,甚至导致网络层崩溃,后期为了解决这个问题引进了嗅探发送,就是刚开始讲自己的拥塞窗口大小设为最大的发送数据即MMS,假设为M;刚开始按照指数级发送数据包,当发送的数据包数量大于M,此时会采用拥塞控制算法,重启从0开始,按线性增大发送数据,并且拥塞窗口的大小为原来一般即M/2,后面一次照这样发送,这期间主要如果服务端没有收到某个数据包,此时服务端会连续向客户端发送3次ACK包请求具体的包,这时,客户端会立即开始快速重传

UDP是一种无连接、不可靠、基于数据报、位于传输层的通信协议。

TCP优点: 三次握手考验,有确认、窗口、重传、拥塞控制机制,传输完成进程断开,释放资源。
TCP缺点: 验证阶段已被攻击,效率低,占用系统的CPU、内存等硬件资源,不适合小数据量传输,大材小用。
TCP缺点:不可靠,不适合大型数据传输。
小结TCP与UDP的区别:
1.基于连接与无连接;
2.对系统资源的要求(TCP较多,UDP少);
3.UDP程序结构较简单;
4.流模式与数据报模式 ;
5.TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。

4.1 、服务端创建一个socket ,绑定服务器主机地址,同肩痛一个端口,然后调用accept函数,一致初一阻塞状态;当客户端有客户端请求,并自己进入阻塞,一直到服务返回数据;服务端保存客户端的socket,然后向客户单的socket 写入数据;客户端接收后可以发送close消息断开链接,那么就完成一次完成的socket交流

  • 运输层协议概述 从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是...

  • 个人认为,Goodboy1881先生的TCP /IP 协议详解学习博客系列博客是一部非常精彩的学习笔记,这虽然只是...

  • 本篇文章主要是从运输层协议概述、UDP、TCP、可靠传输的工作原理、TCP首部格式、TCP可靠传输的实现、TCP流...

  • 很久之前读过张小娴的一篇文章,她说跟父母约会是最有压力的。的确,你跟父母约好五点一起吃晚饭, 他们从下午一点就开始...

  • 数学老师问七岁的阿拉乌:“如果我给你一个苹果,语文老师给你一个苹果,体育老师给你一个苹果,你一共有几个苹果?”阿...

  • 雨是上天的泪 茶是盏里的花 泪敲着盏花的声音 很静很静 这世界只有唯一的旅律 天哭过总会留下痕迹 花草在秋天里寂寂...

}

我要回帖

更多关于 航班熔断确诊人数怎么计算 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信