计算机网络-自顶向下方法-笔记【第3章-传输层】

学习的课程及图片来源:中科大郑烇、杨坚全套《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》课程

文章目录

  • 计算机网络-自顶向下方法-笔记【第3章-传输层】
  • 3 传输层
    • 3.1 概述和传输层服务
    • 3.2 多路复用和解复用
    • 3.3 无连接传输:UDP
      • UDP 报文格式
    • 3.4 RDT 可靠数据传输原理
      • RDT 1.0
      • RDT 2.0
      • RDT 2.1
      • RDT 2.2
      • RDT 3.0
      • 停止等待协议的问题
      • 流水线协议
        • 滑动窗口协议
        • 发送窗口
        • 接收窗口
          • Go-Back-N
          • Selective repeat
        • 异常情况
          • Go-Back-N 重发N
          • Selective repeat 选择性重发
        • 思考题
    • 3.5 面向连接的传输:TCP
      • TCP报文段结构
      • TCP往返延迟RTT和超时
      • TCP可靠数据传输
        • 简化的TCP:不考虑重复ACK,流量控制,拥塞控制
        • 快速重传
      • TCP流量控制
      • TCP连接管理
        • 三次握手
        • 四次挥手
    • 3.6 拥塞控制原理
      • 拥塞的原因/代价
      • 拥塞控制方法
        • ATM 采用网络辅助的拥塞控制
    • 3.7 TCP 拥塞控制
        • TCP 采用端到端的拥塞控制
      • 如何检测拥塞
      • 速率控制方法
        • 策略
      • TCP 吞吐量
      • TCP 公平性
    • 总结

3 传输层

3.1 概述和传输层服务

传输层加强了网络层的服务,但有些服务是可以加强的,有些服务是不能加强的,如延时和带宽是不能加强的,取决于网络层

3.2 多路复用和解复用

复用/解复用技术:

将多条运输连接上的数据汇集到一条网络连接上传输。本来逻辑上是有多个进程之间的通讯线路的,但通过复用(标识两者之间)只需要一条线路即可,在目标端对所有的信息解复用,分发给不同的应用进程

  • 因此套接字仅为本主机的IP和端口,因此即使源IP和端口不同,目标相同,那么都将定位到相同的socket
  • 但TCP捆绑4元组,只要有一个不一样,就是不同的socket

3.3 无连接传输:UDP

仅仅在IP上增加了复用和解复用功能

事务性:一次往返就结束

要在UDP上提供可靠传输,既利用UDP的高效,又要可靠,那么只能在应用层增加可靠性
(没有第三种协议,因为TCP、UDP能够支持85%以上的应用,再增加会出现协调等问题)

UDP 报文格式

数据报:无连接的,每个数据单元都是独立发送的

校验和是验证报文传输过程中有没有出错,如果发现校验不对,那么这个UDP报文会被丢弃

在计算校验和的时候,需要在UDP数据报之前增加12字节的伪首部,伪首部并不是UDP真正的首部。只是在计算校验和,临时添加在UDP数据报的前面,得到一个临时的UDP数据报。校验和就是按照这个临时的UDP数据报计算的。伪首部既不向下传送也不向上递交,而仅仅是为了计算校验和。这样的校验和,既检查了UDP数据报,又对IP数据报的源IP地址和目的IP地址进行了检验。

UDP报文的头部小,固定的8个字节的头部,如上,64 bit载荷即有效传输的数据部分占比大

将报文段(包含数据和头部,甚至有一些IP的伪头部)切分成若干个16 bit,将所有的16 bit数字加起来,注意求和时高位有进位需要进位回滚将进到更高位的1加到最低位上去)。最后和再取反码,得到校验和。

收到数据报校验时,计算出所有的和,然后再加上校验和,得到全1,0xFFFF,那么说明没有出错(可能有残存错误)

3.4 RDT 可靠数据传输原理

RDT在有些网络中在网络层实现,通常是由TCP在传输层实现

要向上层应用提供可靠的服务,但是所依赖的下层服务却是不可靠的 (best effort)。

渐进地开发RDT:先假设下层是完全可靠的,再逐个去掉假设,变成不可靠的,从而处理这个不可靠,再将其变成可靠,逐个进行,直到所有假设都去掉

RDT 1.0

仅仅是封装和解封装即可

RDT 2.0

