当前位置: 首页 > article >正文

计网week3

计网

二.应用层

5.P2P

P2P分为结构化的和非结构化的
非结构化的P2P就是节点与节点之间存在一个邻居关系
覆盖网(overlay):无数个节点互相连接组成的一个网
结构化的P2P的覆盖网是有序的,可以构成一个环或树或者更复杂的结构

非结构化的P2P分为集中式目录、全分布式和混合式
集中式目录:如Napster,有一个目录服务器,所有主机需要在服务器进行注册,缺点:单点故障、跟C/S模式一样的服务器负担大
全分布式:如Gnutella,每个节点有多个邻居,构成一个覆盖网,没有中心服务器,开放文件共享协议
Gnutella协议:在已有的TCP连接上发送查询报文,接受方再转发这个报文,直到遍历所有节点或者找到资源为止
我们把这种查询叫泛洪查询
通常由ttl控制转发的次数
混合体:存在组长和组员,组长之间互相连接,组长和各自的组员连接,组员通过组长互相连接
这种模式下的查询会先再组内查,组内没有会由组长向别组发送查询报文
查询的细节:每个文件有一个散列标识码和一个描述符,客户端向其组长发送关键字查询,组长用匹配进行响应,没有结果则发送至其它组长继续响应

例子:BT(BitTorrent):
文件被分为一个个块256kB,用0/1表示文件块是否存在,网络中的节点发送接收文件块
当一个节点下载时,该节点可以同时向其他节点提供上载服务
一个节点下载时,会向其他节点积累文件块
稀缺优先:下载文件块会优先下载在网络中稀缺的文件块
优化疏通:一个节点向其他节点提供下载服务时,会优先选择带上载带宽大的节点以享受该节点的服务,而非时间早的节点

DHT(结构化P2P):用ip的哈希值作为地址,按照节点大小构成一个环

6.CDN

流媒体技术:DASH
将一个视频按每几秒分成无数个段,再存储不同清晰度的视频的段,得到请求后将视频的段一个一个发过去
Content distribution networks(CDN):通过CDN,全网部署缓存节点,存储服务内容,将用户的请求重定向到这些缓存服务器,减少主机负担
特点:
enter deep:将CDN服务器深入到许多接入网
bring home:部署在少数关键位置

中国的CDN服务提供商如:中国蓝汛

图片消失了

客户端向服务器发送请求,通过DNS服务器转发给CDN的DNS服务器,再由CDN的节点服务器返回响应

三.传输层

1.概述

传输协议运行在端系统,发送方会将应用层的报文分成报文段,然后传递给网络层
传输层协议:TCP、UDP
传输层服务:进程间的逻辑通信
网络层服务:主机之间的逻辑通信
传输层的服务依赖于网络层的服务,并对网络层的服务进行加强

2.多路复用和解复用

在发送方主机多路复用:从多个套接字接收来自多个进程的报文,根据套接字对应的IP和端口号来对报文段的头部加以封装
在接收放主机多路解复用:根据报文段的头部信息中的IP和端口号将接收到的报文段发送给正确的套接字和对应的应用进程
解复用的作用:TCP或者UDP将报文段中的head去掉,根据head,将body交给正确的socket,从而交给正确的进程

图片消失了

3.UDP

UDP:用户数据报
UDP应用于流媒体、DNS、SNMP

图片消失了

UDP校验和:检测在被传输报文段中的差错(比如比特反转)
比如将16位的数字相加,最高位的进位进给最低位,然后在接收端的结果与发送端的结果比较
当然,这种校验任可能出现差错,我们把这个叫残存差错

4.可靠数据传输的原理

可靠数据传输协议rdt,需要解决的问题:数据出错、丢失
rdt1.0:在可靠的信道上的可靠数据传输,rdt只需正常将数据处理并交给应用层

rdt2.0:具有比特差错的信道,rdt会进行校验,若正常则返回ACK,不正常则返回NAK;发送方直到收到回复才会进行下一步动作,若收到ACK则发送下一个数据包,若收到NAK则会重发之前的数据包
rdt2.1:若ACK/NAK出错,则无论如何,发送方都会重发一遍;并引入编号机制,所有包都有自己的编号,且接收方也能识别这些编号,若接收方第二次收到 P 0 P_0 P0包,则会抛弃并返回一个ACK
rdt2.2:取消NAK,用ACK1表示 P 1 P_1 P1包的接收完成,若接收方应收到ACK1,但实际收到的是ACK0或者收到的ACK出错,则会重发一遍 P 1 P_1 P1

rdt3.0:引入超时重传机制,当接收方长时间未接收到ACK,则重传;至此rdt在保证可靠传输方面就完善了,这种我们称为S-W(stop and wait)协议
缺点:当带宽足够大时,rdt的效率太低

发送窗口:发送缓冲区的范围
发送窗口的最大值<=发送缓冲区的值

