【计算机网络】内容整理

概述

分组交换

分组交换则采用存储转发(整个包必须到达路由器,然后才能在下一个链路上传输)技术。

在发送端,先把较长的报文划分成较短的、固定长度的数据段。

电路交换

在端系统间通信会话期间,预留了端系统间沿路径通信所需要的资源(缓存、链路传输速率)

  1. 建立连接:建立一条专用的物理通路,以保证双方通话时所需的通信资源在通信时不会被其他用户占用;
  2. 通信:主叫和被叫双方就能互相通电话;
  3. 释放连接:释放刚才使用的这条专用的物理通路(释放刚才占用的所有通信资源)。

时延计算

350350
image.png

吞吐量

image.png

应用层

体系结构

C/S

客户(client)和服务器(server)都是指通信中所涉及的两个应用进程。

客户-服务器方式所描述的是进程之间服务和被服务的关系。

客户是服务的请求方,服务器是服务的提供方。

服务请求方和服务提供方都要使用网络核心部分所提供的服务。

P2P

没有永远在线的服务器
任意终端系统直接通信
对等方向其他对等方请求服务,向其他对等方提供服务
对等体间歇连接并更改IP地址

Socket

image.png
进程间通信利用套接字(Socket)发送和接受消息来实现

URL

统一资源定位器
<协议>://<主机>:<端口>/<路径>

HTTP

超文本传输协议

基于web的应用层协议

C/S结构

  • client-----browser:请求接受和展示web对象
  • server-----Web server:响应客户的请求,发送对象

连接

  • 非持续连接

    • 每个TCP连接最多发送一个对象然后关闭连接
    • 多个对象需要多个TCP连接
    • HTTP1.0版本使用非持续连接
      缺点:
      每个对象需要两个RTT
      每个TCP连接有开销
      浏览器经常打开多个并行TCP连接来获取网页所需的对象
  • 持续连接

    • 客户端和服务器之间的单个TCP连接可以传输多个对象
    • HTTP1.1版本使用持续连接
  1. 非流水线
  • 客户在收到前一个响应后才能发出
    下一个请求。
  • 这比非持续连接的两倍RTT的开销节省了建立TCP连接所需的一个RTT时间。
  • 服务器在发送完一个对象后,其TCP连接就处于空闲状态,浪费了服务器资源。
  1. 流水线
  • 服务器在发送响应后保持连
    接打开
  • 同一客户机/服务器之间的后续HTTP请求和响应报文通过已打开的TCP连接发送
  • 客户机在遇到被引用对象时立即发送请求
  • 对于所有被引用的对象,只有一个RTT

响应时间

RTT(往返时延):从客户机发送一个很
小的包到服务器并返回所经历的时间
HTTP响应时间:

  • 发起、建立TCP链接需要一个RTT
  • 发送HTTP请求消息到HTTP相应消息的前几个字节到达需要一个RTT
  • 文件发送时延
    非持续HTTP响应时间=2RTT+文件发送时延
    image.png

请求报文

image.png
image.png
请求方法:
image.png

响应报文

image.png
image.png

首部

通用首部

Cache-Control:通过指定指令来实现缓存机制。

  • max-age=<\seconds>设置缓存存储的最大周期,超过这个时间缓存被认为过期
  • 指定no-cache或max-age=0表示客户端可以缓存资源,每次使用缓存资源前都必须重新验证其有效性。
    Connection:决定当前的事务完成后,是否会关闭网络连接 “keep-alive”“closed”
    Keep-Alive:允许消息发送者暗示连接的状态,还可以用来设置超时时长和最大请求数
    Date:表明创建HTTP报文的日期和时间。其中时间GMT代表格林威治标准时间
请求头

Host:指明了请求将要发送到的服务器主机名和端口号(可选)
User-Agent:指明用户代理,即浏览器的类型
Accept:列举用户代理希望接收的媒体资源的MIME类型
Accept-Language:用来提示用户期望获得的文档自然语言的优先顺序
Accept-Encoding:明确说明了(接收端)可以接受的内容编码形式(所支持的压缩算法)
Accept-Charset:用于告知服务器该客户代理可以理解何种形式的字符编码(如今UTF-8编码已经得到了广泛的支持,成为首选的字符编码类型。为了通过减少基于配置信息的信息熵来更好地保护隐私信息,大多数浏览器会将Accept-Charset首部移除:Internet Explorer8、Safari5、0pera11以及Firefox10都已经不再发送该首部。)

响应头

