一.根据定位问题到解决问题的思路:

1.确认网络链路问题,ping测和traceroute确认链路是否健康。如果链路有问题,找对应网络管理员排查网络。

2.确认系统问题,通过wireshark或者tcpdump在应用系统两端抓包,定位问题所在,排查是发送或者接受系统网卡、性能问题

3.从tcp应用本身排查,通过在程序上添加调试代码,核查是否应用逻辑处理问题

二.考虑TCP协议为什么会丢包,在什么样的情况下会丢包。

1、TCP协议定义(Transimission Control Protocol)是以一种面向连接的、可靠的、基于字节流的传输层通信协议。

2、TCP是基于不可靠的网路实现可靠传输,肯定会存在丢包问题。

3、如果在通信过程中,发现缺少数据或者丢包,那边么最大的可能性是程序发送过程或者接受过程中出现问题。

例如:我有2台服务器 ,A和B服务器。

A服务器发送数据给B服务器频率过高时,B服务器来不及处理,造成数据丢包。(原因可能是程序逻辑问题,多线程同步问题,缓冲区溢出问题)

如果A服务器不对发送频率进行控制,或者数据进行重发的话,那么B服务器收到数据就会少。就会造成丢失数据

二、TCP协议丢包后,如何解决丢包的问题

为了满足TCP协议不丢包。TCP协议有如下规定

1、数据分片:发送端对数据进行分片,接受端要对数据进行重组,由TCP确定分片的大小并控制分片和重组

2、到达确认:接收端接收到分片数据时,根据分片数据序号向发送端发送一个确认

3、超时重发:发送方在发送分片时设置超时定时器,如果在定时器超时之后没有收到相应的确认,重发分片数据

4、滑动窗口:TCP连接的每一方的接受缓冲空间大小固定,接收端只允许另一端发送接收端缓冲区所能接纳的数据,TCP在滑动窗口的基础上提供流量控制,防止较快主机致使较慢主机的缓冲区溢出

5、失序处理:作为IP数据报来传输的TCP分片到达时可能会失序,TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层;

6、重复处理:作为IP数据报来传输的TCP分片会发生重复,TCP的接收端必须丢弃重复的数据;

7、数据校验:TCP将保持它首部和数据的检验和,这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到分片的检验和有差错,TCP将丢弃这个分片,并不确认收到此报文段导致对端超时并重发

wireshark分析udp数据丢包 wireshark分析tcp丢包率_TCP


wireshark分析udp数据丢包 wireshark分析tcp丢包率_丢包_02

 

三.计算机网络体系是一种分层结构,一共七层!下层为上层提供服务!比如连接,传输等!而TCP属于第四层传输层!传输层的任务就是网络上提供完整的数据传送!

wireshark分析udp数据丢包 wireshark分析tcp丢包率_数据_03

TCP是一个面向连接的可能的传输层协议!来自上层的数据到达传输层后首先双方发送同步数据包建立连接,再有TCP分组分片!把整个的数据分成符合大小的块,然后分别传送,在TCP的头部有记录顺序的序列号,有控制传送速度的滑动窗口,校验和等信息!一个或多个块到达接收端后,由接收端检验数据包的正确性,然后发送相应序列号的确认,没有被确认的序列号数据块将被重新传送来保证数据的完整性!

wireshark分析udp数据丢包 wireshark分析tcp丢包率_wireshark分析udp数据丢包_04

同时接收端可以根据自己的缓冲区大小,发送改变相应的滑动窗口数据值以避免发送端发送速率过快而是接受端没有缓冲而丢包!

wireshark分析udp数据丢包 wireshark分析tcp丢包率_TCP_05