文档章节

TCP可靠传输的实现

MrYx3en
 MrYx3en
发布于 2014/08/07 23:22
字数 1379
阅读 46
收藏 0
点赞 0
评论 0

TCP的滑动窗口是以字节为单位的。为描述可靠传输原理的方便,现假定数据只在一个方向上传输。

假定A收到B发来的确认报文段,其窗口是20,确认号是31(B 期望 收到的下一个序号是31,而序号30为止的数据以及收到了),根据这两个数据,A构造出了自己的发送窗口,如下:


发送方A的  发送窗口表示:在没有收到B的确认的情况下,A可以连续的把窗口内的数据都发送出去。凡是已经发送过的数据,在未收到确认之前都必须暂时保留,以便在超时重传时使用。

        发送窗口里面的序号表示允许发送的序号(31-50);

        发送窗口的后沿的后面部分表示“已发送并收到确认”的数据;发送窗口的前沿的前面部分表示“不允许发送”,因为此时B(接收方)还没有为这部分数据保留临时的缓存空间;发送窗口的大小由前沿和后沿的位置共同决定。前【前移或者不动(收到了确认但是对方通知的窗口变小了)】;后沿 【不动(没有收到新的确认)或前移(收到了新的确认)】                    虽然前沿也有可能会向后收缩,但是TCP标准强烈不赞成这样做

描述一个发送窗口需要三个指针(个人理解:P1指向此时的确认号   P3指向下一个确认号   P2指向已发送但未收到确认的最后一个序号  P3-P2即 允许发送但是尚未发送的称为可用窗口或者有效窗口)

B的接收窗口:

B的接收窗口大小是20。在接受窗口外,到30为止的数据是发送过确认并且已经交付主机使用了,因此B不在保留这些数据,接收窗口内的(31-50)是允许接收的,由于B只能对按序收到的数据给出确认号,所以图中接收到了32、33,但是由于31在传输的图中丢失或者其他原因导致数据没有按序到达,所以B发送的确认号任然是31(期望收到的序号)。

现在假设B收到了序号31的数据,而且已经把序号31 - 33 交付主机了,然后B删除了这些已经确认过的数据,接着把接收窗口向前移了3个序号,同时给A发出确认,其中窗口值仍为20,但确认号是34(期望接收到的序号),表明B已经接收到了到33为止的数据。图中B还接收到了 37 38 40序号的数据,但这些都没有按序到达,所以都只能暂存在接收窗口。            A收到B的确认后,就可以把发送窗口向前滑动3个序号,但是指针P2(P2指向允许发送但未发送的第一个序号)不动,此时A的有效窗口增大了,可以发送的范围  42 - 53.


A在继续发送完数据42 - 53之后,指针P2向前移动与P3重合。发送窗口的序号都用玩了,此时 有效窗口 的大小为零,因此必须停止发送,等待B的确认回复,但是如果A在一段时间内没有收到B的确认回复,由于要保证可靠传输,A只能认为B还没收到这些数据,所以A在经过一段时间之后(由超时计时器控制)就重传这部分数据,重设超时计数器,直到收到B的确认回复为止。如果A收到确认号落在发送窗口内,那么A就可以是发送窗口继续向前滑动,并发送新的数据。


发送发的应用程序把字节流写入TCP的发送缓存,接收方的应用程序从TCP的接受缓存中读取字节流。

缓存空间和序号空间都是循环使用的。

窗口和缓存的关系:

发送缓存暂时存放:

            发送应用程序传送给发送发TCP准备发送的数据;

            TCP已发送出但是尚未收到确认的数据。


接受缓存暂时存放:

        按序到达的但是尚未被应用程序读取的数据;

        未按序到达的数据。

强调内容:

    A的发送窗口并不总是和B的接收窗口一样大小;

    TCP通常对不按序到达的数据先临时存放在接收窗口中,等到字节流中所缺失的字节收到后,在交付给上层应用进程;

    TCP要求接收方必须有累计确认的功能,这样可以减小传输开销。


超时重传时间

    TCP每发送一个报文段,就会对这个报文段设置一个计时器,计时器设置的重传时间到了却还没有收到确认,就要重传该报文段。


选择确认(SACK)

    如果收到的报文段没有差错,只是没有按序,或者中间缺少了一些虚耗的数据,采用选择确认的方法来重传缺少的数据,而不重传已经正确传输的数据。


© 著作权归作者所有

共有 人打赏支持
MrYx3en
粉丝 9
博文 132
码字总数 30598
作品 0
宝鸡
系统管理员
使命必达: 深入剖析WCF的可靠会话[概念篇]