Server:包含了处理请求的源头服务器所用到的软件相关信息
Last-Modified:包含源头服务器认定的资源做出修改的日期及时间
ETag:资源的特定版本的标识符。这可以让缓存更高效,并节省带宽,因为如果内
容没有改变,Wb服务器不需要发送完整的响应。如果给定URL中的资源更改,则一
定要生成新的Etag值
Accept–Ranges:标识自身支持范围请求,字段的具体值用于定义范围请求的单位
Expires:响应头包含日期/时间,即在此时候之后,响应过期。如果在Cache
Controll响应头设置了"max-age”或者"s-max-age”指令,那么Expires头会被
忽略。

实体头

Content-Type:用于指示资源的MIME类型(媒体类型)
Content-Length:用来指明发送给接收方的消息主体的大小,十进制数字表示的八位字节的数目
Content-Language:用来说明访问者希望采用的语言或语言组合,这个首部还可以用来描述不同媒体类型的文件,而不单单局限于文本型文档。
Content-Encoding:用于对特定媒体类型的数据进行压缩。当这个首部出现的时候,它的值表示消息主体进行了何种方式的内容编码转换。这个消息首部用来告知客户端应该怎样解码才能获取在Content-Type中标示
的媒体类型内容。

响应状态码

1xx表示通知信息的,如请求收到了或正在进行处理。
2xx表示成功,如接受或知道了。
3xx表示重定向,表示要完成请求还必须采取进一步的行动。
301永久移动,域名重定向
302临时性重定向,资源被分配到新的URI,希望用户本次可以使用新的URI访问
303请求对应的资源存在另一个URI,应使用GET方法重定向获取资源。
304找到资源了,但是不符合条件,一般用于缓存,代表缓存资源不符合需求
307临时性重定向,与302有着相同的含义,不会从P0ST方法换成GET方法
客户端响应:
4xx表示客户的差错,如请求中有错误的语法或不能完成
400 Bad Request
404 Not Found
服务器端响应:
5xx表示服务器的差错,如服务器失效无法完成请求
505 HTTP Version Not Supported

Cookie

  • Cookie实际上是一小段的文本信息。
  • 客户端请求服务器,如果服务器需要记录该用户状态,就使用responsel向客户端浏览器颁发一个Cookie
  • 客户端浏览器会把Cookie保存起来。
  • 当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。
  • 服务器检查该Cookie,以此来辨认用户状态。
  • 服务器还可以根据需要修改Cookie的内容

Session

  • Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式(内存中、redis、Memcached)记录在服务器上。这就是Session.客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。
  • Session基于cookie的,服务器会把一个sessionid以cookie形式种植给浏览器。以后客户端在访问服务端时候,http请求会带着sessionid,服务器会先检查这个客户端的请求里是否已包含了一个session标识(sessionid)。如果已包含这个 sessionId,则说明以前已经为此客户端创建过session,服务器就按照sessionId把这个session检索出来使用。

Web缓存

image.png
条件GET
image.png

HTTP2

HTTP1.1发送一个Web页面的所有对象存在队首阻塞。HTTP2把每个报文分成小帧交错传输,解决阻塞。

邮件服务

image.png

SMTP

基于TCP在客户和服务器之间传递email,端口号为:25
直接传输:发送服务器到接收服务器
传输的三个阶段

  • 握手(greeting)
  • 传输消息
  • 关闭
    命令/响应交互式(HTTP)
  • 命令:ASCII文本
  • 响应:状态码和语句
    email消息只包含7位的ASCII

邮件访问协议

image.png

DNS

基于UDP
image.png

迭代查询

被查询服务器返回域名解析服务器的名字
image.png

递归查询

将域名解析的任务交给所联系的服务器
image.png

P2P

  • 没有服务器
  • 任意终端系统直接通信
  • 对等点间断续连接并更改IP地址
  • 在P2P工作方式下,所有的音频/视频文件都是在普通的互联网用户之间传输

Napster

有一个集中式目录服务器,用户X询问Napster谁有资源m,服务器回应a,b,c。X再随机选一个请求。

全分布式

洪泛法在用户之间查询

CDN

CDN的基本原理是依靠放置在各地的缓存服务器,通过全局调度,内容分发等功能模块,将用户需要的那部分内容部署到贴近用户的地点,将原本低效、不可靠的IP网络转变成高效、可靠的智能网络,满足用户对内容访问质量的更高要求,改善互联网网络拥塞问题,提高用户访问网站的响应速度。

传输层

