由于个人精力和智商有限,又喜欢想太多、钻牛角尖,导致学习系统性知识很痛苦,尝试改变学习方式,慢慢摸索
现在看到 rdt2.0,又有点看不下去
现在的想法:
要有个目标,且有截止时间(作业模式、考试模式),在过程中,如果遇到对整体没有致命影响的难点,可以暂时跳过,在特定时间内把目标内的其他地方解决即可(即先解决简单的其他部分,在考虑进攻难点,这样的话,前期心态不会太焦灼,而且等回过头进攻难点的时候,有一种从四面八方将难点包围的感觉)
 
写博客也换个思路:
边写博客,边摸索写博客的方式,而且可以把摸索过程也记在博客里
 
 
记录一下本章的说明问题的思路,值得学习
大思路:
由于一个能提供可靠数据传输和拥塞控制的协议必定是复杂的,采用基本原理与 TCP 交替介绍方式(从一般走向具体)
在一般环境下讨论可靠数据传输,然后讨论 TCP 是怎样具体提供可靠数据传输的
在一般环境下讨论拥塞控制,然后讨论 TCP 是怎样实现拥塞控制的
小思路:
在讨论可靠数据传输原理的时候,将底层信道从理想状况逐步向现实情况靠拢,进而逐步引出相关概念
从简单模型到复杂模型,一点点把复杂的事情说清楚
 
 
本章整体情况
 
理想情况到现实情况分别是:
理想:底层信道完全可靠(比特不受损,分组不丢失,比特不会被重排序)
现实一:底层信道会让比特受损(比特受损,分组不丢失,比特不会被重排序)
现实二:底层信道会丢包(比特受损,分组丢失,比特不会被重排序)
注意,本章贯穿始终的一个假设是分组将以它们发送的次序进行交付,某些分组可能会丢失,即底层信道不会对分组重排序
 
理想情况:发送发和接收方只需做简单的发送和接收操作就行了(对应协议:rdt1.0)
现实一需要的技术:检验和、肯定和否定确定、重传、序号、ACK 分组(对应协议:rdt2.0)
现实二需要的技术:检验和、肯定和否定确定、重传、序号、ACK 分组、定时器(对应协议:rdt3.0)
 
由 rdt3.0 的缺点(停等协议,链路利用率低),引入流水线可靠数据传输协议
为了保证是流水线可靠数据传输协议的有效性(主要是为实现其差错回复功能),引入回退 N 步的的方法
而回退 N 步的方法,可能会导致一些性能问题(一个出错,之前的全部需要重传,如果失败率较高,则可能导致信道中充斥着冗余的分组),于是引入了选择重传的方法
 
 
有一点值得注意的是
我们一般写程序都不用考虑这么多,是因为我们选择了 TCP 协议,虽然 IP 层(即网络层)及以下是不可靠的,但是运输层的 TCP 帮助我们解决了这些不可靠,使我们可以专注于开发应用程序,而不用担心数据是否会按照预想、没有误差到达目的地
 
 
以下是对我来说有用的零散知识点:
 
最简运输层功能:
进程到进程的数据交付、差错检查
附加功能:
可靠数据传输、拥塞控制
 
运输层协议只运行在端系统,而不是路由器中,运输层协议将报文在应用进程和网络边缘(即网络层)之间移动(在发送方,移动方向是 应用进程→网络边缘;在接收方,则反过来)
 
网络层为主机之间提供通信,运输层为不同主机上的进程之间提供通信
 
多路复用与多路分解
 
看微信“文件传输助手”中的聊天记录
 
IP 层是不可靠的

把这次看不懂的地方记录一下:

对于协议 rdt2.1,有个问题想不明白:

接收方成功接受了分组 0,向发送方反馈了一个 ACK,而由于比特受损,发送方收到了一个含糊不清的回复,于是发送方重传了分组 0,而此时接收方已经在等待分组 1 到的了,这样的话,当接收方在此接收到分组 0 的时候(与预期的分组 1 不符),会给发送发返回一个 NAK,发送发以为重传分组 0 失败,继续重传分组 0,而接收方此时预期接收的还是分组 1,于是造成了一个死循环

这种情况会发生吗?是不是我没有完全看懂协议 rdt2.1?

