计算机网络学习笔记(自顶向下方法)
计算机网络(自顶向下方法)
概论
层次服务与层次模型
层次化方式实现复杂网络功能:
将网络复杂的功能分层功能明确的层次,每一层实现了其中一个或一 组功能,功能中有其上层可以使用的功能:服务
本层协议实体相互交互执行本层的协议动作,目的是实现本层功能, 通过接口为上层提供更好的服务
在实现本层协议的时候,直接利用了下层所提供的服务
本层的服务:借助下层服务实现的本层协议实体之间交互带来的新功 能(上层可以利用的)+更下层所提供的服务
服务的类型
面向链接的服务
面向连接的服务(Connection-oriented Service)
- 连接(Connection):两个通信实体为进行通信而建立的一 种结合
- 面向连接的服务通信的过程:建立连接,通信,拆除连接
- 面向连接的服务的例子:网络层的连接被成为虚电路
- 适用范围:对于大的数据块要传输; 不适合小的零星报文
- 特点:保序
- 服务类型:
- 可靠的信息流 传送页面(可靠的获得,通过接收方的确认)
- 可靠的字节流 远程登录
- 不可靠的连接 数字化声音
无连接的服务
无连接的服务(Connectionless Service)
- 无连接服务:两个对等层实体在通信前不需要建 立一个连接,不预留资源;不需要通信双方都是 活跃;(例:寄信)
- 特点:不可靠、可能重复、可能失序
- IP分组,数据包;
- 适用范围:适合传送零星数据;
- 服务类型:
- 不可靠的数据报 电子方式的函件
- 有确认的数据报 挂号信
- 请求回答 信息查询
服务与协议
- 服务与协议的区别
- 服务(Service):低层实体向上层实体提供它们之间的 通信的能力,是通过原语(primitive)来操作的,垂直
- 协议(protocol) :对等层实体(peer entity)之间在相互 通信的过程中,需要遵循的规则的集合,水平。
- 服务与协议的联系
- 本层协议的实现要靠下层提供的服务来实现
- 本层实体通过协议为上层提供更高级的服务
Internet 协议栈
应用层: 网络应用
为人类用户或者其他应用进程提供网络应用服务
FTP, SMTP, HTTP,DNS,SSH
传输层:主机之间的数据传输
在网络层提供的端到端通信基础上,细分为进程到进程,将不可靠的通信变成可靠地通信(不出错、不重复、不丢失、不失序)
TCP, UDP
网络层: 为数据报从源到目的选择路由
主机主机之间的通信,端到端通信,不可靠
IP, 路由协议
链路层: 相邻网络节点间的数据传输
2个相邻2点的通信,点到点通信,可靠或不可靠
点对对协议PPP, 802.11(wifi), Ethernet
物理层: 在线路上传送bit
各层次的协议数据单元
- 应用层:报文(message)
- 传输层:报文段(segment):TCP段,UDP数据报
- 网络层:分组packet(如果无连接方式:数据报 datagram)
- 数据链路层:帧(frame)
- 物理层:比特(bit)
ISO/OSI参考模型

封装与解封装(图解)

