本文基于2019 王道考研 计算机网络: 2019 王道考研 计算机网络
个人笔记总结
第一章:王道考研 计算机网络笔记 第一章:概述&计算机网络体系结构
第二章:王道考研 计算机网络笔记 第二章:物理层

第三章:王道考研 计算机网络笔记 第三章:数据链路层
第四章:王道考研 计算机网络笔记 第四章:网络层
后续章节将陆续更新…

第五章

  • 一、传输层概述
    • 1. 功能
    • 2. 传输层两个协议
    • 3. 传输层的寻址与端口
  • 二、UDP协议
    • 1. 概述
    • 2. UDP首部格式
    • 3. UDP校验
  • 三、TCP协议
    • 1. 特点
    • 2. TCP报文段首部格式
    • 3. TCP连接管理(三次握手)
    • 4. TCP连接释放(四次握手)
    • 5. TCP可靠传输
      • 1. 校验
      • 2. 序号
      • 3. 确认
      • 4. 重传
    • 6. TCP流量控制
    • 7. TCP拥塞控制
      • 1. 慢开始&拥塞避免
      • 2. 快重传&快恢复

第五章大纲

一、传输层概述

传输层是只有主机才有的层次,也就是在端系统的两个主机之间才有传输层,如下图所示

1. 功能

  1. 传输层提供进程和进程之间的逻辑通信

    网络层为主机间的通信提供服务,但是仅仅将数据传送到主机并没有通信结束,只有将数据送交到具体的进程或者进程中具体的线程才能实现通信的过程;因此网络层的通信并未完成,需要传输层实现进程与进程之间的逻辑通信;逻辑就是表示表面是进程之间的通信,但实际上是从上至下封装,再从下至上解封装的过程

  2. 复用和分用

    复用:发送方不同的应用进程,比如qq微信,都可以使用同一个传输层的协议来传送数据

    分用:接收方在传输层解封装后,能将数据送交给对应正确的进程

  3. 传输层对收到的报文进行差错检测

    网络层有首部校验和,但只是校验首部,没有校验数据部分,因此就需要传输层实现对数据的检错,而网络层的数据部分就是传输层的报文段,因此传输层对这个报文段进行了差错检测,网络层就不需要对数据部分进行差错检测,检测IP数据报的头部即可

  4. 传输层并不一定实现可靠传输,因为有两种协议TCP、UDP


2. 传输层两个协议


3. 传输层的寻址与端口


常见的应用程序端口号

二、UDP协议

无连接不可靠的服务

1. 概述

注意

  • 应用层给UDP多长的报文,UDP就会照样发送一整个完整的报文给网络层

    因此当报文长度过大时,网络层就需要对其进行分片,又因为接下来要传给链路层有MTU的限制,降低了网络层的效率;如果应用层报文很小时,网络层IP数据报数据部分就会很小,相对于IP首部小很多,同样会降低网络层效率,因为首部附加信息相比来说应该尽可能小

  • UDP适用于实时应用的原因:实时应用要求延迟很低,丢一点数据不影响


2. UDP首部格式

  • 源端口号可有可无,如果发送的数据报需要接收回复,就添上;如果不需要收到回复,则可以设置全0
  • 目的端口号一定要有
  • UDP长度是指整个UDP数据报的长度 = 首部字段 + 数据字段
  • UDP检验和检测整个UDP数据报是否有错,也就是首部字段+数据字段,如果出错,直接丢弃;

有一种特殊的出错情况:分用时,也就是网络层交给传输层的数据报找各自所对应的应用进程,如果找不到对应的目的进程,则会丢弃该数据报,返回发送方ICMP“发送不可达”报文


3. UDP校验

伪首部只有在校验时出现,其他情况不会出现,长度为12个字节

如何利用伪首部进行校验?

发送端

  • 校验:添加12字节伪首部
  • 每行为4个字节,此时UDP首部检验和部分全0,数据字段不足填充0保证每行4个字节
  • 每一行(4字节)拆成左右2字节,用二进制表示,然后将全部的2字节相加求和
  • 求和结果取反,将结果填入UDP首部校验和字段
  • 去伪首部,发送数据

接受端

  • 校验:同样添加12字节伪首部
  • 同发送端一样,每一行(4字节)拆成左右2字节,用二进制表示,然后将全部的2字节相加求和;此时与发送端不同的是校验和不再是0,而是上述填充的结果
  • 判断结果,如果全1则无差错;否则丢弃数据报,或者不丢弃交给应用层并附上出错警告

三、TCP协议

有连接不可靠的服务

