2020.10第四周总结

计算机网络

看的是计算机网络(自顶向下方法),上周看了应用层,传输层,网络层三个章节,从应用层的DNS域名解析系统开始总结。

1 应用层

1.1 传统的C/S模式

传统的C/S模式包含的协议有:域名服务(DNS协议),电子邮件(SMTP协议),文件传输(STP协议)以及Web服务(HTTP协议)。

1.1.1 资源记录(RR)

作用:维护 域名-IP地址的映射关系
格式:(域名,生存时间(ttl),类型,class,Value)

1.1.2 DNS协议、报文

DNS协议:查询和响应报文的报文格式相同
报文首部格式:
标识符(ID):16位
flags:

  • 查询/应答
  • 希望递归
  • 递归可用
  • 应答为权威

1.2 P2P模式

对等网络(P2P)技术,是相对于客户端/服务器(C/S)模式的一种网络信息交换方式,解决了C/S模式的单一失效点,单一服务器的CPU能力不足,网络带宽不足问题。P2P分为非结构化P2P,结构化(DHT)P2P。

非结构化P2P节点之间的关系是任意的。又分为:

  1. 集中式目录:当对等方连接时,它告诉中心服务器:IP地址,内容。
  2. 完全分布式:没有中心服务器
  3. 混合体:peer分为组长和组员,组长管理对应组员的目录。

结构化(DHT)P2P:具有环状结构,每个节点有唯一标识,且指向前驱和后继节点,这种结构多用于文件共享和作为底层结构用于流媒体传输。

1.2.1 P2P文件的分发:BitTorrent(比特流)

文件被分为一个个块,256KB,不同peer之间分享块。

Torrent(洪流):节点的组之间交换文件块

不同节点之间每隔一段时间分享bitmap(记录该peer是否拥有某一个块的二进制map,1代表有,0代表无)

1.2.2 多媒体流化的服务DASH

服务器将视频分为不同块,每个块独立存储(分为不同码率),同时发布告示文件(manifest file)提供不同块的URL。

客户端进行申请。

1.2.3 内容分发

内容分发网络(CDN):提供内容加速服务,解决服务器的性能瓶颈。实现方式:在用户和服务期间增加Cache(缓冲层),通过接管DNS实现,将用户的请求引导到Cache上获得服务器的数据。
实现需要的技术有负载均衡技术、动态内容分发与复制技术、缓存服务。

2 传输层

传输层的协议:TCP、UDP

TCP的Socket:按四元组区分不同应用进程(源ID,目标ID,源端口,目标端口)。

UDP通过报文段进行数据传输,接收方通过校验和进行校验,不通过则丢弃。

2.1 可靠数据传输(rdt)的原理

为了保证传输的可靠性,在传输层采用复杂的rdt(可靠数据传输协议),以完成网络的可靠性。

几个方法:

发送端

  • rdt_send():应用层调用,将数据交付给接收端的上层应用
  • udt_send():由rdt调用,将数据通过不可信信道传递给接收端

接收端

  • deliver_date():由rdt调用将数据交给上一层
  • udt_rcv():当数据报到达接收端时由rdt调用

使用有限状态机(FSM)来描述发送方和接收方。

rdt1.0

rdt1.0是基于理想情况下的协议,假设所有信道都是可靠的,没有比特位的翻转,没有数据包的丢失与超时,所以rdt1.0的传输功能就是发送方发送数据,接收方接受数据。

rdt2.0

新增三种机制:

  1. 错误校验。
  2. 接收者反馈接收信息(ACK,NAK)
  3. 重传机制

在传输层对应用层数据打包时,加入校验和,接收端进行校验和检验。正确则返回ACK,发送者继续传下一个包,错误返回NAK,发送者重传。

rdt2.0具有的问题:若确认信息传输错误,则无法进行正常数据传输。

解决:rdt2.1。

rdt2.1

给数据和确认信息加入编号,这时发送方存在发送0号和发送1号两种状态,接收方存在等待0号和等待1号两种状态。若ACK翻转,则接收方进入下一个等待状态,而发送方重传上一个数据,这时接收方会拒收,并返回之前状态的ACK,让发送方与接收方同步。

rdt2.2

在rdt2.1上进行了优化,只返回ACK,在ACK后加入期望的顺序号。

rdt3.0

rdt3.0之前的协议是不完备的,只考虑了比特翻转,未考虑数据包丢失问题,rdt3.0是完备的协议,又称stop and wait协议。

引入了超时重传机制,若经过一定时间发送方未收到反馈信息,重传刚才的分组。

存在的问题:信道容量大,传输延迟长时性能差(信息只能一个一个传,不能流式传输,相当于一个很长的高速上车子只能一辆一辆的跑)

问题解决:引用流水线协议

流水线协议

允许发送方在未收到反馈的情况下一次发送多个分组。主要的两个协议: 回退N重传协议(GBN:go-Back-N),选择重传协议(SR:selective repeat)。

实现协议需要:

  • 增加序号范围:用多个bit表示分组的序号
  • 在发送方、接收方要有缓冲区

