服务器传递文件丢包怎么回事,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将丢弃这个分片,并不确认收到此报文段导致对端超时并重发
TCP三次握手,四次释放图:
【编辑推荐】
【责任编辑:赵宁宁 TEL:(010)68476606】
点赞 0
服务器传递文件丢包怎么回事,TCP传输协议中如何解决丢包问题相关推荐
- ios 与服务器传递文件,iOS开发 如何跨系统传输文件 如:茄子快传、快牙
0.分析 不管是不是跨平台,利用网络来传输数据,必须先规定好链接方式(网络)和通讯方式(协议). 按照现在的应用场景,分析,其实需要实现的是一个点对点(P2P)交换数据的功能: 网络发现(两个设备相互 ...
- windows查看linux文件工具,「实用工具」介绍几款Windows系统与Linux服务器传递文件的工具...
本文主要介绍几款用于和linux服务器传递文件的工具 WinSCP WinSCP是一个Windows环境下使用SSH的开源图形化SFTP客户端.同时支持SCP协议.它的主要功能就是在本地与远程计算机间 ...
- TCP/IP协议中的一些常用端口简单讲解
(源自http://bbs.360.cn/3232114/17010996.html) 那么TCP/IP协议中的端口指的是什么呢?如果把IP地址比作一间房子 ,端口就是出入这间房子的门.真正的房子只有 ...
- TCP之三:TCP/IP协议中backlog参数(队列参数)
目录: <TCP洪水攻击(SYN Flood)的诊断和处理> <TCP/IP协议中backlog参数> TCP建立连接是要进行三次握手,但是否完成三次握手后,服务器就处理(ac ...
- TCP/IP协议中的端口
本文所述端口都是逻辑意义上的端口,是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等. 我们这里将要介绍的就是逻辑意义上的端口. ...
- 利用TCP传输协议实现基于Socket的聊天程序(高级版_多线程)
大家好,在上篇<利用TCP和UDP协议,实现基于Socket的小聊天程序(初级版)>博客中,所写程序只是实现简单的连接通信,基于控制台实现,运用了TCP和UDP两种传输协议.今天我和大家分 ...
- tcp/ip协议中消息传输对帧消息的操作
2019独角兽企业重金招聘Python工程师标准>>> 接口:Framer.java: package com.tcpip;import java.io.IOException; i ...
- 在tcp/ip协议中以BigEndian方式的编码与解码
2019独角兽企业重金招聘Python工程师标准>>> package com.tcpip;/*** 在tcp/ip协议中以BigEndian方式的编码与解码* @author ** ...
- TCP传输过程中丢包问题
TCP协议本身是保证传输的数据完整性不会丢数据的. 如果通信中发现缺少数据或者丢包, 那么,最大的可能在于程序发送的过程或者接收的过程出现问题. 例如服务器给客户端发大量数据,Send的频率很高, 那 ...
最新文章
- 数字货币普涨 比特币现金算力暴涨21.45%
- 49.SCVMM管理下的Hyper-V到Azure的异地(Azure)容灾
- TCGA免疫浸润评价数据库,TIMER 2.0 使用指南
- 推荐五款浏览Github必备的Chrome插件
- 刚刚,OpenStack 第 19 个版本来了,附28项特性详细解读!
- python医学数据挖掘_GitHub - SSSzhangSSS/Python-Data-mining-Tutorial: Python数据挖掘教程
- Java打war包or打jar包
- 机器学习笔记(十七)——EM算法的推导
- @codeforces - 553E@ Kyoya and Train
- Struts xml中Action的method与路径的三种匹配方法
- JavaScript运算符及转义字符
- mysql官网下载详细教程图文
- 华为服务器麒麟系统,麒麟服务器
- Phoenix踩坑填坑记录
- HomeKit 设备接入协议
- 超级计算机深蓝比卡斯帕罗夫聪明吗,【图片】卡斯帕罗夫对深蓝棋谱及简析【国际象棋吧】_百度贴吧...
- mysql查缺补漏(一) and or优先级和多表join
- 超详细 LaTex数学公式
- python 实现多核 CPU 并行计算
- 科研级试剂材料磷脂聚乙二醇马来酰亚胺 DSPE-PEG-MAL----为华生物