应用层
网络应用的体系结构
客户-服务器(C/S)体系结构
服务器:
- 固定的IP地址和周知的端口号(约定)
- 扩展性:服务器场
- 数据中心进行扩展
- 扩展性差
- 客户端:
- 主动与服务器通信
- 与互联网有间歇性的连接
- 可能是动态IP地址
- 不直接与其他客户端通信
对等体(P2P)体系结构
(几乎)没有一直运行的服务器
任意端系统之间可以进行通信
每一个节点既是客户端又是服务器
- 自扩展性-新peer节点带来新的服务能力,当然也带来新的服务请求
参与的主机间歇性连接且可以改变IP地址
- 难以管理
- 例子:迅雷,Gnutella
C/S 和P2P体系结构的混合体
Napster
- 文件搜索:集中
- 主机在中心服务器上注册其资源
- 主机向中心服务器查询资源位置
- 文件传输:P2P
- 任意Peer节点之间
即时通信
- 在线检测:集中
- 当用户上线时,向中心服务器注册其IP地址
- 用户与中心服务器联系,以找到其在线好友的位置
- 两个用户之间聊天:P2P
Internet 传输层提供的服务(TCP/UDP)
TCP 服务:
- 可靠的传输服务
- 流量控制:发送方不会淹没接受方
- 拥塞控制:当网络出现拥塞时,能抑制发送方
- 不能提供的服务:时间保证、最小吞吐保证和安全
- 面向连接:要求在客户端进程和服务器进程之间建立连接
UDP 服务:
- 不可靠数据传输
- 不提供的服务:可靠, 流量控制、拥塞控制、 时间、带宽保证、建立 连接
UDP存在的必要性
- 能够区分不同的进程,而IP服务不能
- 在IP提供的主机到主机端到端功能的基础上,区分了主机的应用进程
- 无需建立连接,省去了建立连接时间,适合事务性的应用
- 不做可靠性的工作,例如检错重发,适合那些对实时 性要求比较高而对正确性要求不高的应用
- 因为为了实现可靠性(准确性、保序等),必须付出时间代价(检错重发)
- 没有拥塞控制和流量控制,应用能够按照设定的速度发送数据
- 而在TCP上面的应用,应用发送数据的速度和主机向网络发送 的实际速度是不一致的,因为有流量控制和拥塞控制
TCP/UDP的安全性
TCP&UDP
- 都没有加密
- 明文通过互联网传输,甚至密码
SSL
- 在TCP上面实现,提供加密的TCP链接
- 私密性
- 数据完整性
- 端到端的鉴别
SSL在应用层
- 应用采用SSL库,SSl库使用TCP通信
- 应用通过API将明文交给socket,SSL将其加密在互联网上传输
Web与HTTP
术语:
- Web页:由一些对象组成
- 对象可以是HTML文件、JPEG图像、Java小程序、声音剪辑文件等
- Web页含有一个基本的HTML文件,该基本HTML文 件又包含若干对象的引用(链接)
- 通过URL对每个对象进行引用
- 访问协议,用户名,口令字,端口等;
- URL的格式
HTTP概况
HTTP(Hyper Text Transfer Protocol):超文本传输协议
- Web的应用层协议
- 客户/服务器模式
- 客户: 请求、接收和显示 Web对象的浏览器
- 服务器: 对请求进行响应,发送对象的Web服务器
- 使用TCP:
- 客户发起一个与服务器的TCP链接(建立套接字),端口号为80
- 服务器接受客户的TCP链接
- 在浏览器(HTTP客户端) 与 Web服务器(HTTP服务器 server)交换HTTP报文(应用层协议报文)
- TCP链接关闭
- HTTP是无状态的
- 服务器并不维护关 于客户的任何信息
HTTP链接
响应时间模型