1. 特点

  1. 面向连接:使用TCP前必须先建立连接,传送数据完毕后再释放连接;虚连接表示表面上看上去是两个进程之间直接通信,但实际物理线路上需要从上而下封装再从下而上解封装
  2. 每一个TCP连接只有两个端点,也就是每一个TCP连接都是点对点、一对一的。所以TCP协议无法广播、多播
  3. TCP提供可靠交付的服务,不丢不重,按序到达
  4. TCP提供全双工通信。两方可以同时发数据也可以同时接收数据,所以TCP连接的两端都会设置发送缓存接收缓存
  5. TCP面向字节流是流入进程或从进程中流出的字节序列,虽然应用进程和TCP的交互是一次发送一个数据块,但是TCP会把交下来的数据仅仅看成一连串的无结构字节流


2. TCP报文段首部格式



六个控制位

URGPSH区别图示:

  • URG是从发送缓存中插队优先发送
  • PSH是从接收缓存中出来上交应用层


3. TCP连接管理(三次握手)



第一次握手:客户端A向服务器B发送连接请求

  • SYN=1:客户端A向服务器B发送连接请求报文
  • seq=x(随机):因为还没有数据,序号位随机产生

第二次握手:服务其B收到来自客户端A的连接请求报文段,同意A建立连接,返回连接确认

  • SYN=1:服务其B返回连接接收报文
  • ACK=1:连接建立之后的ACK必须都置为1
  • seq=y(随机):因为还没有数据,序号位随机产生
  • ack=x+1:与ACK成对出现,表示期待对方发送的第一个字节序号,之前客户端A发送的连接请求报文没有数据部分,即序号x标志着前面发的连接请求报文,所以服务端B想要收到的是序号为x+1的数据

第三次握手:客户端A收到了来自服务器B的连接接收报文,要返回一个确认的确认

  • SYN=0:SYN只有在连接请求和连接接受时才是1
  • ACK=1:连接建立之后的ACK必须都置为1
  • seq=x+1:客户端A发送的报文段的第一个字节就是x+1,之前已经发送了序号为x的数据
  • ack=y+1:前面服务器B发送了序号为y的连接接收报文,所以此时客户端A期待收到序号服务器B发送序号y+1的数据

上述第二次握手和第三次握手,服务器和客户端分别为TCP连接的过程分配了缓存和变量,就会导致一下SYN洪泛攻击的问题


4. TCP连接释放(四次握手)


第一次挥手:客户端发送连接释放,停止发送数据,主动关闭TCP连接

  • FIN=1:客户端A请求释放连接
  • seq=u:表示请求释放连接报文段第一个字节序号,但是这个报文通常没有数据,所以该序号标识这个连接释放报文段

第二次挥手:服务器收到客户端的连接释放请求,返回对释放连接的确认,客户端到服务端连接半关闭

  • ACK=1:连接建立之后的ACK必须都置为1,此时连接还没完全释放
  • seq=v:发了好多数据,这里只是用v指代一下
  • ack=u+1:期待收到客户端A发送的第一个字节序号为u+1的报文段
此时客户端A收到服务器B发来的连接释放确认报文段不需要回复,因为客户端A已经结束通话,只需要等待服务器B告诉它服务器也结束,此时服务器B还可以发送数据

第三次挥手:服务器发送完数据,发送连接释放报文段,主动关闭TCP连接

  • FIN=1:服务器B发送连接释放报文,此时连接还没完全释放
  • ACK=1:连接建立之后的ACK必须都置为1
  • seq=w:发了好多数据,这里只是用w指代一下
  • ack=u+1:之前客户端A说发送的是第一个字节序号为u的数据,所以此时服务器B希望收到首字节为u+1的数据,但由于不发数据了,所以第二段第三段的ack都是u+1

第四次挥手:客户端A收到来自服务器B的连接释放报文,返回一个确认报文

  • ACK=1:连接建立之后的ACK必须都置为1,此时连接还没完全释放
  • seq=u+1:之前发的数据时第u位数据,B也要第u+1位数据,所以我发第u+1位数据
  • ack=w+1:之前发送方(B)说发送的是第w位数据,所以我(A)要的是w+1位数据
此时TCP连接不是立马结束,而是等待2MSL之后,TCP连接才彻底释放,主要原因是防止客户端返回的确认报文丢失,给2MSL时间,如果丢失,则服务端重传连接释放报文段,A在2MSL之内收到重传的报文段,A在重新返回确认,也重新启动2MSL计时器

5. TCP可靠传输