提供应用进程之间的通信机制

  • 位于网络层之上
  • 依赖于网络层服务
  • 对网络层服务进行增强
    多路复用:在源主机从不同套接字中收集数据块,并为每个数据块封装上首部信息,从而生成报文段,然后将报文段传到网络层。(发送过程)
    多路分用:检查传输层报文段,根据目的端口号标识出接收套接字,交付给正确的套接字。(接收过程)

UDP

  • 无需建立连接(减少延迟)
  • 实现简单:无需维护连接状态
  • 头部开销小
  • 没有拥塞控制:应用可以更好地控制发送时间和速率

报文段结构

报文头8字节
image.png

检验和

发送方UDP对报文段所有16比特字的和求反,放在检验和字段。求和时如果最高位有进位就进到末位。

可靠数据传输

参考https://blog.csdn.net/qq_53144843/article/details/120896557
rdt_send():被上层应用调用,将数据交给rdt以发送给接收方
udt_send():被rdt调用,在不可靠的信道上发送数据给接收方
deliver_data():被rdt调用,向上层应用交付数据
rdt_rcv():数据包到达接收方时被调用

rdt1.0

假设以下理想条件:

  1. 不会发生错误
  2. 不会丢弃分组
    有限状态机FSM描述:
    image.png
    发送方:一个状态,等待上层调用,若上层调用,则产生rdt_send,创建packet活动,调用信道上的udt_send(),发送分组,可确定百分百发送,然后回到之前状态,继续等待调用

接收方:一个状态,等待下层调用,当传入一个分组,rdt_rcv接收,extract提取,交付给上层deliver_data

rdt2.0

底层信道可能传输错误比特
自动重传请求协议ARQ:使用ACK和NAK通知发送方接收状态。

  • 差错检测
  • 接收方反馈ACK/NAK
  • 重传
    发送方在等待ACK/NAK时无法处理上层新的数据,所以这样的协议也叫停等协议
    400
    image.png
    发送方:若上层调用,则产生rdt_send,创建packet活动并加入校验和,调用信道上的udt_send(),发送分组。同时进入等待ACK/NAK状态,若为NAK,则重传分组,继续等待ACK/NAK,一直处于该状态,直到传回ACK才进入等待调用状态

接收方:当传入一个分组,rdt_rcv接收并且进行判断,如果没有错误extract提取,交付给上层deliver_data并返回ACK,如果发生错误,则直接返回NAK,并处于等待接收状态

时序图:
image.png

rdt2.1

如果ACK/NAK损坏,发送方重新传输当前pkt
发送方给每个pkt增加序列号
接收者丢弃重复的pkt
发送方:
image.png
接收方:
image.png
发送方:等待上层调用,序列号为0,若上层调用,则产生rdt_send,创建packet活动(此处加入序列号)并加入校验盒,调用信道上的udt_send(),发送分组,同时进入等待ACK/NAK状态,若为NAK,则重传分组,继续等待ACK/NAK,一直处于该状态,若传回ACK,则进入等待调用状态,并改变序列号为1
接收方:当传入一个分组,rdt_rcv接收并且进行判断,如果分组没有错误,并且期望收到分组序列号与当前序列号相同,则extract提取,交付给上层deliver_data并返回ACK;如果发生错误,则直接返回NAK,并处于等待接收状态;若接收分组没错,序列号不匹配,则必须发一个ACK,表示正确接收

时序图:
image.png

rdt2.2

不需要NAK
接收方发送最后一次正确接收到的分组的ACK来代替NAK

  • 接收方发出的ACK消息中,必须明确包含被确认的分组序列号
  • 发送方的收到重复ACK会采取与NAK相同的操作:重新传输当前分组
    image.png

rdt3.0

信道也可能丢失分组,增加了超时处理
发送方等待ACK合理时间,如果到时未收到ACK,则重新传输;
如果分组或ACK仅仅延迟而没有丢失:

  • 重传则会产生重复,利用序列号可以解决
  • 接收方需在ACK中显式告知所确认的分组
    发送方:
    image.png
    接收方没变。

流水线协议

发送方在收到ACK之前可以连续发送多个分组,从而提高利用率。

  • 需要更大序号空间
  • 发送方和/或接收方需要更大的存储空间以缓存分组

GBN

  • 发送方在管道中最多可以有N个未确认的数据包
  • 接收方只发送累积确认
  • 如果有间隔就不会确认数据包
  • 发送方有未确认数据报的计时器
  • 当计时器超时,重传所有未确认的数据包