非持久HTTP
- 最多只有一个对象在 TCP连接上发送
- 下载多个对象需要多 个TCP连接
- HTTP/1.0使用非持久连接
- 缺点
- 每个对象要2个 RTT
- 操作系统必须为每个TCP连接分配资源
- 但浏览器通常打开并行TCP连接 ,以获取引用对象
持久HTTP
- 多个对象可以在一个(在客户端和服务器 之间的TCP连接上 传输
- HTTP/1.1 默认使用持久连接
- 服务器在发送响应后,仍保持 TCP连接
- 在相同客户端和服务器之间的后续请求和响应报文通过相同的连接进行传送
- 客户端在遇到一个引用对象的时候,就可以尽快发送该对象的请求
- 非流水方式的持久HTTP:
- 客户端只能在收到前一个响应后才能发出新的请求
- 每个引用对象花费一个RTT
- 流水方式的持久HTTP:
- HTTP/1.1的默认模式
- 客户端遇到一个引用对象就立即产生一个请求
- 所有引用(小)对象只花费一个 RTT是可能的
HTTP请求报文
报文是用普通ASCII文本书写的,这样有一定计算机知识的人都能阅读它

通用格式

- HTTP请求报文的第一行叫作请求行(request line),其后继的叫作首部行(header line)
- 请求行有三个字段:方法字段、URL字段和HTTP版本字段。方法字段可以取几种不同的值,包括GET、POST、HEAD、PUT和DELETE。使用GET方法,在URL字段会带有请求对象的标识。
- 首部行:
- Host:指明了对象所在的主机。
- User-agent:首部行用来指明用户代理,即向服务器发送请求的浏览器类型。
- Connection:close 要求浏览器在发送完请求的对象后就关闭这条链接。
- Accept-language:首部行仅是HTTP中可用的众多内容协商首部之一。
- 实体体(entiy body):使用GET方法时,实体体为空,而使用POST方法时,则实体体中包含就是请求对象的标识(用户在表单字段中输入的值)
- HEAD方法类似GET方法:当服务器收到一个使用HEAD方法的请求时,将会用一个HTTP报文进行响应,但是并不返回请求对象。
- PUT方法常与Web发行工具联合使用,它允许用户上传对象到指定的Web服务器上指定的路径(目录),PUT方法也被那些需要向Web服务器上传对象的应用程序使用。
- DELETE方法允许用户或者应用程序删除Web服务器上的对象。
HTTP响应报文

它有三个部分:一个初始状态行(status line) , 6个 首部行(headerline),然后是实体体(entity body)o实体体部分是报文的主要部分,即它 包含了所请求的对象本身(表示为data data data data data -)0状态行有3个字段:协议 版本字段、状态码和相应状态信息。
通用格式

- Connection: close首部行告诉客户,发送完报文后将关闭该TCP连接
- Date:首部行指示服务器产生并发送该响应报文的日期和时间。值得 一提的是,这个时间不是指对象创建或者最后修改的时间,而是服务器从它的文件系统中 检索到该对象,将该对象插入响应报文,并发送该响应报文的时间。
- Server:首部行指示 该报文是由一台Apache Web服务器产生的,它类似于HTTP请求报文中的User-agent:首部行
- Last-Modified:首部行指示了对象创建或者最后修改的日期和时间。Last- Modified: 首部行对既可能在本地客户也可能在网络缓存服务器上的对象缓存来说非常重要。
状态码分类
1XX- 信息型,服务器收到请求,需要请求者继续操作。2XX- 成功型,请求成功收到,理解并处理。3XX- 重定向,需要进一步的操作以完成请求。4XX- 客户端错误,请求包含语法错误或无法完成请求。5XX- 服务器错误,服务器在处理请求的过程中发生了错误。
HTTP响应状态码(位于服务器客户端的响应报文中的首行)
2000K:请求成功,信息在返回的响应报文中。301Moved Permanently:请求的对象已经被永久转移了,新的URL定义在响应报 文的Location:首部行中。客户软件将自动获取新的URL。400Bad Request: 一个通用差错代码,指示该请求不能被服务器理解,客户端请求有语法错误,不能被服务器所理解404Not Found:被请求的文档不在服务器上。503服务器当前不能处理客户端的请求,一段时间后可能恢复正常。505HTTP Version Not Supported:服务器不支持请求报文使用的HTTP协议版
用户-服务器状态:cookies
四个组成部分
- 在HTTP响应报文中有 一个cookie的首部行
- 在HTTP请求报文含有 一个cookie的首部行
- 在用户端系统中保留有 一个cookie文件,由用户的浏览器管理
- 在Web站点有一个后 端数据库
Cookies维护状态

Web缓存 (代理服务器)

- 缓存既是客户端又是 服务器
- 通常缓存是由ISP安装 (大学、公司、居民区ISP)
- 为什么要使用Web缓存?
- 降低客户端的请求响应时间
- 可以大大减少一个机构内 部网络与Internent接入链路上的流量
- 互联网大量采用了缓存:可以使较弱的ICP也能够有效提供内容
条件GET方法
尽管高速缓存能减少用户感受到的响应时间,但也引入了一个新的问题,即存放在缓 存器中的对象副本可能是陈旧的。

FTP: 文件传输协议

FTP控制连接与数据链接分开(有状态)
FTP客户端与FTP服务器通过端口21联系,并使用TCP为传输协议
客户端通过控制连接获得身份确认
客户端通过控制连接发送命令 浏览远程目录
收到一个文件传输命令时,服务器打开一个到客户端的数据连接
一个文件传输完成后,服务器关闭连接
服务器打开第二个TCP数据连接用来传输另一个文件
控制连接: 带外( “out of band” )传送
FTP服务器维护用户的状态信息: 当前路径、用户帐户与控制连接对应
FTP命令、响应

Email邮件服务器
SMTP协议
- 使用TCP在客户端和服务器之间传送报文,端口号为25
- 直接传输:从发送方服务器到接收方服务器
- SMTP使用持久链接
- 传输的3个阶段
- 握手
- 传输报文
- 关闭
- 命令/响应交互
- 命令:ASCII文本
- 响应:状态码和状态信息
- 报文必须为7位ASCII码
DNS
DNS(域名服务系统Domain Name System)
- 一个由分层的DNS服务器实现的分布式数据库
- 一个使得主机能够查询分布式数据库的应用层协议
DNS的主要思路
- **分层**的、基于域的命名机制
- 若干分布式的数据库完成名字到IP地址的转换
- 运行在UDP之上端口号为53的应用服务
- 核心的Internet功能,但以应用层协议实现
- 在网络边缘处理复杂性
DNS主要目的:
- 实现主机名-IP地址的转换(name/IP translate)
- 其他目的
- 主机别名到规范名字的转换:Host aliasing
- 邮件服务器别名到邮件服务器的正规名字的转换:Mail server aliasing
- 负载均衡:Load Distribution
DNS名字空间(The DNS Name Space))
- DNS域名结构
- 一个层面命名设备会有很多重名
- NDS采用层次树状结构的命名方法
- Internet 根被划为几百个顶级域(top lever domains)
- 通用的(generic) .com; .edu ; .gov ; .int ; .mil ; .net ; .org .firm ; .hsop ; .web ; .arts ; .rec ;
- 国家的(countries) .cn ; .us ; .nl ; .jp
- 每个(子)域下面可划分为若干子域(subdomains)
- 树叶是主机
- 域名(Domain Name)
- 从本域往上,直到树根
- 中间使用
.间隔不同级别 - 例如
szpt.edu.cnauto.szpt.edu.cnwww.auto.szpt.edu.cn - 域的域名:可以用于表示一个域
- 主机的域名:一个域上的一个主机
- 域名的管理:
- 一个域管理其下的子域
- 创建一个新的域,必须征得它所属域的同意
- 域与物理网络无关
- 域遵从组织界限,而不是物理网络
- 一个域的主机可以不在一个网络
- 一个网络的主机不一定在一个域
- 域的划分是逻辑的,而不是物理的
- 域遵从组织界限,而不是物理网络
分布式、层次数据库