GBN(go back n)协议:发送窗口>1,接收窗口=1
发送窗口:持续发送窗口内的帧,收到确认后窗口滑动
接收窗口:只接收按序到达的帧,丢弃乱序帧,并发送最近正确接收的帧的确认
错误处理:
①如果某帧丢失或出错,接收方会返回接收到的帧的最大编号,发送方会重传出错帧及其后续所有帧
②接收方丢弃乱序帧,不发送确认,导致发送方超时重传
举例:
假设窗口大小为4,发送方发送帧1、2、3、4:
若全部成功接收,则返回ACK4,发送方继续发送5、6、7、8
若帧2丢失,接收方返回ACK1,发送方重传帧2、3、4
若接收方迟迟没有接收到ACK,则重发1、2、3、4
缺点:错误率高时效率低,需重传多个帧
常用于数据传输可靠性要求高但错误率较低的网络环境,如早期的有线网络

图片消失了

SR(Selective Repeat Protocol)协议:发送窗口>1,接收窗口>1
发送窗口:持续发送窗口内的帧,收到确认后滑动窗口
接收窗口:接收并缓存所有正确到达的帧,发送选择性确认(SACK)指示已接收的帧
错误处理:
①如果某帧丢失或出错,发送方只重传该帧,而非后续所有帧
②接收方缓存乱序帧,等待缺失帧到达后按序提交
举例:
假设窗口大小为4,发送方发送帧1、2、3、4:
若全部成功接收,则返回ACK4,发送方继续发送5、6、7、8
若帧2丢失,接收方缓存帧1、3、4,并发送SACK指示缺失帧2,发送方重传帧2,接收方收到后按序提交帧1、2、3、4
缺点:实现复杂,需维护帧缓存和确认机制
常用于数据传输可靠性要求高且错误率较高的网络环境,如无线网络

5.面向连接的传输:TCP

概述:

  1. 点对点:一个发送方,一个接收方
  2. 可靠、按顺序的字节流
  3. 管道化(流水线):TCP拥塞控制和流量控制设置窗口大小
  4. 全双工数据:在同一连接中数据双向流动,MSS:最大报文段大小
  5. 面向连接:通信前需要握手
  6. 有流量控制
图片消失了

序号就是报文段首字节的在字节流的编号,序号的初始位是由TCP自己决定的随机数,第一段MSS的序号就是x,第二段就是x+MSS
确认号就是比如ACK555,表示一方收到了554之前的数据,并要求传输555及之后的数据

图片消失了

TCP的超时定时器:对最近几个往返延迟求平均,定时器=估计的往返延迟+4*安全边界

快速重传:通过重复的ACK来检测报文段的丢失,如果发送方收到同一数据的3个冗余ACK,重传最小序号的段,在定时器启动之前处理可能的数据丢失

TCP流量控制:TCP有一个数据接收缓冲区,应用层从缓冲区中取走数据,接收方控制发送方,不让缓冲区溢出

TCP的连接建立:
如果只有两次握手:连接请求、连接确认
客户端发送的连接请求可能因网络延迟而滞留,稍后才到达服务器。如果只有两次握手,服务器会误认为这是一个新的连接请求,导致资源浪费
所以TCP的连接需要3次握手

图片消失了

第一次握手(客户端 -> 服务器):SYN标志位:设置为1,表示这是一个连接请求(同步请求);初始序列号(Sequence Number, ISN):客户端随机生成的一个序列号(例如 ISN = x),用于标识数据包的顺序
第二次握手(服务器 -> 客户端):SYN标志位:设置为1,表示服务器同意建立连接;ACK标志位:设置为1,表示确认客户端的SYN请求;服务器的初始序列号(ISN):服务器随机生成的一个序列号(例如 ISN = y),用于标识服务器端的数据包顺序;确认号(Acknowledgment Number):值为客户端初始序列号加1(即 x + 1),表示服务器已收到客户端的SYN
第三次握手(客户端 -> 服务器):ACK标志位:设置为1,表示确认服务器的SYN请求;确认号(Acknowledgment Number):值为服务器初始序列号加1(即 y + 1),表示客户端已收到服务器的SYN;序列号(Sequence Number):值为 x + 1(客户端初始序列号加1),因为第一次握手的SYN占用了一个序列号

TCP的连接关闭:客户端、服务器分别关闭它自己这一侧的连接,发送FIN bit = 1的TCP段,一旦收到FIN,用ACK回应,一共需要四次挥手

图片消失了