使用校验和 checksum来检验错误

  • 发送方要编码检错,接收方要解码校验
  • 接收方要告诉发送方,是正确的ACK Acknowledgment,还是错误的NAK Negative Acknowledgment
  • 发送方要保存副本,ACK则无需处理,等待上层有没有新的调用,NAK则重新发送副本(检错重传

RDT 2.1

但是显然ACK/NAK也是可能出错的这个信息同样是需要校验的,校验和】,因此发送方可能无法判断接收方返回的信息是什么

  • 因此对发送的packet编号0和1【在01之间切换即可】,发送方先发送p0
  • 接收方返回的信息ACK出错了,发送方无法识别,则发送方认为是NAK,再发一次p0
  • 接收方本来在等待编号1,但收到相同编号的内容,因此知道是ACK发送失败,因此将收到的重复信息丢弃,但仍然再返回ACK确认

停止等待协议 stop-and-wait protocol :每发送完一个分组就停止发送,等待对方的确认。在收到确认后再发送下一个分组。

RDT 2.2

取消NAK,而是对ACK编号,使用前一个分组(即最后一个正确接收的分组)的ACK作为该分组的NAK

这样可以为后续一次发送多个分组做好准备

同理ACK传输错误和上面RDT 2.1一样处理即可

RDT 3.0

增加了分组可能丢失的情况

超时重传机制:重传时间一般设置为比正常一个往返稍长一点的时间,一旦超过这个时间,一般就能确定分组丢失,然后重传即可

  • 数据链路层的timeout一般是确定的,因为就是在两个节点之间传输
  • 而传输层的timeout是自适应的,即需要根据情况调整,因为中间可能跨越的节点数目会变化

如果是ACK丢失了,那么重传会导致数据重复问题,但接收方可以根据分组序号知道重复,从而丢弃即可

在上面的有限状态机图中,右上角可以看到如果收到的ACK乱码/与发出的编码不匹配,说明需要重发,但这样是空,即不做处理,原因是想通过超时来处理,因为没有收到正确的,最终会导致超时,从而重发

设置一个合律的timeout很重要,如果设置时间太短了,也能正常工作,但会导致分组的发送和应答重复效率低,如下

RDT 3.0对于停止等待协议是完备的,可以处理所有的情况

停止等待协议的问题

但停止等待协议的效率很低,特别是在信道容量(同时能容纳的“车“的数量,等于TR,R是带宽,T是信道从头到尾传输的时间)很大时,就像告诉公路很长,其中同一时间可以容纳很多车辆前后排列,但如果一次仅仅一辆车在行驶,行驶出高速公路后再让下一辆车上高速,显然效率太低了

传输时间=分组长度/链路带宽

可见,传输时间远小于往返延迟RTT,因此时间利用率很低0.027%,只有传输时间是在忙的,其他时间都是空闲的,等待信息的返回

有效吞吐=带宽*时间利用率=270kbps,相当于1Gbps的链路只用到了270kbps

流水线协议

流水线协议 pipeline protocol :一次发送多个未经确认的分组

滑动窗口协议

Sliding-window protocol

发送窗口大小 接收窗口
停止等待协议 1 1
流水线协议——GBN >1 1
流水线协议——SR >1 >1

发送窗口

发送窗口是发送缓冲区的子集,是指发送但未确认的分组
上层应用可以继续将要发送的分组存放在发送缓冲区,当发送后发送窗口的前沿便移动一格,最大可以到发送缓冲区的大小

接收窗口

接收窗口=接收缓冲区

SR和GBN原理一样,都是序号最小的到来才移动,并且窗口中要包含到来的分组序号才会接收并返回ACK,否则丢弃

Go-Back-N

GBN接收窗口大小是1,0,1分别到来,然后接收方分别接收解封装,并将数据data交给上层,再返回ACK0,ACK1接收窗口向右移动,但如果下一个到来的是3而不是2,说明乱序,那么接收方会把3号分组丢弃,然后发送顺序到来的序号最大的分组的确认累计确认,表明这个序号及以前的分组已经接收】即ACK1,接下来又来了4号分组,同样丢弃并且返回ACK1

Selective repeat

SR中滑动窗口大于1,比如上面为5,先到了0,那么接收窗口右移一格,包含12345,然后返回ACK0,顺序到来1,接收窗口再右移一格,包含23456,返回ACK1,但接下来到来3,说明乱序,但由于接收窗口中可以包含3,说明可以接收3,那么会返回ACK3非累计确认,仅仅是这个分组的独立确认**】,但接收窗口不移动,仍然包含23456,接下来到来4,返回ACK4,,接收窗口仍不移动,只有接收窗口中序号最小的到来才会导致移动。如果这时候来了2,会返回ACK2,因为此时234都到了,那么接收方会将234一起有序的交给上层有序交给上层,因此在乱序时要缓存),并且接受窗口右移3格

异常情况

Go-Back-N 重发N

出现了前面的2号没有收到,收到3时接收方返回ACK1,那么发送方的发送窗口不能移动
但是注意,如果此时发送窗口<发送缓冲区,那么发送缓冲区内的分组是可以被发送的,被发送后进入发送窗口同理如果缓冲区中的分组未满,那么上层是可以将新的分组放到发送缓冲区的
那么2号分组的计时器会超时timeout,因此发送方需要将发送窗口(即已发送但未确认的分组)全部再顺序发送一遍【因为GBN中2号分组没到,那么后面的所有分组都会被丢弃】