根DNS服务器:有400多个根名字服务器遍及全世界,这些根名字服务器由13个不同的组织管理。根名字服务器提供TLD服务器的IP地址。
TLD服务器:顶级域(DNS)服务器:负责顶级域名(如com、org、net、edu和gov)和所有国家级的顶级域名(如cn,uk,fr,ca,jp),顶级域DNS服务器提供了权威域DNS服务器的IP地址。
权威服务器:权威 DNS 服务器可以返回主机 - IP 的最终映射。
本地DNS服务器:
- 严格来说,本地 DNS 服务器并不属于 DNS 的层次结构
- 每个 ISP 都有一台本地 DNS 服务器(如居民区、大学、机构)
- 当一个主机发起一个DNS查询时,查询被送到本地DNS服务器,本地DNS服务器起代理的作用,负责将该请求转发到DNS服务器层次结构中。
区域(zone)
- 区域的划分又区域管理者自己决定
- 将DNS名字空间划分为互不相交的区域,每个区域都是树的一部分
- 名字服务器
- 每个区域都有一个名字服务器:维护着它所管辖的权威信息(authoritative record)
区域名字服务器维护资源记录
- 资源记录(resource records)
- 作用:维护 域名——IP地址(其他)的映射关系
- 位置:Name Server的分布式数据库中
- RR格式(Domain_name,Value,Type,TTL)
- Domain_name:域名
- TTL:生存时间(权威,缓冲记录)
- Class类别:对于Internet,值为IN
- Value值:可以是数字,域名或ASCII串
- Type类型:
递归查询、迭代查询
DNS报文
DNS协议:查询和响应报文的报文格式相同
DNS缓存:
- 一旦名字服务器学到了一个映射,就将该映射缓存起来
- 根服务器通常都在本地服务器中缓存着
- 使得根服务器不用经常被访问
- 目的:提高效率
- 可能存在的问题:如果情况变化,缓存结果和权威资源记录不一致
- 解决方案:TTL(默认2天)
攻击DNS
- DDoS 攻击
- 对根服务器进行流量轰炸攻击:发送大量ping
- 没有成功
- 原因1:根目录服务器配置了流量过滤器,防火墙
- 原因2:Local DNS 服务器 缓存了TLD服务器的IP地址, 因此无需查询根服务器
- 向TLD服务器流量轰炸攻击 :发送大量查询
- 可能更危险
- 效果一般,大部分DNS缓存了TLD
- 对根服务器进行流量轰炸攻击:发送大量ping
- 重定向攻击
- 中间人攻击
- 截获查询,伪造回答,从而攻击 某个(DNS回答指定的IP)站点
- DNS中毒
- 发送伪造的应答给DNS服务器,希 望它能够缓存这个虚假的结果
- 技术上较困难:分布式截获和伪造
- 中间人攻击
- 利用DNS基础设施进行DDOS
- 伪造某个IP进行查询,攻击这个目标IP
- 查询方法,响应报文比查询报文大
- 效果有限
传输层
传输服务和协议
为运行在不同主机上的应用进程提供逻辑通信
传输协议运行在端系统
- 发送方:将应用层的报文分成报文段,然后传递给网络层
- 接收方:将报文段重组 成报文,然后传递给应用层
有多个传输层协议可供应用选择
- Internet: TCP和UDP
可靠数据传输(rdt)原理
Rdt1.0:在可靠信道上的可靠数据传输
Rdt2.0:具有比特差错的信道
Rdt2.0有个致命的缺陷,如果ACK或者NAK出错了,发生方不知道接收方发生了什么事情,所以引入了序号的机制,在每个分组中加入序号,如果ACK或者NAK出错,发送方重传当前的分组,接收方丢弃(不发给上层)重复分组。
Rdt2.1:处理出错的ACK/NAK
Rdt2.2:无NAK的协议
- 功能同rdt2.1,但只使用ACK(ack 要编号)
- 接收方对最后正确接收的分组发ACK,以替代NAK
- 接收方必须显式地包含被正确接收分组的序号
- 当收到重复的ACK(如:再次收到ack0)时,发送方与收到NAK采取相同的动作:重传当前分组
- 为后面的一次发送多个数据单位做一个准备
- 一次能够发送多个
- 每一个的应答都有:ACK,NACK;麻烦
- 使用对前一个数据单位的ACK,代替本数据单位的nak
- 确认信息减少一半,协议处理简单
Rdt3.0:具有比特差错和分组丢失的信道
Rdt3.0可以工作,但在链路容量比较大的情况下,性能很差,一次只能发一个PDU,不能够充分利用链路的传输能力,因此,引入了流水线的概念。
在介绍这两种流水线协议之前,先来了解一下滑动窗口(Slide window)协议
- 发送缓冲区
- 形式:内存中的一个区域,落入缓冲区的分组可以发送
- 功能:用于存放已发送,但是没有得到确认的分组
- 必要性:需要重发时可用
- 发送缓冲区的大小:一次最多可以发送多少个未经确认的分组
- 停止等待协议=1
- 流水线协议>1,合理的值,不能很大,链路利用率不能够超100%
- 发送缓冲区中的分组
- 未发送的:落入发送缓冲区的分组,可以连续发送出去;
- 已经发送出去的、等待对方确认的分组:发送缓冲区的分组只有得到确认才能删除
有发送就有接收窗口,
GBN协议和SR协议的异同
面向传输的链接:TCP
TCP段结构
TCP把数据看成一个无结构的、有序的字节流。我们从TCP对序号的使用上可以看出 这一点,因为序号是建立在传送的字节流之上,而不是建立在传送的报文段的序列之上。 —个报文段的序号(sequence number for a segment)因此是该报文段首字节的字节流编号,因为TCP是全双工的,因此主机A向主机B发送数据的同时,也许也接受来自主机B的数据(都是同一条TCP链接的一部分)。所以主机A填充进报文段的确认号就是主机A期望从主机B收到的下一节字节号。
举个例子,HostA报文里序号字段为42,确认号字段中是79,意味着客户端等待字节79,而服务器在等待字节42。
TCP可靠数据传输
- TCP在IP不可靠服务的基础上 建立了rdt
- 管道化的报文段 • GBN or SR
- 累积确认(像GBN)
- 单个重传定时器(像GBN)
- 是否可以接受乱序的,没有规范
- 通过以下事件触发重传
- 超时(只重发那个最早的未确认段:SR)
- 重复的确认
- 例子:收到了ACK50,之后又收到3 个ACK50
- 首先考虑简化的TCP发送方:
- 忽略重复的确认
- 忽略流量控制和拥塞控制
TCP流量控制
通俗的说既:接收窗口用于给发送方一个指示一一该接收方还有多少可用的缓存空间。
我们定义几个变量:
LastByteRead:主机B上的应用进程从缓存读出的数据流的最后一个字节的编号。
LastByteRcvd:从网络中到达的并且已放入主机B接收缓存中的数据流的最后一个 字节的编号。
RcvBuffer:接受缓存空间