网络层提供最大努力交付,是不可靠传输;因此需要上一层传输层担起可靠传输的职责;传输层有UDP、TCP两大协议;其中UDP不可靠,TCP可靠,因此网络层不能可靠传输的话,传输层就可以通过使用TCP协议保证可靠传输;如果传输层使用的UDP协议,就需要再最上一层应用层实现可靠传输

TCP一共有四种实现可靠传输的机制校验序号确认重传

1. 校验

与UDP校验一样,在发送方和接收方增加一个伪首部,通过使用二进制反码求和的计算方法,判断有没有出错


2. 序号

TCP协议面向字节流,因此TCP以字节为单位进行传输,会给每个字节编上序号;

实际发送的时候以报文段为单位,将一些字节合在一起组成报文段


总结

  • 一个字节占一个序号
  • 序号字段指的是一个报文段第一个字节的序号

3. 确认

有了序号机制保证了数据能够有序的提交给应用层,基于序号机制也就有了确认和重传机制

  • 发送方给接收方发送123字节组成的第一个报文段,接收方收到后存储在TCP缓存中,然后选择合适的时间将缓存中的报文段提交给应用层;此时发送方TCP缓存中仍会存在123报文段,为了保证报文段丢失能够重传

  • 接收方收到报文段后会返回一个确认报文段,可采用累积确认/稍带确认(接收方要发送数据给发送方携带确认信息)的方式;假如发送方发送一个只有确认功能的报文段,则报文段首部的确认号为4,表示已经收到123字节报文段,希望收到4字节开始的报文端;发送方收到确认报文段后,就会将123字节报文段从TCP缓存中移除;
  • 此时假设发送方继续发送456报文段以及78报文段,如果456报文段中途丢失;这是接收方就会采用累计确认的方法:返回的确认报文段首部确认号仍为4,但78报文段还会正常接收

4. 重传

确认机制和重传机制密切相关:如果报文段按序完整到达,接收方就会返回确认告诉发送方接下来要发送哪一个报文段;如果没有按序到达,接收方就会返回确认报文指示发送方应该重传哪一个报文段

TCP采用自适应算法,动态改变重传时间RTTs

  • 发送一个报文段时,RTTs=第一个报文段的RTT,也就是第一个报文段从发送到收到确认的时间
  • 发送第二个报文段时,RTTs根据第一个报文段的RTT和第二个报文段的RTT算出,作为现在的重传时间
  • 发送第三个报文段时,RTTs根据第一、二、三报文段的RTT算出,作为新的的重传时间

由此可见,RTTs取决于发送的每个报文端的RTT,这样的自适应算法能够很好的照顾到每个报文段,使超时重传时间不过长也不过短。

超时重传要一直在超时重传时间内等,直到超过时间还未确认才会重传,这个等待的时间可能会很久,那么如何能够在超时事件发生前知道发送方有没有丢掉报文段?尽快重传呢?于是有了冗余ACK的方式


6. TCP流量控制

TCP使用滑动窗口机制实现流量控制

  • 接收窗口rwnd
  • 拥塞窗口cwnd

发送窗口取决于rwndcwnd的最小值


7. TCP拥塞控制


拥塞控制有四种算法,通常两两组合使用

1. 慢开始&拥塞避免

纵坐标cwnd:代表拥塞窗口大小,单位代表一个报文段,长度是一个最大报文段长度MSS,因此纵坐标为几就表示几个MSS

横坐标传输轮次:一个传输轮次代表发送了一批报文段并收到确认的时间,也就是一个RTT

  • 起始时,拥塞窗口大小cwnd=1,表示一个MSS,慢开始就是表示起始只注入了一个报文段
  • 然后拥塞窗口大小cwnd每经过一个传输轮次以2的指数形式增长ssthresh是是慢开始门限,代表此时注入的报文段就比较多了,接下来可能发生拥塞,需要开始慢速增加了,进入到拥塞避免阶段。
  • 之后一段都是线性增长,加法增大,每一个传输轮次次增加1,直至达到网络拥塞状态
  • 到达网络拥塞后,瞬间将cwnd设置为1,同时调整原来的ssthresh的值到之前达到网络拥塞状态的1/2(这里是24降到12),然后重复以上步骤


2. 快重传&快恢复

同的慢开始&拥塞避免的起始步骤类似,都是先指数增长再转变为线性增长。不同点:

  • 在收到3个冗余ack确认后,立即执行快重传算法;ssthresh降到现在cwnd的一半,再重新线性增长。而不是像慢开始&拥塞避免等到网络发生拥塞时,cwnd降为1再重新慢开始

