IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 4.6万字长文总结计算机网络 &&《计算机网络·自顶向下方法》学习笔记(1-6章) -> 正文阅读

[Java知识库]4.6万字长文总结计算机网络 &&《计算机网络·自顶向下方法》学习笔记(1-6章)

前言:

  1. 大多数的内容都是本人在学习《计算机网络·自顶向下方法》(第七版)一书时做的记录,博客内部分图片来自网络,侵删。
  2. 本篇博客可能覆盖面广度不足,但适合结合书本学习用于强化和加深理解。
    博客中的“p xxx”意思是《计算机网络·自顶向下方法》(第七版)一书中的页数,更适合结合书本阅览。
  3. 如对您有帮助,感谢点赞!收藏!关注!若有错误的地方,也感谢批评指正!
  4. 有空就会来更新细化这篇博客,多加点易于理解的图片什么的…

第一章 计算机网络和因特网

第一章的内容主要是一些宏观概念和计算,不重点介绍。
推荐看书或看<计算机网络王道考研>系列视频。

  • ISP(网络服务供应商 Internet Service Provider)

1.1 时延

  • 时延的类型:
    (1)处理时延:检查首部和决定将该分组导向何处
    (2)排队时延:分组在链路上等待传输
    (3)传输时延:也叫注入时延,是将所有的分组的比特推向链路(发射)所需要的时间
    (4)传播时延:在链路上传播的时间(从链路的起点到路由器)
    在这里插入图片描述

  • 时延带宽积
    在这里插入图片描述

  • 往返时延RTT
    在这里插入图片描述

  • 利用率:
    14d7e84a82c29604c082f.png)
    例题1:
    在这里插入图片描述

题解:
(1)page50、p25
a: Tprop=d/s= 210^7 / 2.510^8 = 0.08s
故带宽延时积为210^6 x 0.08 = 160000 bit
b:160000 bit
c:带宽时延乘积指的是链路的带宽与传播时延的乘积。结果为比特的数据量,表示在特定时间该网络上的最大数据量。
d:该链路上一个比特宽度为:2
10^7/160000= 125m ,而足球场长度通常为90-120m,故大于足球场长度。
e:比特宽度表达式推导:d/(RTprop)= d/(Rd/s)= s/R

(2)page50、p27
a:Tprop=d/s= 210^7 / 2.510^8 = 0.08s
故带宽延时积为10^9 x 0.08 = 0.810^8 bit
b:0.8
10^8 bit
c:s/R=2.5*10^8 / 10^9 = 0.25m(基于上一题得到的公式)

(3)page50、p28
a:T=Ttrans+Tprop=810^ 5 / (210 ^ 6)+210 ^ 7 / 2.510 ^ 8 = 0.4+0.08 = 0.48s(忽略了处理和排队时延)
注意:用于求注入(传输)时延的信道宽度即带宽,与用于求带宽时延积的“带宽”相同,单位为bps(bit/s)
b:Ttrans_分组=4
10 ^ 4/(210 ^ 6)0.02s , 故T_分组=Ttrans_分组+Tprop=0.1s
发送20个文件的总用时为:19 * T_分组+1 * Ttrans_分组=19
0.1+0.02=1.92s
C:分组发送时长>连续发送时长。

例题2:
在这里插入图片描述

题解:
(4)p47 R19
a:吞吐量的值是其中传输速率最小的链路的传输速率,即该文件传送的吞吐量为500kbps.
b:时间: 8 * 4Mb / 500kbps = 32Mb / 0.5Mbps = 64s
c:当R2减少到100kbps时, R2所处链路就变成了瓶颈链路,故吞吐量为: 100kbps;
传输时间为: 8 * 4Mb / 0.1Mbps = 320s

1.2 层次模型

  • 各类层次模型总结:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

例题:
简述五层模型中有哪些层次及其作用?

有应用层、运输层、网络层、链路层、物理层:
a:应用层: 应用层协议用于各个端系统中的应用程序交换信息分组, 该信息分组称为报文.
b:运输层: 运输层的作用是在应用程序端点之间传送应用层报文段. 在因特网中有TCP和UDP两种运输协议, 任一个都能封装并运输应用层报文, 运输层的分组称为报文段.
c:网络层: 网络层负责将运输层的报文段和目的地址封装成数据报, 用于下一层的传输.
d:链路层: 链路层会把网络层的数据报封装成链路层的帧, 并把该帧传递给下一个结点.
e:物理层: 物理层的任务是将链路层每帧中的一个个比特移动到下一个节点,具体会落实到不同的物理媒介(双绞铜线, 光纤等).


第二章 应用层

2.1 网络套接字(API)

(1)多数应用程序是由通信进程对组成的,进程对中的两个进程互相发送报文:
一个进程通过软件接口(API)向网络接收报文;(进程是房子,API是门);

(2)该套接字是建立网络应用程序的可编程接口,因此也称作:
应用程序与网络之间的 应用程序编程接口(Application Programming Interface)

(3)API是应用程序进程与运输层协议之间的端口(p58页图)

  • web服务器用端口号80来标识,邮件服务器进程(使用SMTP协议)用端口号25来标识

  • TCP提供两种服务:(p61)
    (1)面向连接服务——先握手(ACK)后建立全双工链接
    (2)可靠数据传输服务—— a.有序、无差错发送 b.请求重传 c.拥塞控制

  • UDP是一种不提供不必要服务的轻量级运输协议,仅提供最小服务(p62)

无论是TCP还是UDP都没有提供任何加密机制;
SSL(安全层套接字Secure Socke Layer)是提供了安全性服务的加强版TCP

2.2 Web和HTTP

Web的应用层协议是HTTP(超文本传输协议,HyperText Transfer Protocol);

  • HTTP由两个程序实现:
    (1)客户程序 —— Web浏览器
    (2)服务器程序 —— Web服务器
  • 每个URL地址表包括两个部分:(1)主机名 (2)路径名

  • 例如: 对于URL地址如https://blog.csdn.net/weixin_45067603/article/details,其主机名为https://blog.csdn.net,路径名为:/weixin_45067603/article/details(p64)

  • HTTP使用TCP作为它的(传输层的)支撑运输协议;
    如API中描述的,Client端的套接字是客户进程与TCP链接之间的门,Server端同理,
    都从它们的套接字接口API发送HTTP请求和接收HTTP响应报文

  • 注意:HTTP中,Server向客户发送被请求的文件,而不存储关于用户的任何信息状态,故HTTP被称为“无状态协议”

  • TCP三次握手的总响应时间:(p67)
    粗略为两个RTT加上服务器服务器传输HTML文件的时间

  • HTTP请求报文和响应报文(p67~p69)
    参考博客:抓包简要分析HTTP协议

  • Web缓存器(Web cache),也叫代理服务器(proxy server):(p72)
  • 工作原理:
    Web缓存器有自己的磁盘存储空间,并存储最近请求过的对象的副本(局部性原理);
    (1)Web浏览器向Web缓存器发送一个HTTP请求并建立一个TCP链接;
    (2)Web缓存器检查自身是否存储了被请求对象的副本
    (3.1)如果有就发送给Client
    (3.2.1)如过没有就向该对象的初始服务器(如www.xxx.edu)请求该对象
    (3.2.2)得到该对象后存储(包含修改日期)并转发给Web浏览器即Client
    可以看到在Web缓存器的工作过程中,Web缓存器即作为Client端又作为Server端
  • Web缓存器的作用:
    (1)可以大大减少对客户请求的响应时间
    (2)从整体上大大减低因特网上的Web流量,从而改善了所有应用的性能
  • 条件GET方法:(p74)
  1. Web缓存器上保存的副本是不是最新的?近期是否被修改过?条件GET方法解决了问题。
    形式:请求报文使用GET方法,且请求报文中包含一个”If-Modified-Since:”首部行;
  2. Web Client向proxy cache发送请求,如proxy cache发现了有该请求对象的本地缓存,则向Web server发送一个条件GET请求报文——仅当指定日期之后对请求对象修改过,才重新发送该对象,否则只需回应一个没有请求对象实体的条件GET响应报文。

2.3 因特网中的电子邮件

  • 因特网电子邮件系统:(p76)
    3个主要组成部分:
    (1)用户代理(user agent)
    (2)邮件服务器(mail server)
    (3)简单邮件传输协议(SMTP,使用TCP)
  • 每台邮件服务器即运行SMTP的客户端又运行SMTP的服务端:
    邮件服务器上包含(1)报文队列(mesege queue)—— 用于发文件
    (2)邮箱(mailbox)—— 用于收文件

SMTP的出现早于HTTP,使用25号端口,它限制所有文件的报文体部分(不只是其首部)只能采用简单的7位ASCII码表示,即在使用SMTP传送邮件之前需要将2进制的多媒体数据编码为7位ASCII码,并在传输后解码还原(对比HTTP并不需要此步骤)

  • 一封邮件发送的通常情况:(p77 图2-15)
    (1)A调用邮件代理程序(用户代理),提供B的邮件地址,撰写报文,指示发送;
    (2)A的用户代理把报文发给A的邮件服务器中的报文队列中;
    (3)运行在A邮件服务器上的SMTP客户端发现了报文队列中的这个报文,随即创建一个TCP链接到运行在B邮件服务器上的SMTP服务器;
    (4)经历一些初始的SMTP握手,报文从A的邮件服务器上的报文队列中由SMTP的客户端发送到B的邮件服务器;
    (5)B的邮件服务器上,SMTP的服务端接收该报文,并将报文放进邮箱中;
    (6)B在方便的时候,调用他的用户代理阅读该报文

  • 需要注意的是:
    (1)SMTP一般不使用中间邮件服务器发送邮件,即使这俩邮件服务器位于地球的两端;
    (2)如果接收方的邮件服务器没有开机,那么发送方要发送的报文将会保存在其自己的邮件服务器中的报文队列中等待做新的尝试。

  • 对比SMTP和HTTP(p79)
    持续的SMTP和HTTP都使用持续链接,故两个协议有一些共同特征,然而也存在重要区别:
    (1)HTTP主要是一个拉协议(pull protocol)—— 用户从服务器拉取信息;
    SMTP基本上是个推协议(push protocol)—— 发送邮件服务器把邮件推向接收邮件服务器;
    (2)SMTP要求每个报文采用7比特ASCII码格式,HTTP数据则不受这种限制;
    (3)对于一个既包含文本又包含图形(或者是其他媒体类型)的文档:
    HTTP把每个对象封装到它自己的HTTP响应报文中;
    SMTP则把所有报文对象放在一个报文中;

  • 问题的引入:
    因特网电子邮件系统中的用户代理并不能使用SMTP获得报文,因为取报文是一个拉操作,而SMTP是一个推协议。通过引入一个特殊的邮件访问协议来解决这个问题:
    (1)POP3 —— 第三版的邮局协议(Post Office Protocal—Version 3)
    (2)IMAP —— 因特网邮件访问协议(Internet Mail Access Protocal)
    (3)HTTP ——(超文本传输协议,HyperText Transfer Protocol)

  • POP3 (p81)
    因为该协议非常简单,故其功能相当有限。
    当用户代理(客户)打开了一个到邮件服务器(服务器)端口110上的TCP连接后,POP3就开始工作,POP3按照三个阶段进行工作:
    (1)特许(authorization):用户代理以明文形式发送用户名和口令来鉴别用户
    (2)事务处理:用户代理取回报文,还可以对报文做删除标记,取消删除标记,以及获取邮件的统计信息;
    (3)更新:出现在客户发出quit命令后,邮件服务器删除那些被标记为删除的报文

  • IMAP(p82)
    POP3无法为客户创建远程文件夹并为报文指派文件夹,只能将报文下载到本地文件;
    为了解决这个问题,因特网邮件访问协议IMAP应运而生。

  • 基于Web的电子邮件(p82-83)
    用户代理就是普通的浏览器,用户和他远程邮箱之间的的通信则通过HTTP进行。
    这种模式下:
    (1)同一个用户的用户代理(浏览器)与邮件服务器之间的发与接通过HTTP(而非发靠SMTP,收靠IMAP、POP3)
    (2)但是不同用户之间的邮件服务器发送和接收邮件仍用的是SMTP

