【Part 2】 IPv4 Internet and Main technique
一、应用层
1、第1部分:应用程序层
a.概念性,网络应用协议的实现方面
-客户端 - 服务器范例
-服务模式
b.通过检查流行的应用程序级协议来了解协议
c.具体协议:
HTTP、FTP、SMTP、流行(邮局协议)、DNS
d.编程网络应用
-套接字API
2、网络应用程序和应用程序架构
![](/assets/blank.gif)
基于文本的应用程序
- telnet,电子邮件,ftp,网页,聊天,P2P文件共享
多媒体应用
- 多用户游戏、电子商务、互联网电话、视频会议、VoD,AoD - 音频和视频点播
应用程序体系结构:需要在分布式进程之间进行通信
- C / S模式,P2P,c / s + p2p混合
- 通过套接字:应用程序和传输层之间的门,API
3、服务质量(QoS)要求
数据丢失
- 一些应用程序(例如音频)可以容忍一些损失
- 其他应用程序(例如,文件传输,远程登录,电子邮件,金融应用程序)需要100%可靠的数据传输
定时/实时
- 一些应用程序(例如,互联网电话,交互式游戏)需要低延迟以“有效”
带宽
- 一些应用程序(例如多媒体)需要最小量的带宽以“有效”
抖动
- 分组间隔的变化
- 其他应用程序(“弹性应用程序”)利用他们获得的任何带宽
除此之外还有安全性,同步等
4、超文本传输协议(HTTP)
- http:超文本传输协议,网络的核心。
- C / S,交换HTTP消息
- HTTP定义了消息交换的结构以及客户端和服务器如何交换这些消息
- 无状态
网络术语
- 网页(网页文件)由对象组成
- 对象是可以通过单个URL寻址的文件
--HTML文件、JPEG,GIF图像、Java小程序、音频或视频剪辑...
- URL:统一资源定位器
--主机名+路径
--www.someschool.edu/somedprt/pic.gif
- HTML:超文本标记语言
4.1、持久连接(默认为http / 1.1)
- 服务器在发送响应后保持TCP连接处于打开状态,同一客户端和服务器之间的后续请求和响应可通过此连接发送
- 同一台服务器中的多个对象或网页可以通过单个持久性TCP连接发送
- HTTP服务器在空闲一段时间后关闭连接
- 客户端在接收到基本HTML后立即发送对所有引用对象的请求。
- 背对背的请求和引用对象的响应
- 1 RTT适用于所有对象,启动延迟较慢。
4.2、http请求消息格式
![](/assets/blank.gif)
- 两种类型的http消息:请求,响应
- http请求消息:
--ASCII(人类可读格式)
4.3、http响应消息格式
5、网页缓存
- 客户端缓存
- 代理缓存
- 分布式缓存
5.1、条件GET:客户端缓存
目标:如果客户端具有最新的缓存版本,则不要发送对象
- 减少对象检索延迟和网络流量
- Web缓存可以驻留在客户端或中间缓存服务器中
- 条件GET:获取最新的对象
- 客户端:在http请求中指定缓存副本的日期
--If-modified-since:<date>
- 如果缓存副本是最新的,则server:response不包含对象:
--HTTP / 1.0 304未修改
5.2、代理缓存
Web缓存:代表服务器满足HTTP请求的网络实体
目标:满足客户请求,而不涉及原始服务器
工作准则:
- 用户设置浏览器:通过Web缓存进行Web访问
- 客户端将所有http请求发送到Web缓存
--Web缓存中的对象:Web缓存返回对象
--否则来自原始服务器的Web缓存请求对象,然后将对象返回给客户端
5.3、合作缓存/分布式缓存
多个Web缓存和多级缓存
- 骨干缓存
- 位于互联网的不同位置
- 合作并提高整体表现
--如果命中错过,使用Http和ICP(Internet缓存协议)从相邻(或更高级别)缓存中获取对象,
--ICP是一种应用层协议,它允许一个缓存如果有一个给定的文档,就可以快速询问另一个缓存[RFC 2186]
协作缓存的另一种形式涉及高速缓存集群,通常位于同一局域网上
- 可靠性,并行性
- 负载均衡
- 对象定位(哈希路由)
6、ftp:文件传输协议
6.1、ftp基本传输原理
![](/assets/blank.gif)
- RFC 959:将文件传输到远程主机或从远程主机传输文件:C / S模型
- 打开两个并行TCP连接:
--控制:交换命令,客户端,服务器之间的响应。
-“带外控制”(port21),持久
-带内的
- 有状态的协议
6.2、ftp数据类型和结构
数据类型
- ASCII
- EBCDIC
- 图像:连续的位
- 本地:指定字节的大小
数据结构
- 文件结构:连续的数据字节序列
- 记录结构:文件由连续记录组成
- 页面结构:文件是由独立的索引页面组成的?
传输模式
- 流,块,压缩
7、电子邮件
7.1、电子邮件的基本结构与组成
三大组成部分:
- 用户代理
- 邮件服务器
- 简单的邮件传输协议:smtp
邮件服务器
- 邮箱包含用户传入的消息(尚未读取)
- 传出(待发送)邮件消息的消息队列
- 邮件服务器之间的smtp协议发送电子邮件
--C / S模式
7.2、电子邮件的协议:smtp [RFC 821]
直接传输:将服务器发送到接收服务器
- 没有中间服务器
- 端口25
- 持久连接
- 消息必须是7位ASCII码
- 消息中不允许使用CRLF.CRLF
7.3、非ASCII数据的MIME扩展
![](/assets/blank.gif)
8位编码支持多媒体,包括中文
- 16位编码
非ASCII文本需要msg中的其他标题
- 内容类型:提醒接收者使用哪个显示程序
- Content-transfer-encoding:ascii编码中使用的编码类型
7.4、邮件访问协议
邮件访问协议:从服务器检索
- POP3:邮局协议[RFC 1939]
--简单的邮件访问协议
--授权(代理< - >服务器)和下载
- IMAP:Internet邮件访问协议[RFC 1730]
--更多功能(更复杂)
--操纵服务器上存储的信息
- HTTP:Hotmail,Yahoo! 邮件等
-- 慢
--交互是通过通用网关接口(CGI)脚本完成的
8、DNS:域名系统(RFC1034,1035)
8.1、DNS中的标识符与域名系统
- DNS服务器
--所需的IP地址通常被缓存在“附近”
-减少DNS流量
-减少DNS延迟
- IP地址(32位)
- “主机名”,例如gaia.cs.umass.edu - 由人使用
域名系统:
- 分布式数据库以许多名称服务器的层次结构实现
- 应用层协议主机,路由器,名称服务器进行通信以解析名称(IP地址/名称翻译)
--注意:核心互联网功能,实现为应用层协议
--网络“边缘”的复杂性
8.2、DNS服务
域名解析
主机名←→IP地址
其他服务:
主机别名
- 助记符
邮件服务器别名
负荷分配
- 具有与一个主机名关联的不同IP地址的复制Web服务器
- 通过旋转名称映射请求来平衡负载
--Web服务器
--电子邮件服务器
8.2、DNS名称服务器 - 分布式服务器和分层服务器
3种类型的名称服务器:
根服务器
顶级域名(TLD)服务器
- 顶级域名:com,org,net,edu,gov
- 国家域名:uk,fr,ca,jp ...
权威名称服务器和本地名称服务器
- 位于主机的当地ISP
- 对于主机:存储主机的IP地址,名称
- 始终可以执行主机名称的名称/地址转换
本地名称服务器:
- 每个ISP,公司都有本地(默认)名称服务器
- 主机DNS查询首先转到本地名称服务器
8.3、DNS分层结构
![](/assets/blank.gif)
8.4、DNS:根名称服务器
![](/assets/blank.gif)
根名称服务器:
- 如果名称映射未知,联系TLD名称服务器
- 得到映射
- 返回映射到本地名称服务器
8.5、三种查询模式
迭代查询
混合查询
- 递归+迭代
8.5.1、递归查询
![](/assets/blank.gif)
8.5.2、迭代查询
根名称服务器:
- 可能知道TLD DNS服务器
- 可能知道中间名称服务器:谁联系找到权威名称服务器
8.5.3、混合查询
部分递归查询,部分迭代查询
![](/assets/blank.gif)
9、搜索引擎
- 一个页面是一个节点
- 网址是一个边缘
索引
- 将所有页面中标题的关键字编入索引
- Keyword←→url(title + short specification)
需要三个数据结构
- 线性数组:url_table,存储找到的url指针和标题指针
- 堆:存储可变长度的标题和URL
- 散列表,将网址散列到较短的项目中
索引制作:两个步骤
第一:搜索
- 使用递归过程:process_url,输入一个url,对url进行散列,在url_table中决定url;
- 如果url位于url _table中,请选择下一个url,否则访问该页面并将url和标题放入堆中,然后散列该url并处理指针;
- process_url像上面那样处理页面中的所有URL(超链接)
第二:索引
- 对于url_table中的每个项目,提取标题中的关键字
- 将关键字指向相应的url_table项目
二、传输层
1、第二部分:传输层
我们的目标:
了解传输层服务背后的原理:
复用/解复用
- 可靠的数据传输
- 流量控制
- 拥塞控制
在互联网上的实例化和实现
概述:
传输层服务
复用/解复用
无连接传输:UDP
面向连接的传输:TCP
- 可靠的转移
- 流量控制
- 连接管理
- 拥塞控制
2、传输服务和协议
提供在不同主机上运行的应用进程之间的逻辑通信
提供复用/解复用服务
传输协议在终端系统而不是路由器中运行
TCP,UDP
3、UDP:用户数据报协议[RFC 768]
“无褶边”,“露骨”的互联网传输协议
- 复用/ demultimplexing
- 查错
- 该应用程序几乎直接与IP通话
“尽力而为”服务,UDP段可能会:
- 丢失
- 按顺序交付给应用程序
连接:
- UDP发送者,接收者之间没有握手
- 每个UDP分段独立处理
3.1、UDP应用程序
简单
小段标题(8字节)
快速
- 没有连接建立(可以增加延迟)在发送者,接收者没有连接状态
--没有缓冲区,没有cc参数--没有sn,没有ack号码
- 无发送控制:UDP可以按照要求快速发送,发生错误时不会重发
典型的应用
3.2、UDP段结构(RFC 768)
![](/assets/blank.gif)
- 源端口
- 目的端口
- 长度
- 校验
数据字段
- 大约500Bytes
3.3、校验和示例
![](/assets/blank.gif)
4、TCP:概述
点对点:
- 一个发件人,一个收件人
可靠的,有序的字节流:
- 没有“消息界限”
流水线:
- TCP拥塞和流量控制设置窗口大小
发送和接收缓冲区
- 双向数据流在同一连接中
- MSS:最大段大小(536字节)
面向连接:
- 握手(交换控制消息)最初的发送者,接收者在数据交换之前的状态
流量控制:
- 发件人不会覆盖接收者
4.1、TCP段结构
![](/assets/blank.gif)
4.2、TCP:可靠的数据传输
重新传输丢失的段
需要发送缓冲区
如何知道段丢失与否?
- 承认
- 时间到
如何知道哪些部分丢失?
- 序列号
接收器:
- ACK预期细分:
- 累计ACK
4.3、TCP:可靠的数据传输算法
- 单向数据传输
- 无流量,拥塞控制
4.4、TCP ACK生成
事件 | TCP接收器操作 |
---|---|
按顺序到达分段,没有差距,其他一切已经确认 | 延迟的ACK。 等待下一段500毫秒。 如果没有下一个段,发送ACK |
有序段到达,没有间隙,一个延迟ACK待处理 | 立即发送单个累积确认 |
乱序分部到达高于预期的seq。 #gap检测到 | 发送重复的ACK,指示seq。 下一个预期字节数 |
细分市场的到来部分或完全填补了空白 | 如果分段在间隙的下端开始,则立即确认 |
4.5、TCP:重传场景
![](/assets/blank.gif)
- 在完整收到字节120之前,发送方知道所有数据
4.6、TCP流量控制
TCP流量控制服务可以消除由于这种不匹配而导致数据包丢失的可能性
- 需要接收器的缓冲器
TCP流量控制是速度匹配服务
![](/assets/blank.gif)
![](/assets/blank.gif)
RcvWindow =缓冲区中的备用房间数量
RcvWindow= RcVBuffer-[LastByteRcvd-LastByteRead]
接收方:明确通知发送方(动态更改)的可用缓冲区空间量
- TCP段中的RcvWindow字段
- 最初,RcvWindow = RcvBuffer
发送方:保持传输的未接收数据量少于最近接收到的RcvWindow
- LastByteSent-LastByteAcked<= RcvWindow
当RcvWindow = 0时,一个字节的数据仍然被发送到接收器
- 避免rcvBuffer = 0
4.7、TCP往返时间和超时
比RTT长
- 注意:RTT会有所不同
太短:过早超时
- 不必要的重传
太长:对分部损失的反应缓慢并引入额外的延迟
SampleRTT:从段传输到ACK接收的测量时间
- 忽略重传,累计确认的段
由于路由器拥塞和终端系统负载变化,SampleRTT会有所不同,因此,我们希望RTT“更平滑”
- 使用几个最近的测量,而不仅仅是当前的SampleRTT
- 指数加权移动平均
- 给定样品的影响迅速呈指数下降
- x的典型值:0.125
自适应设置超时
- EstimtedRTT加上“安全边际”
- EstimatedRTT变化很大 - >安全系数较大
4.8、示例RTT估计:
4.9、TCP连接管理
初始化TCP变量:
seq#秒
缓冲器,流量控制信息(例如RcvWindow)
客户端:连接发起者
Socket clientSocket = new Socket(“主机名”,“端口号”);
服务器:由客户联系
Socket connectionSocket = welcomeSocket.accept();
三次握手:
步骤1,发送SYN段:客户端系统向服务器发送TCP SYN控制段
- 指定初始序列号:Client_isn
步骤2,SYNACK:服务器端系统收到SYN,用SYNACK控制段回复
- ACK收到SYN
- 分配缓冲区和变量
- Client_isn+1
- 指定服务器 - >接收器初始序列#
步骤3:客户端收到连接授权的数据包后,将缓冲区和变量分配给连接
发送确认到服务器
- Server_isn+1
- SYN= 0
关闭连接:
第1步:客户端系统向服务器发送TCP FIN控制段
第2步:服务器收到FIN,并回复ACK。 关闭连接,发送FIN。
第3步:客户端收到FIN,并回复ACK。
- 输入“定时等待” - 将用ACK回应接收到的FIN
第4步:服务器收到ACK。 连接关闭。
5、拥塞控制方法
- 没有来自网络的明确反馈
- 从终端系统观察到的损失,延迟推断拥塞
- TCP采取的办法
网络辅助拥塞控制:
路由器向终端系统提供反馈
- 表示拥塞的单个比特(SNA,DECbit,TCP / IP ECN,ATM ABR)
- 明确的费率发送者应该发送
- 两种反馈模式:
--Router→sender
--Router→receiver→sender
5.1、TCP拥塞控制
传输速率受拥塞窗口大小限制,Congwin,超过段:
![](/assets/blank.gif)
![](/assets/blank.gif)
- 理想情况下:尽可能快地传输(Congwin尽可能大)而不会丢失
- 增加Congwin直到发生损失(拥塞)
- 损失:减少Congwin,然后再开始探测(增加)
两个“阶段”
- 启动缓慢
- 拥塞避免
重要变量:
- Congwin
- 阈值:定义两个慢启动阶段,拥塞避免阶段之间的阈值
5.1.1、TCP慢启动
![](/assets/blank.gif)
![](/assets/blank.gif)
丢失事件:超时(Tahoe TCP)和/或三个重复ACK(Reno TCP)
5.1.2、TCP拥塞避免
![](/assets/blank.gif)
三个重复的ACK(Reno TCP):
有些细分正在正确地穿过!
不要像Tahoe那样将窗口降到1来“反应过度”
- 将窗口大小减半
5.1.3、TCP Reno vs TCP Tahoe
![](/assets/blank.gif)
5.1.4、AIMD与TCP公平
![](/assets/blank.gif)
TCP拥塞避免:
AIMD:加法增加,乘法减少
- 每个RTT增加1个窗口
- 在损失事件中减少2倍的窗口
公平性目标:如果N个TCP会话共享相同的瓶颈链路,则每个链路应获得1 / N的链路容量
5.1.5、TCP为什么公平?
随着整个增加,附加增加给出斜率1
乘积减少量按比例减少吞吐量
![](/assets/blank.gif)
- 如果n个纯粹的TCP服务共享瓶颈链接,则每个最终获得C / n,这是公平的
- 如果TCP + UDP共享链路,UDP将占用更多带宽,这是不公平的!
- 如果用户使用多个并行连接(如Web浏览器),即使在纯服务中,也是不公平的!
例子:
- 速率R的链路支持9个用户,每个用户使用一个TCP连接
- 如果新用户使用11个连接,他将占用11/20的带宽,这对其他用户不公平
- 世界上没有绝对的公平!
三、网络层
1、第三部分:网络层
目标:
了解网络层服务背后的原理:
- 路由(路径选择)
- 处理规模
- 路由器如何工作
- 多播
在互联网上的实例化和实现
概述:
网络层服务
路由选择原则:路径选择
分层路由
IP
Internet路由协议可靠传输
- 域内
- 域间
路由器里面有什么?
组播
2、网络服务模式
- 保证带宽?
- 保持分组间定时(无抖动)?
- 无亏损交货?
- 按订单交货?
- 拥塞反馈给发件人?
网络层提供的最重要的抽象:虚电路还是数据报?
![](/assets/blank.gif)
3、互联网网络层
![](/assets/blank.gif)
4、IP地址:简介
![](/assets/blank.gif)
接口:主机,路由器和物理链路之间的连接
- 路由器通常有多个接口
- 主机可能有多个接口
- 与接口相关的IP地址,而不是主机,路由器
4.1、IP地址
![](/assets/blank.gif)
- 网络部分(高位比特)
- 主机部分(低位比特)
什么是网络? (从IP地址角度看)
- 设备与IP地址的相同网络部分接口
- 可以在没有中间路由器的情况下物理地到达彼此
IP地址:
- 网络部分(高位比特)
- 主机部分(低位比特)
- 从路由器分离每个接口,创建孤岛
给出“网络”的概念,让我们重新检查IP地址:
4.2、IP寻址:CIDR
- 地址空间使用效率低下,地址空间耗尽
- 例如,B类网络为65K主机分配了足够的地址,即使该网络中只有2K个主机
CIDR:无类域间路由
- 网络部分任意长度的地址
- 地址格式:a.b.c.d / x,其中x是地址网络部分的#位
4.3、特殊地址
4.4、子网掩码
主机ID的一些左位用于子网字段
子网分区必须使用子网掩码:
使用子网将减少可用的主机地址
- B:65534 host-id,如果6bit用于子网标识
- (26-2)(210-2)=63364
![](/assets/blank.gif)
5、NAT:网络地址转换
![](/assets/blank.gif)
5.1、NAT网关
NAT路由器维护一个NAT转换表
![](/assets/blank.gif)
5.2、NAT穿越问题
![](/assets/blank.gif)
- 服务器地址10.0.0.1局域网(客户端不能将其用作目标地址)
- 只有一个外部可见的NAT地址:138.76.29.7
解决方案1:静态配置NAT
- (138.76.29.7,端口2500)〜(10.0.0.1,端口25000)...
- 向外部广告蓝色部分
- NAT路由器在给定端口将传入请求转发给服务器
- 互联网网关设备(IGD)协议。
允许NAT主机与NAT路由器进行通信
- 产生映射:(138.76.29.7,5001)〜(10.0.0.1,3345)...
- (有租约时间)
- 广告到外面
6、DHCP
由系统管理员在文件中硬编码
- Wintel:控制面板 - >网络 - >配置 - > tcp / ip->属性
- UNIX:/etc/rc.config
DHCP:动态主机配置协议:动态获取地址:“即插即用”
- 主机广播“DHCP discover”消息
- DHCP服务器以“DHCP offer”msg响应
- 主机请求IP地址:“DHCP请求”消息
- DHCP服务器发送地址:“DHCP ack”消息
6.1、DHCP客户端 - 服务器方案
![](/assets/blank.gif)
广播
(2):地址提供
广播
(3):地址选择
广播
(4)DHCP ACK
广播
7、获取从源到目标的数据报
![](/assets/blank.gif)
- 查找网络。 B的地址
- 发现B与A在同一个网络
- 链路层将直接发送数据报到链路层帧内的B.
--B和A直接相连
从A开始,目的地E:
- 查找E的网络地址
- E在不同的网络上
--A,E不直接连接
- 路由表:到E的下一跳路由器是223.1.1.4
- 链路层将数据报发送到链路层帧内的路由器223.1.1.4
- 数据报到达223.1.1.4
- 继续…..
抵达223.1.1.4,发往223.1.2.2
- 查找E的网络地址
- E在与路由器接口223.1.2.9相同的网络上
- 路由器E直接连接
- 链路层通过接口223.1.2.9将数据报发送到链路层帧内的223.1.2.2
- 数据报到达223.1.2.2 !!!
7.1、IP数据报格式
![](/assets/blank.gif)
8、ICMP:Internet控制消息协议
- 错误报告:无法访问的主机,网络,端口,协议
- 回应请求/回复(由ping使用)
网络层“上方”IP:
- IP数据报中携带的ICMP消息
ICMP消息:类型,代码加上导致错误的IP数据报的前8个字节
![](/assets/blank.gif)
9、路由原则
![](/assets/blank.gif)
- 图形节点是路由器
- 图边是物理链接
--链路成本:延迟,$成本或拥塞水平
“好”路径:
- 通常意味着最低成本路径
- 其他def可能
9.1、链路状态路由算法
网络拓扑,所有节点已知的链路成本
- 通过“链接状态广播”
- 所有节点都有相同的信息
计算从一个节点(“源”)到所有其他节点的最低成本路径
- 给出该节点的路由表
迭代:在k次迭代之后,知道k dest的最低成本路径
符号:
c(i,j):从节点i到j的链接成本。 成本无限,如果不是直接的邻居
D(v):从源到目标的路径成本的当前值V
p(v):沿从源到v的路径的前驱节点
N:最小成本路径明确已知的节点集合
Dijkstra算法:例子
Dijkstra算法,讨论
算法复杂度:n个节点
- 每次迭代:需要检查所有节点,w,不在N中
- n *(n + 1)/ 2比较:O(n ** 2)
- 更有效的实现可能:O(nlogn)
振荡可能性:
- 例如,链路成本=携带的业务量
避免摆动
链接成本不取决于流量
- 不可接受!
所有路由器不同时运行Dijkstra算法
- 自同步[floyd同步1994]
算法运行时引入随机延迟
9.2、距离矢量路由算法
分散式:
- 每个节点只与直接连接的邻居进行通信
迭代:
- 继续,直到没有节点交换信息。
异步:
- 不需要所有的节点信息
自行终止
距离表数据结构
- 每个节点都有自己的表格
- 列为每个可能的目的地
- 行为每个直接连接的节点邻居
例如:在节点X中,用于dest Y通过邻居Z:
距离表:例子
距离表给出了路由表
距离矢量算法:
在所有节点上,X:
1 Initialization: 2 for all adjacent nodes v: 3 D (*,v) = infinity /* the * operator means "for all rows" */ 4 D (v,v) = c(X,v) 5 for all destinations, y 6 send min D (y,w) to each neighbor /* w over all X's neighbors */ 8 loop |
1初始化: 2用于所有相邻节点v: 3 D(*,v)=无穷大 /*操作符表示“对于所有行”* / 4 D(v,v)= c(X,v) 5对于所有目的地,y 6向所有X的邻居发送min D(y,w)/ * 给每个邻居w * / 8循环 9等待(直到I发现链路损失更改为邻居V. 10或直到I收到来自邻居V的更新) 11 12如果(c(X,V)改变d) 13 / *通过d *改变所有dest通过邻居v的开销* / 14 / *注:d可能是正值或负值* / 15对于所有目的地y:D(y,V)= D(y,V)+ d 16 17 else if(更新来自V wrt目标Y) 18 / *从V到某些Y的最短路径已经改变* / 19 / * V已经为其最小DV(Y,w)* / 20 / *称这个收到的新值是“newval”* / 21表示单个目标y:D(Y,V)= c(X,V)+ newval 22 23如果我们有任何目的地Y的新的最小D(Y,w) 24向所有邻居发送min D(Y,w)的新值 25 26循环结束 |
距离矢量算法:例子
距离矢量:链接成本变化
链接成本变化:
- 节点检测本地链路成本变化
- 更新距离表(第15行)
- 如果成本变化的成本最小路径,通知邻居(23,24行)
链接成本变化:
- 好消息快速传播
- 坏消息传播缓慢 - “数无穷”问题!
距离向量:加入反向poisoned
如果Z通过Y路由到X:
Z告诉Y其与Z的距离是无限的(所以Y不会通过Z路由到X)
这将完全解决无穷大问题吗?
9.3、分层路由
同一AS内的路由器运行相同的路由协议
- “AS内部”路由协议
- 不同AS内的路由器可以运行不同的AS内部路由协议
9.3.1、AS内部和AS间路由
9.3.2、AS内部路由
最常见的Intra-AS路由协议:
- RIP:路由信息协议
- OSPF:开放最短路径优先
- IGRP:内部网关路由协议(思科专有)
- EIGRP
9.4、RIP(路由信息协议)
包含在1982年的BSD-UNIX发行版中
距离度量:跳数(最大= 15跳)
- 你能猜出原因吗?
距离矢量:通过响应消息(也称为广告)每30秒交换一次,
每个广告:路由到多达25个目标网路
9.4.1、RIP:链接失败和恢复
- 经由邻居的路由无效
- 新的广告发送给邻居
- 邻居依次发出新的广告(如果表格改变了)
- 链路故障信息迅速传播到整个网
- 毒性逆转用于防止乒乓循环(无限距离= 25跳)
9.4.2、RIP表处理
- 由应用程序级进程管理的RIP路由表,称为route-d(守护进程)
- 通过UDP数据包发送的广告,定期重复
9.5、OSPF(开放式最短路径优先)
使用链接状态算法
- LS分组传播
- 每个节点的拓扑图
- 使用Dijkstra算法进行路由计算
--以自己为根的最短路径树--链接成本由管理员配置
OSPF通告每个邻居路由器携带一个条目
广告传播到整个AS(通过泛滥)
- OSPF消息直接通过IP(而不是TCP或UDP)
9.5.1、OSPF“高级”功能(不适用于RIP)
允许多个相同成本路径(RIP中只有一条路径)
对于每个链路,针对不同TOS的多个成本度量(例如,对于尽力而为的卫星链路成本设置为“低”;对于实时为高的)
- 不同的通路←→不同的树
集成的单播和多播支持:
- 组播OSPF(MOSPF)使用基于OSPF的相同拓扑数据
大型域中的分层OSPF。
9.5.2、分层OSPF
9.6、EIGRP:增强型内部网关路由协议
作为RIP的继承者,距离矢量协议
允许多个成本指标
- 延迟,带宽,可靠性,负载
广播路由信息使用TCP,仅在路由表成本发生变化时才执行,而不是定期执行
9.7、Internet中的跨域路由:BGP
![](/assets/blank.gif)
路径矢量协议(无成本)
- 类似于距离矢量协议
- 每个边界网关向邻居(对等体)广播全部路径(即,AS的序列)到目的地
- BGP路由到网络(AS),而不是单个主机
例如,网关X可以将其路径发送到dest Z:
路径(X,Z)= X,Y1,Y2,Y3,...,Z
9.7.1、BGP:控制你的路由
![](/assets/blank.gif)
X,W,Y是(提供商网络的)客户,
X是双宿:连接到两个网络
- X不想从B经由X到C路由
- ..所以X不会通告给B的路由
A通告给B路径AW
B通告X路径BAW
B应该为C路径BAW做广告吗?
- 没门! 因为W和C都不是B的客户,所以B没有获得任何“收入”来传递CBAW
- B想迫使C通过A路由到w
- B只想路由到/从它的顾客!
9.7.2、BGP操作
接收和过滤来自直接连接的邻居的路由通告。
路线选择。
- 要前往目的地X,哪条路径(多条广告)将被采用?
发送路由通告给邻居。
9.7.3、BGP消息
BGP消息:
- 打开:打开TCP连接到对端并认证发件人
- 更新:宣传新路径(或退出旧)
- 没有UPDATES时,KEEPALIVE保持连接活着; 也确认OPEN请求
- 通知:报告之前消息中的错误; 也用于关闭连接
9.8、广播路由
方法:
N-way-unicasting,缺点:
- N个目的地址
- N份数据
- 异步
广播
- 不受控制的洪水
- 受控洪水
- 生成树广播
9.8.1、不受控制的洪流
![](/assets/blank.gif)
当数据包到达路由器时,转发到除传入接口外的所有接口
致命缺陷:
- 广播循环
- 广播风暴
9.8.2、受控洪流
序列号控制的洪泛
- 将广播序列号引入分组中:源地址+序列号
- 每个节点都维护一个收到的每个数据包的源地址+序列号列表
- 当一个节点收到一个广播包时,检查列表是否在列表中, 否则,淹没
反向路径转发
- 如果一个数据包到达了它自己的反向最短路径(接收器→源)的接口,泛洪;
- 否则,下降。
9.8.3、RPF示例
A→ B, C C→E,F,B(discard) F→E (discard) E→F(discard),D(discard) B→D,C(discard) 可能会收到重复的数据包 |
![]() |
9.8.4、生成树广播
生成树:包含图中每个节点的树
第一:构建一棵生成树
第二:广播 |
![]() |
10、路由器概述
![]() |
![]() |
![]() |
10.1、路由器架构概述
![](/assets/blank.gif)
- 运行路由算法/协议(RIP,OSPF,BGP)
- 将数据报从入局切换到出局链路
10.2.1、输入端口功能
10.2.2、路由表查找
方法:
将路由表条目存储在树状数据结构中,二进制搜索
CAM:内容可寻址内存
- 一些Cisco,64K /输入端口
缓存:将最近访问的条目保存在缓存中
其他
- 更快的数据结构
- 压缩路由表
- 基于硬件的
10.2.3、输入端口队列
![](/assets/blank.gif)
头线(HOL)阻塞:队列前排队的数据报阻止队列中的其他人前进
由于输入缓冲区溢出导致排队延迟和丢失!
10.2.4、三种交换结构
![](/assets/blank.gif)
10.3、输出端口
![](/assets/blank.gif)
数据报从光纤到达时所需的缓冲速度高于传输速率
调度规则在排队的数据报中选择传输
11、多播
- 单播协议
- 广播协议
越来越多的应用需要将数据包从一个或多个发送者传送到一组接收者
- 软件升级,视频会议,共享数据应用,WWW缓存更新,多部分游戏和聊天等
11.1、如何以多部分进行通信?
多重发送(Multi-uncast):发送者通过多次发送将 多个数据复制到许多接收者 多点传送(Multicast):通过一次发送操作将一个 数据包从一个发送方发送到多个接收方
多播不是无状态和无连接的协议
|
![]() |
![]() |
11.2、主机组
- D类:224.0.0.0〜239.255.255.255
使用相同多播地址的主机构成主机组
发件人可能是也可能不是成员
主持人可能属于多个组
主持人可能会发送给许多组
主机组是动态的
问:如何维护该组?
- IGMP
每个组由多播地址标识
团体可以是任何大小
小组成员可能位于互联网的任何地方
团体成员可以随意加入和离开
组员身份不明确
后一部分
https://blog.csdn.net/fengcc7099/article/details/80450518
Thanks FCC
【Part 2】 IPv4 Internet and Main technique相关推荐
- 【IP技术】ipv4和ipv6是什么?
IPv4和IPv6是两种互联网协议,用于在互联网上标识和寻址设备. IPv4(Internet Protocol version 4)是互联网协议的第四个版本,是当前广泛使用的互联网协议.IPv4地址 ...
- 【已解决】Exception in thread “main“ java.lang.IllegalArgumentExcept: illegal initialSize 6, maxActive 5
Exception in thread "main" java.lang.IllegalArgumentException: illegal initialSize 6, maxA ...
- 【已解决】Exception in thread “main“ java.lang.NullPointerException
翻译:空指针异常,也就说,报错的那一行出现了调用空资源的情况. 重点关注报错发生的所在行,通过空指针异常产生的两条主要原因诊断具体的错误.同时为了避免空指针的发生,最好在做判断处理时将"nu ...
- 【学习笔记】 IPv4地址、NAT与子网掩码、子网划分
文章目录 一. IP地址 ① 在例子中理解 ③ IP地址的分类 ④ 特殊IP地址 ⑤ 私有IP地址 ⑥ 各类IP的对比 二. NAT 三. 子网划分与子网掩码 ① 子网划分 ② 子网掩码 例题1 例题 ...
- 震撼,java面试题整合(良心制作)11万多字拿去。持续更新【可以收藏】
一.javaSE面试题整合 Java部分 JDK中哪些类是不能继承的?[信雅达面试题] [参考答案] 不能继承的是类是那些用final关键字修饰的类.一般比较基本的类型或防止扩展类无意间破坏原来方法的 ...
- 【期末复习】计算机通信与网络
目录 第一章 概述 1.理解计算机网络定义和组成 2.理解网络的类型及其特征(网络拓扑结构.网络覆盖范围) 3.掌握网络体系结构的概念 4.掌握协议概念和要素 5.掌握OSI/RM体系结构的七层模型及 ...
- 【蓝桥杯】【调和级数】
[题目] 1/1 + 1/2 + 1/3 + 1/4 + - 在数学上称为调和级数. 它是发散的,也就是说,只要加上足够多的项,就可以得到任意大的数字. 但是,它发散的很慢: 前1项和达到 1.0 前 ...
- 【蓝桥杯】【生日蜡烛】
[题目] 某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛.现在算起来,他一共吹熄了236根蜡烛. 请问,他从多少岁开始过生日party的? 请填写他开始过生日part ...
- c语言打印空心数字图形,(完整word版)C语言编写打印实心和空心菱形【源码】
<(完整word版)C语言编写打印实心和空心菱形[源码]>由会员分享,可在线阅读,更多相关<(完整word版)C语言编写打印实心和空心菱形[源码](13页珍藏版)>请在人人文库 ...
最新文章
- 把软件架构演进体现在栈上
- HanLP二元核心词典详细解析
- 前端学习(1366):express入门
- java里面的三角函数
- 【Django 2021年最新版教程21】数据库查询 model 多条数据 queryset转dict字典 返回渲染到前端
- 浅谈JSON数据解析方法
- linux终端下如何下载文件,Linux终端下载文件的方法有哪些?
- java jco_JAVA通过JCo连接SAP
- 超详细的 Python 方法、函数总结
- excel如何把顺序倒过来_Excel中表格进行颠倒顺序的操作方法
- secureCRT快捷粘贴操作
- 关于CalendarUtil获取时间的工具类
- CorAl – Are the point clouds Correctly Aligned?
- 医学图像自适应计算图像窗宽窗位技巧
- IT人员必学最基础知识(四)——补充总结
- 搜狗输入法--自定义短语配置文件
- 机器学习:生成式模型和判别式模型
- 大型网络游戏服务器的框架设计(一)
- 面对物联网安全隐患高墙,熵核科技如何实现突围
- OPT3001DNPR人眼响应数字环境光照传感器
热门文章
- 我爱学Java之Pattern和Matcher用法
- python3.7.4安装教程桌面_Python3.7.4图文安装教程
- MathType破解版中特殊符号如何输入
- Mathtype 7.4.4.516软件研究
- Metahuman Face材质球总结
- Cortex-A9/A8 ARM工业核心板
- Wnidows下使用Python调用乐视三合一摄像头
- php中 r,PHP中转义字符 (n r)
- ng-pattern 验证问题
- python实现企业微信机器人的自动推送