王道考研 计算机网络笔记 第五章:传输层相关推荐

  1. (王道考研计算机网络)第五章传输层-第一节:传输层概述、功能和端口

    指导获取:密码7281 专栏目录首页:[专栏必读]王道考研408计算机网络+湖科大教书匠计算机网络+网络编程万字笔记.题目题型总结.注意事项.目录导航和思维导图 王道考研408计算机组成原理万字笔记 ...

  2. 王道考研 计算机网络笔记 第六章:应用层

    本文基于2019 王道考研 计算机网络: 2019 王道考研 计算机网络 个人笔记总结 第一章:王道考研 计算机网络笔记 第一章:概述&计算机网络体系结构 第二章:王道考研 计算机网络笔记 第 ...

  3. 王道考研 计算机网络笔记 第四章:网络层

    本文基于2019 王道考研 计算机网络: 2019 王道考研 计算机网络 个人笔记总结 第一章:王道考研 计算机网络笔记 第一章:概述&计算机网络体系结构 第二章:王道考研 计算机网络笔记 第 ...

  4. 王道考研 计算机网络笔记 第三章:数据链路层

    本文基于2019 王道考研 计算机网络: 2019 王道考研 计算机网络 个人笔记总结 第一章:王道考研 计算机网络笔记 第一章:概述&计算机网络体系结构 第二章:王道考研 计算机网络笔记 第 ...

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

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

  6. 计算机网络:第五章 传输层

    5.1 运输层协议概述 从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层. 从通信和信息处理的角度看,运输层向它上面的应用层提供通信 ...

  7. 王道考研 计算机网络笔记 第二章:物理层

    本文基于2019 王道考研 计算机网络: 2019 王道考研 计算机网络 个人笔记总结 第一章:王道考研 计算机网络笔记 第一章:概述&计算机网络体系结构 后续章节将陆续更新- 第二章 一.物 ...

  8. 【计算机网络】第五部分 传输层(24) 拥塞控制和服务质量

    文章目录 24.1 数据通信量 24.1.1 通信量描述符 1. 平均数据速率 2. 峰值数据速率 3. 最大突发长度 4. 有效带宽 24.1.2 通信量特征值 1. 恒定比特率 2. 可变比特率 ...

  9. 王道考研 计算机网络笔记 第一章:概述计算机网络体系结构

    本文基于2019 王道考研 计算机网络: 2019 王道考研 计算机网络 个人笔记总结 后续章节将陆续更新- 目录 一.概念.功能.组成.分类 1. 计算机网络的概念 2. 计算机网络功能 3. 计算 ...

最新文章

  1. Oracle 11g Release 1 (11.1) PL/SQL_多维 Collection 类型和其异常
  2. Mac MySQL 数据库配置(关系型数据库管理系统)
  3. desktop docker 无法卸载_用containerd替换docker(shim)
  4. Redis 创始人宣布退居二线:我写代码只是为了表达自己!
  5. 【数据挖掘】决策树算法简介 ( 决策树模型 | 模型示例 | 决策树算法性能要求 | 递归创建决策树 | 树根属性选择 )
  6. [LeetCode]--63. Unique Paths II
  7. 入门Mac快捷键详细分类整理,包括Eclipse和Android Studio中一些常用的快捷键
  8. flink sql udf jar包_Java动态加载Jar实例解析
  9. java求多项式回归_多项式回归(Polynomial Regression)(附代码)
  10. day38 19-Spring整合web开发
  11. C#的float、double与decimal
  12. flink整合java,Flink使用SideOutPut替换Split实现分流
  13. 论文浅尝 - ACL2020 | 利用知识库嵌入改进多跳 KGQA
  14. 数据安全:通过Oracle的基本函数实现简单加密脱敏函数
  15. 【PostgreSQL】PostgreSQL安装步骤
  16. ECS服务器下挂载数据盘
  17. python中gensim内没有summarization的问题
  18. docker进阶与实战 3 理解docker镜像
  19. kafka是如何创建topic的
  20. esp32单片机入门学习

热门文章

  1. 2022-2028年中国公路客运行业市场研究及前瞻分析报告
  2. 【VB】学生信息管理系统4——数据库的发展
  3. java 16进制与图片互转
  4. 53个Python库,你必须要试试
  5. python的print格式化输出,以及使用format来控制。
  6. 北汽蓝谷极狐阿尔法S与T
  7. CMOS图像传感器与DDI显示芯片
  8. 在cuDNN中简化Tensor Ops
  9. 2021年大数据ZooKeeper(四):ZooKeeper的shell操作
  10. HarmonyOS Text超出部分末尾显示...