【注意:GBN中只有一个计时器,即在滑动窗口大小从0变成1时启动一个计时器,同时也只需要对最小序号的分组计时即可。当收到最小序号的ACK时,那么会把计时器重置,发送窗口右移动;如果收到ACK后,窗口大小变成0,那么关闭计时器;在超时重发时也会重置计时器】

计算机网络-自顶向下方法-笔记【第3章-传输层】相关推荐

  1. 【计算机网络】学习笔记:第五章 传输层【王道考研】

    基于本人观看学习b站王道计算机网络课程所做的笔记,不做任何获利 仅进行交流分享 特此鸣谢王道考研 若有侵权请联系,立删 如果本篇笔记帮助到了你,还请点赞 关注 支持一下 ♡>

  2. 计算机网络-自顶向下方法-笔记【第2章-应用层】

    计算机网络-自顶向下方法-笔记[第2章-应用层] 学习的课程及图片来源:中科大郑烇.杨坚全套<计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)>课 ...

  3. 计算机网络自顶向下方法笔记01

    <计算机网络自顶向下方法>学习笔记.之前学习过计算机网络微课,已经对计网中的很多概念都有了印象和一定的了解了,这时候再读自顶向下感觉比较轻松了.这本书没有涉及太多物理层的内容,第一章为概述 ...

  4. 计算机网络自顶向下方法笔记02

    <计算机网络自顶向下方法>学习笔记02:运输层. 运输层介于应用层与网络层之间,为应用层提供了直接的通信服务.在应用层时已经介绍了两种运输层协议UDP和TCP,本章主要介绍这两个协议和运输 ...

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

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

  6. 【计算机网络---自顶向下方法笔记1】计算机网络和因特网概述

    今年大年初四,首先祝大家新年快乐哦~停更了好久,虽然有些忙过节了,但还是要对知识进行巩固啊! 本次的学习教材是黑皮书<计算机网络-自顶向下方法>,作者:James F.Kurose与Kei ...

  7. 读书笔记之: 计算机网络(第4版)- 第6章 传输层

    第6章 传输层 第1节 传输服务 1.传输层向上层提供服务 2. 传输服务原语 3. 传输协议数据单元TPDU 4. 伯克利套接字Socket 客户端 第2节 传输协议要素 1. 传输层与数据链路层的 ...

  8. 《计算机网络--自顶向下方法》第三章--运输层

    3.1概述和运输层服务 运输层协议为运行再不同主机上的应用进程之间提供了逻辑通信(logic communication)功能 运输层协议是在端系统中而不是在路由器中实现的 3.1.1运输层和网络层的 ...

  9. 计算机网络-自顶向下方法(7th) 第一章 Review Questions 中英对照

    SECTION 1.1 R1 What is the difference between a host and an end system? List several different types ...

最新文章

  1. 彻底解决Linux索引节点(inode)占用率高的告警
  2. matlab怎么分析一段音频,Matlab分析音频
  3. centos7 安装php nts,centos7安装php7,亲测可行
  4. 巧用windows快捷键
  5. 的微波感知_微波遥感的特点
  6. Altium Designer 18 怎么导出CAD文件
  7. 《从零构建前后分离的web项目》准备 - 前端了解过关了吗?
  8. 在.net 当中如何XML序列化一个Collection
  9. Pr人像视频后期处理磨皮美白插件工具素材【汉化】
  10. 数字逻辑实验-交通灯控制设计
  11. python正态分布代码_Tests for normality正态分布检验(python代码实现)
  12. comsol显示电场计算结果_comsol电磁场仿真案例
  13. 使用torchvision 中的roi_pool/roi_align函数时报错
  14. 每日一滴——更新pycharm_nltk包中模块的安装
  15. 分享一个强大的在线写API接口文档的工具showdoc
  16. C语言strchr()函数以及strstr()函数的实现
  17. HDOJ 4069 Squiggly Sudoku 精确覆盖+搜索
  18. 在x86汇编中将寄存器设置为零的最佳方法是什么:xor,mov或?
  19. AgentWeb 介绍
  20. 终于,月入 20000 !!

热门文章

  1. 为什么文本框里的字只显示一半_word字体显示不全及显示一半怎么回事?
  2. CAN 数据帧,远程帧,错误帧,以及出错重连
  3. vue中控制浏览器滚动
  4. 祝福 Eric 的下一段旅程|Flutter 3.3 现已发布
  5. 乌镇·Conflux CTO伍鸣:让公链的“不可能三角”成为可能
  6. networkx igraph相互转换+效率比较
  7. 安卓开发用什么语言?Jetpack-MVVM-高频提问和解答,Android校招面试指南
  8. 有你真好,我的程序员老公
  9. wps大纲栏显示在右边_5分钟帮你搞定PPT!金山偷偷上线WPS智能PPT完全免费
  10. 数仓实时数据同步 debezium