2.4 DNS(域名系统 — Domain Name System)

DNS(域名系统 — Domain Name System):因特网的目录服务(p83)

人类更喜欢记忆主机名,而路由器更喜欢定长的、有结构层次的IP地址,DNS应运而生:
DNS能进行主机名到IP地址转换的目录服务。

  • 一、DSN是:
    (1)一个由分层的DNS服务器(DNS server)实现的分布式数据库
    (2)一个使得主机能够查询分布式数据库的应用协议
    DNS服务器通常是运行BIND软件的UNIX机器;
    DNS协议运行在UDP之上,使用53号端口;
    DNS通常使用UDP。

  • 除了主机名到IP地址的转换,DNS还提供了以下非常重要的服务:(84)
    (1)主机别名(host aliasing) —— 对应规范主机名(canonical hostname)
    (2)邮件服务器别名(mail server aliasing)—— 对应邮件服务器的规范主机名
    注:MX记录允许一个邮件服务器和Web服务器使用相同(别名化)的主机名;
    (3)负载分配(load distribution)

  • DNS的服务由分布在全球的大量DNS服务器以及定义了DNS服务器与查询主机通信方式的应用层协议组成。

  • 二、RR(资源记录 Resource Record)(p89)
    RR提供了主机名到IP地址的映射;
    RR是一个包含了以下字段的四元组:(Name,Value,Type,TTL)

TTL(Time To Live):该记录的生存时间,它决定了给了该记录应当从缓存中删除的时间;
而Name和Value的值取决于Type;

  • RR四元组中Type的常见类型 :

(1)A : Name是主机名,Value是该主机对应的IP地址 —— 一条A类型的资源记录提供了标准主机名到IP地址的映射;
例:(relay1.bar.foo.com, 145.37.93.126, A,TTL)


(2)NS :Name是个域(如foo.com),Value是一个权威DNS服务器的主机名,该权威DNS服务器知道如何获得该域(即Name)中主机的IP地址 —— 一条NS类型的RR用于沿着查询链路来路由DNS查询;
例:(foo.com, dns.foo.com, NS, TTL)


(3)CNAME:Name为某主机的别名,Value为对应的规范主机名 —— 一条CNAME类型的RR能够提供一个主机名对应的规范主机名;
例:(foo.com, relay1.bar.foo.com, CNAME, TTL)


(4)MX: Name为某邮件服务器的别名,Value对应其邮件服务器的规范主机名 —— 一条MX类型的RR能够提供一个邮件服务器对应的规范主机名;
例:(foo.com, mail.bar.foo.com, MX, TTL)


(5)PTR:反向解析 —— 从IP到主机名

  • DNS通常是由其他应用层协议使用的,包括HTTP,SMTP,FTP;
    但是DNS本身也属于应用层协议,因为它是使用C/S模式(客户-服务器模式)运行在通信的端系统之间的。

  • 三、一个主机通过DNS获取指定主机名对应的IP地址并发起HTTP的TCP连接的过程:
    (1)浏览器截取URL中的主机名字段,发送给DNS应用的客户端;
    (2)DNS客户端向DNS服务器发送一个包含主机名的请求;
    (3)DNS客户端收到来自DNS服务器发出的回答报文,该报文中包含对应请求主机名对应的IP地址;
    (4)浏览器接收到来自DNS的该IP地址
    (5)浏览器向位于该IP地址80端口的HTTP服务器进程发起一个TCP连接

可以看到DNS的使用带来了额外的时延,但通过DNS缓存技术和其分布式、层次数据库的特性,想获得的IP地址通常就缓存在“附近的”DNS服务器中,减少了DNS的网络流量和DNS的平均时延。

  • 四、DNS的设计模式

(1)因特网只是用一个DNS服务器:
问题包括:单点故障、通信容量、远距离的集中式数据库、维护

(2)分布式、层次数据库
当今的DNS设计模式

  • 五、分布式、层次数据库
    为了处理拓展性的问题,DNS使用了大量以层次方式组织并分布于全球范围的大量DNS服务器。没有一台DNS服务器拥有因特网上所有主机的映射,相反,这些映射分布于所有的DNS服务器上。

  • DNS服务器的3中主要类型:(p86)
    (1)根DNS服务器
    全球有400多个根DNS服务器,由13个组织管理;
    (2)TLD,顶级域DNS服务器(Top-Level Domain)
    常见的顶级域名:com,org,net,edu,gov ; 国家顶级域名:uk,fr,jp,ca;
    (3)权威DNS服务器
    在因特网上具有公共可访问主机的组织机构必须提供公共可访问的DNS记录,这些记录将这些主机的名字映射成IP地址;

  • 严格来说不属于上述DNS服务器层次结构的一类很重要的DNS服务器
    ——本地DNS服务器(local DNS server);

  • 每个ISP(如一个居民区的ISP或一个机构的ISP)都有有一台本地DNS服务器;
    当主机发出DNS请求时,该请求先被发往本地DNS服务器,它起着代理的作用,并将请求转发到DNS服务器层次结构中。

  • 在不考虑DNS缓存的角度上,假定一个DNS客户要获取www.amazon.com的IP地址,它需要经历以下层次:
    (1)与根服务器之一联系,它将返回顶级域名com的TLD服务器的IP地址;
    (2)与这些TLD服务器之一联系,它将返回amazon.com的权威服务器的IP地址;
    (3)最后,与amazon.com的权威服务器之一联系,获取www.amazon.com的IP地址。

  • 六、DNS的迭代与递归查询(p87~88)
    理论上任何DNS查询既可以是迭代的也可以是递归的,但实践中:
    (1)从请求主机到本地DNS服务器的查询是递归的——以自己的名义请求获得映射
    (2)其余的查询都是迭代的——所有的回答都直接返回给本地DNS服务器

  • 七、DNS缓存(p89)
    当某DNS服务器接收到一个DNS回答,它能将映射缓存在本地存储器中。
    但这种缓存并不是永久的,DNS服务器在一段时间后(通常为两天)将丢弃缓存信息。

  • 因为有了缓存除了少数DNS查询以外,根服务器都被绕过了(DNS服务器也可以缓存TLD服务器的IP地址)。

  • 八、DNS报文(p90)

2.5 P2P分发文件(p92~95)

在P2P文件分发中,每个对等方能够向任何其他对等放重新分发它已经收到的该文件的任何部分,从而再分发过程中协助该服务器。

  • 算法公式见P95。
  • P2P文件分发

客户-服务器体系:极大的依赖与总是打开的基础设施服务器
p2p体系:对总是打开的基础设施有着最小(甚至没有)的依赖

P2P文件分发中,每个对等方能够向任何其他对等方重新分发他已经接收到的该文件的任何部分,从而从分发过程中协助该服务器
目前最流行的P2P文件分发协议是BitTorrent

  • P2P体系结构的扩展性

传统的客户-服务器体系中,文件分发时间d会随着客户数量(接收方)的增加而线性增加。比如,服务器要向客户发送一个大小为f的文件。如果接收对等方增加了1000倍,则完全发送的时间也会增加1000倍。
但是P2P体系结构不一样。它的最小分发时间总是小雨客户-服务器体系结构的。而且分发时间也并不会随着客户数的增多而线性增长的,而是增长速度逐渐放缓,最终接近于一个极限。这是由于P2P体系结构的对等接收方在接收文件的同时,也向其他对等的接收方发送自己接受到的一部分。这就意味着,在对等方(客户方)也成为了发送方的一部分,随着客户数量的上升,可用于发送文件的资源也增加了!这就是P2P体系的自拓展性:对等方除了是接收文件的比特消费者,也是重新分发者(比特贡献者)。

2.6 内容分发网

CDN的全称是Content Delivery Network,即内容分发网络。

其目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络”边缘”,使用户可以就近取得所需的内容,解决Internet网络拥塞状况,提高用户访问网站的响应速度。

其基本思路就是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳。

通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,cdn系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。

从技术上全面解决由于网络带宽小、用户访问量大、网点分布不均等原因,解决用户访问网站的响应速度慢的根本原因。

第三章 运输层

3.1 概述和运输层服务(p121)

概述
运输层协议为运行在不同主机上的应用进程之间提供了逻辑通信功能。

  • 运输层协议是在端系统中而不是路由器中实现的

  • 注意区分运输层和网络层的功能(结合下层为上层服务的概念)
    (1)运输层协议为运行在不同主机上的应用进程之间提供了逻辑通信功能。
    (2)网络层提供了不同主机之间的逻辑通信

信息单位/运输层分组为 —— 报文段(segement)
(1)将应用层报文划分成较小的块,并为每个块加上一个运输层首部以生成运输层报文段;
(2)在发送端系统中,运输层将这些报文段传递给网络层,网络层将其封装成网络层分组(即数据报)并向目的地发送;
(3)在接收端系统中,网络层从数据报中提取运输层报文段,并将该报文段向上交给运输层,运输层接着处理接收到的报文段,使该报文段中的数据为接收应用进程使用。

  • IP网际协议概述 (属于网络层)
    IP的模型是一种尽力而为交付的服务,它不确保报文段的按序交付,不确保报文段中数据的完整性,故是一种不可靠服务。

  • TCP / UDP概述
    (1)TCP提供了一种可靠的,面向连接的服务(提供可靠数据传输和拥塞控制)
    (2)UDP提供的则是不可靠的,无连接的服务

  • 如第二章提到的,应用程序开发人员在生成套接字(API)时必须指定是选择TCP还是UDP(选择为应用程序服务(提供支撑)的运输层协议)

  • 多路复用与多路分解
    TCP和UDP最基本的责任是:
    将两个端系统之间IP的交付 -->拓展为–> 运行在不同端系统上的两个进程之间的交付服务。

  • 将主机间交付扩展到进程间交付被称为:运输层的多路复用与多路分解

3.2 多路复用与多路分解(p125)

将主机间交付扩展到进程间交付被称为:运输层的多路复用与多路分解

  • 运输层与套接字(socket)的联系:
    (1)一个进程(作为网络应用的一部分)可能有一个或多个套接字,它相当于网络向进程传输数据和从进程向网络传递数据的门户;
    (2)接收主机的运输层并没有直接将报文段中的数据交付给进程,而是将数据交给了中间的套接字。

  • 需要注意的是:
    连接套接字与进程之间并非总是一一对应的关系,事实上当今高性能的Web服务器通常只是用一个进程,但是为每个客户连接创建一个具有新连接套接字的新线程,对于这样一台服务器,任何给定时间内都可能有(具有不同标识的)许多套接字连接到相同进程。

  • 多路分解与多路复用的工作:
    (1)多路分解(向上交付):
    将运输层报文段中的数据交付给正确的套接字(同一时刻,接收主机上可能有多个套接字);
    (2)多路复用(向下交付):
    在源主机从套接字中收集数据块,并为每个数据块封装上首部信息以生成报文段,而后将报文段传递到网络层。

  • 端口号:
    端口号是一个16bit的数,其大小在0 ~ 65535之间;
    周知端口号:0 ~ 1023的端口号是受限的,它们保留给周知应用层协议来使用 —— 如HTTP使用80端口,DNS使用53端口,FTP使用21端口,SMTP使用25端口等。
  • 当我们开发一个应用程序时,必须为其分配端口号

  • 运输层的每个报文段中都包含(但不限于):
    (1)源端口号(16bit):套接字socket的唯一标识符;
    (2)目的端口号:指示该报文段要交付到的套接字(的唯一标识符)

  • 无连接(UDP) / 面向连接(TCP)的多路复用与多路分解