发送方

image.png
image.png

接收方

image.png
image.png
image.png

SR

接收方单独确认所有正确收到的分组

  • 设置缓存机制,缓存乱序到达的分组,最终交给上层
    发送方只重传那些没收到ACK的分组
  • 为每个分组设置定时器
    发送方窗口
  • N个连续的序号
  • 限制已发送且未被确认的分组
    image.png
    image.png

TCP

报文结构

image.png
序列号:

  • TCP报文段中第一个字节的编号
  • 建立TCP连接时,双方随机选择序号
    ACKs:
  • 期望收到的下一个字节的序列号
  • 累计确认,该序号之前的所有字节都已正确接收

重传

累积确认
快速重传:如果sendert收到对同一数据的3个ACK,则假定该数据之后的段已经丢失,在定时器超时之前即进行重传

流量控制

接收方通过在接收方到发送方的TCP报头中包含rwnd值来“通告”空闲缓冲区空间
发送方限制自己已经发送的但还未收到ACK的数据不超过接收方的空闲RcvWindow尺寸

连接管理

三次握手
image.png
四次挥手
image.png

拥塞控制

太多的主机发送太多数据或者速度太快,网络无法处理
表现形式:

  • 数据包丢失(路由器缓冲区溢出)
  • 延迟过长(在路由器缓冲区中排队)
    TCP从观察到的丢失、延误推断出拥堵
AIMD

原理:发送方增加传输速率(窗口大小),探查可用带宽,直到发生丢失
事件:Timeout或3个重复的ACK
image.png
丢失事件细节:

  • 通过三重重复ACK(TCP Reno)检测到丢失时将其减半(TCP Reno)
  • 当超时(TCP Tahoe)检测到丢失时,切至1MSS(最大段大小)(TCP Tahoe)
慢启动

连接开始时,以指数2^n方式增加速率(窗口大小cwnd),直到发生第一次丢失事件

LOSS处理

超时导致loss:

  • 窗口大小cwnd设为1MSS
  • 窗口然后按指数增长(如慢启动)到阈值,然后线性增长
    由3个重复确认导致的loss(TCP RENO):
  • 3个重复ACKs表示网络还能够传输一些segments
  • cwnd切到一半;然后线性增长 此时会加上三个ack的时间段,实际上是从一半+3开始,但阈值是一半。
    TCP Tahoe不管是超时还是3个ACK,都把cwnd设为1MSS

阈值变量sthresh
loss事件发生时,sthresh被设置为loss事件前的cwnd值的1/2
cwnd上升到sthresh后开始线性增长
线性增长也叫拥塞避免

TCP CUBIC

Wmax:检测到拥塞丢失的发送速率
瓶颈链路的拥塞状态可能变化不大
在切割速率/窗口减半后,最初更快地斜坡到Wmax,但随后更缓慢地接近Wmax
image.png

网络层

功能:
转发:将分组从一个输入链路接口转移到适当的输出链路接口的路由器本地动作
路由选择:确定分组从源到目的地所选用的网络路径

数据平面

  • 每台路由器的本地功能
  • 确定如何将到达路由器输入端口的数据报转发到输出端口
  • 转发功能
    image.png

转发方式

基于目的地转发

仅根据目的地IP地址的转发
最长前缀匹配: 根据目的地址查找转发表条目时,选择与目标地址匹配的最长地址前缀。
image.png

通用转发

根据任意首部字段值的集合的转发

交换结构

内存交换
  • 采用传统的计算机,交换是在CPU的直接控制下完成
  • 分组被复制到系统内存中
  • 速度受限于内存带宽
    image.png
总线交换
  • 报文通过一条共享总线从输入端口内存发送到输出端口
  • 总线争用:交换速度受限于总线带宽。
    image.png
互联网状交换
  • 克服了总线带宽的限制
  • 高级设计:将报文分片为固定长度单元以通过交换结构。
    image.png

缓存管理

先来先服务FIFO/FCFS
  • 加权公平排队
  • 弃尾:丢弃到达的分组
  • 低优先权丢弃:基于优先级的丢弃/移除
  • 随机丢弃:随机丢弃/移除
优先级调度
  • 到达流量分类,按类别排队
    • 任何标题字段都可以用于分类,如:IP源/目的,端口号等
  • 多种类别,具有不同的优先级
  • 发送最高优先级的队列分组
循环排队RR

循环扫描类别队列,依次从每一个类别发送一个完整分组(如果有的话)
image.png