所以接受窗口缓存的可用空间为rwnd = RcvBuffer - [ LastByteRcvd - LastByteRead ]
TCP链接管理
建立连接
关闭连接:
- 客户端,服务器分别关闭它自己这一侧的连接
- 发送FIN bit = 1的TCP段
- 一旦接收到FIN,用ACK回应
- 接到FIN段,ACK可以和它自己发出的FIN段一起发送
- 可以处理同时的FIN交换
拥塞控制方法
有2种常用的拥塞控制方法:
端到端的拥塞控制
- 没有来自网络的显式反馈
- 端系统根据延迟和丢失事件推断是否有拥塞
- TCP采用的方法
网络辅助的拥塞控制
- 路由器提供给端系统以反馈信息
- 单个bit置位,显示有拥塞 (SNA, DECbit, TCP/IP ECN, ATM)
- 显式提供发送端可以 采用的速率
TCP拥塞机制
端到端的拥塞控制机制
- 路由器不向主机反馈拥塞的信息
- 路由器负担较轻
- 符合网络核心简单的TCP/IP架构原则
- 端系统根据自身得到的信息,判断是否发生拥塞,从而采取动作
发送端如何探测到拥塞?
- 某个段超时了(丢失事件 ):拥塞
- 超时时间到,某个段的确认没有来
- 原因1:网络拥塞(某个路由器缓冲区没空间了,被丢弃)概率大
- 原因2:出错被丢弃了(各级错误,没有通过校验,被丢弃)概率小
- 一旦超时,就认为拥塞了,有一定误判,但是总体控制方向是对的
- 有关某个段的3次重复ACK:轻微拥塞