(1)一个UDP套接字由一个二元组标识:(目的IP地址 ,目的端口号)
注: DNS一般都基于UDP;
(2)一个TCP套接字由一个四元组标识:(源IP地址,源端口号,目的IP地址 ,目的端口号)
注:HTTP、FTP、SMTP基于TCP。

3.3 无连接运输: UDP(p130)

  • 为什么UDP被称为无连接的?

因为在使用UDP时,在发送报文段之前,发送方和接收方的运输层实体之间并没有握手。
由[RFC768]定义的UDP只是做了运输层协议能做的做少的工作,除了复用/分解功能及少量的差错检测之外,它几乎没有对IP增加别的东西。

  • 既然TCP比UDP可靠,为什么开发人员宁愿在UDP上构建应用而不是在TCP上?

(1)UDP对于发送什么数据以及何时发送数据的(应用层)控制更为精确:

  • 采用UDP时,只要进程将数据传给UDP,UDP就会将此数据打包进报文段并立即通过端口(连接套接字)传递给网络层;对比来看,TCP的拥塞控制机制功能不考虑可靠交付需要多长时间,这样的机制就使得如因特网电话、视频会议之类的实时应用性能变差。
  • 实际中,实时应用通常要求最小的发送速率(容易产生拥塞),不希望过分的延迟报文段的传送,并且能够容忍一些数据丢失。这些应用可以使用UDP作为其运输层支撑协议,超出UDP服务(交付服务)的额外功能可作为应用的一部分在应用层完成。

(2)无需建立连接:

  • TCP在开始数据传输之前要在不同端系统的运输层实体之间进行三次握手以建立连接,这样的动作回产生时延,而UDP则不会引入建立连接的时延 —— 这是DNS运行在UDP而非TCP上的原因之一。
  • HTTP使用TCP而不是UDP,因为对于具有文本数据的Web网页来说,可靠性是至关重要的。另一方面,用于谷歌的Chrome浏览器中的QUIC协议(快速UDP因特网连接)将UDP作为其支撑运输层协议,并在应用层协议中实现了可靠性。

(3)无连接状态:

  • TCP需要在端系统中维护连接状态 —— 包括接受和发送缓存、拥塞控制以及序号与确认号的参数。对比来看,UDP不维护连接状态,也不跟踪这些参数。
  • 因此应用程序运行在UDP而不是TCP上的特定应用服务器往往能支持更多的活跃用户。

(4)分组首部开销小:
每个TCP报文段都有20字节的首部开销,而UDP仅有8字节的开销。

  • UDP中缺乏拥塞控制机制,如果每个人都启动流式高比特率视频而不使用任何拥塞控制的话,路由器中就会存在大量的分组一处,以至于丢包率大大提高,这就引发了TCP的拥塞控制机制,TCP主动降低数据发送速率,基于TCP的应用建立的对话将会被“挤垮”!!!
    这是一个潜在的严重问题。很多研究人员已经提出了一些机制,以促使所有的数据源(包括UDP源)执行自适应的拥塞控制

  • UDP的报文结构
    (1)首部:共8个字节 —— 包含四个字段,每个字段2个字节(16bit)
    (源端口号,目的端口号,长度(首部+数据),校验和)
    (2)应用数据(报文)
    在这里插入图片描述

  • 接收方使用校验和(checksum)来检验在该报文段 中是否出现了差错。

  • UDP校验和(p133)

关于UDP包的分析可以查看这篇博客:抓包简要分析TCP、UDP协议

3.4 可靠数据传输原理(p134)

可靠传输协议 (rdt)

  • 简要总结rdt(可靠传输协议)在各版本升级中增加了哪些机制(p135~142)

A.从rdt1.0到rdt2.0
rdt1.0基于底层信道完全可靠的假设,且假定接收方接收数据的速率和发送方发送数据的速率同步,不会出现差错,即接收端无需反馈任何信息给发送方。接收方和发送方的FSM(有限状态机)都只有一种状态。

rdt2.0则基于底层信道实际模型下分组中的比特可能受损的情况考虑。故增添了以下机制:

(1)差错检测:使接收方检测何时出了差错;

(2)接收方反馈:让接收方提供明确的反馈信息给发送方以便让发送方了解接收方的情况(即此时分组是否被正确接收),故接收方需向发送方回送一个bit长的ACK(肯定确认)和NAK(否定确认)分组以实现反馈;
注:NAK只针对包受损的情况,不针对丢包的情况!

(3)重传:接收方接收到有差错的分组时,发送方将重传该分组。
以上三种机制是ARQ(自动请求重传)协议的重要组成部分;

(4)停等协议:在收到接收方的反馈之前发送方不再发送任何数据。
发送方有两种FSM状态而接受方仍只有一种状态。

B.从rdt2.0到rdt2.1
rdt2.1在基于rdt2.0的基础上考虑了ACK或NAK受损的情况。故增添了以下机制:
在数据分组(segement)中添加一新字段,让发送方对其数据分组编号,即将发送数据分组的序号放在该字段(对于停等协议这种简单情况,往往一个bit就足够——只有0和1),于是接收端只需检查序号即可确定是否需要重传,接收方可以知道发送方是否在重传前一个分组或是在发送一个新的分组。
rdt2.1的接收方和发送方的FSM状态都是rdt2.0的两倍。

  • rdt2.1的ACK不需要表明1bit的序号位,这份工作由NAK完成!

C.从rdt2.1到rdt2.2
rdt2.2是在有比特差错信道上实现的一个无NAK的可靠数据传输协议。rdt2.2和2.1的细微变化在于,接收方此时必须包括由一个ACK报文所确认的分组序号。

  • rdt2.0取消了NAK,将1bit序号从NAK转移到了ACK上!

D.从rdt2.2到rdt3.0
rdt3.0假定除了比特受损之外,底层信道还会丢包。为了实现基于时间的重传机制,加入了倒计数定时器。
因为分组序号在0和1之间交替,rdt3.0有时被称为比特交替协议。

  • 倒计数定时器(countdown timer)的类型:
    (1)time out(饱和,延时)
    (2)persistent(坚持)
    (3)keep live(保活)
    (4)TIME_WAIT(等待)

  • 流水线可靠数据传输协议(p143)
    rdt3.0是一个功能正确的协议,但是其性能问题的核心在于其停等协议限制了底层网络硬件所提供的能力。

  • 流水线技术需做的update:
    (1)增加序号范围
    (2)接收方和发送方有能力缓存多个分组
    (3)恢复差错:回退N步(GBN,Go-Back-N)和选择重传(SR,Selective Repeat)

  • 一个分组的序号通常存放在数据分组首部的一个固定长度的字段中。如rdt3.0的序号
    [0,1],序号字段的大小为1bit。

  • 在流水线可靠传输数据协议中,分组序号字段的大小为K bit的话,则该序号的范围为
    [0,2^k - 1]。

  • 承上,GBN的窗口长度最大为:2^k -1
    SR的窗口长度最大为:2^(k-1)

  • 回退N步(GBN,Go-Back-N)—— 累计确认

  • 也常被称为滑动窗口协议。
    (看p145,理解图3-19;理解p147图3-22)

  • 为什么说GBK是累计确认的?
    因为接收方一次交付给上层仅一个分组(而不是多个),如果分组k已经交付,那么表示所有序号比k小的分组也已经交付。

分析GBN中发送方和接收方的行为


发送方
(1)响应上层的调用:
当上层调用rdt_send()时,发送方首先检查发送窗口是否已满;
A. 若未满(即已发送但未确定的分组数<N),则产生一个分组并将其发送,并更新变量;B. 若满,反馈,上层等一会再尝试(但在实际情况中,发送方更可能缓存这些数据或者使用同步信号量(类似于生产者消费者模型));
(2)响应收到一个携带序号k的ACK的事件:
若k即为上一次发送的分组序号n——更新滑动窗口变量;
若k不是上一次发送的分组序号n——重传序号k~n的所有分组
(3)响应超时事件:
由倒计数定时器辅助实现。若出现超时,发送方重传所有已经发送但是还未被确认的分组。
注:定时器的计时对应于最早已发送但未被确认的分组;
收到最早发出但未被确认的分组的ACK后定时器重启;
若已经没有了已发送但未被确认的分组,定时器停止。


接收方:
响应收到一个序号为n的分组的事件:
a.检查校验和,确认分组没有受损;
b.确认本次接受到的分组是按序的(即上一个接收的分组的序号是n-1);
A. 若 a&&b 为 TRUE,那么接收方为分组n发送一个ACK,并将分组中的数据上交应用层;
B. 其他情况下,接收方丢弃n号分组,并为n-1号的分组重新发送一个ACK。

  • 选择重传(SR,Selective Repeat)—— 选择确认
    GBN协议本身也存在着性能上的问题,尤其是当窗口长度和带宽延时积(以比特为单位的链路的长度)特别长的时候,单个分组的传输错误就会引起大量不必要的重传。

SR协议应运而生,它让发送方仅重传那些它怀疑在接收方出错(受损或丢失)的分组,从而避免了不必要的重传。

  • SR与GBN的不同(SR的Update):
    (1)SR的接收方:
    GBN中,接收方要判断收到的分组是否出错(包括受损和失序),若出粗则一直拒收/丢弃之后发送方发来的分组并一直对前一个有序分组发送ACK;
    但SR中,即使某个分组n出错了,接收方仍然接收发送方n之后发来的分组,并将n之后发来的分组暂时缓存且会回应相应的ACK,等待n收到后将n和缓存的分组按序交付。

3.5 面向连接的运输:TCP

  • TCP三次握手建立连接:
    注:前两个报文段不承载“有效载荷”(即应用层数据),第三个报文段可以承载有效载荷。

第1次握手. (Client) –> [SYN] –> (Server)
  假如Client和Server通讯. 当Client要和Server通信时,Client首先向Server发一个SYN (Synchronize) 标记的包,告诉Server请求建立连接。
  
第2次握手. (Client) <– [SYN/ACK] <–(Server)
  接着,Server收到来自Client发来的SYN包后,会发一个对SYN包的确认包(SYN/ACK)给Client,表示对第一个SYN包的确认,并继续握手操作。
  
第3次握手. (Client) –> [ACK] –> (Server)
  Client收到来自Server的SYN/ACK 包,Client会再向Server发一个确认包(ACK),通知Server连接已建立。至此,三次握手完成,一个TCP连接完成。
在这里插入图片描述

  • 发送缓存:
    (1)发送缓存是TCP发起三次握手期间设置的缓存之一;
    (2)客户进程的数据通过连接套接字之后就由TCP控制,TCP会引导这些数据进入发送缓存里,并在TCP方便的时候以报文段的形式发送这些(发送缓存中的)数据;
    (3)TCP能从缓存中取出并放入报文段的数据量受限于MSS(Maximum Segement Size)即最大报文段长度。
  • 设置该MSS要保证一个TCP报文段(当封装在一个IP数据报中)加上TCP/IP首部吧长度(通常40字节)要适合单个链路层帧。
  • MUT(Maximum Transmission Unit)—— 最大传输单元:最大链路层帧长度。