加权公平排队WFQ

在每一轮循环中,每一类i获得加权数量wi的服务
image.png

IPv4

image.png

分片/重组

一个大的报文会被拆成多个报文,在目的地进行重组。IP首部字节用于识别排序分片。
最大传送单元MTU:一个链路层帧能承载的最大数据量

编址

IP地址:32bit主机ID/路由器接口
每一类地址都由两个固定长度的字段组成,其中一个字段是网络号net-id,它标志主机(或路由器)所连接到的网络,而另一个字段则是主机号host-id,它标志该主机(或路由器)。
image.png
特殊IP地址:
image.png

子网

设备接口,无需通过中间路由器即可物理连接到彼此
image.png
image.png

DHCP 动态主机配置协议

允许主机加入网络时从网络服务器中动态获取其IP地址。
DHCP可以提供:

  • 在子网中分配的IP地址
  • 客户端的第一跳路由器地址
  • DNS服务器的名字和IP地址
  • 网络掩码
    image.png
NAT 网络地址转换

本地网络中的所有设备在“专用”IP地址空间(10/8、172.16/12、192.168/16前缀)中都有32位地址,但只能在本地网络中使用

  • 外出数据报:替换每一个外出数据报的(源IP地址,端口号)为(NAT IP地址,新的端口号)
    远程客户端/服务器的回复数据报采用(NAT IP地址,新的端口号)作为目的地址
  • 记住(在NAT转换表中) 每一个(源IP地址,端口号)到(NAT IP地址,新的端口号)的对应关系
  • 到达报文:根据存储的NAT表,替换每一个到达报文目的字段(NAT IP地址,新的端口号)为相应的(源IP地址,端口号)
    image.png

IPv6

  • 固定长度40字节首部
  • 不允许分片
  • 去掉了校验和
    image.png
IPv4 to IPv6

image.png

OpenFlow

流表:
image.png

控制平面

  • 网络范围的逻辑
  • 决定数据报从源主机到目的主机的端到端路径中路由器之间的路由方式
  • 实现控制平面的两种途径:
    • 传统路由算法:运行在路由器中
    • 软件定义网络SDN:运行在(远程)控制器中

路由选择算法

链路状态LS

使用迪杰斯特拉算法,每一次迭代都选最短的一条的节点。所有路由器掌握网络拓扑和链路费用
image.png
image.png

距离向量DV

image.png
image.png
image.png
image.png

自治系统内部的路由选择 OSPF

域内路由选择:

  • 在同一自治域(“网络”)内的主机,路由器之间的路由选择
  • 在一个自治域内的所有路由器必须运行相同的域内路由选择。
  • 在不同自治域内的路由器可以运行不同的域内路由协议。
  • 网关路由:位于其所在自治域的“边界”,通过链路与其位于其他自治域的路由器相连
    域间路由选择:
  • 自治域间的路由选择
  • 网关执行域间路由选择(与域内路由选择类似)。
    OSPF
  • 链路状态发生变化时,路由器洪泛OSPF链路状态消息到整个AS中的所有其他路由器中,使用网络层IP协议。
  • 发送的信息就是与本路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息。
  • 使用迪杰斯特拉算法
链路状态数据库
  • 由于各路由器之间频繁地交换链路状态信息,因此所有的路由器最终都能建立一个链路状态数据库。
  • 这个数据库实际上就是全网的拓扑结构图,它在全网范围内是一致的(这称为链路状态数据库的同步)
  • OSPF的链路状态数据库能较快地进行更新,使各个路由器能及时更新其路由表
  • OSPF的更新过程收敛得快是其重要优点。
区域划分

为了使OSPF能够用于规模很大的网络,OSP将一个自治系统再划分为若干个更小的范围,叫做区域。
image.png
区域边界路由器:“汇总”到达区域内内部网络的距离信息,并广播到其他区域边界路由器
主干路由器:仅在主干路由器中运行OSPF
边界路由器:连接到其他的自治域。
image.png
在一个区域内部的路由器只知道本区域的完整网络拓扑,而不知道其他区域的网络拓扑的情况。
主干区域(Area 0)是所有其他OSPF区域(非零区域)的中心枢纽,起到了路由信息分发和汇聚的作用。
区域边界路由器负责在OSPF的主干区域和其他区域之间传递路由信息。
主干路由器
image.png
区域边界路由器
image.png

域间路由选择 BGP

eBGP:从邻居自治域获取子网可达信息
iBGP:传播可达信息到所有自治域内部的路由器
image.png