几个概念:

  1. 发送缓冲区。rdt3.0中=1,流水线协议中>1
  2. 接收缓冲区。
  3. 发送窗口(SW)。发送缓冲区的子集,当前发送的分组
  4. 接收窗口(RW)。接收缓冲区的子集,只有窗口内的分组允许被接收。GBN协议中=1;SR协议中>1,可以乱序接收,但提交给上层的分组要按序。

GBN(回退N重传协议):

  1. 发送窗口大于1,接受窗口等于1。
  2. 发送者在流水线中最多有 N 个未确认的数据报。
  3. 接收者发送累计型确认,中间有丢失则不予确认。
  4. 发送者对最久未确认的数据报进行计时,如果计时器到点, 重传所有未确认的数据报。(只有一个计时器)

SR(选择重传协议):

  1. 发送窗口大于1,接受窗口大于1(意味着可以缓存出错位置之后的报文段),最好是两者相同,
  2. 发送者在流水线中最多有 N 个未确认的数据报。
  3. 接收者对单个数据报进行确认。
  4. 发送者对每一个未确认的数据报进行计时,如果计时器到点, 仅重传该个未确认的数据报。

2.2 TCP协议

特点:

  • 点对点
  • 可靠、按顺序的字节流
  • 管道化(流水线)
  • 发送和接收缓存
  • 全双工数据:在同一连接中数据双向流动,最大报文段大小(MSS)
  • 面向连接:数据交换前通过握手初始化发送方、接收方的状态
  • 有流量控制

报文段结构:32bit,前16bit存放源端口号,后16bit存放目标端口号。和UDP一样采用校验和进行错误检验(进位求和,尾端加1)。

TCP的往返延迟是波动的,所以超时无法设定为固定值,需要每隔一段时间测一下RTT(往返延时),动态的设超时。

2.2.1 TCP进行rdt

TCP在IP的不可靠服务的基础上建立了rdt,有管道化的报文段,累计确认(GBN)或单个确认(SR),通过超时或重复确认触发重传,具有快速重传。

2.2.2 TCP的流量控制

定义:接收方控制发送方,不让发送方发得太多太快。通过捎带技术实现。
捎带技术:接收方在其发送给发送方的TCP端头的rwnd字段“通告”其空闲buffer的大小。

2.2.3 TCP的连接管理:三次握手,两次挥手(对称连接释放)。

必要性:解决了半连接问题和老数据被当成新数据的问题。

  • 半连接问题:只有服务器端维护了虚假的半连接
2.2.4TCP的拥塞控制

拥塞的表现:

  • 分组丢失(路由器缓冲区溢出)
  • 分组经历比较长的延迟(在路由器的队列中排队)

2种常用的拥塞控制方法:

  • 端到端的拥塞控制(TCP采用的方法):没有来自网络的显示反馈;端系统根据延迟和丢失事件判断是否有拥塞。
  • 网络辅助的拥塞控制:路由器提供给端系统以反馈信息,单个bit置位,显示有拥塞(SNA,DECbit,TCP/IP ECN,ATM);显式提供发送端可以采用的速率。

端到端的拥塞控制:路由器的负担较轻,符合网络核心简单的TCP/IP架构原则。

拥塞控制的几个问题:

  1. 如何检测拥塞
  2. 控制策略

TCP拥塞控制的速率控制方法:

  • 维持一个拥塞窗口的值:congWin
  • 发送端限制已发送但是未确认的数据量,从而粗略的控制发送方往网络中注入的速率。

congWin是动态的,是感知到的网络拥塞程度的函数。

  • ss阶段(不拥塞阶段):加倍增加(每个RTT)
  • CA阶段(拥塞避免阶段):线性增加(每个RTT)
  • 超时:congWin降为1MSS,进入ss阶段倍增然后进入CA阶段线性增加。
  • 3个重复的ack:congWin降为congWin/2,进入CA阶段。

TCP的拥塞控制策略:

  • 慢启动:初始速率很慢,但加速是指数级的,ss阶段很短,长期来看可以忽略
  • AIMD:线性增、乘性减少
  • 超时事件后的保守策略

TCP的拥塞控制总结:

  • congWin<threshold,发送端处于慢启动阶段,拥塞窗口指数增长
  • congWin>threshold,发送端处于CA阶段,拥塞窗口线性增长
  • 当收到3个重复的ack时,threshold设为congWin/2(乘性减少)
  • 超时发生时,congWin=1MSS,进入ss阶段

2.3 TCP的公平性

总的来看,2个TCP竞争的话:

  • 加性增加,斜率为1,吞吐量增加
  • 乘性减少:吞吐量成比例的减少

最后达到每个TCP连接占据1/2的带宽。

上周还看了网络层,但碍于文章长度放到本周再总结。

LeetCode

上周由于有篮球比赛以及教研室的任务,刷题量较少,刷到了一道滑动窗口相关的题,感觉挺有意思,记录一下。题目在这里
滑动窗口法介绍:设置左右边界l和r,一个sum值,sum>target则sum-l,l++,sum<target则r++,sum+r,退出条件为l<=target/2。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值