注意:半双工模型中,发送方有TCP发送缓存,接收方有TCP接收缓存!
但实际上TCP是全双工的!

  • TCP报文段结构(课本p154~155)
    在这里插入图片描述
  • TCP报文段由首部+TCP数据部分组成 :

  1. 源端口号和目的端口号(各16 bit)——用于实现多路分解/复用
  2. 序号和确认号(各32 bit)—— 用于实现可靠数据传输服务
  3. 首部长度(4 bit,图中为数据偏移)—— 该字段指示了以32bit的字为单位的TCP首部长度;由于TCP首部中选项和填充字段的可变,TCP首部的长度也是可变的。(通常选项字段和填充字段都为空,故TCP首部的典型长度是20 Byte)
  4. 标志(flag)字段(6 bit):
    ACK——用于确认字段中的值是有效的
    RST、SYN、FIN——用于连接的建立和拆除
    ECE、CWR——用于拥塞控制
    PSH——被置位时,接收方立刻将数据交给上层
    URG——标识紧急数据
  5. 接收窗口字段(16 bit):用于流量控制
  6. 校验和字段(16 bit):用于给接收方检验分组是否存在比特受损
  7. 紧急数据指针字段(16 bit)指出紧急数据的最后一个字节
  8. 可选与变长的选项(Option)字段(含填充字段,最大4 Byte)——用于发送方和接收方协商MSS(最大报文长度)
  • 往返时间的估计和超时(课本p157~158)
    Key:TCP如何估算发送方和接收方之间的往返时间RTT?
  • 大多数TCP的实现为一个已发送但未确认的报文段估计SampleRTT,且绝不为已被重传的报文计算SampleRTT。
  • 一旦获得一个新的SampleRTT,TCP就会更新EstimatedRTT(用于维持SampleRTT均值):
    EstimatedRTT = (1-a)EstimatedRTT + aSampleRTT
    注:[RFC6298]中给出的a推荐值是a = 0.125(即1/8)
  • TCP四次挥手

四次握手用来关闭已建立的TCP连接
  1. (Client) –> ACK/FIN –> (Server)
  2. (Client) <– ACK <– (Server)
  3. (Client) <– ACK/FIN <– (Server)
  4. (Client) –> ACK –> (Server)
  在这里插入图片描述

  • 由于TCP连接是双向连接, 因此关闭连接需要在两个方向上做。ACK/FIN 包(ACK 和FIN 标记设为1)通常被认为是FIN(终结)包.然而, 由于连接还没有关闭, FIN包总是打上ACK标记.。

3.6 拥塞控制

原理:
让每一个发送方根据所感知到的网络拥塞程度来限制其能向连接发送流量的速率

问题的引出:
1.如何限制发送方的发送速率
2.发送方如何感知拥塞
3.感受到拥塞之后,发送发如何限制其发送速率

问题的分析&解决:

  • 如何限制发送方的发送速率?
    Solution:
    1.发送方中未被确认的数据量不会超过cwnd(拥塞窗口)与rwnd(接收窗口)中的最小值;注:TCP的拥塞控制主要原理依赖于一个拥塞窗口(cwnd)来控制,在之前我们还讨论过TCP还有一个对端通告的接收窗口(rwnd)用于流量控制。窗口值的大小就代表能够发送出去的但还没有收到ACK的最大数据报文段,
    2.为了关注拥塞控制(与流量控制形成对比),假设TCP接收缓存足够大,则可以忽略接收窗口的限制,使得发送方中未被确认的数据量仅仅受限于cwnd,且假设发送发一直发送数据;注:TCP连接的每一端都是由一个接收缓存、一个发送缓存和几个变量(rwnd就是其中之一)组成
    3.上一假设将未被发送的数据量约束于cwnd,间接地就将发送方的发送速率约束于cwnd:
    发送方的发送速率 = cwnd/RTT(字节/秒);至此成功解决问题。

发送方如何感知拥塞?
Solution:
1.当出连接路径上现过度拥堵时,该路径上路由器的缓存会溢出,引起一个数据报(包含一个TCP报文段)被丢弃,随之引起发送发的丢包事件;

2.TCP发送方的“丢包事件”被定义为 —— 出现超时;
·发送方收到来自接收方的3个冗余ACK;
注:重复的ACK应有4个,包含1个初始ACK和3个冗余ACK

3.出现丢包事件,则意味拥塞;至此成功解决问题
注:因为TCP使用确认来触发(或计时)增大cwnd长度,故TCP被称为自计时(self-clocking)的

  • 感受到拥塞之后,发送发如何限制其发送速率?
    TCP调节其传输速率的策略是增加其速率以响应到达的ACK,而丢包事件指示路径拥塞,出故现丢包事件后减小传输速率。

TCP拥塞控制算法包含的三个主要部分:
慢启动、拥塞避免、快速恢复

各部分的内容:
· 慢启动:
1.TCP连接初始,cwnd初始值设置为一个MSS,则初始发送速率=MSS/RTT;
例如:MSS=500Btye,RTT=20ms,则初始发送速率=20kbps
2.此后每接当传输的报文段首次被确认,MSS翻倍,即以指数型增长(2^(n-1) * MSS);
!慢启动有以下三种结束方式:
1.结束指数增长的时刻:当发生一个由超时引起的丢包事件,TCP做两个动作:
①将ssthresh(阈值)记为当前cwnd的1/2;
②将cwnd置为1(MSS)并重新开始慢启动过程;
2.当cwnd在指数型连续增长的过程中等于了阈值,结束慢启动,TCP转移到拥塞避免模式;
3.若检测到三个冗余的ACK,TCP执行一种快速重传并进入快速恢复状态。

·拥塞避免:
1.进入拥塞避免状态,则意味着cwnd的值达到了上一次拥塞时的cwnd值的一半(即阈值)
2.继续翻倍增长实在鲁莽,故采用保守的增长方式(线性增长):TCP发送方不论何时收到一个新的确认,cwnd都只相应地增加一个MSS;
*以下两种情况结束拥塞避免模式下的线性增长:
1.出现超时的情况下,拥塞避免的行为与慢启动相同,将ssthresh(阈值)更新为当前cwnd的1/2,并将cwnd置为1(MSS)
2.出现三个冗余ACK的情况下:①为了更好的计量结果,三个冗余ACK也要计入MSS;
②ssthresh(阈值)更新为当前cwnd值的一半;
③进入快速恢复状态。

·快速恢复:
理解:快速恢复不涉及连续增长,只是一个cwnd值的变化,根据引起丢包的两种不同情况分别切入慢启动模式或拥塞控制模式。
1.当收到来自“引起TCP进入快速恢复模式的缺失报文段”的ACK时:
①cwnd降低为当前cwnd的1/2;
②依据引起TCP进入快速恢复模式的缺失报文段,cwnd增加(该缺失报文段的冗余ACK个数,一般为3)*MSS;
③进入拥塞避免状态。

2.当出现超时事件引起的丢包时:
①执行如同在慢启动和拥塞避免中相同的动作(更新阈值为cwnd的一半,cwnd置1);
②迁移到慢启动状态。

注:
1.TCP Tahoe(早期TCP):不论丢包是由超时还是3个冗余ACK引起的,都无条件的将cwnd置1并进入慢启动阶段;
2.TCP Reno(较新版本):综合了快速恢复。
实例:

根据以上理解,可以得知:
A.
①若丢包由超时事件引起,则快速回复和拥塞避免中cwnd增长相同,即更新阈值为cwnd的一半,cwnd置1;
②若是由三个冗余ACK引起的丢包事件,快速恢复中cwnd的增长为:
cwnd降低为当前cwnd的1/2,并依据引起TCP进入快速恢复模式的缺失报文段,cwnd增加(该缺失报文段的冗余ACK个数,一般为3)*MSS;而在没有发生拥塞的情况下,拥塞避免的增长:保守的增长方式(线性增长):TCP发送方不论何时收到一个新的确认,cwnd都只相应地增加一个MSS;

B.
快恢复【快】在:当收到来自“引起TCP进入快速恢复模式的缺失报文段”的ACK时,cwnd不必置1,而是将cwnd降低为当前cwnd的1/2,再依据引起TCP进入快速恢复模式的缺失报文段,令cwnd增加(该缺失报文段的冗余ACK个数,一般为3)*MSS后直接进入拥塞避免状态。

如综合了快速恢复的TCP Reno在遇到三个冗余ACK引起的丢包时,不必像早期的TCP Tahoe那样将cwnd置1并进入慢启动阶段,而是跳过慢启动阶段直接进入拥塞避免状态。

引用自《计算机网络·自顶向下方法》(第七版)(詹姆斯·F·库罗斯 著)(陈鸣 译)
根据以上理解,可以得知:
A.
①若丢包由超时事件引起,则快速回复和拥塞避免中cwnd增长相同,即更新阈值为cwnd的一半,cwnd置1;
②若是由三个冗余ACK引起的丢包事件,快速恢复中cwnd的增长为:
cwnd降低为当前cwnd的1/2,并依据引起TCP进入快速恢复模式的缺失报文段,cwnd增加(该缺失报文段的冗余ACK个数,一般为3)*MSS;而在没有发生拥塞的情况下,拥塞避免的增长:保守的增长方式(线性增长):TCP发送方不论何时收到一个新的确认,cwnd都只相应地增加一个MSS;

B.
快恢复【快】在:当收到来自“引起TCP进入快速恢复模式的缺失报文段”的ACK时,cwnd不必置1,而是将cwnd降低为当前cwnd的1/2,再依据引起TCP进入快速恢复模式的缺失报文段,令cwnd增加(该缺失报文段的冗余ACK个数,一般为3)*MSS后直接进入拥塞避免状态。

如综合了快速恢复的TCP Reno在遇到三个冗余ACK引起的丢包时,不必像早期的TCP Tahoe那样将cwnd置1并进入慢启动阶段,而是跳过慢启动阶段直接进入拥塞避免状态。

例题:
《计算机网络·自顶向下方法》(第七版)Page.193–Problem10
引用自《计算机网络·自顶向下方法》(第七版)(詹姆斯·F·库罗斯 著)(陈鸣 译)
答案:
C.是根据三个冗余ACK检测来的;因为TCP跳过了慢启动而直接进入了拥塞避免,且第17轮传输的cwdn值约等于阈值(42/2=21)+(缺失报文段的冗余ACK数3)=24MSS,得证;
D.是根据超时检测出来的;因为第23轮及之后传输中TCP进入了慢启动模式,cwnd置1且在cwnd值未超过阈值(约等于29/2=14.5)时保持指数型增长,得证;
E.由TCP从慢启动模式转入拥塞避免模式时的cwnd值可知:在第一个传输轮回里,阈值ssthresh为35-3=32;
F.第18轮传输的阈值ssthresh为42/2=21;
G.同理,阈值为:(25+4)/ 2 = 14.5;
H.第一轮传输的慢启动共传输了1+2+4+8+16+32=63个报文段,慢启动进入拥塞避免是在第6轮传输,6+(70-63)=13,故在第13轮传输中发送第70个报文段;
I.慢启动状态下,若检测到三个冗余的ACK,TCP执行一种快速重传并进入快速恢复状态,故cwnd为8/2+3=7,阈值为8/2=4;
J.第16轮:TCP进入慢启动状态,cwnd在第17轮置1,阈值为42/2=21;
第19轮:cwnd值为4,阈值为21;
K.<?第22个轮回的超时事件有影响吗?><?是否基于上一题的条件?>
假设基于上一题的条件,且22轮的超时事件只是为了迎合图,则:
17轮~22轮共传输1+2+4+8+16+21(第22轮达到阈值)=52个报文段;


第四章 数据平面

·网络层能被分解成相互作用的两个部分,即数据平面和控制平面。
·网络层的数据分组——数据报。

·数据平面和控制平面的功能:
(1)数据平面:
决定到达路由器输入链路(之一)的数据报如何转发到该路由器的输出链路(之一)。
(简要来说就是——将分组从一台路由器的入链路传送到合适的出链路)

  • 转发是数据平面实现的唯一/主要功能。
    转发的时间尺度很短,通常是几纳秒,通常用硬件实现。

(2)控制平面:
控制数据报沿着源主机到目的主机的端到端路径中路由器之间的路由方式。

  • 路由选择算法:计算/决定分组从发送方流向接收方时所采用的路由或路径。
    路由选择的时间尺度相对长的多,通常为几秒,通常用软件实现。

4.1 网络层概述

·转发表
每台网络路由器中都有转发表;
路由器检查到达分组首部的一个或多个字段,这些首部值对于存储在转发表中的值,指出了该分组将被转发的路由器的输出链路接口,将这些首部值在转发表中索引,藉此完成了转发。