路径通告

image.png

热土豆算法

选择具有最小域内开销的本地网关(烫手山芋)
image.png

软件定义网络SDN

image.png

  • 维护网络状态信息
  • 通过北向API与“上面的”网络控制应用交互。
  • 通过南向API与“下面的”网络交换机交互。
    image.png
    网络控制应用
    eg:ryu
    image.png

ICMP

主机及路由器使用ICMP以交互网络层面的信息。
IP数据报承载ICMP消息

数据链路层

结点(nodes):主机和路由器
链路(links):一条无源的点到点的物理线路段,中间没有任何其他的交换结点。
数据链路(data-link layer):除了物理线路外,还必须有通信协议来控制这些数据的传输。若把实现这些协议的硬件和软件加到链路上,就构成了数据链路。
帧(frame):数据链路层数据单位,封装网络层数据报

封装成帧

image.png
头尾添加开始符,结束符。中间冲突字符转义。
image.png

差错检测

奇偶校验

CRC校验

校验和

  • 将“数据”(校验内容)划分为16位的二进制“整数”序列
  • 求和:补码求和(最高位进位的“1”,返回最低位继续加)
  • 校验和为sum的反码
  • 发送方将校验和放入分组(UDP、TCP、IP)的校验和字段

多路访问链路协议MAC

时隙ALOHA

假定

  • 所有帧大小相同
  • 时间被划分为等长的时隙(每个时隙可以传输1个帧)
  • 结点只能在时隙开始时发送帧
  • 结点间时钟同步
  • 如果2个或2个以上结点在同一时隙发送帧,结点即检测到冲突
    运行
    当结点有新的帧时,在下一个时隙发送
  • 如果无冲突:该结点可以在下一个时隙继续发送新的帧
  • 如果冲突:该结点在下一个时隙以概率p重传该帧,直至成功
    image.png
    效率
    长期运行时成功发送帧的时隙所占比例
    假设:N个结点有很多帧待传输,每个结点在每个时隙均以概率p发送数据
    对于给定的一个结点,在一个时隙将帧发送成功的概率=p(1-p)^(N-1)
    对于任意结点成功发送帧的概率Np(1-p)^(N-1)
    最大效率:N->无穷时,最大效率 = 1/e = 0.37

纯ALOHA

  • 非时隙Aloha:更加简单,无需同步
  • 当有新的帧生成时,立即发送
    image.png
    效率:
    image.png

CSMA

发送帧之前,监听信道

  • 信道空闲:发送完整帧
  • 信道忙:推迟发送

CSMA/CD

载波监听多点接入/碰撞检测

  • 短时间内可以检测到冲突
  • 冲突后传输中止,减少信道浪费
    image.png
    image.png
    最先发送数据帧的站,在发送数据帧后至多经过时间2τ(两倍的端到端往返时延)就可知道发送的数据帧是否遭受了碰撞。
    如果两端想要成功碰撞检测,那么传播时延要小于传输时延。
    争用期:端到端往返时延2τ
二进制指数类退避算法

发生碰撞的站在停止发送数据后,要推迟一个随机时间才能再发送数据。

  1. 基本退避时间取为争用期2τ。
  2. 从整数集合[0,1,…,(2^k-1)]中随机地取出一个数,记为r。重传所需
    的时延就是r*512比特时间
  3. 参数k按下面的公式计算:
    k=Min[重传次数,10]
  4. 当k≤10时,参数k等于重传次数。
  5. 当重传达16次仍不能成功时即丢弃该帧,并向高层报告。

交换局域网

ARP

  • A想要给同一局域网内的B发送数据报而B的MAC地址不在A的ARP表中。
  • A广播ARP查询分组,其中包含B的IP地址目的MAC地址为:FF-FF-FF-FF-FF-FF;LAN中所有结点都会接收
  • B接收ARP查询分组,IP地址匹配成功,利用单播帧向A发送应答B的MAC地址
  • A在其ARP表中,缓存B的IP-MAC地址对,直至超时,超时后,再次刷新
    image.png

寻址过程

image.png
A通过路由器R向B发送数据报:

  • 主机A构造IP数据报,其中源IP地址是A的IP地址,目的IP地址是主机B的IP地址
  • 主机A构造链路层帧,其中源MAC地址是A的MAC地址,目的MAC地址是R(左)接口的MAC地址,封装A到B的IP数据报。
  • 数据帧从主机A发送至路由器R
  • 路由器R接收数据帧,提取IP数据报,传递给上层IP协议
  • R转发IP数据报(源和目的IP地址不变)
  • R创建链路层帧,其中源MAC地址是R(右)接口的MAC地址,目的MAC地址是B的MAC地址,封装A到B的IP数据报。