- 段的第1个ack,正常,确认绿段,期待红段
- 段的第2个重复ack,意味着红段的后一段收到了,蓝段乱序到达
- 段的第2、3、4个ack重复,意味着红段的后第2、3、4个段收到了 ,橙段乱序到达,同时红段丢失的可能性很大(后面3个段都到了, 红段都没到)
- 网络这时还能够进行一定程度的传输,拥塞但情况要比第一种好
如何控制发送端发送的速率?
- 维持一个拥塞窗口的值:CongWin
- 发送端限制已发送但是未确认的数据量(的上限)
LastByteSent-LastByteAcked <= CongWin
- CongWin是动态的,是感知到的网络拥塞程度的函数
- 超时或者3个重复ack,CongWin↓
- **超时时**:CongWin降为1MSS,进入SS阶段然后再倍增到 CongWin/2(每个RTT),从而进入CA阶段
- 3个重复ack :CongWin降为CongWin/2,CA阶段
- 超时或者3个重复ack,CongWin↓
TCP拥塞控制策略
- 慢启动
- 初始速率很慢,但是加速却是指数性的,初始速率很慢,但是 加速却是指数性的
- AIMD:线性增、乘性减少
- 乘性减:丢失事件后将CongWin降为1, 将CongWin/2作为阈值,进 入慢启动阶段(倍增直到 CongWin/2)
- 线性增:当CongWin>阈值时,一个 RTT如没有发生丢失事件 ,将CongWin加1MSS: 探测