·控制平面:1. 传统的方法(p200 图4-2)
路由器算法运行在每台路由器中,并且在每台路由器中都包含转发和路由两种功能。
路由器中物理上存的所有转发表内容都可由操作员直接配置,这种情况下甚至不需要路由选择协议。

  • 最鲜明的特点:路由选择设备上既包含数据平面又包含控制平面。
  • 缺点:(1)容易出错 (2)需要操作员彼此交互 (3)对于网络拓扑变化的响应时间慢。

·控制平面:2. SDN方法(课本p201 图4-3)
路由选择算法从路由器物理上分离,通过远程计算器来计算和分发转发表给每台路由器。
路由选择设备仅执行转发功能。

  • SDN(Soft-ware-Defined Networking):软件定义网络。
  • 最鲜明的特点:控制平面的功能由远程计算/控制器完成,而路由选择设备仅完成数据平面的功能。

4.2 路由器工作原理(p203)

·路由器体系结构
在这里插入图片描述

·输入/输出端口做的处理(注意排队)
在这里插入图片描述
在这里插入图片描述

  • 在输入端口中分组最后才排队,输出端口一进就排队。

·基于目标的转发和通用转发
1.基于目标的转发:到达路由器的数据报将是仅基于数据报的最终目的地转发到输出接口。
2.通用转发:除了最终目的地之外,还有其他因素。

·基于交互介质的分类(p208)
(1)经内存交换
(2)经总线交换
(3)经互联网交换

·分组调度:
即排队的分组如何经传输链路输出的问题,常用的有以下方法:
(1)FIFO先进先出 / FCFS先来先服务
(2)优先权排队(priority queuing)

  • 在非抢占式优先权排队的规则下,一旦分组传输开始,就不能打断
    (3)循环和加权公平排队

4.3 网际协议:IPV4、寻址、IPV6及其他

· 重点要掌握IPv4编址!
一、地址分类
5类地址(A类 B类 C类 D类 E类)
IPv4地址由四段组成,每个字段是一个字节,8位,最大值是255,

IPv4地址由两部分 —— 网段号(net_id)+主机号(host_id)组成;即网络地址和主机地址。网络地址表示其属于互联网的哪一个网络,主机地址表示其属于该网络中的哪一台主机,二者是主从关系。

IPv4地址的四大类型标识的是网络中的某台主机。IPv4地址长度为32位,共4个字节,但实际中我们用点分十进制记法,将IP转换成二进制值后对照该图即可。

IPv4地址根据网络号和主机号来分,分为A、B、C三类及特殊地址D、E。全0和全1的都保留不用,如A类中的0.0.0.0和127.255.255.255都不使用。
在这里插入图片描述

A类:(1.0.0.1-126.255.255.254)(默认子网掩码:255.0.0.0或0xFF000000)第一个字节为网络号,后三个字节为主机号,表示为网络–主机–主机–主机。该类IP地址的最前面为“0”,所以地址的网络号取值于1~126之间。共有16777214个主机地址,一般用于大型网络。


B类:(128.1.0.1-191.254.255.254)(默认子网掩码:255.255.0.0或0xFFFF0000)前两个字节为网络号,后两个字节为主机号。该类IP地址的最前面为“10”,所以地址的网络号取值于128~191之间。共有65534个主机地址,一般用于中等规模网络。


C类:(192.0.1.1-223.255.254.254)(子网掩码:255.255.255.0或0xFFFFFF00)前三个字节为网络号,最后一个字节为主机号。该类IP地址的最前面为“110”,所以地址的网络号取值于192~223之间。共有254个主机地址,一般用于小型网络。


D类:是多播地址。(224.0.0.1-239.255.255.254) 该类IP地址的前面4位为“1110”,所以网络号取值于224~239之间;后面28位为组播地址ID。这是一个专门保留的地址。它并不指向特定的网络,目前这一类地址被用在多点广播(Multicasting)中。多点广播地址用来一次寻址一组计算机,它标识共享同一协议的一组计算机。


E类:是保留地址,为将来使用保留。(240.0.0.0—255.255.255.254) 该类IP地址的最前面为“1111”,所以网络号取值于240~255之间。


单播地址:ABC (存在私有地址和公有地址)
组播地址:D
科研使用:E

注意:所有的网络空间计算都必须 -2,这是因为要扣除两个保留地址:

  1. 主机号全部为1的地址是子网广播地址,如:192.168.1.255 ;
  2. 主机号全部为0的地址是代表该子网的网络地址,如:192.168.1.0 ;
    1-254才是给主机使用的。
    一些特殊的IP地址:

  • 特殊的地址:
    0.0.0.0/0 无效地址/缺省地址
    255.255.255.255 受限广播地址
    127.0.0.1/8 本地环回地址
    192.168.1.00000000/24 代表本网段内所有主机(主机位全为0)
    192.168.1.11111111/24 代表本网段内的广播地址(主机位全为1)
    169.254.0.0/16 本地私有地址

· 子网掩码
(1)
子网掩码(subnet mask)又叫网络掩码、地址掩码、子网络遮罩,它是一种用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。

(2)
IP地址与子网掩码相与,得出的就是网络地址。
在这里插入图片描述
· CIDR:( Classless Inter-Domain Routing,元类域间路由选择):
我们需要了解这种网络表示法。形式如:192.168.10.32/28。前面的数字是我们的网络地址,后面的28表示用28位来表示网络位,用32-28=4位来表示主机位。通过这种记法,我们能明确两个信息:
网络地址:192.168.10.32
子网掩码:255.255.255.240
在这里插入图片描述
在这里插入图片描述
其中/8-/15只能用于A类网络,/16-/23可用于A类和B类网络,而/24-/30可用于A类、B类和C类网络。这就是大多数公司都使用A类网络地址的一大原因,因为它们可使用所有的子网掩码,进行网络设计时的灵活性最大。

二、子网划分
大佬的文章已经讲的很清楚了,这里就不再画蛇添足了:
一文搞定子网划分!子网掩码!超详细例题解析!

三、子网汇聚(超网)
超网是与子网类似的概念–IP地址根据子网掩码被分为独立的网络地址和主机地址。但是,与子网把大网络分成若干小网络相反,超网是把一些小网络组合成一个大网络。
子网汇聚(超网)就是主机位向网络位借位。换言之,就是减少网络位,增加主机位。
子网汇聚相当于子网划分的逆运算。

超网地址规划又称为地址汇聚,在实际应用中一般是为了减轻路由表的负载而引进地址汇聚的概念(超网)。
路由汇聚的含义是把一组路由汇聚为一个单个的路由广播。路由汇聚的最终结果和最明显的好处是缩小网络上的路由表的尺寸,进而减少延迟。

在超网地址规划的过程中要遵循的原则是:
所有符合要求的IP地址必须包含进去,不能随意性的规划。但同时要保证不能包括不在规划范围的其他的IP地址,这样容易引起路由黑洞。

超网汇聚实例:
将192.168.0.0/24、192.168.1.0/24、192.168.2.0/24、192.168.3.0/24这4个网络地址用一个网络地址包含进去。
这4个地址分别用二进制表示:
11000000.10101000.00000000.00000000/24【192.168.0.0/24】
11000000.10101000.00000001.00000000/24【192.168.1.0/24】
11000000.10101000.00000010.00000000/24【192.168.2.0/24】
11000000.10101000.00000011.00000000/24【192.168.3.0/24】
我们通过查看它们的二进制形式可以发现,它们的前22位是一样的,所以,我们就可以将它们的网络位在原有的基础上向后退2位,变成22位。因此,就变成以下这样:
11000000.10101000.00000000.00000000/24【192.168.0.0/22】
11000000.10101000.00000001.00000000/24【192.168.0.0/22】
11000000.10101000.00000010.00000000/24【192.168.0.0/22】
11000000.10101000.00000011.00000000/24【192.168.0.0/22】
所以,以上这4个网络地址可以使用192.168.0.0/22来汇聚成一个地址。

IPV4数据报分片

  • 什么是 MTU?
    单个链路层帧能承载的最大数据量叫最大传送单元(Maximum Transmission Unit)
    因为每个IP数据报都封装在链路层帧(下层为上层服务)中,由一台路由器传输到下一台路由器,故链路层协议的MTU严格地限制着IP数据报的长度 —— 当数据报被封装成帧时,数据报的总长度必须小于这个最大长度。

  • 为什么给IP数据报分片?
    MTU对IP数据报长度的严格控制并不是主要的问题,更主要的问题在于发送方和接收方的路径上每段链路可能使用不同的链路层协议,且每种不同的链路层协议可能规定了不同的MTU。基于上述问题,故提出了分片的思想。

  • 分片的思想?
    将IP数据报中的数据分片成较小的多个部分,并用单独的帧封装这些较小的IP数据报,并通过输出链路发送这些帧。
    在这里插入图片描述

  • 怎么分片?

当数据报被分片时:


  1. 每一个数据报文都有自己的首部,大部分的字段是重复的;
  2. 选项可以复制也可以不复制.只有数据报中的数据是分片的;
  3. 检验和必须重新计算,因为检验和只包含首部,然而头部最少有三个字段(标识,标志,分片偏移量)改变了;
  4. 如果分片后的数据遇到更小的MTU,需要再次分片;

标识(16位):
标志了从源主机发出的一个数据报,当数据报离开源主机后,此标识与源IP地址的组合必须唯一确定这个数据报;进行分片时,这个字段必须复制到所有的分片中,这样目的主机收到所有被分片的报文后,才知道把那些分片组装起来。

标志(3位,目前只有两位有意义):

  1. 第1位:保留未用。
  2. 第2位:Don’t位(称为不分片位),如果是1,这个数据报不能进行分片,如果不分片过不了网络,只能丢弃,然后发送一个ICMP差错报文回去; 如果是0,那就可以分片。
  3. 第3位:more位(称为分片位),若这个值是1,则表示这个数据报不是最后的分片,如果是0,表示是最后一个分片。

分片偏移:(13位)

  1. 这个字段表示的是分片在整个数据报中的相对位置。
  2. 8字节为度量,为什么?因为这个字段只有13位,它不能表示超过8191个字节,如果以8字节为度量单位,那么可以表示65528字节(超过IPv4中数据段的最大值(2^16-1-20)=65515)。
  3. 第一个分片的字节数量必须能够被8除尽
  • IPV4分片例题
    在这里插入图片描述
    在这里插入图片描述
    题解:
    (1)
    由图可知:A到R1上的MTU为1500,而R1到R2上的MTU为1000,则这个1500B的IP packet会被分成两片,故:
    R2从R1收到2个IP packet
    Totallength:
    Packet1:20+976=996B
    Packet2:20+(1480-976)=524B
    Don’t Fragment:
    Packet1:0;packet2:0
    More fragment:
    Packet1:1;packet2:0
    Offset:
    Packet1:0;packet2:976/8=122

(2)
由图可知R2到R3上MTU为400,且中间路由器不会将分片重组,故packet1、packet2都将被分片;
Toyallength/D/M/offset:
Packet1,1: 20+376=396B /0/1/0
Packet1,2: 20+376=396B /0/1/(376/8)=47
Packet1,3: 20+(976-376*2)=244 /0/1/94
Packet2,1: 20+376=396B /0/1/94+28=122
Packet2,2: 20+(504-376)=148B /0/0/169

(3)
最终B会收到396+396+244+396+148=1580个字节

  • IPV4首部格式
    在这里插入图片描述
    在这里插入图片描述

重要理解:
(1)协议号是将网络层和传输层绑定到一起的粘合剂;
(2)端口号是将应用层和传输层绑定到一起的粘合剂;
(3)标识、标志、片偏移和IP分片有关;
(4)标志位中的Don’t位置1时不分片,通常置0;more位置1说明不是最后一片;
(5)假设都没有Option字段,一个IP数据报含20 bit的IP首部和20 bit的TCP首部,还有应用层的报文(数据);

  • IPV6 (p228,不做重点介绍)