《计算机网络 自顶向下方法》 第3章 运输层 Part1的更多相关文章

  1. 计算机网络自顶向下方法第2章-应用层(application-layer).1

    2.1 应用层协议原理 2.1.1网络应用程序体系结构 1)在客户-服务器体系结构 (client-server architecture)中,有一个总是打开的主机称为服务器,它服务于来自许多其他称为 ...

  2. 计算机网络自顶向下方法第3章-传输层 (Transport Layer).1

    3.1 概述和运输层服务 运输层协议为运行在不同主机上的应用进程之间提供了逻辑通信(logic communication)功能. 3.1.1 运输层和网络层的关系 网络层提供了主机之间的逻辑通信,而 ...

  3. 计算机网络自顶向下方法第4章 网络层:数据平面 (Network layer)

    4.1 网络层概述  网络层主要功能为转发(将数据从路由器输入接口转移到合适的输出接口)和路由选择(端到端的路径选择),每台路由器都有一张转发表,用最长前缀匹配规则来转发. 4.1.1 转发和路由选择 ...

  4. 计算机网络自顶向下方法第2章-应用层(application-layer).2

    2.4 DNS:因特网的目录服务 2.4.1 DNS提供的服务 DNS的定义 实体层面看,DNS是一个由分层的DNS服务器实现的分布式数据库 协议层面看,DNS是一个使得主机能够查询分布式数据库的应用 ...

  5. 计算机网络自顶向下方法第3章-传输层 (Transport Layer).2

    3.5 面向连接的运输: TCP 3.5.1 TCP连接 TCP是因特网运输层的面向连接的可靠的运输协议. TCP连接提供全双工服务(full-duplex service). TCP连接是点对点的连 ...

  6. 《计算机网络 自顶向下方法》 第2章 应用层 Part1

    常见的应用层协议有哪些?  HTTP(HyperText Transfer  Protocol):超文本传输协议 FTP(File Transfer Protocol):文件传输协议 SMTP(Sim ...

  7. 《计算机网络 自顶向下方法》 第3章 运输层 Part2

    待补充完善 TCP 相关基本点 1.面向连接 两个不同主机上的进程在通过 TCP 进行通信之前,必须先通过三次握手来建立 TCP 连接 2.全双工服务 即,如果一台主机上的进程 A 与另一台主机上的进 ...

  8. 《计算机网络 自顶向下方法》 第8章 计算机网络中的安全 Part2

    SSL(使 TCP 连接安全) SSL(Secure Socket Layer),即安全套接字层,是对 TCP 的强化 HTTPS 使用 SSL,而 HTTP 不使用 SSL 通过采用机密性.数据完整 ...

  9. 《计算机网络 自顶向下方法》 第6章 链路层和局域网 Part2

    待补充完善 Web 页面的请求历程 应用层     报文.主机 运输层     报文段. 网络层     数据报.路由器.IP 地址 链路层     以太网帧.交换机.MAC 地址 步骤 1)到 4) ...

随机推荐

  1. Vue中组件

    0828自我总结 Vue中组件 一.组件的构成 组件:由 template + css + js 三部分组成(.vue文件) 1)组件具有复用性 2) 复用组件时,数据要隔离 3) 复用组件时,方法不 ...

  2. 【RT-Thread】线程的基本知识

    什么是线程? 人们在生活中处理复杂问题时,惯用的方法就是分而治之,即把一个大问题分解成多个相对简单.比较容易解决的小问题,小问题逐个被解决了,大问题也就随之解决了.同样,在设计一个较为复杂的应用程序时 ...

  3. cobalt strike批量发送钓鱼邮件

    0×01 利用Cobalt strike生成木马 这里我们生成木马可以用cs带的HTA.OFFICE宏.word宏来使目标上线cs,这里以word宏病毒为例子. 首先我们需要制作一个word宏病毒来进 ...

  4. [Tyvj Jan]青蛙跳荷叶

    题目限制 时间限制 内存限制 评测方式 题目来源 1000ms 131072KiB 标准比较器 Local 题目描述 从前,有一个小青蛙决定去荷叶上练习跳跃.现在有n个荷叶排成一排,小青蛙一开始在最左 ...

  5. Spring Security 整合JWT(四)

    一.前言 本篇文章将讲述Spring Security 简单整合JWT 处理认证授权 基本环境 spring-boot 2.1.8 mybatis-plus 2.2.0 mysql 数据库 maven ...

  6. Mysql数据类型最细讲解

    文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号. 数据库中事务是最重要的概念之一,所以上篇着重谈了谈数据库中事务的使用,并且举了实例如何在实际开发中去使用事务进 ...

  7. mp-vue实现小程序回顶操作踩坑,wx.pageScrollTo使用无效填坑

    本来项目都写的差不多了,测试测着侧着就冒出了新的想法,我因为做的是问卷,因此会有用户必答题未答完的可能存在,本来市场部给的需求就是做一个弹窗就好了,她说想要做出跳回到用户未答的第一道题,好吧,既然都这 ...

  8. Newman基本使用

    简介 Newman 是 Postman 推出的一个 nodejs 库,直接来说就是 Postman 的json文件可以在命令行执行的插件. Newman 可以方便地运行和测试集合,并用之构造接口自动化 ...

  9. C++两个队列实现一个栈

    C++两个队列实现一个栈 /* * source.cpp * * Created on: 2015年6月21日 * Author: codekiller */ #include "iostr ...

  10. Andriod Studio设置代码字体大小