以太网

有线LAN技术

  • 不可靠
  • 无连接
  • MAC协议采用CSMA/CD
    image.png

链路层交换机

  • 存储-转发以太网帧
  • 检验到达帧的目的MAC地址,选择性向一个或多个输出链路转发帧,利用CSMA/CD访问链路,发送帧
  • 透明传输,主机感知不到交换机的存在
  • 即插即用,自学习
    image.png
    目的MAC未知时泛洪,已知时选择性转发

无线网络

IEEE 802.11

CSMA/CA

带碰撞避免的CSMA(CSMA/CD是碰撞检测)
交换RTS和CTS帧来实现碰撞避免
image.png
会对正确接收到的数据帧ack确认
帧结构:
image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/327526.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于JavaWeb+BS架构+SpringBoot+Vue智慧党建系统设计与实现

基于JavaWebBS架构SpringBootVue智慧党建系统设计与实现 文末获取源码Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 文末获取源码 Lun文目录 1 概 述 1 1.1 课题研究背景 1 1.2 课题研究意义 1 1.3 课题研究内容 2 2 系统开…

推荐三个非常好用的视频转文字工具

在处理视频文件时&#xff0c;有时我们需要将视频中的语音内容转换为文字形式&#xff0c;以便于整理、编辑或搜索。传统的视频转文字方法往往需要耗费大量时间和人力&#xff0c;而且准确度难以保证。现在&#xff0c;有了水印云等视频转文字神器&#xff0c;我们可以快速、准…

“一种1,4丁炔二醇纯化除铜装置”的实用新型专利

1,4-丁炔二醇是一种多用途有机化合物&#xff0c;在溶剂、增塑剂及各类合成中间体制造中扮演着不可或缺的角色。工业上主要通过Reppe法制备&#xff0c;即在丁炔铜或铜铋催化剂作用下&#xff0c;乙炔与甲醛在高压(1至20 bar)高温(约110至112℃)环境下发生反应。然而铜离子作为…

Java零基础——Vue基础篇

1.【熟悉】Vue简介 1.1 简介 它是一个构建用户界面单页面的框架 Vue是一个前端框架 https://www.pmdaniu.com/#file UI网站 UI 一般开发者使用蓝湖 工具 看着UI图 写接口 https://lanhuapp.com/web/#/item 是一个轻量级的MVVM&#xff08;Model-View-ViewModel&#xff…

Springboot+vue课程管理系统(前后端分类)

该项目完全免费 课程管理系统&#xff0c;前后端分离界面美观 &#x1f48e; 使用流行技术栈 Vue ElementUI SpringBoot &#xff0c;可做学习、毕设使用 技术栈&#xff1a; jdk1.8 springboot vue mysql5.5 前端 Vue.js ElementUI axios 后端 SpringBoot 持久层 : Mybat…

【目标检测】评价指标:mAP概念及其计算方法(yolo源码/pycocotools)

本篇文章首先介绍目标检测任务中的关键评价指标mAP的概念&#xff1b;然后介绍其在yolo源码和pycocotools工具中的实现方法&#xff1b;最后比较两种mAP的计算方法的不同之处。 目标检测中的评价指标&#xff1a; mAP概念及其计算方法(yolo源码/pycocotools) 混淆矩阵概念及其…

SpringMVC零基础入门 - 概述、入门搭建、PostMan的使用(常见数据类型的传输)、REST风格编程

SpringMVC零基础入门 - 概述、入门搭建、PostMan的使用(常见数据类型的传输)、REST风格编程 SpringMVC是隶属于Spring框架的一部分&#xff0c;主要是用来进行Web开发&#xff0c;是对Servlet进行了封装SpringMVC是处于Web层的框架&#xff0c;所以其主要的作用就是用来接收前…

正则表达式和爬虫

目录 一、正则表达式&#xff1a; 作用&#xff1a; 字符类&#xff08;只匹配一个字符&#xff09; 细节 预定义字符字符&#xff08;只匹配一个字符&#xff09; 细节 数量词 二、爬虫 Pattern Matcher 要点说明 一、正则表达式&#xff1a; 作用&#xff1a; 1、校验字符…

TRB 2024论文分享:基于生成对抗网络和Transformer模型的交通事件检测混合模型