RFC2460定义了IPv6数据报格式。总体结构上,IPv6数据报格式与IPv4数据报格式是一样的,也是由IP报头和数据(在IPv6中称为有效载荷)这两个部分组成的,但在IPv6数据报数据部分还可以包括0个或者多个IPv6扩展报头(Extension header), 如下图所示。IP报头部分固定为40字节长度,而有效载荷部分最长不得超过65535字节。

这里写图片描述

IPv6和IPv4之间的最大差别在于:IP地址的长度从32位到128位。
通过裁剪IPv4报头中的某些字段,或把一些字段移入到扩展报头中,IPv6基本报头的总长度大大减小了。IPv6使用固定长度的基本报头,从而简化了转发设备对IPv6报文的处理,提高了转发效率。尽管IPv6地址长度是IPv4地址长度的4倍,但IPv6基本报头的长度只有40字节,为固定的IPv4报文头长度(不包括选项字段)的2倍。

  • IPV6首部格式
    在这里插入图片描述
IPV6字段字段作用
版本(Version)版本字段用来表示IP数据报使用的是IPv6协议封装,占4位,对应值为6(0110)
通信分类(Traffic Class)通信分类字段用来标识对应IPv6的通信流类别,或者说是优先级别,占8位,类似于IPv4中的ToS(服务类型)字段
流标签(Flow Label)流标签字段时IPv6数据报中新增的一个字段,占20位,可用来标记报文的数据流类型,以便在网络层区分不同的报文。流标签字段有源节点分配,通过流标签、源地址、目的地址三元组方式就可以唯一标识一条通信流,而不用像IPv4那样需要使用五元组方式(源地址、目的地址、源端口、目的端口和传输层协议号)。这样发动的最大好处有两点:一是流标签可以和任意的关联,需要标识不同类型的流(可以是非五元组)时,无需对流标签做改动;二是流标签在IPv6基本头中,使用IPSec时此域对转发路由器可见,因此转发路由器可以在使用IPv6报文IPSec的情况下仍然可以通过三元组(流标签、源地址、目的地址)针对特定的流进行QoS(质量服务)处理
有效载荷长度(PayLoad Length)有效载荷长度字段是以字节为单位的标识IPv6数据报中有效载荷部分(包括所有扩展报头部分)的总长度,也就是除了IPv6的基本报头以外的其他部分的总长度,占20位。
下一个头部(Next Header)下一个头部字段用来标识当前报头(或者扩展报头)的下一个头部类型,占8位。每种扩展报头都有其对应的值。下一个头部字段内定义的扩展报头类型与IPv4中的协议字段值类似,但在IPv6数据报中,紧接着IPv6报头的可能不是上层协议头部(当没有扩展报头或者为最后一个扩展报头时才是上层协议头),而是IPv6扩展报头。这一机制下处理扩展报头更搞笑,因为标识了数据报中对应的上层协议或者扩展报头类型,转发路由器只需处理必须处理的扩展报头,提高了转发效率。
跳数限制(Hop Limit)跳数限制于IPv4报文中的TTL字段类似,指定了报文可以有效转发的次数,占8位。报文每经过一个路由器结点,跳数值就减1,当此字段值减到0时,则直接丢弃该报文
源地址(Source IP Address)源IP地址字段标识了发送该IPv6报文源节点的IPv6地址,占128位
目的IP地址(Destination IP Address)目的IP地址字段标识了IPv6报文的接受节点的IPv6地址,占128位
  • ipv6地址格式:
    在这里插入图片描述
  1. 全球路由前缀:全局路由前缀为提供商分配给客户或场点的地址前缀(网络部分)
  2. 子网ID:组织使用子网ID表示其场点的子网。
  3. 接口ID:类似于IPv4的主机号。使用术语‘接口ID’是因为单台主机可能有多个接口,而每个接口又有一个或多个IPv6地址。

第五章 控制平面

5.2 路由选择算法

(1)集中式/分散式
(2)静态/动态
(3)负载敏感/负载迟钝

·链路状态路由选择算法——LS算法(p246)
·距离向量路由选择算法——DV算法(p249)

  • AS(Autonomous System):自治系统
    每个AS由一组通常处于相同管理控制下的路由器组成;
    通常在一个ISP中的路由器以及互联它们的链路组成一个AS。

相同AS中的路由器都运行同一种路由选择算法并且有彼此的信息;
在同一个AS中运行的路由选择算法叫做自治系统内部的路由选择协议。

5.3 OSPF —— 因特网中自治系统(AS)内部的路由选择协议(p254)

  • OSPF:开放最短路优先
    OSPF是一种链路状态协议,它使用洪泛链路状态信息和Dijkstra最低开销路径算法。
    使用OSPF,一台路由器构建了一幅关于整个自治系统的完整拓扑图,结合Dijkstra最低开销路径算法即可确定一个以自身为节点到所有子网的最短路径数。

  • 使用OSPF时,路由器向AS内部所有的路由器广播路由选择信息,而不仅仅是向其相邻路由器广播:
    (1)当某条链路状态发生变化时,路由器就会广播链路状态信息
    (2)即使链路状态未发生变化,也要周期性的(至少每隔30mi一次)广播链路状态

  • OSPF的优点:
    (1)安全 —— 能够鉴别OSPF路由器之间的交换(如链路状态信息);
    (2)多条相同开销路径 —— 当存在多条相同开销的路径时,无需选择单一的路径来承载所有的流量;
    (3)对单播和多播路由选择的综合支持
    (4)支持在单个AS中的层次结构

5.4 BGP —— ISP之间的路由选择(p256)

BGP(Border Gateway Protocol):边界网关协议。

  • BGP协议将因特网中数以千计的ISP粘合起来。

  • BGP是一种分布式和异步的协议。

  • BGP的功能:
    (1)从邻居AS获得前缀的可达信息
    (2)确定到该前缀的最好路由

  • eBGP连接:跨越两个AS的BGP连接,即外部BGP连接

  • iBGP连接:相同AS的两台路由器之间的连接,即内部连接

  • 当路由器通过BGP连接通告前缀时,前缀中包括一些BGP属性;前缀及其属性即为路由。

  • 除了作为因特网AS间路由选择协议外,BGP还常用于实现IP任播。

5.5 SDN控制平面(p265)

  • SDN体系通常具有4个关键特征:
    (1)基于流的转发
    (2)数据平面与控制平面分离
    (3)网络控制功能
    (4)可编程网络

  • SDN控制平面大致分为两个部分:
    (1)SDN控制器
    (3)SDN网络控制应用程序

  • OpenFlow协议(p267)

·数据平面与控制平面交互的例子(p269)

·ICMP:因特网控制报文协议(p272)
被主机和路由器用来彼此沟通网络层的信息;
最典型的用途是差错报告。

·SNMP:简单网络管理协议(p275)
(Sample Network Management Protocol)
SNMP是一个应用层协议,用于在管理服务器和代表管理服务器执行的代理之间传递网络管理控制和信息报文。


第六章 链路层和局域网

链路层的数据分组——帧(fame)
MTU——Maximum Transmission Unit:链路层最大帧长度

6.1 链路层提供的服务:(p287)

(1)成帧:
网络层数据报在经链路传送之前,链路层协议将其封装成帧;
(2)链路接入
媒体访问控制(Media Access Control,MAC)协议规定了帧在链路上传输的规则;
(3)可靠交付:
保证无差错地经链路层移动每个网络层数据报(下层为上层服务);
(4)差错检测和纠正:
用硬件实现

  • 网络适配器(network adapter)
    链路层的主体部分是在网络适配器中实现的;
    网络适配器有时也称为网络接口卡(NIC,Network Interface Card);
  • 位于网络适配器核心的是链路层控制器,其许多功能是通过硬件实现的。

·奇偶校验(p289)
·检验和方法(p290)

6.2 差错检验和纠正技术

(1)奇偶校验法(p289)
(2)校验和方法(p290)
(3)循环冗余检测法

  • CRC(Cyclic Redundancy Check):循环冗余检测(p291~292)
    CRC编码也成为多项式编码(polynomial code);

例题:
在这里插入图片描述

6.3 多路访问链路和协议

·两种类型的网络链路:
(1)点对点链路
(2)广播链路

·广播链路
广播链路能让多个发送和接收节点都连接到相同的、单一的、共享的广播信道上;
在广播链路中,任何结点传输一个帧时,信道广播该帧,各其余结点都收到一个副本;
以太网和无线局域网就是广播链路层技术的例子。

·碰撞

  • 因为在广播链路中所有的结点都能传输帧,当多个结点同时传输帧时,所有节点同时接收到多个帧,传输的结点在接收方发生碰撞。
  • 当发生了碰撞,涉及此次碰撞的所有帧都将丢失。

·多路访问协议(multiple access protocol)

  • 作用:
    协调多个发送和接收结点对同一个广播信道的访问;
    规范结点在共享的广播信道上的传输行为。

  • 分类:(p294)
    (1)信道划分协议
    (2)随机接入协议:

  • 当帧遭遇碰撞,发送结点不立刻重传该帧,而是独立的等待随机时间后重传;
    (例如时隙ALOHA协议)
    (3)轮流协议

·CSMA(Carrier Sense Multiple Access)——载波侦听多路访问(p298)
随机接入协议中各结点独立地发送帧,并不在乎其他节点的活动。
相比之下,CSMA的优点在于(两个重要规则):
(1)载波监听——结点在传输帧之前先监听信道,当空闲时传输
(2)碰撞检测——结点在传输过程中也一直监听信道,检测到其他传输干扰之后就停止

·CSMD/CD——具有碰撞检测的载波侦听多路访问(p299)

6.4 交换局域网

6.4.1 MAC地址/物理地址/LAN地址(p303)

事实上,并不是主机或者路由器具有链路层地址,而是它们的网络适配器(即网络接口)具有链路层地址;
甚至具有多个网络接口的主机和路由器可以具有多个链路层地址/MAC地址;


但需要注意的是,链路层交换机并不具备与其接口(与主机和路由器相连)相关联的MAC地址,原因在于:
链路层交换机的主要任务是在主机和路由器之间承载数据报,且透明的执行该任务,故主机或路由器无需明确地将帧寻址到其间的交换机。

  • MAC地址的长度为6字节,共有2^48个MAC地址,采用16进制表示法,地址的每个字节被表示为一对16进制数。

  • 当某适配器要想目的适配器发送一个帧时,要将目的适配器的MAC地址插入到该帧中,并发送到局域网上。

  • MAC广播地址:(FF-FF-FF-FF-FF-FF)一共6对FF,即48个1。

  • 为什么有了MAC地址还要有IP地址
    IP地址相当于通信地址,MAC地址相当于身份证,首先通过IP地址找到大概位置再通过MAC地址找到及具体设备。

6.4.2 ARP(Address Resolution Protocol)——地址解析协议(p305)

  • 功能:对网络层地址和链路层地址进行转换。
  • ARP表:每台主机或路由器都在内存中存储着一个ARP表,包含了IP地址到MAC地址的映射关系。
  • ARP分组(包含发/接双方的IP地址和MAC地址,ARP查询分组和响应分组都具有相同的格式);
    *查询ARP报文在广播帧中发送,而响应ARP报文在一个标准帧中发送。

·联系ARP,一个数据报如何在子网中传输?(p305)

