网页制作的收获与体会,襄阳seo营销,山东济宁,个人社保缴费多少钱一个月【事先声明】 这是对于中科大的计算机网络的网课的学习笔记#xff0c;感谢郑烇老师的无偿分享 书籍是《计算机网络#xff08;自顶向下方法 第6版#xff09;》 需要的可以私信我#xff0c;无偿分享#xff0c;课程简介下也有 课程链接 目录 传输服务与协议网络层与传输… 【事先声明】 这是对于中科大的计算机网络的网课的学习笔记感谢郑烇老师的无偿分享 书籍是《计算机网络自顶向下方法 第6版》 需要的可以私信我无偿分享课程简介下也有 课程链接 目录 传输服务与协议网络层与传输层 多路复用与解复用TCPUDP 无连接传输UDP用户数据报 可靠数据传输rdt原理问题逻辑当底层信道是完全可靠的接收方与发送方 具有比特错位的底层信道FSM描述自动重传协议ARQ缺陷版本2对于发送方而言对于接收方而言 具有比特错位与分组丢失的底层信道 流水线通用滑动窗口协议发送缓冲区发送缓冲区的大小发送窗口接收缓冲区接收窗口接收窗口尺寸等于1GBN回退N步发送方接收方 接收窗口尺寸大于1选择重发SR发送方接收方滑动发送确认 对比 面向连接的传输TCP三次握手MSS最大报文段长度TCP报文段格式序号32比特确认号32比特接收窗口 TCP的往返延时RTT和超时如何估计RTT指数移动加权平均RTT的波动影响 TCP可靠数据传递TCP基于IP建立了RDT协议超时重传情况一情况二 快速重传伪代码 流量控制目的捎带技术 连接管理三次握手四次挥手 拥塞控制原理拥塞的代价与原因两个发送方和一个无穷大缓存的路由器两个发送方和一个有限缓存的路由器多个发送方多台路由器 控制方法端到端的拥塞控制网络辅助的拥塞控制ATMABR服务 TCP拥塞控制端到端的控制机制如何检测拥塞某个段超时丢失拥塞3个冗余ACK轻微拥塞 如何控制端的发送速率超时三次冗余ACK正常情况 TCP拥塞控制与流量控制的联合处理控制策略慢启动线性增乘性减 TCP的公平性 传输服务与协议
为运行在不同主机上的应用进程提供逻辑通信
逻辑上应用层的进程可以直接与另一主机上的进程进行通信通过套接字即可
实际上需要传输层以及底下的协议栈提供服务。
发送方将应用层的报文分成合适的报文段加上本层报头然后传递给网络层接收方将报文段进行报头解析然后重组成报文传递给应用层 传输层协议有TCP或者UDP协议两种选择 网络层提供的是端到端主机到主机之间的服务传输层在网络层的基础上提供更加细分的服务从进程到进程之间的服务。
网络层与传输层
网络层主机之间的逻辑通信
传输层进程之间的逻辑通信
依赖于网络层的服务延时、带宽无法改善增强网络层的服务顺序混乱、数据丢失、加密
多路复用与解复用
TCP
以TCP为例应用层建立TCP套接字 应用层调用传输层的服务需要提供的信息有数据报文与socket套接字—两个参数
在传输层中通过使用套接字中的源PORT与目标PORT封装报头然后向下传输在网络层中使用套接字中的源IP与目标IP封装成IP的报头。
分组到达目标端后依次进行报头解包向上提供有效载荷部分网络层还需要提供源IP与目标IP在传输层中根据这些数据再解包出来的源RORT与目标PORT根据这四个数据可以确定对应的套接字然后根据套接字可以确定目标进程。
UDP
套接字结构 逻辑概念图 进程调用传输层的UDP服务需要向下提供数据部分、套接字、目标IP与PORT—三个参数UDP使用套接字中的源PORT与传下来目标PORT进行报头的封装将数据报、套接字中的源IP、目标IP传递给网络层使用IP协议封装成IP数据报
在目标端中
网络层对IP报头进行解包给传输层提供源IP与目标IP以及有效载荷传输层对UDP报头进行解包给应用层提供目标PORT与目标IP可以确定一个套接字既可以找到目标进程
在网络传输的过程中只要四元组 ( 源 I P 源 P O R T 目标 I P 目标 P O R T ) (源IP源PORT目标IP目标PORT) (源IP源PORT目标IP目标PORT)中的任何一个不一样访问的主机的进程都会是不一样的
无连接传输UDP
UDP在IP上并没有增加一些服务的性能报文可能丢失、乱序
接收端与发送端之间没有握手每个UDP报文段都被独立的处理
常用于 流媒体、DNS、SNMP一次传输搞定或者对速率要求高、丢失不敏感的类型。
用户数据报 校验和一种校验手段用于判断在传输的过程中数据是否出错
传输校验码在接收端会重新根据内容计算一遍来与校验和对比判断是否出错但是校验不一定是绝对正确的存在某些错误但是通过了校验。
报文段的头部很小有效载荷占比大所以传输速率高。
可靠数据传输rdt原理
在TCP协议中器可以建立一条可靠数据传输信道然后在进行有序的分组的传输。
不过传输层实现的有效数据传输协议的下层协议是不可靠的要在一个底层不可靠的协议上实现可靠的传输协议。 问题逻辑 由于底层信道的不可靠性导致rdt协议会比较复杂。
当底层信道是完全可靠的
没有比特出错没有分组丢失
接收方与发送方
发送方将数据打包发送到下层信道接收方从下层信道接收数据
底层信道完全可靠不需要上层采取什么措施来保证数据可靠
具有比特错位的底层信道
假定底层信道的分组发送是按照顺序被接收的不过在发送的过程中会存在一些比特错位的情况物理部件中
发送端发送分组后接收端接收需要对分组进行校验校验成功发送给接收端一个(ack)的信号表示确认收到。
如果校验失败接受方发送一个(nak)的信号要求发送方再重传一次。
发送方发送一个分组后再缓冲区中还需要留这个分组一个备份等接受方发送一个ack的信号后再跟新缓冲区发送下一个分组。如果收到一个nak的信号则从缓冲区中将备份重传一遍等待信号。
FSM描述 自动重传协议ARQ
需要三种协议来处理比特差错的情况
差错检测校验算法接收方反馈确认收到ACK否定确认重传NAK重传发送方会重传该分组
缺陷
不过有一个问题没有考虑到接收方反馈信号受损的情况发送方没有收到ack或者nak。
在分组之间引入一个字段代表序号
如果两个信息的序号一样说明是处于重传的情况。序号改变了说明这传递的是一个新的分组。
如果发送方发送了分组序号0接收方发送一个ack但是ack受损本来发送方是希望接收到ack或者nak但是出现了其它的情况发送方就会重新把序号0的分组发送给接收方接收方收到判断处前后两个分组的序号一样就会再次发送ACK同时一直等待直到接收到前后两个序号不一样的分组接收方就直到上一个状态结束了继续去等待收到下一个序号不一样的分组。 分组的序号一样说明一直在重发接收方与发送方在等待同步分组的需要不一样说明进入了下一个阶段
接收方在收到分组时序号为0如果校验通过发回一个ack然后等待发送方发一个序号1的分组如果任然接受到的序号为0说明发送方接收到的数据有误则 会继续等待同时发送一个ack给发送方希望发送方可以同步上来 版本2
如果对于接收方的确认信息ack或nak如果不发送nak通过序号与ack的结合也可以达到nak的效果。
对ack进行编号。
接收端收到的分组校验失败时需要发送端重新发送一份接收端会发送nak发送端需要重新发送分组的情况有nak出问题了或者分组发送校验失败两个情况都需要重新发送一份分组 所以当分组为0时发送端接收到ack0时说明双方正常可以进行下一次分组发送同时序号变为1发送端接收到ack1时说明需要重新发送一份序号0的分组。
接收方当校验失败时发送一个ack1需要发送方重发等待正常的序号0分组当接收到一个序号0分组时发送一个ack0表示可以进行下一步等待序号1的分组。当收到一个序号0分组时说明发送方正在重传发回一个ack0等待发送方发送序号1的的分组进入下一步。 此时状态0等1可以进入下一步 此时状态1等0可以进入下一步 对于发送方而言
发送的分组0接收到ack0则发送下一个分组接受到ack1继续发送分组0同时等待收到ack0发送的分组1接收到ack1则发送下一个分组接受到ack0继续发送分组1同时等待收到ack1
对于接收方而言
接收到分组0校验成功发送ack0等待收到分组1进入下一步;校验失败发送ack1等待。
具有比特错位与分组丢失的底层信道
当发送方发送一个分组然后等待ack但是分组丢失了而接收方又没有收到分组在等待分组双方都在等待对方的信号这样会造成死锁无法向下进行。
引入了超时重传机制等待超过一定时间就会重传一次分组。
对于发送方等待超时的情况下发送方不知道是分组丢失还是ack丢失直接发送方重传一份。
如果是ack丢失发送方重新发送一份对于接收方而言不过是重新接受一份继续等待。
当定时设置的合适时效率是正常的如果定时设置的不合理则会导致其性能严重下降。
当rdt3.0在信道较大带宽大的情况下会出现吞吐量很低的情况传输延时距离长较大会造成利用率非常低因为RTT时间长。大部分时间都花在传输上。因为rdt3.0模式下信道中只能有一个分组进行传输严重浪费了带宽资源引入流水线技术。
流水线
一个信道种传输多个分组当一个分组发送刚出去后立马发送下一个分组…
所以发送端要准备一个缓冲区将发送出去的分组暂存在缓冲区如果发送失败了还能重发 通用滑动窗口协议
发送缓冲区
内存中的一个区域落入缓冲区的分组可以发送用于存放已经发送但是没有得到确认的分组发送窗口当需要重发时必要
发送缓冲区的大小
一次可以发送分组的数量
num1时就是停止等待协议num1时合理的值不能很大链路利用率不能超过100%表示缓存区存放的分组总和有限
由于要求链路的利用率不能超过100%且链路的容量是指带宽大小带宽是有限的所以对于缓冲区能存放的分组的大小是有限的。
发送窗口 在发送缓冲区中缓冲区不一定被待发送的分组全部占满了 缓冲区中那些已发送但未确认的分组的序号构成的空间 发送窗口的最大值是要发送缓冲区的值
接收缓冲区
一次最多可以接收存储多少分组
接收窗口
接收窗口才是决定到底一次性接收多少分组
接收窗口尺寸等于1GBN回退N步
当接收窗口为1时按照顺序向后滑动接受完0号分组再去接收1好分组
当窗口在2号位置上等待接收如果三号分组来了是不会接收的抛弃掉只有接受完2号分组才回去接收下一个。
同时接收端发送一个ack1表明1号分组已经接收同时根据rdt的理论这是在向发送端说在等待2号分组的接收。
如果接收窗口在2号分组的位置上且来了3、4、5…其它分组的接收窗口都不会接收会将他们抛弃掉同时向发送端发送一个已接收的最高分组的ack根据rdt的理论这个表明接收端正在等待下一个序号的分组还没接收到。
发送方
依次流水线发送发送窗口中的分组只有最低序号的分组得到确认窗口才能向前移动
如果发送方一直收到的是已经发送的最高序号的ack那么说明接收方一直没接收到需要重传则会将窗口中的所有分组都进程重传
定时器只有一个在发送方发送了分组后就会开启定时器定时器结束前没有接收到ack就会将窗口内的分组全部重新发送一遍。
接收方
其接收窗口的大小为1这样要去顺序接收如果当前序号的分组没有被接收后面序号的分组如果到来是会被抛弃因为要保证分组的有序性
接收窗口尺寸大于1选择重发SR
只要在接受窗口的范围内是可以乱序接收的接收到分组后然后向发送端发送一个ack对应接收的分组序号。
如果窗口的第一个位置的分组丢失了而后面的分组都被接收了会有超时重传重新发送发送窗口中的分组。
当最低序的分组被接受后就可以让窗口向后滑动了滑动到没被接收的位置。 都是要在rdt3.0协议下进行的流水线改造 发送方
发送窗口中的分组要依次进行发送为避免分组丢失会为窗口中的每一个分组都准备一个定时器发送后开始计时。当接收到对应的ack后窗口就会向后滑动。
如果定时器到了就会将发送窗口中的未确认的分组重发一次。
接收方
在接收窗口的内部是可以乱序接收的然后将其存在缓存区的对应位置上当最低序号的分组都被接收了接收窗口才能向后移动。
接收窗口中的每一个分组被接收后都会发送一个独有的信号告诉发送方该分组已经接收可以停止计时。
滑动
低序号的分组接收接收窗口向后滑动
高序号的分组到来窗口内的乱序接收因为要保证rdt所以必须保证分组有序不滑动
发送确认
收到那个分组就发送那个分组的确认信号。
发送窗口发送数据接收窗口接收数据接收窗口滑动接收端发送确认发送窗口滑动
对比 SR会为每一个分组都准备一个定时器而GBN则是顺序接收只会为发送窗口中的第一个准备定时器如果超时会将发送窗口中的分组都发送出去。 面向连接的传输TCP
提供点到点之间的通信一台主机对一台主机无法做到一对多的广播模式
TCP连接只在端系统中运行在网络核心中的网络元素路由器与交换机并不会维持其连接状态对于网络元素其看到的只是数据报并不会专门提供一条线路维持其连接。
TCP连接提供的是全双工服务当两台主机上的进程建立了TCP连接后两个进程之间可以互相传递数据而不是单向的数据传递。
三次握手
客户进程首先发送一条特殊的TCP报文段没有有效载荷服务器用另一条特殊的TCP报文段来响应没有有效载荷客户端用第三个特殊的报文段作为响应承载有效载荷
MSS最大报文段长度
指应用层数据最大字节数
MSS是由从源主机到目标主机的路径上所有链路上所能够发送的最大链路层帧最大传输单元以太网与PPP链路层协议都是1500个字节的MTU
TCP报文段包括40分字节的报头加上1460个字节的应用层数据段。
最大对于应用层的数据只能封装成这么大如果太大就要对数据进行切分然后再封装。
TCP为每块客户数据块配上一个TCP首部形成多个TCP报文段这些报文段被传递给网络层通过一连串的路由器与交换机的链路层与物理层最后到达服务端的TCP连接接收然后放入TCP接收缓存中这个缓存应该是在OS提供的一块缓存区。
TCP连接的每一端都有各自的发送缓存与接收缓存。
两台主机之间的网络元素并没有为连接提供任何的缓存与变量。
TCP报文段格式 序号32比特
这个是对于应用层的数据段被分割成一块块的MSS然后封装这个是对于各块MSS在原数据段中的对于第一个字节的偏移量 TCP报文段中载荷部分的第一个字节在整个应用层数据流中的偏移量。 确认号32比特
任何一个TCP的实体既是接收方也发送方。
在主机A与主机B建立了TCP连接当主机A发送一串数据给主机B主机B也会给主机A一个反馈报文段当主机B收到主机A发送的0-533序号的所有字节主机B会等待主机A发送534及其之后的报文段字节主机B就会发送一个确认号为533的报文段向主机A表明533及其之前的报文段都已经被接受了等待后面的报文段。
对于乱序到达的报文段可以选择缓存SR也可以选择抛弃BGN。
接收窗口
用于流量控制愿意接收的字节数量
TCP的往返延时RTT和超时
超时设置要大于RTT时间
如果超时设置较小则会造成主机B还没反馈就又发送报文段会发送很多的重复报文段
如果超时设置较大会造成需要重传时造成很大的延时。
如何估计RTT
长时间的主机访问的RTT虽然是符合正态分布的但是无论怎样设置都会造成较大的问题。
但是短时间的主机访问RTT的时间是非常集中的所以超时设置应该是一个动态的自适应参数
在一个局域网中RTT非常小但是对于两个进程之间的TCP通信这个RTT会不太确定影响很多。
所以需要时不时的去测量RTT来动态的调整超时。
指数移动加权平均 当前采样值对于整体值的影响会随着时间采样次数的增加而呈指数规律越来越小。
RTT的波动影响 TCP可靠数据传递
TCP是一种流水线的数据传输协议而流水线的协议由两种GBN与SR
TCP的数据传递是两种的混合体
TCP基于IP建立了RDT协议
管道化的报文段GBN或者SR累计确认通过报文段中的确认号类似于GBN单个重传定时器只与最”老“那个报文段相关联如果超时就会重发最老的那个报文段SR与GBN的结合接收方对于乱序没有规范可以接收也可以抛弃 超时重传 当过早超时时发送方会发送最老的那个报文段然后接收方就会发送最新的预期确认号这样就可以让发送方关掉定时器发送预期的报文段。 接收方发送的确认是累计确认是最新的期望接收的报文段 情况一 情况二 快速重传
如果发送方收到了3个冗余的ACK收到了3个确认号一样的ACK说明发送方发送的那个报文段丢失了因为是流水线持续发送报文段。
这样不用等到定时器触发直接重发一份。
这个时机比超时重发更早一些提高速度
接收方发送的报文段的序号是要大于接收到的ack这样可以检测出接收方的报文段缓冲区存在间隔 伪代码 流量控制
目的
接收方控制发送方的发送速率不让发送方发的太快、太多而导致接收方的缓冲区溢出。
通过TCP报文中的接收窗口这个字段接受方发送给发送方可以让发送方知道接收方的接收缓冲区中还有多少空间
捎带技术
TCP连接是可以双向通信的进程A发数据给进程B进程B也要发数据给进程A。进程B收到进程A的数据需要将ACK发送给进程A但是这个ACK可以和进程B发给进程A的数据在一个报文段中一起发回去TCP报文段也提供了这个格式。
连接管理
在正式交换数据之前接收方与发送方需要三次握手建立连接关系
同意建立连接双方都知道对方愿意建立连接同意连接参数准备资源维护变量参数
三次握手 第二次握手后双方就可以开始随机初始化自己的初始序号 在第三次握手后再开始分配资源如果再前两次握手会存在大量的办理按揭同时会消耗大量的系统资源一种攻击手段。
四次挥手 两个半连接的互相拆除。
客户端确认关闭连接后双方为了TCP连接准备的资源就会被释放。
通过携带技术服务端的FIN报文段可以携带对客户端回应的ACK
拥塞控制原理
与流量控制不同拥塞控制是出现在网络中针对分组的丢失率与延迟的处理
对于网络核心中的元素路由器与交换机
分组丢失路由器缓冲区溢出分组延时高出现拥塞的情况下分组排队的时间很长
拥塞的代价与原因
两个发送方和一个无穷大缓存的路由器
对于路由器的带宽给两个发送方提供服务作为一个共享带宽一个发送方最大享用R/2的带宽
随着发送方的发送速率越来越大了则在缓冲区的排队的分组也越来越多。当一个发送方占用的带宽达到R/2时说明共享链路的流量强度以及达到上限。 分组发送中的延时也会越来越大并且指数级增长。
两个发送方和一个有限缓存的路由器
都知道路由器的缓冲区一旦溢出对于新到来的分组就会被丢失
这样会触发发送方超时重传的机制会重新发送分组。
一种理想情况当缓冲区每空出来一个位置就会有一个重传的分组到达去占据这个位置
另一种情况当分组在缓冲区中排队延时超过一定时间会引发重传机制会再次发送一份分组或许时间一长多次路由器中的排队延时会多次重传就会造成很多不必要的分组重传会加剧网络的拥塞程度同时会造成吞吐率下降即有效的传输会严重下降。
多个发送方多台路由器
多个发送方说明网络的拥塞会急剧上升多台路由器会出现多个拥塞的节点
当一个发送方需要经过多台路由器才能到达接收方如果前几个录用其出现拥塞然后发送方会发送大量的重传分组然后某个分组到达一个新的路由器时那个路由器因为缓冲区溢出而抛弃那个分组这样会造成大量的传输能力的浪费会造成链路的带宽的浪费会加剧网络的拥塞程度。
控制方法
端到端的拥塞控制
网络层不会为传输层提供信息端系统必须通过对网络层数据状态的观察来推断网络中是否出现拥塞
TCP连接通过对报文段的丢失或者收到3次冗余的报文段来判断网络是否出现拥塞一种推理方法。
当推断网络出现拥塞时会响应的减少发送速率当网络情况良好的时候会提高发送速率。
网络辅助的拥塞控制
网络中的组件路由器会向发送方的传输层提供网络的拥塞状况可以很简单的使用一个比特位来表明链路中的拥塞状态让发送方调整自己的发送速率以抑制网络拥塞的恶化
拥塞信息的传递有两种
直接由网络路由器发送一个分组给发送方告诉发送方拥塞情况对于发送方发向接收方的分组中通过某个字段标记来表明网络拥塞然后让分组到达接收方由接收方发送一个拥塞分组告诉发送网络拥塞了这个往返方法至少需要一个RTT的时间还存在丢失的情况。
ATM
该网络的交换数据单元叫信元
信元只有53个字节远小于分组的大小所以其在链路上的传输速率要比分组快虽然比线路交换慢。
ABR服务
在ATM网络中网络不发送拥塞的情况会提高传输速率尽可能利用可用带宽在网络拥塞的情况会限制传输速率。
信元分为数据信元与资源管理信元大部分是数据信元中间残差了少量的资源管理信元
在资源管理信元中由两个比特位一个表示轻微拥塞一个表示重度拥塞在经过交换机时交换机会根据情况来设置资源管理信元的标志位。
发送方将一组信元发送给接收方经过一连串的交换机到达接收方后接收方不做处理资源管理信元被接收方原路返回给发送方告诉发送方网络的拥塞情况。
资源管理信元中还存在一个字段ER在资源管理信元经过一个个交换机后可以知道所有交换机可以位会话提供最小的带宽是多少可以让发送方调整发送速率改善网络拥塞情况
TCP拥塞控制
如果是网络辅助的拥塞控制虽然可以提高网络的拥塞控制能力但是会增加网络的负载增加路由器的负担代价比较大。
端到端的控制机制
网络路由器不提供信息而是靠端自己获得的信息来判断网络是否发送拥塞
路由器负载较轻符合网络核心简单的TCP/IP架构原则
如何检测拥塞
某个段超时丢失拥塞
超时定时器的时间到了但是那个段的确认却没收到
网络拥塞某个路由器缓冲区溢出然后被丢弃了经过多个路由器中排校验失败因为各级错误没有通过校验而被丢失概率小
虽然一旦超时就认为拥塞是存在问题的但是总体的大方向控制是没有错误的
3个冗余ACK轻微拥塞
收到第一个ACK正常收到确认信号后面收到3次同样的冗余ack说明这个分组丢失了但是又没触发定时器提前重传 网络还能进行一定程度的传输说明网络存在一定轻微的拥塞
如何控制端的发送速率
为此一个变量CongWin在对方未确认的情况下可以往网络中发送多少字节
发送速率 r a t e C o n g W i n R T T rate\dfrac{CongWin}{RTT} rateRTTCongWin表明单位时间内可以往网络中注入多少字节
超时
会将CongWin的发送速率调整为1个MSS进入到一个慢启动SS的阶段然后倍增到CongWin/2每个RTT进入到拥塞避免CA阶段
三次冗余ACK
CongWin降为CongWin/2进入CA阶段
正常情况
发送方收到正常的ACKCongWin会逐步增加
SS阶段成倍增加每个RTTCA阶段线性增加每个RTT
TCP拥塞控制与流量控制的联合处理
发送方控制发送但为确认的量同时也不能超过接收窗口需要满足流量控制
SendWinmin{CongWin,RcvWin}满足拥塞控制与流量控制
控制策略
慢启动
刚开始CongWin等于一个MSS然后从下一次开始每次发送是之前一次的两倍相当于指数级增加。
线性增
当出现超时的情况时将阈值设置为CongWin/2然后CongWin变成1MSS开始倍增当倍增到阈值时就停止倍增然后以每次增加一个MSS的速率增加探测更加准确的阈值。 乘性减
一旦出现超时或者冗余ACK就会将阈值设置为原先的一半CongWin变成1个MSS重新倍增。
维持一个变量Threshold表示CongWin成倍增加的阈值。出现丢失时就设置为CongWin/2 TCP的公平性
两个TCP会话都需要通过一个瓶颈链路链路带宽为R两个会话的RTT相等
因为拥塞控制的阈值每次回变为CongWIn的一半最后回收敛为两个会话各自占用一半的带宽