- 超时事件后的保守策略
总结:
- 当CongWin<Threshold, 发送端处于慢启动阶段( slow-start), 窗口指数性增长.
- 当CongWin>Threshold, 发送端处于拥塞避免阶段 (congestion-avoidance), 窗口线性增长.
- 当收到三个重复的ACKs (triple duplicate ACK), Threshold设置成 CongWin/2, CongWin=Threshold+3
- 当超时事件发生时timeout, Threshold=CongWin/2 CongWin=1 MSS,进入SS阶段
网络层
网络层服务
- 在发送主机和接收主机对之间 传送段(segment)
- 在发送端将段封装到数据报中
- 在接收端,将段上交给传输层实体
- 网络层协议存在于每一个主机和路由器
- 路由器检查每一个经过它的IP 数据报的头部
网络层关键功能:
- 转发:将分组从路由器 的输入接口转发到合适 的输出接口
- 路由: 使用路由算法来 决定分组从发送主机到目标接收主机的路径
- 路由选择算法
- 路由选择协议
网络层:数据平面、控制平面
路由器结构
路由器内部交换结构
- 将分组从输入缓冲区传输到合适的输出端口
- 交换速率:分组可以按照该速率从输入传输到输出
- 运行速度经常是输入/输出链路速率的若干倍
- N 个输入端口:交换机构的交换速度是输入线路速度的N倍比较理 想,才不会成为瓶颈
- 典型的交换结构
输出端口

- 排队带来延迟,由于输出端口缓存溢出则丢弃数据报
路由器中的网络层功能:
- 路由协议
- 路径选择
- RIP, OSPF, BGP
- IP协议
- 地址约定
- 数据报格式
- 分组处理的约定
- ICMP协议
- 错误报告
- 路由器信令
IP数据报格式
IP编址
- IP 地址: 32位标示,对 主机或者路由器的接口编址
- 接口: 主机/路由器和物 理链路的连接处
- 路由器通常拥有多个接口
- 主机也有可能有多个接口
- IP地址和每一个接口关联
- 一个IP地址和一个接口相关联
子网
IP地址:
- 子网部分(高位bits)
- 主机部分(地位bits)
什么是子网(subnet) ?
- 一个子网内的节点(主机或者路由器)它们的 IP地址的高位部分相同 ,这些节点构成的网络 的一部分叫做子网
- 无需路由器介入,子网内各主机可以在物理上 相互直接到达
- 每一个孤岛(网络)都 是一个都可以被称之为 subnet.
IP地址分类
IP 地址分类成了 5 种类型,分别是 A 类、B 类、C 类、D 类、E 类。
其中对于 A、B、C 类主要分为两个部分,分别是网络号和主机号。
最大主机个数,要看主机号的位数,如C类地址主机号占8位,那么C类地址的最大主机个数为2^8-2=254 ,为什么要减2呢?因为IP地址中,主机号全1和全0的地址一般做预留。
- 主机号全为 1 指定某个网络下的所有主机,用于广播
- 主机号全为 0 指定某个网络(本主机)
广播地址用于在同一个链路中相互连接的主机之间发送数据包。
环回地址是在同一台计算机上的程序之间进行网络通信时所使用的一个默认地址。
计算机使用一个特殊的 IP 地址 127.0.0.1 作为环回地址。与该地址具有相同意义的是一个叫做 localhost 的主机名。使用这个 IP 或主机名时,数据包不会流向网络。
无分类地址 CIDR
CIDR: Classless InterDomain Routing
将子网掩码和 IP 地址按位计算 AND,就可得到网络号。
子网划分
网掩码划分出网络号和主机号,那实际上子网掩码还有一个作用,那就是划分子网。
- 未做子网划分的 ip 地址:网络地址+主机地址
- 做子网划分后的 ip 地址:网络地址+(子网网络地址+子网主机地址)
假设对 C 类地址进行子网划分,网络地址 192.168.1.0,使用子网掩码 255.255.255.192 对其进行子网划分。
C 类地址中前 24 位 是网络号,最后 8 位是主机号,根据子网掩码可知从 8 位主机号中借用 2 位作为子网号。
由于子网网络地址被划分成 2 位,那么子网地址就有 4 个,分别是 00、01、10、11,具体划分如下图:
划分后的 4 个子网如下表格:

IPv6
初始动机: 32-bit地址空间将会被很快用完
另外的动机:
- 头部格式改变帮助加速处理和转发
- TTL-1
- 头部checksum
- 分片
- 头部格式改变帮助QoS
- 头部格式改变帮助加速处理和转发
IPv6 数据报格式:
固定的40 字节头部
数据报传输过程中,不允许分片
IPv6的亮点
- IPv6 可自动配置,即使没有 DHCP 服务器也可以实现自动分配IP地址,真是便捷到即插即用啊。
- IPv6 包头包首部长度采用固定的值
40字节,去掉了包头校验和,简化了首部结构,减轻了路由器负荷,大大提高了传输的性能。 - IPv6 有应对伪造 IP 地址的网络安全功能以及防止线路窃听的功能,大大提升了安全性。
IPv4 首部与 IPv6 首部

- 取消了首部校验和字段。 因为在数据链路层和传输层都会校验,因此 IPv6 直接取消了 IP 的校验。
- 取消了分片/重新组装相关字段。 分片与重组是耗时的过程,IPv6 不允许在中间路由器进行分片与重组,这种操作只能在源与目标主机,这将大大提高了路由器转发的速度。
- 取消选项字段。 选项字段不再是标准 IP 首部的一部分了,但它并没有消失,而是可能出现在 IPv6 首部中的「下一个首部」指出的位置上。删除该选项字段是的 IPv6 的首部成为固定长度的
40字节。
IPv4到IPv6的平移采取隧道: 在IPv4路由器之间传输的IPv4数据报中携 带IPv6数据报
SDN
SDN的主要思路
- 网络设备数据平面和控制平面分离
- 数据平面-分组交换机
- 将路由器、交换机和目前大多数网络设备的功能进一步抽 象成:按照流表(由控制平面设置的控制逻辑)进行PDU (帧、分组)的动作(包括转发、丢弃、拷贝、泛洪、阻塞)
- 统一化设备功能:SDN交换机(分组交换机),执行控制逻辑
- 控制平面-控制器+网络应用
- 分离、集中
- 计算和下发控制逻辑:流表
SDN的优势
- 水平集成控制平面的开放实现(而非私有实现),创造出好的产业生态,促进发展
- 分组交换机、控制器和各种控制逻辑网络应用app可由不同厂商生产,专业化,引入竞争形成良好生态
- **集中**式实现控制逻辑,网络管理容易:
- 集中式控制器了解网络状况,编程简单,传统方式困难
- 避免路由器的误配置
- 基于流表的匹配+行动的工作方式允许“可编程的”分组交换机
- 实现流量工程等高级特性
- 在此框架下实现各种新型(未来)的网络设备
DHCP
DHCP( Dynamic Host Configuration Protocol)动态主机配置协议