假设主机A为源主机,要向目的主机B发送数据报:
(1)A要确定B的MAC地址:
1.1)主机A到自身ARP模块查ARP表,若有则取出映射;
1.2)若主机A中的ARP表没有主机B的IP到MAC的映射记录,则:

  • A构造一个ARP查询分组,其中内容为:(A的IP,A的MAC,B的IP,FF-FF-FF-FF-FF-FF),其中FF-FF-FF-FF-FF-FF是广播地址
  • A将此查询ARP分组广播到子网内所有的适配器(也可以说是所有的主机和路由器)中,每个收方适配器都将此ARP查询分组向上传递给ARP模块,这些ARP模块都将检查自己的IP与ARP查询分组中的IP是否相同;
  • 相同的一个(即主机B)将自己的IP和MAC地址作为源地址,A的IP和MAC作为目的地址封装成一个ARP响应分组,发送给主机A;
  • 主机A更新其ARP表;
    (2)主机A(的适配器)将数据报封装进帧,并插入目的(即B的)MAC地址,将之发送。

·联系ARP,一个数据报如何在不同子网之间传输?(p307)
以下面的模型为例:
在这里插入图片描述

  • 需要注意的是:该例子每台主机仅有一个IP和一个网络接口(一个网络接口对应一个适配器,一个适配器对应一个MAC地址),但连接两个子网的路由器有两个接口,故其有两个IP、两个适配器(两个ARP模块)即两个MAC地址。
  • 网络中每个适配器都有自己的MAC地址。

主机A:111.111.111.111要向主机B:222.222.222.222发送一个数据报,两主机处于不同子网,故A中的ARP表肯定没有B的IP->MAC的映射,但它有从A到路由器接口111.111.111.0的适配器MAC地址(说明这个接口与A同属一个子网),故:
(1)主机以路由器的MAC为目标MAC地址,以B的IP为目标IP发送数据报给路由器。
(2)在子网1上的路由器的适配器看到链路层帧是向它寻址的,因此将该帧一路上交至网络层;路由器在网络层中查路由表得到通往目标(主机B)IP的下一跳(即接口222.222.222.220),将该数据转发到接口222.222.222.220
(3)路由器接口222.222.222.220对应的适配器查ARP表,得到了主机B的MAC地址,将其插入封装了数据报的帧,发送给主机B

在这里插入图片描述

·DNS和ARP的区别?
(1)DNS将主机名解析为IP地址;而ARP将IP地址解析为MAC地址。
(2)DNS可以为因特网上任何地方的主机解析IP地址;而ARP只能为同一子网内的主机和路由器接口解析MAC地址。

·为什么说ARP是位于2.5层的协议?
一个ARP分组封装在链路层帧中,因而在体系结构上ARP位于链路层之上(下层为上层服务,层层封装);然而一个ARP分组具有包含链路层地址的字段,因而可认为是链路层(2层)协议;但是它也包含网络层地址,故也可认为是网络层(3层)的协议;

因此最好把ARP看作跨越链路层和网络层边界两边的协议。

·以太网(p308)
·以太网帧结构(p309)

在这里插入图片描述

以太网技术都向网络层提供的服务:

(1)无连接服务:无握手,直接发;
(类似于IP的第三层数据报服务和UDP的第四层无连接服务)

(2)不可靠服务:发送方适配器无法知道已发出的帧是否被正确接收;接收方收到帧后CRC校验通过就收,不通过就丢,通不通过都不反馈。

6.4.3 链路层交换机

·交换机一般位于子网中,没有网络适配器,故也没有MAC地址。
链路层交换机的主要任务是在主机和路由器之间承载数据报,且透明的执行该任务,故主机或路由器无需明确地将帧寻址到其间的交换机。

·交换机转发和过滤(p313)

  • 交换机的过滤:
    决定一个帧应该转发到某个接口还是将之丢弃。

  • 交换机的转发:
    决定一个帧应该被导向哪个接口

·交换机表/MAC地址转化表(switch table)(p313)
交换机的过滤和转发都借助于交换机表来完成;

  • 交换机表包含局域网上某些(而非全部的)主机和路由器的表项;
    每个表项包含:
    (1)MAC地址
    (2)连接该MAC地址的交换机端口编号
    (3)表项放置在表中的时间

·交换机的自学习特性(p314)
交换机的交换机表是自动、动态、自治的建立的——故称交换机为即插即用设备(plug-and-play device);交换机也是全双工的。

·交换机的自学习能力如何实现?
(1)交换机表初始为空
(2)对于每个接口接收到的每个入帧,交换机在其表中存储一个表项
(3)老化期(aging time)后,若交换机没有接收到以该地址作为源地址的帧,删除该项

? 当表为空或者没有目标“MAC与对应的端口的映射”时,交换机将单播帧通过泛洪的方式向交换机所有端口上的终端发送该帧(如ARP request),然后将信息记录到交换机表上。
? 对所有接受的数据帧都要进行学习操作(对源MAC地址和收到该数据帧的端口进行绑定)
? 表保存在RAM内存中,关机后自动清空

·交换机和路由器的比较(p316)
(1)虽然两者都是存储转发分组交换机,但是两者在本质上不同:交换机用MAC地址转发(MAC寻址是扁平的)分组,是二层的分组交换机;但路由器使用网络层地址(网络寻址是分层次的)转发分组,是三层的交换机;

(2)
交换机的优点:
1.交换机是即插即用的
2.交换机具有相对高的分组过滤转发速率

交换机的缺点:
1.为了防止广播帧的循环,交换网络的活跃拓扑限制为一颗生成树
2.大型交换网络要求主机和路由器有大ARP表,其流量与处理量大
3.交换机对广播风暴不提供任何保护措施(若某主机出了故障并不断传输以太网广播帧流,该交换机将转发所有这些帧,导致以太网崩溃)

(3)
路由器的优点:
1.网络寻址是分层次的,即使网络中存在冗余路径,分组通常也不会通过路由循环,故分组不会被限制到一棵树上;因为没有生成树的限制,所以路由器允许以丰富的结构构建因特网;
2.路由器对第二层的广播风暴提供了防火墙保护

路由器的缺点:
1.路由器不是即插即用的(路由器和连接到它们的主机都需要人为地配置IP地址);
2.路由器对每个分组的处理时间比交换机更长,因为处理高达第三层的字段。

  • 路由器硬件基本组成

路由器和交换机可以看作简易电脑,其操作系统是阉割版的Unix,可以用命令行通过Shell解释器来控制。


RAM:相当于内存
NVRAM:可擦RAM
Flash:闪存(类似U盘)
ROM:启动程序、硬件自检程序等
Console:控制台接口(其输入输出设备通常是另一台笔记本电脑),用于管理网络设备
Auxiliary:辅助端口(用的少,一般也是接输入输出设备)
Interfaces:接口(LAN接口、WAN接口、Ethernet接口、Serial接口等等)
Ethernet(以太网)接口、Serial(串行)接口:用于转发数据
CPU:处理器


? RAM(内存)中存储着应用程序和系统程序(网络设备中RAM系统程序偏多)
RAM中还保存着路由表和ARP表;
? 闪存flash相当于电脑的磁盘(尤其类似C盘),保存操作系统IOS,容量足够的话还可以再备份一个IOS;
另外可以通过tftp的方式从另一个网络设备的ISO传送到另一个路由器;
此外还有路由器配置的备份;
? ROM只读存储器相当于BIOS程序,断电不丢失,存储了Mini OS,BootStrap(启动引导程序)、POST(自检程序)、备份IOS;
? 非易失性RAM(NVRAM):容量较小(32-256KB),用于存储路由器启动时初始化系统使用的配置文件(startup-config),如果要保存关机前的配置效果,需要把running-config保存成startup-config;
? Running-config:当前网络配置
? Startup-config:启动网络配置

CPU在路由器中的地位比交换机更重要:
路由器中的CPU主要负责运行路由协议,计算路由表;
而交换机中的大部分工作由集成电路完成;故通常交换机上的cpu性能比路由器差。

  • 以太网接口Ethernet:10兆

  • 快速以太网接口Fastethernet:百兆

  • 接口编号类型:
    (1)接口按顺序编号:如Ethernet0
    (2)类型模块编号/接口编号:如一个以太网模块——Ethernet0/0 (接口一般有12个或24个)
    (3)卡编号/子卡编号/端口编号:如Ethernet0/0/0

互联网操作系统——IOS
通过命令行(CLI解释器)进行配置(面向用户)-- 通过console口连接笔记本设备的串口
注意:console口有专用的console线

(1)进入CLI时如果没有账号密码则默认进入用户模式,无法配置只能查看,需要进入特权模式才能对网络设备进行配置;
(2)路由器和交换机的IOS不一样:
换机的IOS有初始配置,路由器的IOS没有初始配置。

网络设备的访问方式

(1) 带外管理
? 不通过网络,如console
(2) 带内管理
? telnet
? web
? snmp


注意:
通过交换机的VLAN 1端口(配置端口,是虚拟的而不是物理的)配置网络设备的ip地址
初次访问需要带外管理的方式去进行初次配置(比如ip地址、远程访问用户等);

6.5 VLAN虚拟局域网

广播域的必要性:
? 交换机的交换机表需要泛洪
? ARP、DHCP等协议也需要广播

广播域过大的弊端:
? 网络带宽利用率低
? 终端负荷重
? 安全性低

传统广播域的划分方式——路由器
? 受到地理位置限制
? 管理子网困难
? 路由端口减少

VLAN虚拟局域网
一个VLAN = 一个广播域 = 逻辑网段(子网)
优点:1.灵活(物理无关?、改配置方便) 2.降低成本 3.提高网络性能 4.安全

VLAN的实现
在交换机的交换机表中含有VLAN项,通过该项标识虚拟局域网(子网or广播域)

交换机的端口主要有两种工作模式:
? Access模式
? Truck模式

属于不同VLAN的端口无法进行相互通信;
? 故采用VLAN的交换机在自学习时,泛洪只会波及同一个VLAN中的终端;
? 且对于采用VLAN的交换机,可以看作有多少个VLAN就维护多少张switch table;
(switch table默认都是VLAN1)

(1) 在一个交换机上分割多少个VLAN,就相当于将该交换机分割成多少个互不相连的独立交换机(不同VLAN的相互通信需要经过路由)。
(2) 在划分VLAN的时候不可以忽视子网的划分,一个VLAN要对应一个网段/广播域;
(3) 通范围的VLAN的信息存储在vlan.dat保存在flash中
(4) 扩展范围的VLAN(1006~4096)保存在running-config中

怎么判断去哪个VLAN?
根据数据包从哪个端口进入交换机,且端口已经分配了vlan(不查交换机转发表)。

802.1Q 协议

(1)交换机通过数据帧是否含有TPID(16位)为0X8100来判断该数据真是否采用VLAN
(2)在采用VLAN的广播域中,在终端生成数据包以及在进入交换机(的端口)时数据帧中并不携带802.1Q Header,在离开交换机时才有,在到达下一个交换机的入端口时拆除。
(3)Access接口只能转发同一VLAN的数据,但是trunck接口(共享端口/标记端口)
Trunck接口可以用于转发不同vlan的数据;(trunck接口一般用于两个都采用了VLAN的交换机级联)一般离开trunck的数据帧要被(交换机)打上VLAN标签,即802.1Q Header;
(4)但是普通的终端主机(包括没有做802.1Q配置的路由器)不识别带有其header的数据帧;

端口确定MAC帧所属VLAN规则
一个端口可以作为非标记端口(access)最多加入一个VLAN; 一个端口可以作为标记端口(trunk)加入多个VLAN; (所有经过trunck的数据帧都要被打上标记)
如果MAC帧携带VLAN标识符,根据VLAN标识符匹配端口加入VLAN; 如果MAC帧没有携带VLAN标识符,属于端口作为非标记端口加入的VLAN。
不携带vlan信息的数据帧叫本征VLAN;

交换机自己产生的数据不带VLAN标识符,属于交换机与交换机之间的通信,即本征VLAN,
本征VLAN默认是1,注意需要通过trunck接口交互的级联的交换机设备的本征VLAN要相同。
Trunck可以通过静态配置,也可以动态配置(dynamic):
两个desireable可以配置,一个auto和一个desireable也可以,两个auto则不可以建立trunck连接。