第一次挥手(客户端 -> 服务器):FIN标志位:设置为1,表示客户端请求关闭连接;序列号(Sequence Number):值为客户端当前序列号(例如 Seq = u)
第二次挥手(服务器 -> 客户端):ACK标志位:设置为1,表示服务器确认客户端的FIN请求;确认号(Acknowledgment Number):值为客户端序列号加1(即 Ack = u + 1);序列号(Sequence Number):值为服务器当前序列号(例如 Seq = v)
第三次挥手(服务器 -> 客户端):FIN标志位:设置为1,表示服务器请求关闭连接;ACK标志位:设置为1,表示确认客户端的FIN请求;确认号(Acknowledgment Number):值为 u + 1(与第二次挥手相同);序列号(Sequence Number):值为服务器当前序列号(例如 Seq = w,可能比 v 大,因为服务器可能发送了更多数据)
第四次挥手(客户端 -> 服务器):ACK标志位:设置为1,表示客户端确认服务器的FIN请求;确认号(Acknowledgment Number):值为服务器序列号加1(即 Ack = w + 1);序列号(Sequence Number):值为 u + 1(客户端序列号加1)

6.拥塞控制原理

拥塞的表现:分组丢失、分组经历比较长的延迟
当拥塞发生时,路由器会被最近的主机的数据填满

两种拥塞控制方法:
端到端拥塞控制:没有来自网络的显式反馈、端系统根据延迟和丢失事件来推断是否拥塞,是TCP采用的方法
网络辅助的拥塞控制:路由器提供给端系统以反馈信息,单个bit置位,显示有拥塞

例子:ATM ABR拥塞控制
RM(资源管理)信元:由发送端发送,在数据信元中间隔插入
RM信元中的比特被交换机设置(网络辅助)
NI bit:no increase in rate,轻微拥塞
CI bit:congestion indication,拥塞指示
发送端发送的RM信元被接收端返回,接收端不做任何修改

RM信元中有两个字节ER(explicit rate)字段:
拥塞的交换机可能会降低信元中的ER的值
发送端发送速度因此是最低的可支持速率
数据信元中的EFCI bit:被拥塞的交换机设置成1
如果在管理信元RM前面的数据信元的EFCI被设置成1了,接收端返回的RM信元中设置CI bit

TCP的拥塞控制

网络参与的拥塞控制很耗网络资源,所以TCP采用端到端的拥塞控制
拥塞的表现:
超时:拥塞
3个冗余ACK:轻微拥塞
解决拥塞的方法:拥塞窗口
拥塞窗口(Congestion Window, CWND)是TCP协议中用于控制网络拥塞的机制。它表示发送方在未收到确认(ACK)的情况下,能够发送的最大数据量(以字节或报文段为单位)
工作原理(加性增乘性减):

  1. 慢启动(Slow Start):初始时CWND较小,每收到一个ACK,CWND指数增长,快速探测可用带宽。
  2. 若超时,则CWND恢复原状并将超时处的一半设为慢启动阈值
  3. 拥塞避免(Congestion Avoidance):CWND达到慢启动阈值 (ssthresh)后,转为线性增长,避免过度增加网络负载。
  4. 快速重传(Fast Retransmit):收到三个重复ACK时,立即重传丢失的报文段,并进入快速恢复。
  5. 快速恢复(Fast Recovery):重传后,CWND减半,继续线性增长,避免大幅降低发送速率

TCP的公平性:如果n个TCP会话分享一个链路带宽为R的瓶颈,每个会话的有效带宽为R/K
实现原理:加性增乘性减会使拥有窗口大的会话的慢启动阈值较小,窗口小的慢启动阈值较大,最终,每个会话的带宽分配趋于公平
同时,udp是没有拥塞控制的,所以如果有会话以udp进行通信的话,它会占有几乎所有带宽,udp对TCP来说是不公平的


http://www.kler.cn/a/531890.html

相关文章:

  • 蓝桥备赛指南(6)
  • redis底层数据结构
  • 02.04 数据类型
  • 并行计算、分布式计算与云计算:概念剖析与对比研究(表格对比)
  • 网络协议基础
  • python-leetcode-二叉树的层序遍历
  • 【LeetCode 刷题】回溯算法(5)-棋盘问题
  • Linux线程 —— 生产消费模型
  • 存储器知识点3
  • 优选算法的灵动之章:双指针专题(一)
  • 算法设计-0-1背包动态规划(C++)
  • 4.[ISITDTU 2019]EasyPHP
  • Nginx笔记220825
  • 机器学习day7
  • 红黑树的封装
  • 680.验证回文串||
  • 基于“蘑菇书”的强化学习知识点(二):强化学习中基于策略(Policy-Based)和基于价值(Value-Based)方法的区别
  • Debezium Oracle Connector SCN处理优化指南
  • Linux篇——权限
  • 02.03 递归运算
  • 中间件漏洞之CVE-2024-53677
  • C++ 游戏开发:完整指南
  • 浅谈《图解HTTP》
  • Baklib如何在知识管理领域成为领军者与六款产品的综合评析
  • Skyeye 云 VUE 版本 v3.15.6 发布
  • [Java]抽象类