在《实例篇》中,我通过可靠会话成功地进行了美女图片的传输,相信大家在保了眼福之余,会对WCF的可靠会话的功用具有一个深刻的认识。实际上,这涉及到WS中一个重要的概念——可靠消息传输(...

长平狐
2012/09/04
96
0
ude协议—基于udp的全双工可靠传输协议

ude是一款基于udp的可靠传输协议,专门用于在数据传输方面对实时性要求较高的应用领域。 tcp协议虽然能保证数据的可靠传输,但它有以下几个缺点:1.tcp的数据确认机制会导致发送方重复发送一...

烟都大宗师
2017/10/24
0
0
Java Socket编程(理论)

socket chat: http://www.cn-java.com/download/data/book/socket_chat.pdf 一、网络编程中的两个问题: 1.找到指定主机:IP层负责网络主机的定位; 2.可靠高效的传输数据:TCP层提供面向应用...

YuanyuanL
2015/08/20
0
0
使命必达: 深入剖析WCF的可靠会话[协议篇](上)

在《实例篇》中,我通过可靠会话实现了对图片的可靠、有序的传输;在《概念篇》中,我们对可靠消息涉及到的可靠消息传输(RM)的相关概念进行了讲述。在WS-*大家庭中,WS-RM为可靠消息传输提...

长平狐
2012/09/04
46
0
c#中关于udp实现可靠地传输(数据包的分组发送)

在做c#中面向无连接的传输时用到了UDP,虽然没有TCP稳定可靠。但是效率是要高些,优势也有,缺点也有 就是有的时候要丢包,有的时候不得不用UDP,但是如何才能比较稳定的实现可靠传输呢,这是...

zhujunxxxxx
2014/01/26
0
0
TCP/UDP、IP 、Socket、HTTP笔记

1.1 TCP/IP协议组 TCP/IP协议(传输控制协议)由网络层的IP协议和传输层的TCP协议组成 IP层负责网络主机的定位,数据传输的路由,由IP地址可以唯一的确定Internet上的一台主机。 TCP层负责面向应...

X堇色
2017/06/26
0
0
深度学习工业界应用-加速-训练-MPI和RDMA

一. MPI要解决的问题 MPI是一门比较老的技术,在高性能计算界(特别是成熟的科学计算软件中)几乎是标配,其对高性能通信(特别是rdma)优化较好。 特定于机器学习任务,MPI最大的优势有两点。一...

skywalker
2017/06/13
0
0
主流的七层网络协议

参考:http://www.2cto.com/net/201310/252965.html OSI七层与TCP/IP五层网络架构详解 OSI和TCP/IP是很基础但又非常重要的网络基础知识,理解得透彻对运维工程师来说非常有帮助。今天偶又复习...

noteman
2016/08/30
3
0
传输层协议UDP和TCP

UDP和TCP的比较: UDP TCP UDP是无连接的 UDP提供不可靠服务 UDP同时支持点到点和多点通信 UDP是面向报文的 UDP首部8个字节 TCP是面向连接的 TCP提供可靠服务 TCP只能进行点到点通信 TCP是面...

Superheros
03/08
0
0
RTP/RTCP/RTSP

一.产生的背景 随着互连网的发展,人们已经不满足于传统的HTTP,FTP和电子邮件等文本信息和服务,而对内容丰富多彩的多媒体信息,服务以及多媒体通信方式提出了需求,包括声音,图象,图形,...

当空皓月
2016/08/28
25
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

告警系统主脚本、告警系统配置文件、告警系统监控项目

告警系统主脚本 为方便需要,所有的shell脚本放到 /usr/local/sbin/ 目录下 切换到 /usr/local/sbin/ 目录下,创建告警系统脚本 #!/bin/bash#Written by aming.# 是否发送邮件的开关(1表...

Zhouliang6
6分钟前
1
0
不要再问我跨域的问题了

原文链接:web.jobbole.com 【RTC实时互联网大会 限时免费 马上报名】www.bagevent.com 写下这篇文章后我想,要不以后就把这种基础的常见知识都归到这个“不要再问我XX的问题”,形成一系列内...

阿K1225
7分钟前
0
0
Tomcat配置虚拟路径

<?xml version="1.0" encoding="UTF-8"?> <Context docBase="/data/dispute_https/headPortrait/" path="/headPortrait" reloadable="true"/> <!-- 该文件名为headPortrait.xml,放在${tomca......

Helios51
9分钟前
0
0
开源PaaS Rainbond 3.6.1 Released

本次3.6.1版本更新,重点修复了3.6.0版本部分情况下会出现的BUG,同时改进了内部市场、参数验证、历史消息等功能,详细更新记录如下—— 3.6.1 功能改进 云帮初次使用跳转至注册页面 消息添加...

好雨云帮
9分钟前
0
0
Unsupported major.minor version 52.0

执行代码的jdk版本 低于 编译的jdk版本 其中52.0 对应的就是 jdk1.8版本。

@林文龙
9分钟前
0
0
聊聊spring cloud的AbstractLoadBalancingClient

序 本文主要研究一下spring cloud的AbstractLoadBalancingClient AbstractLoadBalancingClient spring-cloud-netflix-ribbon-2.0.0.RELEASE-sources.jar!/org/springframework/cloud/netfli......

go4it
11分钟前
0
0
博客改版通知

先上博客地址 --> http://metaphors.name 最近将博客从 Jekyll 迁到了 Hexo,所以简书、开源中国、博客园、CSDN文章中的的部分图片丢了,原文链接也不可用了,不过没关系,原文链接都会转到博...

Metaphors
11分钟前
0
0
vue基础知识练习

一、Hello World <div id="itany">{{msg}} <!-- 两对大括号{{}}称为模板,用来进行数据的绑定显示在页面中 --> </div><script src="js/vue.js"></script><script>var vm=new Vue({......

一个yuanbeth
15分钟前
0
0
spring @Transactional注解参数详解

原文:事物注解方式: @Transactional 当标于类前时, 标示类中所有方法都进行事物处理 , 例子: 1 @Transactional public class TestServiceBean implements TestService {} 当类中某些方法不需...

binhu
18分钟前
0
0
CORS 跨域实践

本文首发于个人微信公众号《andyqian》,期待你的关注~ 前言 系统通常都是由单体应用逐渐演化而来,演化成为前后端分离的分布式应用。在享受分布式系统带来的诸多好处之时,随之而来的也有不...

andyqian
25分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部