对交换机的配置:

  1. 全局模式下创建vlan
  2. 把端口置于vlan
  3. 配置trunck

? 交换网络上,所有交换机的vlan信息都要一致,如果交换机1和3都有vlan3,但是v交换机2上没有vlan3,那么从交换机1发送到交换机3的vlan3的arp请求帧则无法通过交换机2,因为交换机2没有vlan3的信息。

VLAN中继协议(VTP)—— 用于交换机的通信,不属于任何一个vlan

即:用于管理(同步)在同一域内vlans的建立,删除和重命名操作。
(在整个交换网络划分出一个域(VTP域)来同步操作)

? VTP域由一组配置相同域名,通过共享端口互连的交换机组成。

? 工作在服务器模式上的交换机:提供vlan信息——在服务器模式的交换机上对vlan的操作会被同步到客户机交换机上;

? 在同一个VTP中可能有多个工作在服务器模式下的交换机;实际上一台交换机默认的工作模式就是服务器模式。

? 同一个VTP域中交换机间传递的信息叫VTP消息;

交换机VTP模式:
? 服务器模式 服务器模式交换机允许创建和删除VLAN,创建和删除VLAN的操作同步到属于同一VTP域的所有其他交换机
? 客户模式 客户模式交换机不允许手工创建和删除VLAN,只允许根据VTP消息被动的创建和删除。
? 透明模式 透明模式交换机只是转发VTP消息,不对VTP消息作任何处理,可在本地手动创建和删除VLAN,对整个VTP域无影响

怎么划分VTP
? 定义VTP域名
? 使用共享端口trunck连接交换机
? 在边界交换机上设置另一个域名
? 设置VTP域的密码,同一VTP域里的交换机的VTP域的密码必须一致

VTP配置修订号:
Vtp是一个消息协议,使用第二层帧,通过native vlan传输,vtp消息只在中继链路上交互。

Vtp消息分为四种类型:
? summary advertisement (总结通过):包括vtp域名,配置修订版本号等。每5分钟发送一次,以通告当前vtp配制修订版本号(每操作一次就增加一次)。或者当有vlan配置操作时立即发送summary 通告,同一VTP中的所有交换机都同步最大版本号;

? subset advertisement (子集通告):包括具体的vlan配置信息。子集消息跟在汇总消息后面,为了完全通告vlan信息,可能有多个子集消息(一个子集消息不能包含所有vlan配置信息);

? request advertisement (请求通告): 当1.vtp域名发生变化,2.交换机收到总结消息,其中的配置修订号高于本交换机的配置修订号,3.子集消息丢失,4.交换机被重置 (请求vlan的配置信息)

? vtp join :用于vlan修剪,目的在于:防止不需要的广播信息从一个vlan泛洪到VTP域中所有的中继链路,通过限制泛洪流量来增加网络可用带宽(减少交换机带宽的浪费)。 注意:VTP修建功能需要开启才能使用:switch(config)#vtp pruning

VTP JOIN其实现原理:
一旦启动剪枝功能,交换机初始时除了属于默认VLAN的广播帧(或以广播方式传输的单播帧),共享端口并不发送属于其他VLAN的广播帧 当某个交换机端口被分配给某个VLAN,该交换机生成一个VTP Join消息,Join消息中给出该VLAN的编号(VLAN ID),并将该Join消息通过所有共享端口发送出去。 如果某个交换机通过某个共享端口接收到该Join消息,该共享端口将记录Join消息中给出的VLAN编号,以后该交换机将从该共享端口发送属于该VLAN的广播帧 。
简单理解就是:VTP join消息只经过被第一次标记过的相应VLAN端口传递消息

以太网链路聚合(EtherChannel)

为了增加交换机trunck链路带宽而简单的多接几根trunck线:
? 并不能解决瓶颈链路带宽的问题,反而会引起二层环路问题(广播风暴)


注意:
? 二层拓扑结构不能出现环路(除去EtherChannel)
? 三层路由的拓扑结构可以有环路,因为路由器不是自学习的,不主动泛洪,路由器根据路由表来转发,而路由表主要有人工静态配置和DHCP动态配置两种方式;


正确的方法:
使用EtherChannel:
捆绑多条物理端口成为一个逻辑端口,不会出现二层环路(广播风暴)问题;
? 链路聚合(Link Aggregation)技术可以将多个端口聚合后作为单个端口使用 ;
? 用途:提供更高的带宽,提供冗余链路

聚合控制协议:
? LACP(IEEE标准)
? PAgP(cisco私有技术)

链路聚合方式
? 静态聚合:
静态聚合方式需要手工在两台交换机上各自创建聚合组,并手工将交换机端口分配给聚合组;
? 动态聚合:
动态聚合方式通过链路聚合控制协议(Link Aggregation Control Protocol,LACP)或PAgP(Port Aggregate Protocol,cisco有技术)动态分配聚合组中的端口;

能够聚合的端口属性都必须一致:
? STP配置。端口路径距离。
? VLAN配置。端口属于的VLAN必须相同。
? 端口配置。端口传输速率、端口通信方式(半双工或全双工)、端口类型(接入端口或共享端口)、端口连接的链路类型(双绞线或光纤)。
在这里插入图片描述
链路聚合控制协议(LACP)

? LACP将端口分为四种模式 :

  1. On:不需要协商直接加入到channel(static)
  2. Active:主动协商对端是否加入channel
  3. Passive:被动等待对端协商加入channel
  4. Off:不协商,不加入channel
    在这里插入图片描述

EtherChannel的负载均衡
虽然一组端口在逻辑上被看作一个端口,但是实际上还是一组物理端口,需要考虑各端口的负载均衡(防止乱序传输)

dst – ip
dst – mac
src – dst -ip
src – dst – mac
src – ip
? 注意:有些情况有些模式不能使用,要看具体情况,如跨网段传输,若两个网段只用一个路由器,那么对于不同域的交换机来说不能用目标mac地址(dst-mac)来做负载均衡,因为要跨网段传输的时候,来自终端的数据帧中mac地址都是其网关,无法起到负载均衡的作用。

如何判断目标主机和自己是否处同一网段?
主机自身通过掩码比对src-ip和dst-ip的网络号(主机本身上保存有自己的ip、子网掩码和默认网关);

VLAN间的数据通信 —— 使用路由器

  1. 用路由器上不同物理端口连接不同VLAN:
    (1) 简单直观、带宽流量大、但难以实现、实施、浪费端口、成本高。
    (2) 路由器和交换机的连线要用access端口,因为trunck端口会插入802.1Q的标记,而路由器(默认)和终端设备一样不支持802.1Q的VLAN标记,将无法识别数据帧;

  2. 用一个物理接口连接不同VLAN(充当多个逻辑端口):
    (1) 即单臂路由;
    (2) 缺陷:带宽瓶颈

* 三层交换机

三层交换机实现VLAN间的通信

? 什么是三层交换机?
(1) 三层交换机是二层交换机加上路由模块。
(2) 路由模块中为每一个VLAN定义IP接口,IP接口等同于路由器逻辑端口,可以为其分配IP地址。
(3) 二层交换时完全等同于一个普通以太网交换机。
(4) 从IP接口转发实际上就是由IP接口对应的VLAN进行二层交换。
在这里插入图片描述

  • 查二层转发表是通过硬件化完成,比起查路由表执行程序,相当快.

三层交换机的交换表(switch table)包括:

(1)目的ip地址
(2)送出端口(next hop,从路由表来)
(3)源mac地址(路由器自身某个端口的mac地址?)
(4)目的mac地址(很有可能来自arp,如果arp也没有mac,那么启动上层路由设备,将信息写到三层转发表)---- 一次路由,多次转发
(5)VLAN ID(trunk上的802.1Q标签) —— 该表项可能是空的

三层交换机也是自学习的:
收到一个数据帧,数据帧的源MAC地址和源ip地址就是三层交换机表项中的目的MAC地址和ip地址;数据帧的进入端口即表项中的送出端口;三层交换机端口(物理或逻辑)的MAC地址就是表项中源MAC地址。
? 三层交换机除了自学习还有从三层路由获得信息——一次路由多次转发
? 上述两种方式一个反向记录一个正向记录,但目的ip都是终端设备(主机)

三层交换机实现VLAN互连

(1)为每一个VLAN定义IP接口,为IP接口分配IP地址和子网掩码;
(2)每一个IP接口分配的IP地址和子网掩码必须与该IP接口对应的VLAN的网络地址一致;
(3)同时,该IP接口的IP地址也成为连接在与该IP接口对应的VLAN上终端的默认网关地址。

三层交换机如何判断到达自身的数据帧是路由还是二层交换?
看数据帧的目的MAC地址是否和三层交换机的某个端口(包括逻辑和物理)的MAC地址相同,若有相同,则是路由;若没有相同的,则是交换(同一VLAN内两个终端之间的通信不需要经过路由模块)。

注意:
? 路由器分割广播域,所以路由器不同端口的的广播域肯定处于不同网段、不同端口下的vlan即使名字(序号)相同但是也不是同一个vlan!
? 但是三层交换机则可以使得不同端口下连接的同个vlan号的vlan相同,即三层交换机不分割广播域。

实现vlan间路由的区别 三层交换机通过背板实现二层交换路径与路由模块之间的通信,背板带宽远高于互联交换机和路由器之间物理链路的带宽。 三层交换机通过三层转发表实现一次路由,多次转发,省略路由用时,大大加快vlan间的数据转发速率。 交换机因为增加路由模块而增加的成本远低于因为增加路由器的成本。 鉴于此,三层交换机是园区网中实现vlan通信的主流产品。 三层交换机并不能完全替代路由器 路由器是通用网络层互联设备,可以实现不同网络之间的互联,如以太网和公共交换网之间的互联。


计算机网络常用术语中英对照

API:应用程序编程接口(Application Programming Interface)
HTTP:(超文本传输协议,HyperText Transfer Protocol);
Web缓存器(Web cache)
代理服务器(proxy server)
用户代理(user agent)
邮件服务器(mail server)
SMTP:简单邮件传输协议(Simple Mail Transmission Protocol)
报文队列(mesege queue)
邮箱(mailbox)
拉协议(pull protocol)
推协议(push protocol)
POP3:第三版的邮局协议(Post Office Protocal—Version 3)
IMAP:因特网邮件访问协议(Internet Mail Access Protocal)
DNS:域名系统(Domain Name System)
主机别名(host aliasing)
范主机名(canonical hostname)
邮件服务器别名(mail server aliasing)
负载分配(load distribution)
RR:资源记录(Resource Record)
TLD:顶级域DNS服务器(Top-Level Domain)
IP:网际协议(Internet Protocol)
TCP:传输控制协议(Transmission Control Protocol)
UDP:用户数据报协议(User Datagram Protocol)
segement:报文段
FSM:有限状态机(Finite-State Machine)
MSS:最大报文段长度(Maximum Segement Size)
MUT:最大传输单元:最大链路层帧长度(Maximum Transmission Unit)
数据报:package
SDN:软件定义网络(Soft-ware-Defined Networking)
CIDR:无类别域间路由选择(Classless Interdomain Routing)
DHCP:动态主机配置协议(Dynamic Host Configuration)
AS(Autonomous System):自治系统
OSPF:开放最短路优先
BGP:边界网关协议(Border Gateway Protocol)
ICMP:因特网控制报文协议(p272)
SNMP:简单网络管理协议(p275)
CRC:循环冗余检测(Cyclic Redundancy Check)
ARP(Address Resolution Protocol)——地址解析协议
RIP:路由信息协议(Routing Information Protocol)
FDM:频分多路复用(Frequency-division multiplexing)
CSMA:载波侦听多路访问(Carrier Sense Multiple Access)


更新ing…

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-10-08 11:39:38  更:2021-10-08 11:40:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 18:55:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码