TRB&#xff08;Transportation Research Board&#xff0c;美国交通研究委员会&#xff0c;简称TRB&#xff09;会议是交通研究领域知名度最高学术会议之一&#xff0c;近年来的参会人数已经超过了2万名&#xff0c;是参与人数和国家最多的学术盛会。TRB会议几乎涵盖了交通领域…

Linux基础工具的使用(yum,vim,gcc,g++,gdb,make/makefile)【详解】

目录 linux软件包管理器-yum什么是软件包&#xff1f;查找软件包如何安装软件卸载软件 linux编辑器 - vimvim的基本概念vim模式之间的切换vim命令模式各命令汇总vim底行模式各命令汇总 Linux编译器 - gcc/ggcc/g的作用gcc/g选项预处理编译汇编链接静态库与动态库 Linux调试器 -…

Kafka生产消费流程

Kafka生产消费流程 1.Kafka一条消息发送和消费的流程图(非集群) 2.三种发送方式 准备工作 创建maven工程&#xff0c;引入依赖 <dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId><version>3.3.1…

IPv6过渡技术---手动隧道

IPv6隧道 隧道(Tunnel)是一种封装技术。利用一种网络协议来传输另一种网络协议,即利用一种网络传输协议,将其他协议产生的数据报文封装在自身的报文中,然后在网络中传输。 隧道是一个虚拟的点对点的连接。一个Tunnel提供了一条使封装的数据报文能够传输的通路,并且在一个…

jmeter--4.参数化的方式

目录 1. 用户定义的变量 2. 用户参数 3. 函数助手 3.1 time获取当前时间 3.2 Random随机数 3.3 随机字符串函数 3.4 字符串变更为大写 4. CSV数据文件设置 5. 接口关联--正则和json等提取 1. 用户定义的变量 线程组->添加->配置元件->用户定义的变量 引用方…

codesys【程序】

FB&#xff1a; 用于实现 PLC【叠】PLC FB功能块&#xff1a; 包含 输入&#xff0c;输出&#xff0c;局部变量&#xff0c;静态变量 用ST语言&#xff0c;方便复制。FUNCTION_BLOCK FB_CAN轴 VAR_INPUT 输入 END_VAR VAR_OUTPUT 输出 END_VAR VAR …

STM32F103标准外设库—— 新建工程与库函数(四)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的在校大学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;V…

SpringBoot 启动优化实践!

背景 公司 SpringBoot 项目在日常开发过程中发现服务启动过程异常缓慢&#xff0c;常常需要 6-7 分钟才能暴露端口&#xff0c;严重降低开发效率。通过 SpringBoot 的 SpringApplicationRunListener 、BeanPostProcessor 原理和源码调试等手段排查发现&#xff0c;在 Bean 扫描…

Matlab并行编程之GPU

Matlab并行编程之GPU Matlab提供GPU上计算支持: 基础数据类型(gpuArray和对应API),支持GPU计算的内置函数和多个工具包,支持PTX内核对象加载,支持MEX函数使用CUDA C/C开发等。对大规模数据处理&#xff0c;复杂计算&#xff0c;利用GPU计算能提供显著的性能加速效果. Matlab同…

快速折返的 cd和alias

文章目录 快速折返的 cd和alias更多信息 快速折返的 cd和alias ​ 有没有碰到这个痛点&#xff0c;一直需要cd ..&#xff0c;如此这番&#xff0c;好多次&#xff0c;那么此时就可以通过结合cd和alias的强大结合&#xff0c;快速折返&#xff0c;如下&#xff1a;在一个多级的…

Django教程第5章 | Web开发实战-数据统计图表(echarts、highchart)

专栏系列&#xff1a;Django学习教程 前言 highchart&#xff0c;国外。 echarts&#xff0c;国内。 本项目集成 hightchart和echarts图表库实现数据统计功能。 包括&#xff1a;折线图&#xff0c;柱状图&#xff0c;饼图和数据集图。 效果图 echats Highcharts 源代码…

Ubuntu系统安装(如何在虚拟机下安装Ubuntu系统)

前言 Linux 的开发需要在 Linux 系统下进行&#xff0c;这就要求我们的 PC 主机安装 Linux 系统。我会在这篇文章中分享我如何安装虚拟机&#xff0c;以及我在虚拟机下安装Ubuntu系统。相信我的分享一定会给你带来帮助。 目录 前言 一、安装虚拟机软件 二、创建虚拟机 三、…