TCP学习前的准备——可靠数据传输协议
由于传输层所依赖的网络层是不可靠的,通过逐渐考虑实际情况不断引入新技术来实现可靠数据传输。
完全可信的信道
有比特差错的信道
新的协议功能:
1. 差错检测:检验和
2. 接收方反馈:序号,ACK分组
3. 重传
会产生丢包的信道
超时重传:冗余数据分组
流水线可靠数据传输
1. 增加序号范围
2. 发送方和接收方都需要缓存分组
3. 差错恢复:选择重传/回退N步
回退N步(GBN):
发送方:
- 发送发维护如图所示的结构,窗口长度的含义即为已发送未确认的最大分组数
- 上层调用:如果窗口未满,则产生分组并发送;如果窗口已满则不发送
- 收到ACK:将base置为确认号+1,即向前移动窗口,为最早的已发送未确认分组启动定时器
- 超时:定时器只为最早的已发送未确认的分组定时。超时后重发所有已发送未确认的分组,并重启定时器
接收方:
- 维护期望序号,收到则发送ACK,否则丢弃并按最近的按序接受的分组发送ACK
选择重传(SR):
发送方:
- 维护如图的序号空间
- 上层调用:如果窗口未满,则产生分组并发送;如果窗口已满则不发送
- 收到ACK:如果确认号是base,则将base前移到最小的已发送未确认分组处,并发送新的落在窗口内的序号;如果确认号落在窗口内,则将该分组标记为已确认
- 超时:每个分组有自己的定时器,超时时重发该分组
接收方:
- 维护如图的序号空间
- 接收的序号在[rcv_base,rcv_base+N-1]:发送ACK。如果没有接收过则缓存。如果是base,则将从base开始已缓存的序号连续的分组交付给上层,移动base
- 接收的序号在[rcv_base-N,rcv_base-1]:发送对应的ACK,表示已经确认过。9里之所以是rcv_base-N是因为这是发送方可能的最小的期待确认号
- 其他:忽略
TCP学习前的准备——可靠数据传输协议的更多相关文章
- 哈工大 计算机网络 实验二 可靠数据传输协议(停等协议与GBN协议)
计算机网络实验代码与文件可见github:计算机网络实验整理 实验名称 可靠数据传输协议(停等协议与GBN协议) 实验目的: 本次实验的主要目的. 理解可靠数据传输的基本原理:掌握停等协议的工作原理: ...
- 无连接运输的UDP、可靠数据传输原理、面向连接运输的TCP
由[RFC 768]定义的UDP只是做了运输协议能够做的最少工作.除了复用/分解功能极少量的差错检测外,它几乎没有对IP增加别的东西.如果应用程序开发人员选择UDP而不是TCP,则该应用程序差不多就是 ...
- TCP可靠数据传输
TCP可靠数据传输 在TCP在IP不可靠的尽力而为的服务之上,创建了一条可靠数据传输服务(reliable data transfer service).TCP提供的可靠数据传输的方法涉及到可靠数 ...
- TCP为什么是个可靠的协议
一直以来,我们都被告知TCP是可靠的.但为什么是可靠的,很多人都会说“三次握手.四次挥手”.然后我们就进入一个误区:TCP可靠是因为它在建立链路时进行了“多次”地确认.然后又有人问,“多次确认就可靠了 ...
- 【T09】要认识到TCP是一个可靠的,但不是绝对可靠的协议
1.稍微想一下就知道,TCP不是绝对可靠的协议,比如:网络断开,主机崩溃,无论TCP如何努力,都无法将数据传给对方. 2.考虑应用程序A向应用程序B发送数据的TCP流程,数据流从应用程序A通过他所在主 ...
- 高效开发之SASS篇 灵异留白事件——图片下方无故留白 你会用::before、::after吗 link 与 @import之对比 学习前端前必知的——HTTP协议详解 深入了解——CSS3新增属性 菜鸟进阶——grunt $(#form :input)与$(#form input)的区别
高效开发之SASS篇 作为通往前端大神之路的普通的一只学鸟,最近接触了一样稍微高逼格一点的神器,特与大家分享~ 他是谁? 作为前端开发人员,你肯定对css很熟悉,但是你知道css可以自定义吗?大家 ...
- TCP/IP详解学习笔记(3)IP协议ARP协议和RARP协议
把这三个协议放到一起学习是因为这三个协议处于同一层,ARP协议用来找到目标主机的Ethernet网卡Mac地址,IP则承载要发送的消息.数据链路层可以从ARP得到数据的传送信息,而从IP得到要传输的数 ...
- TCP学习总结(一)
在学习的过程中,相信大家都有过“学了就忘“这种经历,又特别是TCP/IP知识点密集的通信协议,所以在此总结一下自己学到的皮毛,希望对自己对大家也有所帮助. 这篇博客主要讲运输层TCP和UDP的东西,I ...
- TCP学习笔记
TCP/IP 协议分层模型 TCP/IP 协议族按层次分别分为以下 4 层:应用层.传输层.网络层和数据链路层.层次化之后,每个层级只需要考虑自己的任务就可以了,不再需要弄清其他层级的功能了. TCP ...
随机推荐
- Objective-C —内存管理(上)
内存管理 一.为什么要进行内存管理 移动设备的内存极其有限,每个app所能占用的内存是有限制的 下列行为都会增加一个app的内存占用 创建一个OC对象 定义一个变量 调用一个函数或者方法 内存占用多大 ...
- SQL Server查询数据库空间分配情况、数据库备份信息
查询数据库空间分配情况: use master go create procedure dbo.proc_getdbspaceused as begin set nocount on create t ...
- Homebrew的安装及使用
Homebrew是Mac上的软件包管理工具,能在Mac中方便的搜索安装卸载软件. 1 安装 在终端输入一下代码,回车,即可下载. ruby -e "$(curl -fsSL https:/ ...
- C指针思考-(1)
首先记录下时间吧,@2016-08-18 23:26:22,这段时间看了同事的3本经典的书,<c缺陷和陷阱>,<c和指针>和<c专家编程>,感觉指针说的最多,多多少 ...
- linux 调试相关命令
1. tail -f filename 调试时,log输出到文件,但是又想看到即时输出信息 未完待续....
- malloc 和free例程
#include <stdio.h>#include <stdlib.h>int main(){int a;scanf("%d",&a);int * ...
- Vue内置指令
v-text 类型: string用法: 更新元素的 textContent.如果要更新部分的 textContent ,需要使用 {{ Mustache }} 插值. v-html 类型: stri ...
- 解决Vue引入百度地图JSSDK:BMap is undefined 问题
百度地图官网文档介绍使用JSSDK时,仅提供了2种引入方式: script引入 异步加载 解决跨域问题,实例调用百度地图 但vue项目中仅某一两个页面需要用到百度地图,所以不想在 index.html ...
- [TJOI2011]树的序(贪心,笛卡尔树)
[TJOI2011]树的序 题目描述 众所周知,二叉查找树的形态和键值的插入顺序密切相关.准确的讲:1.空树中加入一个键值k,则变为只有一个结点的二叉查找树,此结点的键值即为k:2.在非空树中插入一个 ...
- hdu5105Math Problem(分类讨论)
题目链接: huangjing 题目: 思路: 给出的是一个方程,首先讨论最高项系数. 1:a==0&& b==0 那么函数就是线性的.直接比較端点就可以. 2 a==0& ...