计算机网络 第三章 传输层

news/2024/11/30 15:26:33/

两大问题:

1.将网络层在不同端系统之间的通信服务扩充到运行在两个端系统上不同的应用层进程之间的通信服务(如何实现进程之间通信的可靠传输

2.控制传输层实体的传输速度以避免网络拥塞或者从网络拥塞中恢复过来

3.1 概述和传输层服务

·传输层协议为运行在不同端系统上的应用进程之间提供逻辑通信功能

·传输层协议是在端系统中实现的而不是在路由器中实现的

·路由器不会检查封装在数据报中的传输层报文段的字段

·两种传输层协议:TCP、UDP

3.1.1 传输层与网络层的关系

①网络层提供主机之间的逻辑通信而传输层为运行在不同主机之间的应用进程提供逻辑通信

②传输层协议能提供的服务常常受制于底层网络层协议的服务类型

③即使底层网络协议不能在网络层提供响应的服务,运输层协议也能提供某些服务。例如,即使底层网络协议是不可靠的,运输协议也能为应用程序提供可抗的数据传输服务。

3.1.2 因特网传输概述

·UDP(用户数据报协议):不可靠、无连接的服务

        服务:进程之间的数据交付和差错检查(通过首部添加差错检查字段)

·TCP(传输控制协议):可靠、面向连接的服务

        服务:a.可靠数据服务

                   b.提供拥塞控制

                   c.差错检查

3.2 多路复用和多路分解

·定义:传输层从同一台主机上的不同Socket接收数据的过程称为多路复用;传输层向同一台主机上的不同Socket传输数据的过程称为多路分解

·补充:需要标志套接字来实现,每个套接字都有一个唯一的端口号;端口号0~65535,0~1023well-know port

·无连接的多路复用与多路分解(UDP)

*在创建Socket的时候,是由传输层为之分配端口号;一个UDP套接字是由一个目的IP地址和目的端口号即二元组来标志的

·面向连接的多路复用与多路分解

*TCP协议中的Socket是通过一个四元组来标记的:(源IP地址,源端口号,目的IP地址,目的端口号)

*一个应用进程可以关联多个Socket,而一个Socket将只关联一个应用进程

        (socket通常是和进程中的线程相关联)

3.3 无连接运输:UDP

(无连接是指在发送报文段前,发送方和接收方的传输层实体之间没有握手)

·优点:①关于何时、发送什么数据的应用层控制更为精细

            ②无需建立连接,不会引入额外的时延(DNS)

            ③无需维护连接状态,减少了时空开销

            ④分组首部更小(TCP20字节,UDP8字节)

·注意:UDP也可实现可靠数据传输,只不过这一部分功能需要在应用程序中自主开发;将可靠性直接构建于应用程序中,将使其既可以可靠地传输数据又可以避免受制于TCP的拥塞控制

3.3.1 UDP报文结构

·长度:包含首部在内的UDP报文段长度

·检验和:发送方将前三个字段做按位加运算,然后将其取反作为校验和;

                然后接收方对所有四个字段(每个字段16位)进行求和,如果没有出现差错,则最后的结果全是1

·端到端原则:“因为某一功能必须在端到端实现,与在较高层次提供这些功能的代价相比,在较低层次上设置的功能可能是冗余的,或者根本是没有用的”

3.4 可靠数据传输原理

3.4.1 构造可靠信道的可靠数据传输

一个可靠数据传输协议,将要面对以下问题:分组丢失、分组损坏到达、分组乱序到达

总结可靠传输需要的技术:检验和、序号、定时器、肯定和否定确认分组。

·(1)经完全可靠信道的可靠数据传输:rdt 1.0

        ①底层信道完全可靠,但现实基本不存在

        ②横线上方是引起变迁的事件,下方是采取的动作;如果缺少动作或时间,在横线上方或下方使用符号A

        ③有限状态机FSM的初始状态用虚线表示

·(2)经具有比特差错信道的可靠数据传输:rdt 2.0

        ①假设所有发送的分组都可以按其发送顺序被接收

        ②基于重传机制的可靠数据传输协议称为自动重传请求协议(ARQ)

        注:ARQ协议中还需要另外三种协议功能来处理存在比特差错的情况:差错检测,接收方反馈(增加了ACK和NCK),重传

        ③缺点:没有考虑到ACK/NAK分组受损的可能性

解决办法:a.增加足够的校验和比特

                  b.当接收到模糊不清的ACK/NAK时,重传当前数据分组(冗余分组)

        ④rdt2.0的发送端每发送一个分组需要等待接收端的确认信号,这种协议被称为停等协议。

·(3)rdt2.1

由于rdt2.0中产生的冗余分组问题,接收方无法知道接收到的分组是新的还是上一次的重传;解决办法就是添加一个数据分组的序号字段(停等协议)

·(4)有比特差错信道上实现的一个无NAK的可靠数据传输协议rdt2.2

注意:接收方此时必须包括由一个ACK报文所确认的分组序号(和rdt2.1的区别)

·(5)经具有比特差错的丢包信道的可靠数据传输:rdt3.0(比特交替协议)

在rdt3.0中,不管是发送的分组丢失还是接收方返回的确认分组丢失,只要经过一定的时延后,都让发送方重发该分组。此时的冗余数据分组,则由接收方通过序号处理,需要一个倒计时定时器

3.4.2 流水线可靠数据传输协议

·使用流水线技术带来的影响

①增加序号范围

②协议的发送方和接收方两端必须能缓存多个分组

③所需序号的范围和对缓冲的要求取决于数据传输协议如何处理丢失、损坏及延时过大的分组

·流水线差错恢复的两种方法:

①回退N步(GBN)

②选择重传(SR)

3.4.3 回退N步(GBN)——滑动窗口协议

·发送方需要维护的数据

①N:窗口大小

②base:发送方已发送待确认的最早确认分组序号

③next sequence:未发送的分组的最早序号

·发送发需要响应的事件:

①上层调用:检查next Sequence是否在窗口之内,如果在,这说明发送方还有发送能力,发送之;

②收到ACK:当收到序号为n的ACK时,表明序号小于等于n的分组全部到位

③超时事件:如果发生超时事件,那么发送方会重发所有已发送但是未确认的分组,即分组号在base和next sequence-1之间的所有分组

·缺点:当窗口长度和带宽时延都很大时,单个分组的差错可能会引起GBN重传大量的分组,许多本不用重传的分组充斥在信道中,造成资源浪费

3.4.4 选择重传(SR)

·定义:选择重传就是让发送方仅重传那些丢失和受损的分组而避免不必要的重传

·SR发送方的事件动作:

①从上层接收数据:检查下一个可用于该分组的序号

②超时:每个分组都有单独的计时器

③收到ACK:若该分组序号在窗口内,则 SR 发送方将那个被确认的分组标记为已接收

·SR接收方的事件动作:

①序号在 [rcv_base,rcv_base+N-1] 内的分组被正确接收

②序号在 [rcv_base-N,rcv_base-1] 内的分组被正确接收

·注意:如果在分组中序号字段的位数为k,那么最大的序号为2^k-1,所以有可能不同分组同时占用一个序号,为了避免这种情况,需要做的是控制分组的生命周期。窗口长度必须小于或等于序号空间大小的一半

总结:可靠数据传输机制

(检验和,定时器,序号,确认,否定确认,窗口、流水线)

3.5 面向连接的TCP

3.5.1 TCP连接

·TCP提供点对点的全双工服务

·TCP建立过程中的“握手”阶段:

①一:发送方发送一个特殊的TCP报文段给接收方

②二:接收方收到该报文段后,对该报文段进行响应

③三:发送方接收到响应报文段后,发送第三个报文段(包含了有效负载

·MSS:TCP每次可以从缓存中发送的最大数据长度(1460字节)

·MTU:链路层最大帧长度(1500字节)

·一般,MSS+TCP/IP首部的长度要≤链路的MTU

3.5.2 TCP报文段结构

·首部长度:4比特

·TCP首部一般20字节

·主机A填充进报文段的确认号是主机A期望从主机B收到的下一字节的序号

·捎带(piggybacked):对客户到服务器的数据的确认被装载在一个承载服务器到客户的数据的报文段中

3.5.3 往返时间的估计与超时

·Sample RTT:从某报文段发出到收到对该报文段的确认之间的时间量

·Estimated RTT:Estimated RTT=(1-a)Estimated RTT+a*Sample RTT

估计RTT表示最近的网络状况(a一般取1/8)

·DevRTT:DevRTT =(1-b)DevRTT+b*|Sample RTT-Estimated RTT|

当Sample RTT变化较大的时候,DevRTT的值较大(b一般为1/4)

·超时:Timeout Interval=Estimated RTT+4*Dev RTT

(当出现超时后,timeout interval值将加倍

3.5.4 可靠数据传输

概要:IP协议是不可靠的,TCP协议在IP协议之上,提供可靠数据传输;TCP使用超时重传和冗余确认技术来处理超时、丢失等情况;使用确认、序号等技术来保证按序到达;使用校验和来检验是否报文段在传输过程中是否发生了错误

·超时时间加倍

·快速重传

3.5.5 流量控制

虽然流量控制和拥塞控制所采取的动作非常相似,但它们的目的明显不同;

流量控制解决的是发送方和接收方速率不匹配的问题,拥塞控制解决的是避免网络资源被耗尽的问题

·窗口大小空闲空间rwnd=buffer-(lastbyteRcvd-lastbyteRead)——动态的

3.5.6 TCP连接管理

·TCP三次握手

在通信开始前,发送方和接收方都得创建各自的传输控制块TCB

·为什么连接建立需要三次握手,而不是两次握手?

防止失效的连接请求报文段被服务器接收,从而产生错误

·四次挥手

·为什么A要先进入TIME-WAIT状态,等待后才进入CLOSED状态?

为了保证B能收到A的确认应答,如果A发完确认应答后直接进入CLOSED状态,那么如果该应答丢失,B等待超时后就会重新发送连接释放请求,但是此时A已经关闭了,不会作出任何响应

3.6 拥塞控制原理

3.6.1 拥塞原因与代价

·原因:网络中的分组太多,链路带宽和路由器缓存容量都是有限的

·代价:巨大的排队时延、发送方必须重传因缓存溢出而丢弃的分组

3.6.2 拥塞控制方法

·端到端拥塞控制

·网络辅助拥塞控制

注意:TCP必须使用端到端的拥塞控制而不是网络辅助的拥塞控制,因为IP并不会向端系统提供显式的网络拥塞反馈

3.7 TCP拥塞控制原理(计算题)

·慢启动:

①TCP连接开始时,拥塞窗口cwnd常设置为一个MSS,然后在慢启动状态,发送速率呈指数增加(1,2,4,8)

②何时结束这种指数增长?三种情况——ssthresh慢启动阈值

a.发生了超时,ssthresh被设置为当前cwnd的一半,cwnd置为1

b.收到冗余ACK(dup ack),TCP会做一次快速重传,然后进入快速恢复阶段

c.cwnd达到ssthresh,TCP结束慢启动进入拥塞避免模式

·拥塞避免

一旦进入拥塞避免状态,cwnd的值大约是上次遇到拥塞时的一半,所以TCP在每个RTT中,只将cwnd增加一个1个MSS大小;也就是说在拥塞避免阶段,cwnd是线性增加的;

·快速恢复

在快速恢复阶段,对于引起TCP进入该状态的缺失报文段,每收到一个ACK,cwnd增加一个MSS;最终,当对丢失报文段的一个ACK到达时,TCP降低cwnd后进入拥塞避免状态;如果出现超时事件,快速恢复在执行如同慢启动和拥塞避免中相同动作后,进入慢启动状态.


http://www.ppmy.cn/news/160836.html

相关文章

计算机系统结构 第四章 指令级并行

目录 4.1 指令级并行的概念 4.2 指令动态调度 ①动态调度与静态调度的区别 ②Tomasulo 算法基本思想、操作过程、状态表、保留站、缓冲器、寄存器状态表,具体怎样 4.3 动态分支预测技术 ①动态分支预测技术的概念,用来解决什么问题,与静…

制作PPT课件

点击下载 更多分享:www.diguage.xyz 好的PowerPoint课件需要有以下几点: PPT课件的首页要整洁 首页是一个PPT课件等待正式上课前使用的一个页面,一般来说是一个欢迎页面,这里不需要太多的内容,但可以稍华丽一点&…

锐捷网络有限公司自工序完结项目圆满结束

锐捷网络有限公司自工序完结项目圆满结束 2022年6月23日我司与锐捷网络公司的自工序完结项目顺利结束,并进行了最终的成果报告会议。本次报告主要围绕从3月开始的自工序完结试点项目的4个小组的成果进行汇报总结。 锐捷网络公司高管及项目相关人员均参加了本次报告…

面向对象 -- 类与对象(A版)

学习目标 1、理解Java面向对象的思想 2、掌握类与对象的定义和使用 3、掌握成员变量与局部变量的区别 4、掌握方法的定义与使用 5、掌握方法的参数传递 6、掌握方法重载的定义与使用第1章 面向对象思想 1.1 面向对象思想介绍 Java语言是一种面向对象的程序设计语言&#xff…

Mac中使用Docker搭建Redis Cluster集群

文章目录 写在前面一、环境准备1.系统版本2.确认Docker已安装3.拉取Redis镜像二、创建Docker容器网络1.创建虚拟网卡2.查看Docker网卡信息3.查看Docker网络详细信息4.补充(删除网卡信息、帮助命令)三、编写配置文件四、创建并启动容器1.启动Redis容器2.创建Redis Cluster集群…

《所谓情商高,就是会说话》读书笔记

文章目录 作者前言七个突破口使用原则七个突破口突破口一:投其所好突破口二:儆其所恶突破口三:选择的自由突破口四:被认可欲突破口五:非你不可突破口六:团队化突破口七:感谢 四个小技巧技巧一&a…

java第五天

第1章 面向对象思想 1.1 面向对象思想介绍 Java语言是一种面向对象的程序设计语言,而面向对象思想是一种程序设计思想,我们在面向对象思想的指引下,使用Java语言去设计、开发计算机程序。 这里的对象泛指现实中一切事物,每种事物…

ECMAScript(pink)

javaScript 一、计算机编程基础 计算机可以帮助人类解决某些问题程序员利用编程语言编写程序发出指令控制计算机来实现这些任务编程语言有机器语言、汇编语言、高级语言高级语言需要一个翻译器转换为计算机识别的机器语言编程语言是主动的有很强的逻辑性 计算机组成 硬件 输…