0330
计算机网络
- 附录:
- 第一章 计算机网络体系结构
- 1.1.1 计算机网络的概念、功能、分类
- 概念
- 计网的功能:
- 计网的分类:
- 1.1.6 计算机网络的性能指标
- 1.(实际的)速率-Speed
- 2.(理想的)带宽-Bandwidth
- 3.吞吐量-Throughput
- 4.时延-Delay
- 5.时延带宽积
- 6.往返时延-RTT
- 7.利用率
- 1.2.2 协议、接口、服务
- SDU + PCI = PDU
- 1.2.3 OSI参考模型 和 TCP/IP模型
- 1.3 本章小结及疑难点
- 第二章 物理层
- 2.1.1 基本概念
- 数据、信号、码元
- 信源、信道、信宿
- 通信方式
- 码元传输速率 和 信息传输速率
- 波特 和 比特
- 2.1.2 奈奎斯特定理和香农定理
- 奈氏准则(无噪声,理想情况)
- 香农定理(有噪声,实际情况)
- 比较 + 总结
- 2.1.3 编码与调制
- 2.1.4 电路交换、报文交换、分组交换
- 2.1.5 数据报与虚电路
- 2.2 传输介质(传输媒体)
- 传输介质和物理层:
- 2.3 物理层设备
- 中继器
- 集线器(Hub---多端口中继器)
- 第三章 数据链路层
- 3.1 数链层的功能
- 3.2 组帧(封装成帧)
- 1.字符计数法:
- 2.字符填充法:
- 3.零比特填充法:
- 4.违规编码法:
- 3.3 差错控制
- 循环冗余码CRC
- 3.4 流量控制
- 停止-等待协议(Stop-and-Wait):
- 后退N帧协议(GBN):
- 选择重传协议(SR):
- 信道利用率 和 信道吞吐率
- 3.5 介质访问控制
- 3.5.1 信道划分介质访问控制
- 3.5.2 随机访问介质访问控制
- ALOHA协议
- CSMA协议
- CSMA/CD协议
- 最小帧长问题:
- 为什么说如果有冲突,则冲突一定发生在冲突窗口内?而如果在冲突窗口内没有发生冲突,那么该帧就不会再发生冲突?
- CSMA/CA协议
- 3.5.3 轮询访问介质访问控制:令牌传递协议
- 3.6 局域网(LAN)
- 3.6.2 以太网(Ethernet)
- 网卡:(数链层+物理层)
- 以太网MAC帧:
- 3.6.3 无线局域网(WLAN)
- 3.7 广域网
- `PPP协议` 和 `HDLC协议`
- 3.8 数据链路层设备
- 3.8.1 网桥 网段
- 透明网桥(选择的不是最佳路由)
- 问:假设连接到透明网桥上的一台计算机把一个数据帧发送给网络上一个不存在的设备,网桥会如何处理这个帧?
- 源路由网桥(选择的是最佳路由)
- 最佳路由就一定是最少路由吗?
- 3.8.2 局域网交换机☆
- 虚拟局域网(VLAN)
- 关于冲突域(碰撞域)和广播域☆
- 共享式局域网 和 交换式局域网
- 3.8.3 网桥/交换机 和 中继器/集线器 的比较
- 交换机和网桥的不同之处:
- 第四章 网络层
- 4.1 网络层的功能
- 异构网络互联:
- 中间设备/中继系统/中间系统
- 路由选择与分组转发:
- 拥塞控制:
- 4.2 路由算法
- 4.2.2 距离-向量路由算法(RIP协议)
- 4.2.3 链路状态路由算法(OSPF协议)
- 4.5.5 边界网关协议(BGP)
- 三种路由协议的比较
- 4.3 IPv4 ☆☆☆
- 4.3.1 IPv4分组
- IP数据报分片
- 前三层的SDU + PCI = PDU
- 网络层转发分组的流程(书中P149)
- 4.3.2 IPv4地址与NAT
- 特殊的IP地址:
- 常用的三类IP地址的适用范围:
- 网络地址转换(NAT):
- 私有IP地址网段
- 普通路由器 & NAT路由器
- 4.3.3 子网划分与子网掩码、CIDR
- 子网划分 和 子网掩码
- 无分类编址(CIDR)
- 4.3.4 ARP协议、DHCP协议、ICMP协议
- IP地址 与 硬件地址
- ARP协议
- 动态主机配置协议(DHCP)
- 网际控制报文协议(ICMP)
- 4.4 IPv6
- 4.6 IP组播
- IP组播地址
- IGMP协议 与 组播路由算法
- 4.7 移动IP
- 移动IP 和 动态IP 的区别
- 4.8 网络层设备
- 4.8.1 路由器的组成和功能
- 4.9 本章小结及疑难点
- 第五章 传输层
- 5.1 传输层提供的服务
- 5.1.1 传输层的功能(传输层和网络层的功能大比较☆☆☆)
- 5.1.2 传输层的寻址和端口
- 1.端口
- 2.端口号
- 3.套接字
- 5.1.3 无连接服务与面向连接服务 --- UDP 和 TCP
- IP数据报 和 UDP数据报
- TCP 和 网络层虚电路
- 5.2 UDP协议
- 5.2.1 UDP数据报
- UDP的原理
- UDP首部格式
- UDP基于端口的分用
- 5.2.2 UDP校验
- 5.3 TCP协议
- 5.3.1 TCP协议的特点
- 5.3.2 TCP报文段
- 5.3.3 TCP连接管理☆☆☆
- 1.TCP连接的建立(三次握手)---TCP全双工连接
- SYN洪泛攻击
- TCP连接的释放(四次挥手)
- 5.3.4 TCP可靠传输
- 5.3.5 TCP流量控制---滑动窗口机制
- 传输层的流量控制 和 数链层的流量控制
- 5.3.6 TCP拥塞控制
- 拥塞控制与流量控制的区别
- 拥塞控制算法
- 5.4 本章小结及疑难点
- 1.MSS设置的太大或太小会有什么影响?☆☆☆
- MSS&MTU 和 分段&分片 和 UDP&TCP&IP ☆☆☆☆☆
- 2.为何不采用“三次握手”释放连接,且发送最后一次握手报文后要等待`2 * MSL`的时间呢?
- 3.如何判定此确认报文段是对原来的报文段的确认,还是对重传的报文段的确认?
- 4.TCP使用的是GBN还是选择重传SR?
- 5.为什么超时事件发生时cwnd被置1,而收到3个冗余ACK时cwnd减半?
- 6.为什么不采用“两次握手”建立连接呢?
- 7.是否TCP和UDP都需要计算往返时间RTT?
- 8.为什么TCP在建立连接时不能每次都选择相同的、固定的初始序号?
- 9.假定在一个互联网中,所有链路的传输都不出现差错,所有结点也都不会发生故障。试问在这种情况下,TCP的“可靠传输”功能是否就是多余的?
- 第六章 应用层
- 6.1 网络应用模型
- 客户/服务器(C/S)模型
- P2P模型
- 6.2 域名系统(DNS)---把IP比喻成人的电话号码,域名就是人的名字
- 域名(层次域名空间)
- 域名服务器
- 域名解析过程
- 递归查询
- 递归与迭代相结合的查询
- 举个例子:
- 高速缓存
- 6.3 文件传输协议(FTP)
- 6.3.1 FTP的工作原理
- 6.3.2 控制连接与数据连接
- 1.控制连接(始终保持)
- 2.数据连接(保持一个)
- 6.4 电子邮件
- 6.4.1 电子邮件系统的组成结构
- 6.4.2 简单介绍电子邮件的收发过程:
- 6.4.3 SMTP协议和POP3协议
- SMTP协议
- POP3协议
- IMAP
- 基于万维网的电子邮件
- 6.5 万维网(WWW)
- 6.5.1 WWW的概念与组成结构
- 6.5.2 超文本传输协议(HTTP)
- 6.6 本章小结及疑难点
- 1.如何理解客户进程端口号与服务器进程端口号?
- 补充:
- 网络安全
- 1. 网络通信中可能面临的威胁
- 2. 对称加密技术
- 3. 非对称加密技术
- 4. 数字信封技术
- 5. 数字签名技术
- 6. 防火墙Firewalls
- HTTPS
- 1M的宽带有时还不足100K?------谈谈带宽的两种含义
结合之前复试时写的笔记和王道考研的书一块整理出来的。
附录:
第一章 计算机网络体系结构
1.1.1 计算机网络的概念、功能、分类
概念
计算机网络就是一些互联的、自治的计算机系统的集合。
计网的功能:
- 数据通信,这是计网最基本、最重要的功能;
- 资源共享
- 分布式处理
- 提高可靠性
- 负载均衡
计网的分类:
1.按分部范围分
- 广域网(WAN)
- 城域网(MAN)
- 局域网(LAN)
- 个人区域网(PAN)
2.按传输技术分
- 广播式网络
- 点对点网络
3.按拓扑结构分
- 总线形网络
- 星形网络
- 环形网络
- 网状型网络
4.按使用者分
- 公用网
- 专用网
5.按交换技术分
- 电路交换网络
- 报文交换网络
- 分组交换网络
6.按传输介质分类
- 有线网
- 无线网
1.1.6 计算机网络的性能指标
1.(实际的)速率-Speed
也叫数据率、数据传输率、比特率,单位是b/s(比特/秒),也可以写成bit/s,或者bps。
要区分下面的两个概念:
速率 | 存储容量 |
---|---|
1Kb/s = 1000b/s | 1KB = 1024B 1Byte = 8 bit 1字节=8位 |
1Mb/s = 1000Kb/s | 1MB = 1024KB |
1Gb/s = 1000Mb/s | 1GB = 1024MB |
1TB = 1024GB |
2.(理想的)带宽-Bandwidth
带宽是指理想状态下所能达到的最高的数据传输率,即最高速率,是个物理极限值。
3.吞吐量-Throughput
单位时间内通过某个网络(信道、接口)的数据量。
4.时延-Delay
数据(一个报文或者分组)从网络(或链路)的一端传送到另一端所需的时间,也叫延迟或迟延,单位是秒(s)。
时延由4部分构成:
- 发送时延:也叫传输时延,数据长度/信道带宽(发送速率/传输速率),也就是把数据推送到信道上所需的时间;
- 传播时延:取决于电磁波传播速度(2 * 10的八次方 m/s)和链路长度,信道长度/电磁波在信道上的传播速率;
- 排队时延:等待输出/输出链路可用 —发生在路由器
- 处理时延:检错、找出口 —发生在路由器
要区分开传输时延和传播时延:
传输时延是发送时延,把要发送的数据推送信道上所需的时间;传播时延是走完信道所需的时间。
5.时延带宽积
时延带宽积 = 传播时延(s) * 带宽(b/s),单位是比特(bit),所以时延带宽积又称为以比特为单位的链路长度,即“某段链路现在有多少比特”。
6.往返时延-RTT
RTT(Round-Trip Time),发送方从发送数据开始,到发送方收到接收方的确认所经历的时延,RTT越大,在收到确认之前,可以发送的数据就越多。
7.利用率
信道利用率:有数据通过的时间/(有+无)数据通过时间,即某一信道有百分之多少的时间是有数据通过的;(下面的3.4流量控制有讲到具体计算方法)
网络利用率:信道利用率的加权平均值。
利用率越高,时延越大,可以类比堵车的例子。
1.2.2 协议、接口、服务
1.实体:具体的某一层,同一层的实体叫对等实体;
2.协议:为对等实体进行数据交换而建立的规则、标准或约定,称为网络协议。(水平的
)
协议三要素:
- 语法:规定传输数据的格式;
- 语义:规定所要完成的功能;
- 同步:规定各种操作的顺序。
3.接口:上层使用下层服务的入口,仅仅在相邻层间有接口。(垂直的
)
4.服务:下层为相邻上层提供的功能调用。(垂直的
)
上层通过接口使用相邻下层提供的服务,例如:第4层为第3层提供服务,第4层可以使用下层及下面所有层服务的总和,但第4层无法直接获取第2层提供的服务,第2层提供的服务是通过二三层间的接口传递上来的。
SDU + PCI = PDU
SDU服务数据单元:含金量高的数据;
PCI协议控制信息:控制信息;
PDU协议数据单元:对等层次之间传送的数据单元。
SDU + PCI = PDU,例如第3层的PDU作为第4层的SDU,再加上第4层的PCI,得到第4层的PDU,然后第4层的PDU又作为第5层的SDU,加上第5层的PCI,得到第5层的PDU,然后…
1.2.3 OSI参考模型 和 TCP/IP模型
OSI参考模型(7层):物联网淑慧适用
- 物理层:
- 数据链路层:
- 网络层:
- 传输层:
- 会话层:
- 表示层:
- 应用层:
前三层被称为通信子网;后三层被称为资源子网;传输层承上启下。
TCP/IP模型(4层):
- 网络接口层;
- 网际层;
- 传输层;
- 应用层 ;
1.3 本章小结及疑难点
信道速率提高,指的是传输速率(不是传播)提高了,即的单位时间内推送到链路上的比特数增多了。
第二章 物理层
2.1.1 基本概念
数据、信号、码元
数据:传送信息的实体;
信号:模拟信号(也叫宽带信号)、数字信号(也叫基带信号);
码元:固定时长的信号波形,一个码元可以携带多个比特的信息
- 二进制码元:码元的离散状态有2种,0和1,那么一个码元就携带一个比特的信息;
- 四进制码元:码元的离散状态有4种,11 01 10 11,那么一个码元就携带2个比特的信息;
- K进制码元:码元的离散状态有k种,
信源、信道、信宿
信源、信道、信宿:
- 信源:发送信号的一方
- 信宿:接收信号的一方
- 信道:
按传输信号形式可分为模拟信道、数字信道;(模拟信道里是带宽信号,数字信道里是基带信号)
按传输介质可分为虚线信道和无线信道。
通信方式
通信方式:
- 单工通信:只有一个方向的通信而没有反方向的交互,例如无线电广播、电视广播;需要
一条
信道 - 半双工通信:通信的双方都可以发送或接收信息,但同一时间只能有一方发另一方收;需要
两条
信道 - 双工通信:通信的双方可以同时发送或接收信息;需要
两条
信道
码元传输速率 和 信息传输速率
码元传输速率:单位时间内传输的码元个数,单位是波特(Baud),1波特表示每秒传输一个码元,即1Baud = 1码元/s;
信息传输速率:单位时间内传输的二进制码元个数(即比特数),单位是比特/秒(b/s),也叫比特率,数据传输速率;
波特 和 比特
注意区分波特和比特:
1波特表示每秒传输一个码元,但一个码元可以携带多个比特的信息,所以对于一个携带n比特信息量的码元,M波特率的码元传输速率所对应的信息传输速率为M*n比特/s。
2.1.2 奈奎斯特定理和香农定理
奈氏准则(无噪声,理想情况)
奈氏准则:在理想信道(带宽受限且没有噪声)中,极限码元传输速率为 2W Baud
,W是信道带宽,单位是Hz,极限数据传输速率为2*W*(log以2为底V的对数)
,V是V进制码元,即码元的离散状态种类。
奈氏准则限制了码元传输速率,但没有限制数据传输速率,所以要提高数据的传输速率,就要设法让每个码元携带更多个比特的信息量,即增大V的值,这就是多元制的调制方法。
香农定理(有噪声,实际情况)
奈氏准则限制了码元传输速率,但没有限制数据传输速率,但数据传输速率也不能无线增大,即一个码元对应的二进制位数(携带的比特数)是有限的,这就是
香农定理:在带宽受限且有噪声的信道中,极限数据传输率有上限值,上限值为 W * (log以2为底<1 + S/N>的对数)
,W是信道带宽,S/N是信噪比。
如果信噪比有单位,那么单位是分贝(DB
);
如果信噪比没单位,就是个比值,那就是S/N
的值,即S/N是没单位的信噪比;
没单位的信噪比 和 以DB为单位的信噪比 之间的转换关系是:
信噪比(DB) = 10 * log(以10为底S/N的对数)
例如,S/N = 10,信噪比是10DB;S/N = 1000,信噪比是30DB。
一般是已知信噪比(dB
)和带宽,求最大数据传输率:信噪比(dB)--> S/N --> W * (log以2为底<1 + S/N>的对数)
即为最大的数据传输率;
也有的题目是已知信噪比为127:1,那么就不需要做上述从DB到S/N的转换了,S/N直接就是127,带入公式 W * (log以2为底<1 + S/N>的对数)
即为最大的数据传输率。
问:为什么要用两种形式来表示信噪比?
答:首先二者在数值上是等价的,区别就是一个没单位,一个单位是dB。
采用分贝表示的原因是:很多时候信号要比噪声强得多,比如信号比噪声强10亿倍,如果用数值表示的话,1后面又9个0,容易写错;如果用分贝表示的话,直接写90dB即可,表示起来要简单的多,而且也不容易出错。分贝对于表示特别大或者特别小的数值极为有利,这种表示方式在电子通信领域用途很广。
比较 + 总结
奈氏准则支出,码元传输的速率是受限的;但奈氏准则并未限制信息传输速率,要提高信息传输速率,就要使每个码元能够携带更多比特的信息量,即公式中的V
;
香农定理给出了信息传输速率的极限,要提高信息的传输速率,要么提高传输线路的带宽
,要么提高所传信号的信噪比
,即公式中的W
和S/N
。
注意:两个定理中带宽W
的单位都是Hz
。
2.1.3 编码与调制
数据不论是数字的还是模拟的,传输时都要转换成信号。
调制:把数据变换为模拟信号的过程;
编码:把数据变换为数字信号的过程。
-
数字数据 编码为 数字信号:
常用的编码方式有:
(1)归零编码(RZ):码元之内高低电平全部归零
(2)非归零编码(NRZ):高电平为1,低电平为0
(3)反向非归零编码(NRZI):电平翻转为0,不翻转为1
(4)曼彻斯特编码(Manchester Encoding):前低后高为1,前高后低为0(或者反过来也行)
(5)差分曼彻斯特编码:同1异0 -
数字数据 调制为 模拟信号:
数字数据调制技术 在发送端将数字信号转换为模拟信号,而在接收端将模拟信号还原为数字信号,两个过程分别称为调制和解调,基本的调制方法有:
幅移键控(ASK):通过改变载波信号的振幅来表示数字信号1和0;
频移键控(FSK):通过改变载波信号的频率来表示数字信号1和0;
向移键控(PSK):通过改变载波信号的相位来表示数字信号1和0; -
模拟数据 编码为 数字信号:
这个编码方式最典型的例子是常用于对音频信号进行编码的脉码调制(PCM),主要步骤有:采样、量化、编码。
采样:将模拟信号转换成数字信号时,采样频率必须大于等于最大频率的两倍,才能保证采样后的数字信号完整保留原始模拟信号的信息,采样定理又称奈奎斯特定理;
量化:把采样取得的电平幅值按照一定的分级标度转换为对应的数字值并取整数;
编码:把量化的结果转换为与之对应的二进制编码。 -
模拟数据 转换为 模拟信号:调制
电话机和本地局交换机就是采用模拟信号传输模拟数据的编码方式。
2.1.4 电路交换、报文交换、分组交换
1.电路交换
进行数据传输前,两个节点之间必须先建立一条专用的物理通信路径,这一路径在数据传输期间一直被占,直到通信结束后才被释放。—类似于两个人打电话,就算不讲话,只要没挂断,这条通信路径就一直被占用。
电路交换技术的三个阶段:连接建立、数据传输、连接释放。
电路交换技术特点:
- 优点:没有冲突、实时性强;
- 缺点:线路使用效率低
2.报文交换
报文携带目标地址、源地址等信息。
传输方式:报文交换在交换节点采用的是存储转发的传输方式
报文交换技术的特点:
- 优点:无需建立连接、动态分析路径、线路利用率高;
- 缺点:由于报文交换对报文的的大小没有限制,所以就要求网络节点需要有较大的缓存空间。
3.分组交换
传输方式:也采用的是存储转发的传输方式,但解决了报文交换中大报文传输的问题:
分组交换限制了每次传送的数据块大小的上限,把大的数据化划分为合理的小数据块,再加上一些必要的控制信息(源地址、目的地址、编号信息等),构成分组(Packet)
。网络结点根据控制信息把分组送到下一个结点,下一个结点接收到分组后,暂存并排队等待传输,然后根据分组控制信息选择下一个结点,直到到达目的节点。
分组交换的特点:
- 优点:无建立时延;线路利用率高;降低了对网络结点的缓存空间的要求(相对于报文交换);
- 缺点:需要传输额外的信息量(每个小数据块都要加上源地址、目的地址、编号信息等信息,从而构成分组,这使得传送的信息量增大了5%-10%,一定程度上降低了通信效率);可能会出现乱序、丢失、重复的问题((使用
虚电路服务
可以解决乱序问题))。
2.1.5 数据报与虚电路
数据报与虚电路是分组交换的两种方式。
数据报就是分组交换的普通方式:把大的数据化划分为合理的小数据块,再加上一些必要的控制信息(源地址、目的地址、编号信息等),构成分组(Packet)
。网络结点根据控制信息把分组送到下一个结点,下一个结点接收到分组后,暂存并排队等待传输,然后根据分组控制信息选择下一个结点,直到到达目的节点。
特点:不需要建立连接;对故障的适应能力强;分组有可能乱序、丢失、重复。
虚电路方式是把数据包方式与电路交换方式结合起来:在分组发送之前,在发送方与接收方建立一条逻辑上相连的虚电路,连接一旦建立,就固定了虚电路所对应的物理路径。与电路交换类似,整个过程分为三个阶段:虚电路建立、数据传输、虚电路释放。
特点:虚电路的建立和拆除需要时间开销,对于长时间、频繁的数据交换效率较高;分组不会乱序;对故障的适应能力差,这是虚电路致命的弱点。
比较:
数据报 | 虚电路 | |
---|---|---|
连接的建立 | 不需要 | 必须有 |
目的地址 | 每个分组都有完整的目的地址 | 仅在建立连接阶段使用,之后每个分组使用长度较短的虚电路号 |
路由选择 | 每个分组独立地进行路由选择和转发 | 属于同一条虚电路的分组按照同一路由转发 |
分组顺序 | 不保证有序到达 | 保证有序到达 |
对网络故障的适应性 | 出故障的节点丢失分组,其他分组路径选择发生变化时可以正常传输 | 所有经过故障结点的虚电路均不能正常工作 |
2.2 传输介质(传输媒体)
传输介质(传输媒体):发送设备和接收设备之间的物理通路。
传输介质和物理层:
注意:传输介质不是物理层,一般把传输介质称为第0层,因为传输介质传的是信号,但不知道信号是什么意思;而物理层规定了电气特性,能够识别传送的比特流。
传输介质分为 导向性~ 和 非导向性~,
导向性~ :双绞线、同轴电缆、光纤;
非导向性~ :无线电波、微波、红外线、激光。
2.3 物理层设备
中继器
中继器:对信号进行再生和还原,对衰减的信号进行放大,保持与原数据相同,以增加信号传输的距离。
5-4-3规则:网段为5,中继器为4,其中只能有3个网段可以连电脑。
集线器(Hub—多端口中继器)
如果一台集线器连接的机器数目较多,且多台机器经常需要同时通信,那么将导致信息碰撞,使得集线器的工作效率很低。例如,一个带宽为10Mb/s的集线器上连接了8台计算机,当这8台计算机同时工作时,每台计算机真正所拥有的带宽为10/8 = 1.25Mb/s。
集线器不能分割冲突域,所有的集线器端口都属于同一个冲突域。
第三章 数据链路层
3.1 数链层的功能
1.为网络层提供服务
- 无确认的无连接服务
- 有确认的无连接服务
- 有确认的面向连接服务(有连接就一定要有确认,不存在无确认的)
2.帧定界 帧同步 透明传输
数链层将网络层的分组
封装成帧
,以帧
的格式进行传送。给一段数据的前后分别添加首部和尾部,就构成了帧,首部和尾部的主要作用就是确定帧的界限,即帧定界。
帧同步就是接收方应该要能从接收到的二进制比特流中区分出帧的起始和终止。
透明传输:不管传的数据是什么样的比特组合,都应当能够在链路上传送。
3.链路管理
4.流量控制
5.差错控制:位错和帧错,,分别采用循环冗余校验(CRC)方式和自动重传请求(ARQ,Automatic Repeat reQuest)方式来解决。
3.2 组帧(封装成帧)
发送方依据一定的规则把网络层递交的分组封装成帧,这个过程称为组帧。
组帧时既要加首部,又要加尾部。因为网络中信息是以帧为最终小单位进行传输的,所以接收端要正确的接收帧,必须要清楚该帧在一串比特流中从哪里开始到哪里结束(因为接收端收到的是一段比特流,没有首部和尾部是不能正确区分帧的)。
组帧(封装成帧/帧定界)的方式:
1.字符计数法:
在帧头部用一个计数字段来表明帧内字符数。致命缺点是:一处错,后面全错。
2.字符填充法:
使用特殊的字符来表示一帧的开始(SOH
)和结束(EOT
),如果在要传输的数据中也有SOH
和EOT
,那就给它们前面添加一个特殊的字符ESC
,如果传输的内容中也有ESC
,那就在ESC
前面也加个ESC
,最后再接收方把所有的ESC删掉,后面几跟着的就是真正要传输的内容。
3.零比特填充法:
发送时头文填充01111110
,要传输的内容中遇到5个连续的1就在其后插入一个0,接收时去掉头尾的01111110
,然后遇到连续的5个1就把后面的1个0删除。(5个1后面加1个0)
4.违规编码法:
物理层进行比特编码时,通常采用违规编码法。例如,曼彻斯特编码方法将比特1编码为“左高右低”,将比特0编码为“左低右高”,而“左高右高”和“左低右低”对于曼彻斯特编码方法来说就是为违规的,所以就用这些违规编码序列来表示帧的起始和终止。
综上,目前较常用的组帧方法是比特填充法和违规编码法。
3.3 差错控制
差错控制包括
- 检错编码:只能检查出是否有错,奇偶校验码、循环冗余码CRC;
- 纠错编码:除了检查错误还能纠错,海明码。
循环冗余码CRC
在要发送的数据后面添加帧校验序列FCS,也叫冗余码。
计算冗余码:
3.4 流量控制
本节将介绍的三种协议都属于自动重传请求(ARQ,Automatic Repeat reQuest),是通过接收方请求发送方重传出错的数据帧来恢复出错的帧。这三种协议分别是:停止-等待协议(Stop-and-Wait)ARQ、后退N帧协议(GBN)ARQ、选择重传协议(SR)ARQ,后两种协议是请求重发技术与滑动窗口技术的结合。
流量控制的基本方法是由接收方控制发送方发送数据的速率,常见的方式有两种:停止-等待协议 和 滑动窗口协议。
流量控制的方法 | 发送窗口大小 | 接收窗口大小 |
---|---|---|
停止-等待协议 | =1 | =1 |
滑动窗口协议之后退N帧协议(GBN) | 1 ≤ WT ≤ 2的n次方-1 | =1 |
滑动窗口协议之选择重传协议(SR) | 1 ≤ WT ≤ 2的(n-1)次方 | 1 ≤ WT ≤ 2的(n-1)次方 |
请注意:这里的窗口大小在传输过程中是固定不变的,和传输层的滑动窗口协议还不太一样。(5.3.5 传输层的流量控制 和 数链层的流量控制也有提及)
停止-等待协议(Stop-and-Wait):
发送一帧(0号帧),等待接收方的应答信号(ACK0),之后才发送下一帧。
特点:传输效率很低;如果没收到ACK信号,就会一直等,如果某一帧数据在传输过程中丢失,那发送方也一直等。
此协议的确认帧不需要序号,因为是一发一收。
后退N帧协议(GBN):
发送方:
- 可发送最多
2的n次方-1
个帧,然后等待接收接收方发来的ACKn
确认帧; - 这里采用累积确认的方式,表明接收方已正确收到n号帧和它之前的全部帧;
- 如果等了一个时钟的时长未收到N号确认帧,那么就判定该帧出错或者丢失,就重新发送N号帧极其后面所有帧,即批量重传。
总结:发送方要干的事就是批量发送;等待确认帧(累积确认);超时批量重传。
接收方:按序接收,不按序的帧都丢弃,发送ACK确认帧,接收方无需缓存任何失序帧,只需维护一个信息:expected seq num
。
后退N帧协议的特点:
- 相比于停止-等待协议提高了信道利用率;
- 但由于是批量重传,所以传送效率不是特别高。
选择重传协议(SR):
选择重传协议对后退N帧协议进行了改进,不再是批量重传,而是选择重传,先把收到的正确的帧缓存下来(缓存失序帧),等它前面的帧收到了再从缓存器中取出来。
信道利用率 和 信道吞吐率
(笔记本的3.4.2后面 书中是在3.4.4后面)
信道利用率,也叫信道效率,是对发送方而言的,是指发送方在一个发送周期内,有效发送数据所需要的时间
占整个发送周期
的比率。
一个发送周期:发送方从开始发送数据到收到第一个确认帧为止,假设用T
表示,再假设在整个T
内发送内共发送了L
比特的数据,发送方的数据传输率为C
,那么发送方用于发送有效数据的时间为L/C
,则信道的利用率为U = (L/C) / T
。
信道吞吐率 = 信道利用率 * 发送方的发送速率。
3.5 介质访问控制
介质访问控制:采取一定的措施,使得两对节点之间的通信不会发生互相干扰的情况。
介质访问控制分为以下两种方式:
- 静态划分信道(3.5.1):频分多路复用;时分多路复用;波分多路复用;码分多路复用。
- 动态分配信道:轮询访问介质访问控制(3.5.3);随机访问介质访问控制(3.5.2)。
3.5.1 信道划分介质访问控制
多路复用技术:把多个信号组合在一条物理信道上进行传输,即1条物理链路,划分为N个信道,这样就可以同时传多路信号,共享信道资源,提供信道利用率。
- 频分多路复用(FDM):频分复用的所有用户在同样的时间占用不同的频率带宽资源,并在通信过程中自始至终都占用这个频带;
- 时分多路复用(TDM):时分复用的所有用户在每个TDM帧中占用固定序号的时隙,所有用户轮流占用信道;
改进:统计时分多路复用(STDM,也叫异步时分多路复用),它采用STDM帧,STDM帧并不固定分配时隙,而是按需动态地分配时隙,一个STDM帧满了就发出。 - 波分多路复用(WDM):光的频分多路复用,不同用户使用不同波长的光信号,在同一信道中互不干扰。
- 码分多路复用(CDM):码分多址(CDMA),和后面的CSMA区分开。
3.5.2 随机访问介质访问控制
在随机访问协议中,不采用集中控制方式解决发送信息的次序问题,所有用户能根据自己的意愿随机地发送信息,占用信道全部速率。为了解决随即介入发生的碰撞,每个用户需要按照一定的规则反复地重传它的帧,直到该帧无碰撞地通过。这些规则就是随机访问介质访问控制协议,常用的协议有ALOHA
协议、CSMA
协议、CSMA/CD
协议和CSMA/CA
协议等,又称为争用型协议。
ALOHA协议
纯ALOHA协议:不监听信道,不按时间槽发送,随机时长后重发;
时隙ALOHA协议:不在随机发送,而是按照固定时间发送。
CSMA协议
CSMA,Carrier Sense Multiple Access,载波监听多路访问;
CS:载波监听,每个站发送数据前,检测一下总线上是否有其他计算机在发数据;
MA:多点接入,多个计算机接在一根总线上。
监听结果:
- 信道空闲:多久之后发送数据;
- 信道忙:多久之后重发?
1-坚持CSMA
非坚持CSMA
p-坚持CSMA
综合比较 | 1-坚持CSMA | 非坚持CSMA | p-坚持CSMA |
---|---|---|---|
信道空闲 | 马上发 | 马上发 | p概率马上发; 1-p概率到下一个时间槽再发 |
信道忙 | 继续监听 | 随机时间后再监听 | 随机时间后再监听 |
举例:买奶茶 | 很想喝,排到我我就买,没到我就排队 | 不急喝,到我我就买,没到就一会再来 | 任性,到我了我看心情要不要买(概率P),没到我就一会再来 |
CSMA/CD协议
CSMA/CD,Carrier Sense Multiple Access / collision detection,载波监听多点接入/碰撞检测
CS:载波监听,每个站发送数据前,检测一下总线上是否有其他计算机在发数据;
MA:多点接入,多个计算机接在一根总线上;
CD:碰撞检测(冲突检测),“边发送,边监听”,确保只有一方在发,避免冲突。
问:为什么已经是先听后发,还是无法避免冲突?
答:因为电磁波的传播速度有限。
传播时延对载波监听的影响:
假设单程端到端的传播时延是τ
,总线端到端往返传播时延为2 * τ
,即站A在发送帧后,最多需要经过2 * τ
就能知道所发送的帧是否发生碰撞,因此2 * τ
被称为争用期(或者冲突窗口、碰撞窗口)。
那么发生碰撞后需要多久再重传?
CSMA/CD采用二进制指数退避算法来解决碰撞问题:发生碰撞后,经过2 * τ * r
之后再进行重传,其中
2 * τ
为争用期,r
为离散整数集合[0,1,...,2的k次方-1]
中的一个随机数,- 其中
k
为重传次数,(当k≤10时,k就等于k;当k>10,k就等于10), - 当
k=16
时还没有成功发送,就说明网络太拥挤,认为此帧永远无法正确发出。
最小帧长问题:
帧的传输时延 至少要 两倍于 信号在总线中的传播时延,即≥ 2 * τ
;
帧的传输时延 = 帧长 / 数据传输速率 ;
故最小帧长
= 总线传播时延 * 2 * 数据传输速率
= 2 * τ * 数据传输速率
以太网规定最短帧长为64B
,故凡是长度小于64B的帧都是由于冲突而异常终止的无效帧。
为什么说如果有冲突,则冲突一定发生在冲突窗口内?而如果在冲突窗口内没有发生冲突,那么该帧就不会再发生冲突?
(P135 第10题)
答:因为以太网采用的介质访问控制方法是CSMA/CD,即结点发送数据时,先侦听信道有没有载波,如果有,表示信道忙,就继续侦听,知道检测到空闲为止;一个数据帧在从结点A向最远的结点传输过程中,如果有其他结点也正在发送数据,那么此时就会发生冲突,冲突后的信号需要经过冲突窗口(2 * τ
)时间后传回结点A,结点A会检测到冲突,所以说如果有冲突,就一定发生在冲突窗口内。如果在冲突窗口内没发生冲突,之后如果其他结点想发送数据,会监听到信道忙,就会先不发送,继续监听,从而不会发生冲突。
CSMA/CA协议
CA:collision avoidance 碰撞避免
- 预约信道:发送方告知其他站点自己要传多久的数据;
- 接收端收到数据是由CRC僬侥数据是否正确,正确则返回ACK确认帧;
- 发送方收到ACK帧之后就继续发,没收到就重传,直至规定的重传次数(16次)为止。
3.5.3 轮询访问介质访问控制:令牌传递协议
令牌传递协议:确保同一时刻只有一个结点独占信道,每个结点都可以在一定的时间内获得发送数据的权利,即可拥有一定的令牌持有时间,但不是无限制的持有。
因为只有一个令牌,所以不会发生冲突,只是会有维护令牌的开销。
3.6 局域网(LAN)
LAN,Local Area Network,是指在一个较小的地理范围内,将各种计算机、外部设备和数据库系统等通过双绞线、同轴电缆等连接介质互相连接起来,组成资源和信息共享的计算机互联网络。
决定局域网的因素:拓扑结构、传输介质、介质访问控制方式。
网络拓扑:
- 星形拓扑
- 总线形拓扑
- 环形拓扑
传输介质:
- 有线局域网:双绞线、同轴电缆、光纤
- 无线局域网:电磁波
介质访问控制方法:
CSMA/CD
:用于总线形局域网- 令牌总线:用于总线形局域网,轮流持有令牌
令牌环
:用于环形局域网,令牌环网CSMA/CA
:用于无线局域网
以太网:逻辑拓扑是总线形; 物理拓扑是星形,采用IEEE802.3
标准;
无线局域网(WLAN):采用IEEE802.11
标准;
令牌环网:物理拓扑是星形;逻辑拓扑是环形,采用IEEE802.5
标准。
数链层被分为逻辑链路子层和介质访问控制子层:
- 逻辑链路子层(LLC):为网络层服务
- 介质访问控制子层(MAC):紧挨物理层
3.6.2 以太网(Ethernet)
以太网,也叫IEEE802.3
局域网;
以太网提供无连接、不可靠的服务,即以太网尽最大努力交付数据;
拓扑结构:逻辑上总线形;物理上星形;
介质访问控制方法:CSMA/CD
;
传输介质:粗同轴电缆、系统之电缆、双绞线、光纤。
网卡:(数链层+物理层)
每块网卡在出厂时都有一个唯一的代码,称为介质访问控制地址(MAC地址),这个地址用于控制主机和网络上的数据通信。
MAC地址用6个十六进制数表示,共6*2*4 = 48
位。
数链层设备(网桥、交换机等)都是用各个网卡的MAC地址;
网卡控制着主机对介质的访问,因此网卡也工作在物理层。
以太网MAC帧:
以太网的最短帧长为64B,其中目的地址、源地址各占6B,类型占2字节,最后的校验码(FCS)占4B,所以MAC帧中的数据长度最少是64-6-6-2-4=46B,这个数据是来自网络层的IP数据报
,规定这个数据的范围是46B~1500B
,所以最长帧长是1500+6+6+2+4=1518B
。
(书中的P108有MAC帧格式的图)
3.6.3 无线局域网(WLAN)
无线局域网使用IEEE802.11
标准。
介质访问控制方法:CSMA/CA
;
3.7 广域网
局域网使用的协议主要在数据链路层,还有少量在物理层;
广域网使用的协议主要在网络层。
广域网中的一个重要问题是路由选择和分组转发:
- 路由选择协议负责搜索分组从某个结点到目的结点的最佳传输路由,以便构造路由表;
- 然后从路由表再构造出转发分组的转发表;
- 分组是通过转发表进行转发。
PPP协议
和 HDLC协议
目前最常使用的两种广域网数据链路层控制协议:PPP协议
和 HDLC协议
。
书中P118的3.7.2 和3.7.3 有详细讲解,P134中的第6题、第12题也有提到这两种协议。
- PPP协议:面向字节,采用字节填充方式,只支持全双工链路;
- HDLC协议:面向比特,采用0比特插入法,帧类分为信息帧、监督帧和无编号帧。
3.8 数据链路层设备
3.8.1 网桥 网段
多个以太网通过网桥
连接后,就成为一个覆盖范围更大的以太网,原来的每个以太网就成为一个网段
。
网桥也叫桥接器。
网桥工作在链路层的MAC子层,使得以太网各个网段成为隔离开的碰撞域(冲突域)。
注意:网桥处理数据的对象是帧,所以网桥是数链层的设备;
而中继器、放大器、集线器处理数据的对象是信号,所以它是工作在物理层的设备。
网桥的工作原理:
根据MAC帧的目的地址对帧进行转发和过滤,而不是向所有接口转发此帧。
透明网桥(选择的不是最佳路由)
“透明”是指以太网上的站点并不知道所发送的帧将经过哪几个网桥,是一种即插即用设备,拥有自学习算法
。
由自学习算法得到的路由并不是最佳路由。
问:假设连接到透明网桥上的一台计算机把一个数据帧发送给网络上一个不存在的设备,网桥会如何处理这个帧?
答:网桥不知道网络上是否存在该设备,它只知道在其转发表中没有这个设备的MAC地址。因此,当网桥收到这个目的地址未知的帧时,它将扩散该帧,即把该帧发送到所连接的除输入网段外的所有其他网段。
源路由网桥(选择的是最佳路由)
在发送帧时,把详细的最佳路由信息放在帧的首部。
问:那么怎么找最佳路由呢?
答:源站以广播方式向目的站发送一个发现帧(Discovery Frame),途中的每个网桥都转发此帧,最终发现帧可能从多个途径到达目的站,目的站也将一一发送给应答帧,每个应答帧原路返回,把途径的网桥信息都记录在应答帧中,最终由源站选择出一个最佳路由。
最佳路由就一定是最少路由吗?
透明网桥和源路由网桥中提到的最佳路由并不一定就是经过路由器最少的路由,而是发送帧往返时间最短的路由,这样才能真正地进行负载平衡,因为往返时间长说明中间某个路由器可能超载了,所以不走这条路,换个往返时间短的路走。
3.8.2 局域网交换机☆
网桥的主要限制是在任一时刻通常只能执行一个帧的转发操作,于是出现了局域网交换机,也叫以太网交换机。
从本质上说,以太网交换机是一个多端口网桥,它也工作在数据链路层。
原理:
交换机检测从以太端口来的数据帧的源和目的地的MAC地址,然后与系统内部的动态查找表进行比较,若数据帧的MAC地址不在查找表中,则将该地址加入查找表,并将数据帧发送给相应的目的端口。
特点:
- 以太网交换机的端口一般直接与局域网的单台主机相连(普通网桥的端口一般连接到以太网的一个网段),并且一般都工作在全双工方式;
- 以太网交换机也是一种即插即用设备,和透明网桥一样,其内部的真的转发表也是通过
自学习算法
自动地逐渐建立起来的; - 以太网交换机采用了专用的交换结构芯片,转发速度比网桥快;
- 以太网交换机一般都具有多种速率的端口,例如可以具有10Mb/s、100Mb/s和1Gb/s的端口的各种组合,因此大大方便了各种不同情况的用户。
交换机分类:直通式交换机、存储转发式交换机
- 直通式交换机只检查帧的目的地址,这使得帧在接收后几乎能马上被传出去;这种方式速度快,但缺乏智能性和安全性,也无法支持具有不同速率的端口的交换;
- 存储转发式交换机先将接收到的帧缓存到高速缓存其中,并检查数据是否正确,确认无误后检查查找表转换成输出端口将该帧发送出去;如果发现帧有错,那么就将其丢弃。存储转发式的优点是可靠性高,并且支持不同速率端口间的转换,缺点是延迟较大。
虚拟局域网(VLAN)
利用以太网交换机可以方便的实现虚拟局域网(Virtual LAN),VLAN不仅可以隔离冲突域,还可以隔离广播域。
关于冲突域(碰撞域)和广播域☆
一块网卡发送消息时,只要有可能和另一块网卡冲突,那么这些可能冲突的网卡就构成冲突域;
一块网卡发出一个广播时,能收到这个广播的所有网卡的集合成为一个广播域;
一般来说,一个网段就是一个冲突域,一个局域网就是一个广播域。
设备名称 | 能否隔离冲突域 | 能否隔离广播域 |
---|---|---|
中继器、集线器 | 不能 | 不能 |
网桥、交换机 | 能 | 不能 |
利用交换机实现的虚拟局域网(VLAN) | 能 | 能 |
路由器 | 能 | 能 |
共享式局域网 和 交换式局域网
传统共享式局域网的核心设备是集线器,而交换式局域网的核心是以太网交换机。
在传统局域网中,任何时刻只能有一个结点能通过共享通信信道发送数据;
而在交换式局域网中,交换机可以在它的多个端口之间建立多个并发连接,从而实现结点之间数据的并发传输,有效地改善网络性能和服务质量。
3.8.3 网桥/交换机 和 中继器/集线器 的比较
中继器:
- 工作在物理层;
集线器(Hub):
- 也工作在物理层,相当于一个多接口的中继器,任何时刻只能有一个结点通过公共信道发送数据;
网桥:
- 工作在数据链路层,可以互联
不同的物理层、不同的MAC子层及不同速率的
以太网;
网桥具有过滤帧及存储转发帧的功能,可以隔离冲突域,不能隔离广播域;
交换机:
- 也工作在数据链路层,相当于一个多端口的网桥;
交换机一般工作在全双工方式,可以隔离冲突域,不能隔离广播域;
利用交换机可以实现虚拟局域网(VLAN),VLAN不仅可以隔离冲突域,还可以隔离广播域。
交换机和网桥的不同之处:
- 网桥的端口一般连接局域网的一个网段,而交换机的端口一般直接与局域网的单台主机相连;
- 交换机允许多对计算机同时通信,而网桥即允许每个网段上的计算机同时通信;
- 网桥采用存储转发进行转发,而以太网交换机还可以采用直通方式进行转发,且以太网交换机采用了专用的交换结构芯片,转发速度比网桥快。
第四章 网络层
4.1 网络层的功能
异构网络互联:
所谓网络互联,就是将两个以上的计算机网络通过一定的方法,用一种或多种通信处理设备(即中间设备)相互连接起来,以构成更大的网络系统。
中间设备/中继系统/中间系统
中间设备又称中间系统或者中继系统,根据所在的层次,中继系统分为以下4种:
- 物理层中继系统:中继器、集线器(Hub);
- 数链层中继系统:网桥或交换机;
- 网络层中继系统:路由器
- 网络层以上的中继系统:网关
手机、电脑、校园网等。
路由选择与分组转发:
路由器主要完成两个功能:路由选择、分组转发。
- 路由选择:根据路由选择算法构造出路由表,同时经常或者定期和相邻路由器交换路由信息而不断更新和维护路由表,从而动态地改变所选择的路由;
- 分组转发:根据路由表得到转发表,路由器根据转发表将用户的IP数据报从合适的端口转发出去。
路由选择算法 --> 路由表 --> 转发表
拥塞控制:
拥塞:在通信子网中,因出现过量的分组而引起网络性能下降的现象。
4.2 路由算法
自治系统AS(Autonomous System):系统内外使用各自的协议,相互之间不知道。
路由选择协议:
- 内部网关协议IGP(Interior Gateway Protocol):一个AS内使用,典型协议有
RIP协议、OSPF协议
; - 外部网关协议EGP(External Gateway Protocol):AS之间使用,典型协议有
BGP-4协议
。
路由算法分为两大类:
- 静态路由算法:又称非自适应路由算法,有网络管理员手工配置路由信息,适合小型网络。
- 动态路由算法:又称自适应路由算法;
常用的动态路由算法也可分为两类:距离-向量路由算法 和 链路状态路由算法。
4.2.2 距离-向量路由算法(RIP协议)
先解释距离是什么?
距离:即跳数,指经过路由器的个数,与路由器直连的距离为1,即最小距离/跳数为1,最大距离为16,距离为16表示网络不可达,因此RIP协议适用于小型互联网。
原理:
- 和谁交换信息:仅和自己相邻路由器交换信息;
- 交换什么信息:交换的信息是自己的路由表;
- 多久交换一次信息:每30秒交换一次路由信息;
- 超过180秒未收到相邻路由器的通告,则判定邻居没了,把距离改为16;
多次更新后,每个路由器都会知道到达本**自治系统(AS)**中任何一个网络(目的网络)的最短距离和下一跳路由器的地址,即“收敛”。
距离向量算法的实践:
结果:
4.2.3 链路状态路由算法(OSPF协议)
原理:
- 和谁交换信息:使用洪泛法向自治系统内所有路由器发送消息,最终区域内所有路由器都收到信息;(洪泛法类似于广播)
- 交换什么信息:交换的信息是与本路由器相邻的所有路由器的链路状态;
- 多久更新一次信息:只有当链路状态发生变化时,路由器才向所有路由器以洪泛的方式发送信息;
- 每隔
30min
刷新一次链路状态
最后所有的路由器都能建立一个链路状态数据库,即每个路由器都知道全网的拓扑信息。
4.5.5 边界网关协议(BGP)
边界网关协议(Border Gateway Protocol)是不同自治系统的路由器之间交换路由信息的协议,是一种外部网关协议(EGP)。
边界网关协议只能力求寻找一条能够到达目的网络的且比较好的路由,而非寻找一条最佳路由。
BGP采用的是路径向量路由选择协议,它与RIP和OSPF还不一样。
BGP是应用层协议,它是基于TCP的。
三种路由协议的比较
协议 | RIP | OSPF | BGP |
---|---|---|---|
类型 | 内部网关协议 | 内部网关协议 | 外部网关协议 |
路由算法 | 距离-向量算法 | 链路状态算法 | 路径-向量算法 |
传递协议 | UDP | IP | TCP |
路径选择 | 跳数最少 | 代价最低 | 较好的路由,非最佳路由 |
交换节点 | 和本结点相邻的路由器交换 | 网络中的所有路由器 | 和本结点相邻的路由器交换 |
交换内容 | 当前本路由器知道的全部信息,即自己的路由表 | 与本路由器相邻的所有路由器的链路状态 | 首次是交换整个路由表;非首次交换有变化的部分 |
哪一层的协议 | 应用层 |
4.3 IPv4 ☆☆☆
4.3.1 IPv4分组
IPv4即现在普遍使用的IP(版本4)。
一个IP分组由两部分组成:首部 和 数据。
IP首部又由固定部分和可变部分组成,其中固定部分是20B,可变部分最多40B(是一些可选字段),因此IP首部最多60B;(下面会解释为什么首部最多是60B)
IP首部中固定部分的这20B中包含很多重要信息,下面详细介绍:
- 版本:占4位,指IP的版本,这里是4,表示IPv4
- 首部长度:占4位,能表示0~15,
单位是4B
,所以最大值是60B = 15 * 4B。
最常用的首部长度是20B,即可变部分是0B - 总长度:占16位,指 首部+数据 的长度之和,
单位是1B
,又因为占16位,所以数据报的最大长度为(2的16次方-1),即65535B。但是以太网帧的最大传送单元(MTU)为1500B,即以太网规定IP分组的最大长度为1500。 - 标识:占16位,如果一个数据报的长度超过网络的MTU,就必须分片,然后给每个分片写上相同的标识(比如说777),以便最后能正确重装原来的数据报,(最后在接收端把所有标识为777的分片组合到一起,就是完整的数据报)
- 标志:占3位,只有后面2位有意义,第2位是DF(Don’t Fragment),第3位是MF(More Fragment):
当DF=0时才允许分片;当DF=1时不允许分片(使用TCP协议时DF位就是1,因为TCP在传输层分段,避免了在网络层分片—见下面5.4 的1.MSS设置的太大或太小会有什么影响?);
当MF=1时标识后面还有分片,当MF=0时表示最后一个分片。 - 片偏移:占13位,
单位是8B
,它表示当一个数据报分片后,某个分片在原分组中的相对位置,每个分片的长度一定是8B的整数倍; - 首部校验和:占16位,IP数据报的首部校验和只校验分组的首部,不校验数据部分。
- 生存时间(TTL):占8位。数据报在网络中可通过的路由器数的最大值,标识分组在网络中的寿命,以确保分组不会永远在网络中循环。路由器在转发分组前,先把TTL减1,当TTL被减为0时,该分组就会被丢弃。
- 协议:占8位,指出此分组携带的数据使用何种协议,即分组的数据部分应该交给哪个传输层协议,值为6表示TCP,值为17表示UDP。
- 源地址字段:占4B,标识发送方的IP地址;
- 目的地址字段:占4B,标识接收方的IP地址。
单位: 1总8片首4
IP数据报分片
分片:用到上面的 4.标识 5.标志 6.片偏移
最大传送单元(MTU):指一个链路层数据报能承受的(来自网络层的)最大数据量,或者说数据链路层允许的最大IP包长,以太网的MTU是1500B
。
当IP数据报的总长度大于链路的MTU时,就要分片。这些分片在接收方的网络层被重新组装。目的主机使用IP首部中的 4.标识 5.标志 6.片偏移来完成对分片的重组。
看个例子就明白了:
分析:
首先原始的IP数据报是4000B,大于链路的MTU,所以要分片,这4000B中有20B是首部,所以真正要分片的数据部分是3980B,那么每个分片最多能分到多少数据呢?
例子中说的MTU为1500B的链路,表示这条链路的SDU最大是1500B,即IP数据报分片的话每片最大是1500B,但又因为每个分片中都有20B的首部,所以每个分片能分到的数据部分最大是1480B(分片的长度必须是8B的整数倍,1480正好是8B的整数倍)。因此3980B的数据被分成了1480B+1480B+1020B。
综上:
1.三个分片的标识为777,也可以说888,总之三个分片的标识是一致的,以便后面重组;
2.三个分片的标志:DF都是0,表示可以分片;MF之后最后一个分片是0,第一、二个分片都是1;
3.三个分片的片偏移分别是:0;(1480/8 = )185;370;
至此,就完成了IP数据报的分片工作,发送方发到链路上,接收方再进行组装。
前三层的SDU + PCI = PDU
SDU + PCI = PDU
IP数据报的长度=首部+数据,这个数据应该是传输层的PDU;
整个IP数据报是网络层的PDU;
传到数链层时整个IP数据报是数链层的SDU;
然后再加上头部和尾部,就组成了MAC帧,也即数链层的PDU;
网络层转发分组的流程(书中P149)
- 从要发送的数据报的首部提取目的主机的IP地址D,得出目的网络地址N;
- 若网络N与此路由器直接相连,则把数据报直接交付给目的主机D,这称为路由器的
直接交付
;否则是间接交付,执行步骤3; - 若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则执行步骤4;
- 若路由表中有到达网络N的路由,则把数据报传送给路由表指明的下一跳路由器;否则执行步骤5;
- 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则执行步骤6;
- 报告转发分组出错。
注意:得到下一跳路由器的IP地址(相当于目的IP地址)之后并不是直接将该地址填入待发送的数据报,而是通过ARP协议
将该IP地址转化能MAC地址(目的MAC地址),将其放到MAC帧首部中,然后根据这个MAC地址找到下一跳路由器。
在不同的网络中传送时,MAC帧中的源地址和目的地址要发生变化;—两台主机不在同一个网络中,即要跨网络
但是网桥在转发帧时,不改变帧的源地址;—两台主机在同一个网络中,即不需要跨网络
补充:
- 直接交付:和同一个路由器相连的所有设备之间传数据就是直接交付,因为不需要通过路由器来跨网络;
- 间接交付:需要通过路由器来跨网络。
下面这些先不看:
以上的步骤是我们**只在网络层讨论**分组转发的原理,那么就可以屏蔽掉下层的具体实现细节,但下面要讲到ARP协议时,就不是只在网络层去讨论该问题了,而是要细究下面的数链层是怎么提供服务帮助网络层完成分组转发的操作。下面分3段先大概说一下底层原理,后面还会再细讲:
1.上述过程中
2.发送一个数据,就要找到目的主机:不论目的主机与源主机在不在一个网络,都是下面这样的一个过程。(下面的4.3.4 中还会再提到)
+ 要发送的数据报首部 中有 **目的IP地址**;
+ 通过 ARP协议 得到 **目的MAC地址**;
+ 通过 MAC地址 找到 **目的主机**;
3.总之就是主机A要给主机B发送**IP数据报**时,会在这个数据报的首部找到目的IP地址,然后转换成MAC地址,然后把这个IP数据报封装成帧(有了MAC地址才能封装成帧),然后把MAC帧发送到目的主机,目的主机再把这个MAC帧的头尾去掉,就得到了主机B想要收的**IP数据报**。
4.3.2 IPv4地址与NAT
IP地址:
- 概念:全世界唯一的32位标识符,(MAC地址是48位标识符,6个16进制数)
- 分类:分为A、B、C、D、E五类。
- 组成:由 网络号+主机号 组成。
分类的IP地址:
D类是多播地址。
特殊的IP地址:
主机号全0:表示网络本身,即一个网络;
主机号全1:表示本网络的广播地址,又称直接广播地址,对特定网络进行广播;
127.0.0.0:表示任意主机本身,用来环路自检;
0.0.0.0:表示本网上的本主机;(路由表中的默认路由?)
255.255.255.255:表示整个TCP/IP网络的广播地址,又称受限广播地址。实际使用时,因为路由器对广播域的隔离,此地址等效为本网络的广播地址。
常用的三类IP地址的适用范围:
A类网络 | B类网络 | C类网络 | |
---|---|---|---|
网络号位数 | 8位 | 16位 | 24位 |
主机号位数 | 24位 | 16位 | 8位 |
最大可用网络数 | 2的7次方-2 8-1=7; -2表示减去全0全1 | 2的14次方-1 16-2=14; -1表示减去全0 | 2的21次方-1 14-3=21; -1表示减去全0 |
第一个可用的网络号 | 1(8位) | 128.1(16位) | 192.0.1(24位) |
最后一个可用的网络号 | 126(8位) | 191.255(16位) | 223.255.255(24位) |
前8位 | 1-126 | 128-191 | 192-223 |
每个网络中的最大主机数 | 2的24次方-2 -2表示减去全0全1 | 2的16次方-2 -2表示减去全0全1 | 2的8次方-2 -2表示减去全0全1 |
网络地址转换(NAT):
网络地址转换是指通过将专用网络地址转换为公用地址,从而对外隐藏内部管理的IP地址。它使得整个专用网只需要一个全球IP地址就可以与因特网连通,所以NAT大大节省了IP地址的消耗。
私有IP:
私有IP地址只能用于LAN,并且允许私有IP地址被LAN重复使用,这有效地解决了IP地址不足的问题。
私有IP地址网段
如下:
- A类:1个A类网段,10.0.0.0 - 10.255.255.255
- B类:16个B类网段,172.16.0.0 - 172.31.255.255
- C类:256个C类网段,192.168.0.0 - 192.168.255.255
NAT工作原理:
使用NAT时需要在专用网连接因特网的路由器上安装NAT软件,NAT路由器至少有一个有效的外部全球地址。使用本地地址的主机和外界通信时,NAT路由器使用NAT转换表将本地地址转换成全球地址,或将全球地址转换成本地地址。NAT转换表中存放着{本地IP地址:端口}
到{全球IP地址:端口}
的映射,通过{IP地址:端口}
这样的映射方式,可让多个私有IP地址映射到同一个全球IP地址。
普通路由器 & NAT路由器
注意:普通的路由器进工作在网络层,而NAT路由器转发数据报时需要查看和转换传输层
的端口号。
4.3.3 子网划分与子网掩码、CIDR
子网划分 和 子网掩码
两级IP:网络号 + 主机号
三级IP:网络号 + 子网号 + 主机号
子网划分:是指从主机号借用若干比特作为子网号的做法。
问:那么怎么知道跟主机号借了几位呢?
答:使用子网掩码来表达对原网络中主机号的借位情况。
子网掩码的概念:
子网掩码是一个与IP地址相对应的、长32位的二进制串,它由一串1和一串0组成。其中,1
对应的是IP地址中的网络号+子网号;而0
对应主机号。
子网掩码的使用:
计算机只需将IP地址和其对应的子网掩码逐位进行“与”操作,就可得出相应子网的网络地址。
例如:
某主机IP地址为192.168.5.56,子网掩码为255.255.255.0,则该主机所在子网的网络号为192.168.5.0;
某主机IP地址为192.168.5.56,子网掩码为255.255.192.0,则该主机所在子网的网络号为192.168.0.0。
注意:同属于一个子网的所有主机及路由器的相应端口,必须设置相同的子网掩码。
默认子网掩码:
现在的因特网标准规定:所有的网络都必须使用子网掩码。如过一个网络未划分子网,那么就采用默认子网掩码。
- A类地址的默认子网掩码:255.0.0.0
- B类地址的默认子网掩码:255.255.0.0
- C类地址的默认子网掩码:255.255.255.0
无分类编址(CIDR)
无分类编址,也叫无分类域间路由选择,是在变长子网掩码的基础上提出的一种消除传统A、B、C类网络划分,并且可以在软件的支持下实现超网构造的一种IP地址的划分方法。
IP地址的无分类两级编址:IP地址 = 网络前缀 + 主机号;
CIDR还是用“斜线记法”(或者叫CIDR记法):IP地址/网络前缀所占比特数;例如:128.14.32.5/20,它的掩码是20个连续的1和12个连续的0。
CIDR地址块:网络前缀相同的所有IP地址。
地址块的表示:最小地址 + 网络前缀的位数
超网:
概念:将多个子网聚合成一个较大的子网,叫做构成超网或者路由聚合。
实现方法:将网络前缀缩短。
最长前缀匹配(最佳匹配):
使用CIDR时,查找路由表,可能得到几个匹配结果,应选择网络前缀最长的路由,因为网络前缀越长,主机号就越短,地址块也就越小,路由就越具体。
4.3.4 ARP协议、DHCP协议、ICMP协议
IP地址 与 硬件地址
IP地址是网络层使用的地址;IP地址封装在IP数据报的首部;
硬件地址(MAC地址)是数据链路层使用的地址;MAC地址放在MAC帧的首部;
通过数据封装,把IP数据报分组封装为MAC帧后,数链层看不见数据报分组中的IP地址。
由于路由器会隔离冲突域和广播域,因此IP网络中无法通过广播的方式用MAC地址来完成跨网络的寻址,所以只能通过IP地址来完成跨网络,经过多次路由转发到达目标网络后,在目标网络中通过MAC地址以广播的方式寻址找到目的主机。
虽然IP数据报首部中有源IP地址和目的IP地址,但路由器只根据目的IP地址的网络号进行路由选择;
在局域网的链路层,只能看见MAC帧。而通过路由器转发IP分组时,此IP分组在每个网络中都被路由器解封装和重新封装。因此IP数据报在被路由器转发时,其数据链路层封装所使用的MAC地址是不断变化的,这也决定了无法使用MAC地址跨网络通信。
下面这些先不看:
那么这两个地址具体是怎么用的呢?或者说是用来作什么?
答:**IP地址是用来跨网络用的,MAC地址是用来找目的主机的**。具体解释如下:即:
**IP地址是用来跨网络的,利用路由器经过多次路由转发找目的主机所在的`目的网络`;
找到目的网络之后,再用MAC地址来找到`目的主机`**。
ARP协议
地址解析协议(ARP,Address Resolution Protocol),用来实现IP地址到MAC地址的映射。每台主机都有一个ARP高速缓存
,用来存放本局域网上各主机和路由器的IP地址到MAC地址的映射表,成为ARP表。
工作原理:
主机A欲向本局域网上的某台主机B发送IP数据报,先在主机A的ARP高速缓存
中查看有无主机B的IP地址:
如果有,就可以查出对应的硬件地址,再将此硬件地址写入MAC帧,然后发送过去;
如果没有,就向局域网内的所有主机发送一个广播,内容是ARP请求分组
,主机B收到该ARP请求之后,会向主机A单播发送一个响应ARP分组
,内容包含主机B的IP地址和MAC地址的映射关系,主机A收到后将此映射写入ARP缓存,然后按查询到的硬件地址发送MAC帧;
下一次主机A再向主机B发送数据的时候就可以直接在ARP缓存中查找到主机B的地址。
总结:
1.ARP协议就是用来寻找某个主机IP地址对应的MAC地址,即是一个寻址的协议。
2.ARP用于解决同一个局域网上的主机或路由器的IP 地址和硬件地址的映射问题。如果所要找的主机和源主机不在同一个局域网上,那么就要通过 ARP找到一个位于本局域网上的某个路由器的硬件地址,然后把分组发送给这个路由器,让这个路由器把分组转发给下一个网络。剩下的工作就由 下一个网络来做,尽管 ARP 请求分组是广播发送的,但 ARP响应分组是普通的单播,即从一个源地址发送到一个目的地址。
ARP工作在网络层;
普通路由器工作在网络层;
NAT路由器工作在传输层;
ARP的4种典型情况:
发送方 | 接收方 | 如何找到目的主机的硬件地址(MAC地址) |
---|---|---|
主机 | 本网络上的另一台主机 | 用ARP找到目的主机的MAC地址 |
主机 | 另一个网络上的一台主机 | 用ARP找到本网络上的一个路由器的MAC地址(默认网关), 剩余的工作由这个路由器完成 |
路由器 | 本网络上的另一台主机 | 用ARP找到目的主机的MAC地址 |
路由器 | 另一个网络上的一台主机 | 用ARP找到本网络上的另一个路由器的MAC地址, 剩余的工作由找到的这个路由器完成 |
看一个例子,现在主机1发一个IP数据报给主机5,需要三次ARP协议来得到目的MAC地址,即MAC5。
先是MAC1–>MAC6;然后是MAC7–>MAC8;最后是MAC9–>MAC5。
这个过程中,源IP地址(IP1)和目的IP地址(IP5)一直没变,这里就体现出IP地址是用来跨网络用的,因为路由器是通过查找路由表,才知道目的IP地址要一直往右找,即目的网络在右边,最后找到目的网络,然后在目的网络中找到目的主机的MAC地址,这样就得到了目的主机IP地址和MAC地址的映射。一共用了三次ARP。
总结:
主机A要给主机B发送**IP数据报**时,会在这个数据报的首部找到**目的IP地址**,然后经过一次(同一网络内)或者多次ARP(需要跨网络寻址),得到**目的主机的MAC地址**,然后把这个IP数据报**封装成帧**(`有了MAC地址才能封装成帧`),然后把MAC帧发送到目的主机,目的主机再把这个MAC帧的头尾去掉,就得到了主机B想要收的**IP数据报**。
动态主机配置协议(DHCP)
DHCP,Dynamic Host Configuration Protocol,常用于给主机动态地分配IP地址,它提供了即插即用联网的机制,这种机制允许一台计算机加入新的网络和获取IP地址而不用手工参与。
DHCP是应用层协议,它是基于UDP的。
工作原理:
使用客户/服务器方式,需要IP地址的主机在启动时就向DHCP服务器广播发送发现报文,这是该主机就称为DHCP客户。本地网络上所有主机都能收到此广播报文,但只有DHCP服务器才回答此广播报文。DHCP服务器先在其数据库中查找该计算机的配置信息,若找到,则返回找到的信息;若找不到,则从服务器的IP地址池
中取一个地址分配给该计算机。DHCP服务器的回答报文称为提供报文。
网际控制报文协议(ICMP)
概念:
为了提高IP数据报交付成功的机会,在网络层使用了网际控制报文协议(Internet Control Message Protocol,ICMP),让主机或路由器报告差错和异常情况。
组成:
ICMP报文作为IP数据报的数据,加上IP数据报的首部,组成IP数据报发送出去。
ICMP是IP层协议。
分类:
ICMP报文的种类有两种,即ICMP差错报告报文和ICMP询问报文。
1.ICMP差错报告报文:
用于(目标主机或到目标主机路径上的路由器)向源主机报告差错和异常情况,一共有以下5种情况:
- 终点不可达:路由器或主机不能交付数据报
- 源点抑制:路由器或主机由于拥塞而丢弃数据报时,高速源主机把数据报的发送速率放慢
- 时间超过:TTL为0
- 参数问题:路由器或主机收到的数据报的首部中有的字段值有问题
- 改变路由:路由器把改变路由报文发送给源主机,让主机知道下次应该把数据报发给别的路由器(更好的路由)
不应发送ICMP差错报告报文的几种情况:
- 对ICMP差错报告报文自身不应再发ICMP差错报告报文;
- 对第一个分片的数据报片的所有后续数据报片都不发送ICMP差错报告报文;
- 对具有组播地址的数据报都不发送ICMP差错报告报文;
- 对具有**特殊地址(127.0.0.0 或 0.0.0.0)**的数据报不发送ICMP差错报告报文。
2.ICMP询问报文:
有4种类型:
回送请求和回答报文、时间戳请求和回答报文、掩码地址请求和回答报文、路由器询问和通告报文。前两中最常用。
应用:
1.分组网间探测PING:用来测试两台主机之间的连通性,使用了ICMP回送求情和回答报文;
2.Traceroute(UNIX中的名字,在Windows中是Tracert):用来跟踪分组经过的路由,使用了ICMP时间超过报文。
注意:
PING工作在应用层,它直接使用网络层的ICMP,而未使用传输层的TCP或UDP;Traceroute/Tracert工作在网络层。
4.4 IPv6
解决IP地址耗尽问题的措施有三种:
- 采用无类别编址/无分类编制(CIDR),是IP地址的分配更加合理;
- 采用网络地址转换(NAT)方法以节省全球IP地址;
- 采用具有更大地址空间的新版本的IPv6。—从根本上解决了IP地址的耗尽问题
IPv6把地址中的每4位用一个十六进制数表示,并用冒号分隔每16位,如4BF5:AA12:0216:FEBC:BA5F:039A:BE9A:2170
。
通常可以把IPv6写成更紧凑的形式,当16位域的开头有一些0时,可以采用一种缩写表示法,但在域中必须至少有一个数字。例如,4BF5:0000:0000:0000:BA5F:039A:000A:2176
可以缩写成4BF5:0:0:0:BA5F:39A:A:2176
。
当有相继的0值域时,还可以进一步缩写。这些域可以用双冒号(::
)缩写,但是双冒号表示法在一个地之中只能出现一次,上述地址还可以写成:4BF5::BA5F:39A:A:2176
IPv4向IPv6过渡有两种方法:
- 双协议栈:指在一台设备上同时装有IPv4和IPv6协议栈;
- 隧道技术:将整个IPv6数据报封装到IPv4数据报的数据部分,使得IPv6数据报可以在IP网络的隧道中传输。
比较IPv4和IPv6:
比较项目 | IPv4 | IPv6 |
---|---|---|
地址长度 | 32位 = 4B | 128位 = 16B |
组成 | 首部(4B的整数倍) + 数据 | 首部(8B的整数倍)= 基本首部(40B) + 有效载荷(扩展首部/数据) |
是否可以分片 | 可在路由器和主机处分片 | 只能在主机处分片 |
表示 | 点分十进制 | 冒号十六进制 |
IP地址的获取 | 通过DHCP协议来获取 | 自动配置 |
4.6 IP组播
IP数据报的三种传播方式:
- 单播:点对点传输;
- 广播:点对多点传输;
- 组播:组播数据发送者仅发送一次数据,被传播的数据到达距离用户端尽可能近的结点才复制分发。
人们需要一种组播机制:让源计算机一次发送的单个分组可以抵达用一个组地址标识的若干目的主机,并被它们正确接收。
使用组播的缘由是,有的应用程序要把一个分组发送给多个目的主机,不是让源主机给每个目的主机都发送一个单独的分组,而是让源主机把单个分组发送给一个组播地址,该组播地址标识了一组地址,网络把这个分组的副本投递给该组中的每台主机。
单播和组播的示意图:
作用:
组播提高了数据传送效率,减少了主干网出现拥塞的可能性。
对于发送者而言,数据只需发送一次就可发送到所有接收者,大大减轻了网络的负载和发送者的负担。
IP组播地址
IP组播使用D类地址格式,地址范围是224.0.0.1 - 239.255.255.255。
每个D类IP地址可以标识一个组播组。
IGMP协议 与 组播路由算法
要使路由器知道组播组成员的信息,需要利用因特网组管理协议IGMP(Internet Group Management Protocol)。IGMP协议让路由器知道本局域网上是否由主机参加或退出了某个组播组。
组播路由选择协议是为了找出以源主机为根结点的组播转发数,构造树可以避免在路由器之间兜圈子。
4.7 移动IP
移动IP技术是指移动节点以固定的网络IP地址实现跨越不同网段的漫游功能,并保证基于网络IP的网络权限在漫游过程中不发生任何改变。
移动结点:移动设备;
归属代理/本地代理:在归属网络中代表移动结点
外部代理/外地代理:在外部网络中代表移动结点
永久地址/主地址/归属地址:移动结点在归属网络(本地)中的原始地址;
本地代理和外地代理统称为移动代理。
移动IP通信过程:((可以再看下视频)
移动IP 和 动态IP 的区别
二者是完全不同的概念:
- 动态IP指的是局域网中的计算机可以通过网络中的DHCP服务器动态地获得一个IP地址,而不需要用户在计算机的网络设置中指定IP地址。
- 移动IP技术是指移动节点以固定的网络IP地址实现跨越不同网段的漫游功能。
4.8 网络层设备
4.8.1 路由器的组成和功能
路由器的功能:分组转发、路由选择;
- 路由选择:根据路由选择算法构造出路由表,同时经常或者定期和相邻路由器交换路由信息而不断更新和维护路由表,从而动态地改变所选择的路由;
- 分组转发:根据路由表得到转发表,路由器根据转发表将用户的IP数据报从合适的端口转发出去。
路由选择算法 --> 路由表 --> 转发表
4.9 本章小结及疑难点
1.“尽最大努力交付”的意思是什么?
- 不保证一定无差错交付;
- 不保证一定按时交付;
- 不保证一定按顺序交付;
- 不保证一定不会重复交付;
- 不会故意丢弃IP数据报,除非是路由器检测出首部校验和有错误,或者由于网络中通信量过大,被迫丢弃。
2.可以用交换机来替代路由器吗?
二者功能不同:
路由器可以连接两个或多个同构的或异构的网络,在网络之间转发IP数据报;
而交换机不能连接两个异构的网络,所以不能用交换机来替代路由器。
3.链路层广播和IP广播有何区别?
链路层广播是对某个局域网上的所有主机进行广播MAC帧;
IP广播是对一个网络上的所有主机进行广播IP数据报。
4.计算机A广播了一个ARP请求分组,希望找到计算机B的硬件地址,请问是由谁来单播发送ARP响应分组将计算机B的硬件地址告诉计算机A?一定是计算机B吗?
5.路由器实现了物理层、数据链路层、网路层,这句话的含义是什么?
路由器有能力对这三层协议的控制信息进行识别、分析以及转换;
路由器有能力对数据“包装
”这三层协议或者“拆开
”这三层协议;
路由器就有能力互联这三层协议不同的两个网络,即异构网络。
第五章 传输层
5.1 传输层提供的服务
5.1.1 传输层的功能(传输层和网络层的功能大比较☆☆☆)
1.传输层和网络层:
- 传输层位于网络层之上,它为 运行在不同主机上的)进程之间 提供逻辑通信,即
端到端的通信
; - 而网络层提供主机之间的逻辑通信,即通信双方是两台主机。
主机和路由器:
- 只有主机的协议栈才有传输层和应用层;
- 而路由器在转发分组的时候只用到下三层的功能;
- 即在通信子网中没有传输层,传输层只存在于通信子网以外的主机中。
2.复用和分用
- 复用:发送方不同的应用进程都可以使用同一个传输层协议传送数据,
- 分用:接收烦的传输层再剥去报文的首部后能够把这些数据正确交付到目的应用进程。
注意和网络层的复用分用功能区分开:
- 复用:发送方不同协议的数据都可以封装成IP数据报发送出去;
- 分用:接收方的网络层在剥去首部后把数据交付给相应的协议。
3.传输层对收到的报文进行差错检测(检测首部和数据部分);
而网络层只检查IP数据报的首部,不检验数据部分是否出错。
4.提供两种不同的传输协议:面向连接的TCP和无连接的UDP;
而网路层无法同时实现两种协议,即在网络层要么只提供面向连接的服务,如虚电路;要么只提供无联机服务,如数据报。而不可能同时出现这两种方式。
传输层向高层用户屏蔽了低层网络核心的细节(如网络拓扑、路由协议等),它使应用进程看见的是好像在两个传输层实体之间有一条端到端的逻辑通信信道,这条逻辑通信信道对上层的表现却因传输层协议不同而有很大的差别。
当传输层采用面向连接的TCP
时,尽管下面的网络是不可靠的,但这种逻辑通信信道就相当于一条全双工的可靠信道;
但当传输层采用无连接的UDP
时,这种逻辑通信信道仍然是一条不可靠信道。
5.1.2 传输层的寻址和端口
1.端口
端口是传输层的服务访问点SAP(Service Access Point),它在传输层的作用类似于IP地址在网络层的作用或MAC地址在数据链路层的作用,只不过IP地址和MAC地址标识的是主机,而端口标识的是主机中的应用进程。
数链层的SAP是MAC地址;
网络层的SAP是IP地址;
传输层的SAP是端口。
软件端口:应用层的各种协议进程与传输实体进行层间交互的一种地址;
硬件端口:不同硬件设备进行交互的接口。
注意:传输层实用的端口是软件端口。
2.端口号
应用进程通过端口号进行标识,端口号长度为16位,可表示65536个不同的端口号。
端口号只在本地有意义,端口号只标记本计算机应用层中的各进程,不同计算机的相同端口号是没有联系的。
根据端口号范围可将端口分为两类:
- 服务端使用的端口号:
(0~49151)
这里又分两类:熟知端口号和登记端口号。
熟知端口号:数值为0~1023,用来标记TCP/IP最重要的一些应用程序,让所有的用户都知道;
登记端口号:数值为1024~49151 - 客户端使用的端口号:(
49152~65535
)
这类端口号仅在客户进程进行时才动态地选择,所以又称短暂端口号/临时端口。通信结束后,刚刚用过的客户端口就不复存在,此端口就可供其他客户进程使用。
一些常用的熟知端口号:
应用程序 | FTP | TELNET | SMTP | DNS | TFTP | HTTP | SNMP | |
熟知端口号 | 21 | 23 | 25 | 53 | 69 | 80 | 161 | |
使用的传输协议 | TCP | TCP | UDP | UDP | TCP | UDP |
FTP:File Transfer Protocol,文件传输
TELNET:远程登录
SMTP:Simple Message Transfer Protocol,电子邮件
DNS:Domain Name Service(域名服务,域名解析)
TFTP:Trivial File Transfer Protocol,小文件传输
HTTP:超文本传输
SNMP:Simple Network Management Protocol 简单网络管理
3.套接字
在网络中用IP地址来标识和区别不同的主机;通过端口号来标识和区分一台主机中的不同应用进程。
在网络中采用发送方和接收方的套接字(Socket)组合来识别端点。所谓套接字,实际上就是一个通信端点(端到端通信),即
套接字 =(主机IP地址,端口号)
它能唯一地标识网络中的一台主机和其上的一个应用(进程)。
在网络通信中,主机A发给主机B的报文段包含目的端口号和源端口号,源端口号是“返回地址”的一部分,即当B需要发回一个报文段给A时,B到A的报文段中的目的端口号便是A到B的报文段中的源端口号(完全的返回地址是A的IP地址和源端口号)。
5.1.3 无连接服务与面向连接服务 — UDP 和 TCP
面向连接服务:通信双方通信前必须先建立连接,在通信过程中,整个链接的情况一指被实时监控和管理,通信结束后释放连接;
无连接服务:通信是不用建立连接,整个信息传输过程是尽力而为。
两个传输层协议:TCP和UDP
TCP:
- 面向连接的传输控制协议:使用TCP时,传输层向上提供了一条全双工的可靠逻辑信道;
常用于对传输准确性要求比较高的场合:文件传输协议(FTP)、超文本传输协议(HTTP)、远程登录(TELNET)。
UDP:
- 无连接的用户数据报协议:使用TCP时,传输层向上提供了一条不可靠的逻辑信道;
由于UDP比较简单,因此执行速度快、实时性高;使用UDP的应用主要包括小文件传送协议(TFTP)、DNS、SNMP和实时传输协议(RTP)。
传输层向高层用户屏蔽了低层网络核心的细节(如网络拓扑、路由协议等),它使应用进程看见的是好像在两个传输层实体之间有一条端到端的逻辑通信信道,这条逻辑通信信道对上层的表现却因传输层协议不同而有很大的差别。
当传输层采用面向连接的TCP
时,尽管下面的网络是不可靠的,但这种逻辑通信信道就相当于一条全双工的可靠信道;
但当传输层采用无连接的UDP
时,这种逻辑通信信道仍然是一条不可靠信道。
IP数据报 和 UDP数据报
IP数据报在网络层经过路由的存储转发;
而UDP数据报在传输层的端到端的逻辑信道中传输,封装成IP数据报在网络层传输时,UDP数据包的信息对路由是不可见的。
TCP 和 网络层虚电路
TCP报文段在传输层抽象的逻辑信道中传输,对路由器不可见;
虚电路所经过的交换结点都必须保存虚电路状态信息。
在网络层若采用虚电路方式,则无法提供无连接服务,即网路层无法同时实现两种协议;
而传输层采用TCP不影响网络层提供无连接服务。
5.2 UDP协议
5.2.1 UDP数据报
UDP的原理
UDP只是做了传输协议能做的最少工作,它仅在IP的数据报服务之上增加了两个最基本的服务:复用和分用 以及 差错检测。所以说如果选了UDP,那么应用程序几乎直接与IP打交道。
那么既然TCP提供可靠的服务,而UDP不提供,那么TCP总是首选吗?
答:不是,因为有很多应用更适合用UDP。
UDP的优点:
1.UDP无需建立连接;
2.也就不用维护连接状态;
3.分组首部开销小,TCP首部20B,而UDP首部8B;
4.应用层可以更好地控制要发送的数据和发送时间。由于UDP没有拥塞控制,因此网络中的拥塞不会影响主机的发送效率;而且某些实时应用要求以稳定的速度发送,能容忍一些数据的丢失,但不允许有较大的时延,UDP正好满足这些要求。
UDP是面向报文的,给应用层交下来的报文前面添加首部后就向下交付给IP层,既不合并,也不拆分,一次交付一个完整的报文而不可以分段。
报文
是UDP数据报处理的最小单元(注意,因为不能分割报文,不能分段,所以最小单位是报文而不是报文段)。
UDP首部格式
UDP数据报包含两部分:UDP首部 和 用户数据。
UDP首部有8B,由4个字段组成:
- 源端口:占2B,源端口号,需要对方回信时选用,不需要时可用全0;
- 目的端口:占2B,目的端口号,在终点交付报文时必须用;
- 长度:UDP数据包的长度 = 首部 + 数据,最小值是8B(仅有首部);
- 校验和:检测UDP数据报在传输中是否有错,有错就丢弃。
该字段是可选的,当源主机不想计算校验和时,直接令该字段为全0。
UDP基于端口的分用
当接收方的传输层从IP层收到UDP数据报时,就根据首部中的目的端口,把UDP数据报通过相应的端口上交给应用进程。
如果接收方UDP发现收到的报文中的目的端口不正确(即不存在对应于端口号的应用进程),那么就丢弃该报文,并由ICMP发送“端口不可达”的差错报文给发送方。
5.2.2 UDP校验
在计算校验和时,要在UDP数据报之前增加12B的伪首部。
伪首部并不是UDP的真正首部,只是在计算校验和时,临时添加在UDP数据报的前面,得到一个临时的UDP数据报。
校验和就是按照这个临时的UDP数据报计算的。
伪首部既不向下传送,也不向上递交,而仅仅是为了计算校验和。
这样的校验和既检查了UDP数据报,又对IP数据报的源IP地址和目的IP地址进行了校验。
UDP校验和的计算方法和IP数据报首部校验和的计算方法相似,都使用二进制反码运算求和再取反。
不同的是,IP数据报的校验和只校验IP数据报的首部;而UDP的校验和检查首部和数据部分。
这种简单的检错检验方法的检测能力并不强,但它的好处是简单、处理速度快。
5.3 TCP协议
5.3.1 TCP协议的特点
1.面向连接;
2.提供可靠的交付服务;
3.提供全双工通信;
4.面向字节流;即TCP传送时是逐个字节传送的,所以TCP连接传送的数据流中的每个字节都编上一个序号
5.3.2 TCP报文段
TCP传送的数据单元是报文段(UDP传送的数据单元是整个报文,不允许分段)。
一个TCP报文段分为TCP首部和TCP数据两部分;是传输层的PDU
整个TCP报文段作为网络层的SDU封装在IP数据报中;是网络层的SDU
TCP报文段再加上IP首部,就组成了IP数据报,IP数据报是网络层的PDU。
TCP报文段首部由固定部分和可变部分组成,其中固定部分是20B,可变部分是4B的整数倍,最多40B(是一些可选字段),因此IP首部最多60B;(下面会解释为什么首部最多是60B),首部最短为20B,即可变部分为0。
下面详细介绍TCP首部(20B)中各字段的含义:
- 源端口和目的端口:各占2B,端口是传输层和应用层的服务接口,传输层的复用和分用功能都要通过端口实现;
- 序号字段:占4B。TCP是面向字节流的,即TCP传送时是逐个字节传送的,所以TCP连接传送的数据流中的每个字节都编上一个序号。序号字段的值是指本报文段所发送的数据的第一个字节的序号。
例如,一个报文段的序号字段值是301,而携带的数据有100B,表明本报文段的数据的最后一个字节的序号400,因此下一个报文段的数据序号应从401开始。 - 确认号字段:占4B,是指期望收到对方的下一个报文段的数据的第一个字节的序号。若确认号为N,则表明到序号N-1为止的所有数据都正确收到。
例如,B正确收到了A发过来的一个报文段,其序号字段是501,数据长度是200B(序号501~700),这表明B正确收到了A发送的到序号700为止的数据,因此B期望收到A的下一个数据序号为701,于是B在发送给A的确认报文段中把确认号字段设为701。 - 数据偏移(即首部长度):占4位,最大可以表示15,首部长度的单位是4B,所以TCP首部的最大长度为60B。(和IP分组里的首部长度字段含义一样,只是在TCP首部叫数据偏移)
这里的数据偏移不是IP数据报分片的那个数据偏移,而是表示首部长度,它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远,即数据部分距离首部有多远,也就是首部的长度。 - 保留字段:占6位,保留。
- 紧急位URG:当URG=1时,表明紧急指针字段(第14个字段)有效。它告诉系统报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。
紧急位URG要和紧急指针字段配合使用。 - 确认位ACK:只有当ACK=1时确认号字段(第3个字段)才有效;当ACK=0时,确认号无效。
TCP规定:在建立连接后,所有传送的报文段都必须ACK置1。 - 推送位PSH:接收TCP收到PSH=1的报文段,就尽快(立即)交付给接收应用进程,而不再等到整个缓存都填满后再向上交付。
- 复位位RST:RST=1是,表明TCP连接中出现严重差错(如主机崩溃),必须释放连接,然后再重新建立运输连接。
- 同步位SYN:SYN=1表明这是一个连接请求或连接接收报文。
当SYN=1,ACK=0
时,表明这是一个连接请求报文,对方若同意建立连接,则在响应报文中使用SYN=1,ACK=1
。 - 终止位FIN:用来释放一个连接。FIN=1表明此报文段的发送方的数据以发送完毕,并要求释放传输连接。
- 窗口字段:占2B。指现在允许对方发送的数据量,即发送窗口大小,单位是字节(1B)。
例如,假设确认号是701,窗口字段是1000,就表明从701号算起,发送此报文段的一方还有接收1000B数据(字节序号是701~1700)的接收缓存空间。 - 校验和:占2B。校验和字段检验的范围包括首部和数据两部分。
计算校验和时,和UDP一样,在TCP报文段的前面加上12B的伪首部(只需将UDP伪首部的第4个字段,即协议字段的17改成6,其他的和UDP一样)。 - 紧急指针字段:占16位,指出在本报文段中紧急数据共有多少字节
(紧急数据放在本报文段数据的最前面)。
5.3.3 TCP连接管理☆☆☆
TCP连接的三个阶段:
- 连接建立
- 数据传送
- 连接释放
1.TCP连接的建立(三次握手)—TCP全双工连接
TCP连接的建立采用客户/服务器方式:客户机主动发起建立连接的请求;服务器端被动等待连接。
- 客户端发送连接请求报文段;
SYN = 1,seq = x
- 服务器端为该TCP连接分配缓存和变量,并返回确认报文段,允许连接;
SYN = 1,ACK = 1,seq = y,ack = x + 1
- 客户端为该TCP连接分配缓存和变量,并返回确认的确认,并可携带数据。
ACK = 1,seq = x + 1,ack = y + 1
SYN—同步位
seq—序号字段
ACK—确认位
ack—确认号字段
SYN洪泛攻击
注意:服务器端的资源时在完成第二次握手时分配的,而客户端的资源是在完成第三次握手时分配的,这就使得服务器易于收到SYN洪泛攻击:
即客户端发完连接请求报文段之后就不管了,而服务器会响应这个连接请求,并分配资源,然后等待客户端的第三次握手,但客户端迟迟不响应,使得这个TCP链接处于半连接状态,就会让服务器为其分配的资源一直这么挂着,就导致服务器资源的浪费,这就是SYN洪泛攻击。
TCP连接的释放(四次挥手)
一条TCP连接的双方都能终止该连接,连接结束后,主机中的缓存和变量将被释放。
- 客户端发送连接释放报文段,并停止发送数据;
FIN = 1,seq u
- 服务器端回复一个确认报文段;
ACK = 1,seq = v,ack = u + 1
至此:“客–>服”方向的连接完成释放,TCP连接处于半关闭状态 - 服务器端发完数据,发出连接释放报文段;
FIN = 1,ACK = 1,seq = w, ack = u + 1
- 客户端会送一个确认报文段,等待2 * MSL(两个最长报文段寿命后,连接彻底关闭。
ACK = 1,seq = u + 1,ack = w + 1
补充:2 * MSL
,也叫TIME_WAIT,面试中会问到。
MSL,Maximum Segment Lifetime
,最长分节生命,是指任何IP数据报能够在因特网中存活的最长时间。
参考链接:居然很少有人质疑: 2MSL的TIME_WAIT时间真的足够保证旧连接上的所有包都消失吗?
参考链接:为什么TIME_WAIT状态是2MSL?(2个原因)
参考链接:聊聊tcp四次挥手中的TIME_WAIT状态存在的理由
TIME_WAIT状态有两个存在的理由:
1.可靠地实现TCP全双工连接的终止(因为最后一个ACK可能丢失);
2.为了保证本连接持续的时间所产生的所有分组都从网络中消失,也就是保证新建立一个TCP连接时,来自该连接老的重复分组都已经在网络中消失了(因为新老连接可能会使用相通的四元组)。
举个栗子:
在tcp四次挥手中, B发FIN包(第三次挥手)后, A马上回应最后的ACK, 此时, A的socket让然不能立即进入CLOSED的状态, 为什么呢? 其实这就是在问TIME_WAIT状态存在的理由。
- 理由之一:
A不能保证最后的ACK能达到B, 所以, 还应该观望一段时间, 护送一段时间。 如果最后的ACK丢失, 那么B显然收不到, B于是发起了重传FIN的操作, 此时如果A处于CLOSED的状态, 就没办法给对端发ACK了(实际是发RST), 呜呼哀哉。 所以A应该等一段时间, 这段时间就是所谓的TIME_WAIT, 比如, 等待一个RTT的时间(实际上, 考虑到如下的理由之二就知道, RTT可能不够, 用2MSL更靠谱)。
所以, TIME_WAIT存在的理由之一是尽可能护送最后的ACK达到对端。 - 理由之二:
假设tcp连接是: A(1.2.3.4:8888)------B(6.7.8.9:9999), 这就是一个tcp四元组。 当tcp连接关闭后, 四元组释放。 后面的新连接可能会重用到这个四元组(有这个可能性), 那么问题就来了: 新四元组和旧四元组完全一致, 他们的网络包会混乱吗? 所以, 可以考虑这样一个机制: 让旧四元组对应的所有网络包都消失后(等一段时间), 才允许新四元组建立, 颇有点锁的味道。 那么这个等一段时间究竟是多久呢? 多久才合适呢? 在前面的文章中, 我们讨论过, 采用2MSL
比较合适, 我个人认为, 把TIME_WAIT定义为2MSL只是一个通用的经验方法而已, 无法从理论上百分之百论证。
所以, TIME_WAIT存在的理由之二是新旧四元组互不干扰。
什么是四元组:
FIN—终止位
seq—序号字段
ACK—确认位
ack—确认号字段
5.3.4 TCP可靠传输
TCP可靠传输的机制:校验、序号、确认、重传。
- 校验和字段:TCP校验机制与UDP一样;
- 序号字段seq:TCP是面向字节流的,每个字节都有一个序号;
- 确认号字段ack:期望收到对方的下一个报文段的数据的第一个字节的序号;
- 重传:
两种情况会导致TCP对报文段进行重传:超时和冗余ACK
(1) 超时
TCP 每发送一个报文段,就对这个报文段设置一次计时器。计时器设置的重传时间到期但还未收到确认时,就要重传这一报文段。
为了计算超时计时器的重传时间,TCP 采用一种自适应算法,它记录一个报文段发出的时间,以及收到相应确认的时间,这两个时间之差称为报文段的往返时间(Round-Tip Time, RTT)。 TCP 保留了RTT 的一个加权平均往返时间 RTTs,它会随新测量 RTT 样本值的变化而变化。显然超时计时器设置的超时重传时间(Retransmission Time-Out,RTO)应略大于RTTs,但也不能大太多,否则当报文段丢失时,TCP不能很快重传,导致数据传输时延大。
(2) 冗余 ACK(冗余确认)
超时触发重传存在的一个问题是超时周期往往太长。所幸的是,发送方通常可在超时事件发生之前通过注意所谓的冗余 ACK 来较好地检测丢包情况。
冗余 ACK 就是再次确认某个报文段的ACK,而发送方先前已经收到过该报文段的确认。
例如,发送方 A 发送了序号为 1、2、3、4、5的TCP 报文段,其中2号报文段在链路中丢失,它无法到达接收方 B。因此3、4、5 号报文段对于B来说就成了失序报文段,于是B就发送了3个对1 号报文段的冗余 ACK,表示自己期望接收2 号报文段。
TCP 规定当发送方收到对同一个报文段的3个冗余 ACK 时,就可以认为跟在这个被确认报文段之后的报文段已经丢失。
就前面的例子而言,当A 收到对于 1号报文段的3个冗余 ACK时,它可以认为2号报文段已经丢失。这时发送方 A可以立即对2号报文执行重传,这种技术通常称为快速重传(快重传—下面拥塞控制算法中也有用到)。
5.3.5 TCP流量控制—滑动窗口机制
流量控制是一个速度匹配服务,匹配发送方的发送速率与接收方的读取速率。
TCP提供一种基于滑动窗口协议的流量控制机制。
在通信过程中,接收方根据自己接收缓存的大小,动态地调整接收窗口rwnd;—流量控制
发送方根据其对当前网络拥塞程度的估计而确定的的窗口值,称为拥塞窗口cwnd;—拥塞控制
发送方的发送窗口取rwnd
和cwnd
的min
。
当rwnd=0时,表示接收方暂时不再接收发送方的数据,而是先处理自己缓存里的数据给上层。那么要等多久才可以再次发送呢?
答:TCP为每一个连接设有一个持续计时器,当rwnd=0时就启动它,时间到了发送方就向接收方发一个探测报文段,接收方会通过设置确认报文段首部的窗口字段值将此时的rwnd接收窗口值告诉发送方。如果rwnd不为0,那么发送方就可以继续发送数据;如果rwnd依然为0,就再次启动持续计时器,再等。
传输层的流量控制 和 数链层的流量控制
传输层定义端到端用户之间的流量控制;
数链层定义两个中间的相邻结点的流量控制。
数链层的滑动窗口协议的窗口大小不能动态变化;(3.4 流量控制 表格下面的一句话)
传输层的滑动窗口协议的窗口大小可以动态变化。
5.3.6 TCP拥塞控制
拥塞控制是指防止过多的数据注入网络,保证网络中的路由器或链路不致过载。
拥塞控制与流量控制的区别
拥塞控制是全局性问题,发生拥塞时不知道是哪个或哪几个发送方的数据发的太快才导致的拥塞;
而流量控制是点对点的通信量的控制,即接收方控制发送方,抑制发送方发送数据的速率,以便接收方能来得及接收。
例如,某个链路的传输速率为 10Gb/s,某巨型机向一台 PC 以 1Gb/s 的速率传送文件,显然网络的带宽是足够大的,不存在拥塞问题,但如此高的发送速率将导致 PC 可能来不及接收,因此必须进行流量控制。
但若有100万合PC在此链路上以1Mb/s 的速率传送文件,则现在的问题就变为网络的负载是否超过了现有网络所能承受的范围,这就是拥塞问题。
在流量控制中,发送方发送数据的速度由接收方决定;–>接收窗口rwnd
而在拥塞控制中,发送方发送数据的速度由发送方自己通过检测网络状况来决定。–>拥塞窗口cwnd
发送方发送窗口的实际大小有流量控制和拥塞控制共同决定,当题目中同时出现接收窗口rwnd和拥塞窗口cwnd时,二者的较小值才是发送方发送窗口的实际大小。
拥塞控制算法
慢开始、拥塞避免、快重传、快恢复。
1.慢开始和拥塞避免
- 慢开始算法:
先令拥塞窗口cwnd = 1 * MSS,即一个最大报文段长度MSS;
然后每经过一个传输轮次(往返时延RTT),拥塞窗口cwnd就翻倍,即指数增长;
直到cwnd >= 慢开始门限值ssthresh,改用拥塞避免算法。 - 拥塞避免算法:
每经过一个传输轮次(往返时延RTT),拥塞窗口就增加一个MSS,即线性增长;
当出现一次超时(网络拥塞)事件时,就令慢开始门限值ssthresh等于当前cwnd的一半,即乘法减少,并且把拥塞窗口cwnd重新设置为1 * MSS,执行慢开始算法。
注意:
- ①在慢开始阶段,cwnd是指数增长,假设在第10轮次时cwnd=8、ssthresh=12,那么在第11轮次时cwnd=12,而不是16,即cwnd不能越过ssthresh值。
- ②不论是在慢开始阶段还是在拥塞避免阶段,都有可能出现一次超时事件(网络拥塞),只要出现一次超时,就要把慢开始门限值ssthresh等于当前cwnd的一半,而并非只有在拥塞避免阶段才会出现超时事件。
2.快重传和快恢复
快重传和快恢复算法是对慢开始和拥塞避免算法的改进。
- 快重传:
在上面的可靠传输机制中有用到快重传技术(使用冗余ACK来检测丢包的发生),同样冗余ACK也可用于网络拥塞的检测(丢了包就以为止网络可能出现了拥塞):当发送方连续收到三个重复的ACK报文时,直接重传对方尚未收到的报文段,而不必等待那个报文段设置的重传计时器超时。 - 快恢复:
发送端收到连续三个冗余ACK时,执行乘法减小算法(把慢开始门限值ssthresh等于当前cwnd的一半),然后把cwnd的值设置为新的慢开始门限值ssthresh,然后开始执行拥塞避免算法(加法增大/线性增大)。
(注意:这里是把cwnd设置为新的ssthresh值,而不是1 * MSS,那是慢开始算法的操作)
由于跳过了cwnd从 1 * MSS 开始的慢开始过程,所以被称为快恢复。
3.注意:这里说的cwnd = 1 * MSS指的是1个最大报文段长度,而不是1,因为如果MSS是2KB,那么慢开始算法的第一个轮次中拥塞窗口cwnd就是2KB,虽然说cwnd=1,但它的单位是2KB。
4.一句话总结四种拥塞控制算法:
慢开始:当cwnd < ssthresh
时,每收到一个报文段的确认cwnd加1,没经过一个传输轮次(即往返时延RTT),cwnd就会加倍;—指数增长
拥塞避免:当cwnd > ssthresh
时,每经过一个往返时延(传输轮次)cwnd加1;—加法增加/线性增长
拥塞处理(超时事件发生):ssthresh = cwnd / 2,cwnd = 1 * MSS
,执行慢开始算法;—乘法减少
快重传:当收到连续的3个重复的ACK,直接重传对方期待的报文;
快恢复:当收到连续的三个冗余ACK,令ssthresh = cwnd / 2,cwnd = ssthresh
,执行拥塞避免算法。
5.4 本章小结及疑难点
1.MSS设置的太大或太小会有什么影响?☆☆☆
答:
首先解释MSS是什么?
MSS(Maxitum Segment Size)最大分段大小的缩写,是TCP协议里面的一个概念(UDP不能分段,所以MSS和UDP协议没关系)。
- MSS就是TCP数据包每次能够传输的最大数据分段。TCP协议在建立连接的时候即三次握手过程中,通常要协商双方的MSS值,具体是在发送SYN段的同时会将MSS发送给对方(MSS选项只能出现在SYN段中!!!),告诉对端 自己期望接收的TCP报文段的数据部分的最大长度。
所在层次 | PDU | PCI | SDU | 备注 |
---|---|---|---|---|
应用层 | 数据 | |||
传输层 | TCP报文段 UDP报文 | TCP首部(20B )UDP首部( 8B ) | 数据 | MSS 用来限制传输层的SDU ,给TCP报文段分段UDP不会分段 |
网络层 | IP数据报 | IP首部(20B ) | 数据 | MTU 用来限制网络层的PDU ,给IP数据报分片 |
数链层 | 帧 | 帧头帧尾 | 数据 |
如果选择较小的MSS值,网络的利用率就很低。假设一个TCP报文段中的数据只有1B,那么在 IP层传输的数据报的开销至少有40B,网络利用率就不会超过1/41,传输 n 字节的数据利用率就是 n/n+40,显然 TCP 报文段传输的数据如果越大,网络利用率就越高。到了数据链路层封装成帧还要加上一些开销,网络的利用率进一步降低。
但反过来,如果TCP报文段很长,那么在IP层传输时有可能要分解成多个短的数据报片(即IP数据报分片),在接收端还要把收到的个数据报分片装配成原来的TCP报文段,传输有差错时,还要进行重传,这些都会使开销增大。
总结:
1.MSS太小会导致网络利用率很低;
2.MSS太大到了网络差需要分片,会有很大的开销;
3.所以MSS应尽量大一些,只要在IP层传输时不要再分片就行,即MSS <= MTU - 40,最大不能超过MTU - 40的长度,否则在IP层就要分片。这个40指的是TCP首部的20B和IP首部的20B。
拿以太网来举例,我们希望IP数据报的大小不超过1500字节。除去IP数据报的首部20字节,也就是希望TCP报文段不超过1480字节。再减去TCP报文段首部20字节,也就是TCP携带的数据不超过1460字节,也即MSS最大不超过1460B。
补充:
TCP报文段的数据部分,至少要加上40B的首部(TCP首部至少20B和IP首部至少20B)才能组装成一个IP数据报。
MSS&MTU 和 分段&分片 和 UDP&TCP&IP ☆☆☆☆☆
几个参考链接:
1.TCP层的分段和IP层的分片之间的关系 & MTU和MSS之间的关系
2.TCP协议(MSS)
3.为什么IP层要分片而TCP层要分段? 这些和MTU/MSS又有什么关系?
所在层 | UDP | TCP | 依据 |
---|---|---|---|
传输层 | UDP不分段 | TCP分段 | 分段的依据是MSS(<=1460B) |
网络层 | 在IP层分片 | 在IP不分片 | 分片的依据是MTU(<=1500B) |
解释:MSS和MTU差的40B分别是TCP首部的20B和IP首部的20B。
简而言之:
1.IP分片产生的原因是网络层的MTU;TCP分段产生原因是MSS;
2.IP分片由网络层
完成,也在网络层进行重组;
TCP分段是在传输层
完成,并在传输层进行重组; //透明性
3.对于以太网,MSS为1460B
,MTU为1500B
。
4.采用TCP协议进行数据传输,是不会造成IP分片的,因为TCP使用了MSS来避免分片!若数据过大,超过了MSS,则在传输层会对TCP包进行分段,自然到了IP层就不用分片。
5.IP层的分片是针对传输层中使用UDP协议来说的,如果使用UDP发送数据,UDP并不知道如何分段,那么到了IP层就需要进行分片,分片的原则根据MTU,那么分UDP最大的数据负载就是1500-8=1492B
。
最后用两句话总结:
TCP协议在传输层用MSS分段,到了网络层就不用分片,因为MSS <= MTU - 40;
UDP协议在传输层不会分段,每次交付一整个报文,到了网络层如果超过MTU,就分片。
做两个实验:
实验1:
对于TCP来说,它是尽量避免分片的。假设我们这里要发送给TCP层的数据大小为2748个字节,这个大小是明显大于链路层的发送数据的大小的,在这个情况下我们来看,对于来自TCP层的数据,IP会不会进行分片。
应用层的2748个字节在TCP层就进行了分段,分层了两个TCP段,一个1460字节,一个1288字节。那么到IP层的时候,自然就不会在进行分片了。
在这两个TCP分段中,IP首部的标志字段的DF位(Don ’ t Fragment) 被置1,用于告诉IP层不要对该数据进行分片。
实验2:
我们发送给UDP层的数据包的大小为1600字节,在UDP层,长度为1608字节,这里的8个字节是UDP的头部字段的长度, 到了IP层,我们可以清楚的看到IP对UDP数据包进行了分片,一个大小为1480字节,一个为128字节。
2.为何不采用“三次握手”释放连接,且发送最后一次握手报文后要等待2 * MSL
的时间呢?
答:不采用“三次握手”释放连接是为了防止出现“已失效的连接请求报文段”。A在发送最后一个确认报文段后,再经过2 * MSL
可保证本连接持续的时间内所产生的所有报文段从网络中消失。造成错误的情形与下文第6点不采用“两次握手”建立连接所述的情形相同。
发送最后一次握手报文后要等待2 * MSL
的时间是保证A发送的最后一个确认报文段能够到达B。如果A不等待2 * MSL
,若A返回的最后确认报文段丢失,则B不能进入正常关闭状态,而A此时已经关闭,也不能再重传。
注意:服务器结束TCP连接的时间要比客户机早一些,因为客户机最后要等待2 * MSL
后才可以进入CLOSED状态。
3.如何判定此确认报文段是对原来的报文段的确认,还是对重传的报文段的确认?
由于对于一个重传报文的确认来说,很难分辨它是原报文的确认还是重传报文的确认,使用修正的Karn算法作为规则:在计算平均往返时间RTT时,只要报文段重传了,就不采用其往返时间样本,且报文段每重传一次,就把RTO增大一些。
4.TCP使用的是GBN还是选择重传SR?
TCP使用累积确认,正确收到但失序的报文并不会丢弃,而是缓存起来,并且发送冗余ACK指明期望收到的下一个报文段,这是TCP和GBN的显著区别。
TCP中提供一个SACK(Selective ACK)选项,即选择确认选项。使用选择确认选项时,TCP就和SR非常相似。
因此,TCP的差错恢复机制可视为GBN和RS协议的混合体。
5.为什么超时事件发生时cwnd被置1,而收到3个冗余ACK时cwnd减半?
可以这样考虑这个问题,超时事件发生和收到3个冗余ACK,哪个意味着网络拥塞程度更严重?
收到3个冗余ACK时,网络虽然拥塞,但至少还有ACK报文段能被正确交付。而当超时事件发生时,说明网络可能已经拥塞的连ACK报文段都传输不了,发送方只能等待超时后重传数据。
因此超时事件发生时,网络拥塞更严重,那么发送方就应该最大限度地抑制数据发送量,所以cwnd置为1;收到3个冗余ACK时,网络拥塞不是很严重,发生方稍微抑制一下发送的数量即可,所以cwnd减半。
6.为什么不采用“两次握手”建立连接呢?
主要是为了防止两次握手情况下已失效的连接请求报文段突然又传送到服务器而产生错误。例如下面这种情况:
客户 A 向服务器 B发出TCP 连接请求,第一个连接请求报文在网络的某个结点长时间滞留,A 超时后认为报文丢失,于是再重传一次连接请求,B收到后建立连接。数据传输完毕后双方断开连接。而此时,前一个滞留在网络中的连接请求到达服务器B,而B认为 A 又发来连接请求。
此时若使用 “三次握手”,则B向A返回确认报文段,由于是一个失效的请求,因此 A 不予理睬,建立连接失败。
若采用的是“两次握手”,则这种情况下 B认为传输连接已经建立,并一直等待A 传输数据,而A此时并无连接请求,因此不予理睬,这样就造成了B的资源白白浪费。
7.是否TCP和UDP都需要计算往返时间RTT?
往返时间 RTT 仅对传输层TCP 协议才很重要,因为TCP 要根据 RTT 的值来设置超时计时器的超时时间。
UDP 没有确认和重传机制,因此 RTT 对 UDP 没有什么意义。
因此,不能笼统地说“往返时间 RTT 对传输层来说很重要”,因为只有TCP 才需要计算RTT而UDP不需要计算RTT。
8.为什么TCP在建立连接时不能每次都选择相同的、固定的初始序号?
假设主机A和主机B频繁地建立连接,传送一些TCP报文段后,再释放连接,然后又不断地建立新的连接、传送报文段和释放连接;
如果每次建立连接时,主机A都选择相同的、固定的初始序号,如选择1;
如果主机A发出的某些TCP报文段在网络中会滞留较长时间,导致主机A超时重传这些TCP报文段;
假定有一些在网络中滞留时间较长的TCP报文段最终终于到达主机B,但这时传送该报文段的那个连接早已释放,而此时的TCP连接是一条新的TCP连接;
这样工作在新的TVP连接的主机B就有可能会接受在旧的TCP连接传送的、已经没有意义的、过时的TCP报文段(因为这个TCP报文段的序号很可能正好处在当前新连接所有的序号范围之内),结果产生错误。
因此,必须使得迟到的TCP报文段的序号不处在新连接所用的序号范围之中。这样,TCP在建立新的连接时所选择初始序号一定要和前面的一些连接所用过的序号不同。所以不同的TCP不能使用相同的初始序号。
9.假定在一个互联网中,所有链路的传输都不出现差错,所有结点也都不会发生故障。试问在这种情况下,TCP的“可靠传输”功能是否就是多余的?
答:不是多余的。TCP的“可靠交付”功能在互联网中起着至关重要的作用。至少在以下的情况下,TCP 的“可靠交付”功能是必不可少的:
- 每个IP数据报独立的选择路由,因此在到达目的主机时有可能出现失序;
- 由于路由选择的计算出现错误,导致IP数据报在互联网中转圈,最后数据报首部中的生存时间TTL降为零,这个数据报在中途就被丢失;
- 某个路由器突然出现很大的通信量,以致路由器来不及处理到达的数据报。因此有的数据报被丢弃;
以上的问题都必须依靠TCP的“可靠交付”功能才能保证在目的主机的目的进程中接收到正确的报文。
第六章 应用层
6.1 网络应用模型
客户/服务器(C/S)模型
服务器:提供服务的设备
- 永久提供服务(一直开机);
- 永久性的访问地址/域名
客户机:请求服务的主机
- 与服务器通信,使用其提供的服务;
- 间歇性接入服务;
- 可能使用动态IP地址;
- 客户机相互之间不直接通信,例如,在Web应用中两个浏览器并不直接通信
常见的使用客户/服务器模型的应用包括Web、文件传输协议(FTP)、远程登录和电子邮件等。
注意:在C/S模型中,服务器性能的好坏决定了整个系统的性能,当大量用户请求服务时,服务器就必然成为系统的瓶颈。
P2P模型
P2P(Peer-to-Peer)模型,也叫对等模型。
- 不存在永久在线的服务期;
- 每个主机可提供服务,也可请求服务,即每台机器既是服务器又是客户机;
- 任意结点之间可直接通信;
- 结点可能改变IP地址;
- 可扩展性好,网络健壮性强。
6.2 域名系统(DNS)—把IP比喻成人的电话号码,域名就是人的名字
域名-->IP地址
域名和ip是**多对多**的关系:
一个域名下也可以有多个ip, **负载均衡**就可以这么搞。
一个ip可以被多个域名同时索引。
一个域名可以对多个ip地址,一般为了服务器的**负载均衡**会这样做。
一个ip可以对多个域名,这样多个域名就可以访问**同一个主页**。
一个域名可以指向多个ip,用来做负载均衡嘛。
一个ip可以被多个域名指向,就是大家所购买的**虚拟主机**嘛。
域名系统(Domain Name System,DNS)是因特网使用的命名系统,用来把便于人们记忆的具有特定含义的主机名/域名(例如www.cskaoyan
)转换为便于机器处理的IP地址。相对于IP地址,人们更喜欢使用具有特定含义的字符串来表示因特网上的计算机。
DNS系统采用客户/服务器模型
,其协议运行在UDP
之上,使用53号端口
。
IP地址和域名之间的解析过程,把域名转换成IP地址,域名是字符形式的IP地址。
**域名是字符形式的IP地址**。
DNS分为3部分:域名(层次域名空间)、域名服务器、解析器。
域名(层次域名空间)
根:
顶级域名:
二级域名:
三级域名:
域名服务器
域名到IP地址的解析过程是在域名服务区上进行的。
每个域名服务区不但能够进行一些域名到IP地址的解析,而且还必须具有连向其它域名服务器的信息:当自己不能进行域名到IP地址的转换时,能够知道到什么地方去找其他域名服务器。
主要有4种类型的域名服务器:
- 1.根域名服务器:
最高层次的域名服务器,所有根域名服务器都知道所有的顶级域名服务器的IP地址。根域名服务器也是最重要的域名服务器,不管是哪个本地域名服务器,若要对因特网上任何一个域名进行解析,只要自己无法解析,就首先求助于根域名服务器。
一共有13个根域名服务器,通常它并不直接把待查询的域名直接转换成IP地址
,而是告诉本地域名服务器下一步应当找哪个顶级域名服务器进行查询。 - 2.顶级域名服务器:
管理在该顶级域名服务器注册的所有二级域名。 - 3.权限域名服务器(授权域名服务器):
负责一个区的域名服务器。 - 4.本地域名服务器:
本地域名服务器对域名系统非常重要。当一台主机发出DNS查询请求时,这个查询请求报文就发送给该主机的本地域名服务器。
域名解析过程
概念:
域名解析是指把域名映射成为IP地址或者把IP地址映射成域名的过程。前者称为前向解析,后者成为反向解析。
过程:
当客户端需要域名解析时,通过本机的DNS客户端构造一个DNS请求报文以UDP数据报方式发往本地域名服务器。
方式:
域名解析有两种:递归查询 和 递归与迭代相结合的查询。
递归查询
由于递归查询方式给根域名服务造成的负载过大,所以在实际中几乎不用。具体过程如下:(见下图中的(a))
(主机把域名解析的任务全权交给本地域名服务器,本地域名服务器又把域名解析的任务全权交给根域名服务器,...
)
如果本地主机所询问的本地域名服务器不知道被查询域名的IP地址,那么本地域名服务器就以DNS客户的身份,向根域名服务器发出查询请求报文,即替该主机查询,而不是让主机自己进行下一步的查询。
在这种情况下,本地域名服务器只需向根域名服务器查询一次,后面的几次查询都是递归地在其他几个域名服务器之间进行的(步骤③~⑥);
在步骤⑦中,本地域名从根域名服务器得到了所需的IP地址;
最后在步骤⑧中,本地域名服务器把查询结果告诉主机。
递归与迭代相结合的查询
常用递归与迭代相结合的查询方式,该方式分为两部分:
-
主机向本地域名服务器的查询采用的是递归查询
(主机把域名解析的任务全权交给本地域名服务器
)
如果本地主机所询问的本地域名服务器不知道被查询域名的IP地址,那么本地域名服务器就以DNS客户的身份,向根域名服务器发出查询请求报文,即替该主机查询,而不是让主机自己进行下一步的查询。 -
本地域名服务器向根域名服务器的查询采用迭代查询
(本地域名服务器从上到下挨个去询问所要解析的域名的IP地址
)
当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的IP地址,要么告诉本地域名服务器:“你下一步应当向哪个顶级域名服务器进行查询",然后让本地域名服务器向这个顶级域名服务器进行后续的查询;
同样,项级域名服务器收到查询报文后要么给出所要查询的IP 地址,要么告诉本地城名服务器下一步应向哪个权限域名服务器查询;
最后,知道所要解析的域名的IP地址后,把这个结果返回给发起查询的主机。
举个例子:
假定某客户机想获知域名为 y.abc 主机的 IP地址,域名解析的过程(共使用 8个 UDP报文)如下:
- ①客户机向其本地域名服务器发出 DNS 请求报文;
- ②本地域名服务器收到请求后,查询本地缓存,若没有该记录,则以 DNS 客户的身份向根域名服务器发出解析请求;
- ③根域名服务器收到请求后,判断该域名属于
域,将对应的顶级域名服务器
dns
的IP 地址返回给本地域名服务器; - ④本地域名服务器向顶级域名服务器
dns
发出解析请求报文; - ⑤顶级域名服务器 dns 收到请求后,判断该域名属于
abc
域,因此将对应的授权域名服务器dns.abc
的IP 地址返回给本地域名服务器; - ⑥本地域名服务器向授权域名服务器
dns.abc
发起解析请求报文; - ⑦授权域名服务器
dns.abc
收到请求后,将查询结果返回给本地域名服务器; - ⑧本地域名服务器将查询结果保存到本地缓存,同时返回给客户机。
高速缓存
为了提高DNS的查询效率,并减少因特网上的DNS查询报文数量,在域名服务器中广泛地使用了高速缓存。当一个DNS服务器收到DNS查询结果时,它能将该DNS信息缓存在高速缓存中。这样,当另一个相同的域名查询到达该DNS服务器时,该服务器就能够直接提供所要求的IP地址,而不需要再去向其他DNS服务器询问。
因为主机名和IP地址之间的映射不是永久的,所以DNS服务器将在一段时间后丢弃高速缓存中的信息。
本地域名服务器和主机中都会有这个高速缓存。
6.3 文件传输协议(FTP)
6.3.1 FTP的工作原理
文件传输协议(File Transfer Protocol,FTP),提供交互式的访问,允许客户指明文件的类型与格式,并允许文件具有存取权限。它屏蔽了各计算机系统的细节,所以适合在异构网络中的任意计算机之间传送文件。
FTP采用客户/服务器
的工作方式,端口号是21
,采用TCP
可靠的传输服务。
一个FTP服务器进程可同时为客户进程提供服务。
FTP的服务器进程由两大部分组成:
- 1个主进程:负责接收新的请求;
- 若干从属进程:负责处理单个请求。
工作步骤如下:
- ①打开熟知端口
21
(控制端口),使客户进程能够连接上; - ②等待客户进程发连接请求;
- ③启动从属进程来处理客户进程发来的请求。
主进程与从属进程并发执行,从属进程对客户进程的请求处理完毕后即终止。 - ④回到等待状态,继续接收其他客户进程的请求。
6.3.2 控制连接与数据连接
FTP在工作中是使用两个并行的TCP连接:一个是控制连接(端口号21
),一个是数据连接(端口号20
)。使用两个不同的端口号可使协议更加简单和更容易实现。
控制进程和数据传送进程都属于从属进程,不是主进程。
1.控制连接(始终保持)
服务器监听 21号
端口,等待客户连接,建立在这个端口上的连接称为控制连接,控制连接用来传输控制信息(如连接请求、传送请求等)。
FTP客户发出的传送请求通过控制连接发送给服务器端的控制进程,但控制连接并不用来传送文件;
在传输文件时还可以使用控制连接 (如客户在传输中途发一个中止传输的命令);
因此控制连接在整个会话期间一直保持打开状态。
2.数据连接(保持一个)
服务器端的控制进程在接收到FTP客户发来的文件传输请求后,就创建 “数据传送进程”和“数据连接〞。
数据连接用来连接客戶端和服务器端的数据传送进程;
数据传送进程实际完成文件的传送,在传送完毕后关闭 “数据传送连接〞并结束运行。
因为 FTP 使用了一个分离的控制连接,所以也称 FTP 的控制信息是带外 (Out-of-band)传送的。使用 FTP 时,若要修改服务器上的文件,则需要先特此文件传送到本地主机,然后再将修改后的文件副本传送到原服务器。网络文件系统(NFS)允许进程打开一个远程文件,并在该文件的某个特定位置开始读写数据。这样,NFS 可使用户复制一个大文件中的一个很小的片段,而不需要复制整个大文件。
6.4 电子邮件
6.4.1 电子邮件系统的组成结构
电子邮件是一种异步通信方式,通信是不需要双方同时在场。电子邮件把邮件发送到收件人使用的邮件服务器,并放在其中的收件人邮箱中,收件人可以随时上网到自己使用的邮件服务器进行读取。
一个电子邮件系统具有三个最主要的组成构件:
- 用户代理(User Agent):用户与电子邮件系统的接口;
- 邮件服务器:电子邮件系统的核心,功能是发送和接收邮件,同时还要向发信人报告邮件传送的情况(已交付、被拒绝、丢失等)。采用客户/服务器方式工作。
- 电子邮件使用的协议,如SMTP、POP3(或IMAP),分为邮件发送协议和读取协议:
邮件发送协议用于用户代理向邮件服务器发送邮件(下面的①)或在邮件服务器之间发送邮件(下面的②),通常使用的是SMTP协议;
邮件读取协议用于用户代理从邮件服务器读取邮件(下面的③),如POP3协议;
注意:
SMTP采用的是“推”(Push
)的通信方式,即在上面的①和②中,SMTP客户端主动将邮件“推”送到SMTP服务器端;
而POP3采用的是“拉”(Pull
)的通信方式,即用户读取邮件时,用户代理向邮件服务器发出请求,“拉”取用户邮箱中的邮件。
这个好像有点类似于GitHub的上传和下载,linux安装git并配置GitHub账号,本地与GitHub之间进行文件的上传(push)、下载(克隆)、更新中
6.4.2 简单介绍电子邮件的收发过程:
- ①发信人调用用户代理来撰写和编辑要发送的邮件。用户代理用
SMTP
把邮件传送给发送
方邮件服务器。 - ②发送方邮件服务器将邮件放入邮件缓存队列中,等待发送。
- ③运行在发送方邮件服务器的 SMTP 客户进程,发现邮件缓存中有待发送的邮件,就向运
行在接收方邮件服务器的 SMTP 服务器进程发起建立 TCP 连接。 - ④TCP 连接建立后,SMTP 客户进程开始向远程 SMTP 服务器进程发送邮件。当所有待发送
邮件发完后,SMTP 就关闭所建立的TCP 连接。 - ⑤运行在接收方邮件服务器中的 SMTP 服务器进程收到邮件后,将邮件放入收信人的用户
邮箱,等待收信人在方便时进行读取。 - ⑥收信人打算收信时,调用用户代理,使用
POP3
(或IMAP)协议将自己的邮件从接收方
邮件服务器的用户邮箱中取回 (如果邮箱中有来信的话)。
6.4.3 SMTP协议和POP3协议
SMTP协议
简单邮件传输协议(Simple Message Transfer Protocol,SMTP)是一种提供可靠且有效的电子邮件传输的协议。使用客户/服务器
方式,用的是TCP连接
,端口号是25
。
SMTP通信有以下三个阶段:
-
连接建立:
发件人的邮件发送到发送方邮件服务器的邮件缓存中后,SMTP客户就每隔一定时间对邮件缓存扫描一次,如果发现有邮件,就使用SMTP的熟知端口号(25)与接收方邮件服务器的SMTP服务器建立TCP连接。连接建立后,接收方SMTP服务器发出220 Service ready(服务就绪)
,然后SMTP客户向SMTP服务器发送HELLo命令,附上发送方的主机名。
注意:SMTP不使用中间邮件服务器,TCP连接总是在发送方和接收方这两个邮件服务器之间直接建立,而不管它们相隔多远。接收方的邮件服务器因故障不能建立连接时,发送方的邮件服务器只能等打一段时间后再次尝试连接。 -
邮件传送
连接建立后,就可以开始传送邮件。…(书的P265) -
连接释放
邮件发送完毕后,SMTP客户发送QUIT命令,SMTP服务器返回的信息是221(服务关闭)
,表示SMTP同意释放TCP连接。
邮件传送的全部过程就此结束。
SMTP协议的缺点:
SMTP协议只能传送一定长度的ASCII码,不能传送可执行文件或其他二进制对象,也不能传送其他非英语国家的文字(如中文、俄文),因此就提出了多用途网络邮件扩充(Multipurpose Internet Mail Extensions, MIME)。
MIME:把非ASCII码转换成7位ASCII码再传输,使得传输内容更加多样化。
POP3协议
邮局协议(Post Office Protocol,POP)是一个非常简单但功能有限的邮件读取协议,现在使用的是它的第3个版本POP3
。使用客户/服务器
方式,用的是TCP连接
,端口号是110
。
接收方的用户代理上必须运行POP客户程序;
接收方的邮件服务器上则运行POP服务器程序。
工作方式:
- ①下载并删除:邮件一旦被读取,就会被从邮件服务器上删除,用户不能再次从服务器上读取;
- ②下载并保存:用户从邮件服务器上读取邮件后,邮件依然会保存在邮件服务器上,用户可再次从服务器上读取该邮件。
IMAP
另一个邮件接收协议是因特网报文存取协议(IMAP),用户可以看到邮箱的首部,若用户想打开某个邮件,邮件才上传到用户的计算机上。
基于万维网的电子邮件
HTTP SMTP HTTP
发送方------>发送方邮件服务器------>接收方邮件服务器------>接收方
6.5 万维网(WWW)
6.5.1 WWW的概念与组成结构
万维网(World Wide Web,WWW)是一个大规模的信息储藏所,是无数个网站和网页的集合,是一个资源空间,包括文字、视频、音频…
统一资源定位符URL
:唯一标识万维网中的各种文档,并且每个文档具有唯一的标识符URL;
- URL一般形式:
<协议>://<主机>:<端口>/<路径>
,其中
常见的<协议>有http、ftp
等;
<主机>是存放资源的主机在因特网中的域名,也可以是IP地址;
<端口>和<路径>有时可以省略。
超文本传输协议HTTP
:一个应用层协议,端口号是80
,
- 它使用TCP连接进行可靠的传输,HTTP是万维网客户程序和服务器程序之间交互所必须严格遵守的协议。
- 万维网中的资源通过超文本传输协议(HTTP)传送给使用者,后者通过单击链接来获取资源。
超文本标记语言HTML
:一种文档结构的标记语言,
- 它使用一些约定的标记对页面上的各种信息(包括文字、声音、图像、视频等)进行描述。
万维网以客户/服务器方式工作:
- 浏览器是在用户计算机上的万维网客户程序,
- 网为王文档所主流的计算机运行服务器程序,这台计算机称为万维网服务器;
- 客户程序向服务器程序发出请求,服务器程序向客户程序送回客户所要的文档。
工作流程如下:
- ①Web用户使用浏览器(指定
URL
)与Web服务器建立连接,并发送浏览请求; - ②Web服务器把
URL
转换为文件路径
,并返回信息给Web浏览器; - ③通信完成,关闭连接。
6.5.2 超文本传输协议(HTTP)
HTTP定义了浏览器(万维网客户进程)怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给浏览器。
在浏览器和服务器之间的请求与响应的交互,必须遵循规定的格式和规则,这些格式和规则就是HTTP
。因此HTTP有两类报文:请求报文和响应报文。
请求报文:Web客户端向Web服务器发送的请求;
响应报文:Web服务器对Web客户端的请求的回答。
用户获取资源的具体过程:
- 浏览器分析URL(http://www.tsinghua.deu/chn/index.htm);
- 浏览器向DNS请求解析www.tsinghua.deu(主机/域名)的IP地址;
- 域名系统DNS解析出清华大学服务器的IP地址;
- 浏览器与该服务器建立TCP连接;
- 浏览器发出HTTP请求:(取文件)GET /chn/index.htm;
- 服务器通过HTTP响应把文件index.htm发送给浏览器;
- TCP连接释放;
- 浏览器(用HTML)解释文件index.htm,并在Web页显示给用户。
HTTP的特点:
HTTP 是无状态的,即无记忆的,同一个客户第二次访问同一个服务器上的页面时,服务器并不记得曾经访问过的这个客户。
在实际应用中,通常使用Cookie + 数据库的方式来跟踪用户的活动(如记录用户在淘宝上最近浏览的商品)。Cookie是一个存储在用户主机中的文本文件,里面含有一串“识别码”,如“123456”,用于Web服务识别用户。Web服务器根据Cookie就能从数据库中查询到该用户的活动记录,进而提供个性化服务,如根据用户之前浏览过的商品向其推荐新产品等。
6.6 本章小结及疑难点
1.如何理解客户进程端口号与服务器进程端口号?
补充:
网络安全
1. 网络通信中可能面临的威胁
计算机网络的通信面临两大类威胁,即被动攻击和主动攻击。
被动攻击:
- 窃听 和 截获
主动攻击:
- 篡改:
- 恶意程序:
- 拒绝服务:SYN攻击。
恶意程序包括:
- 病毒:改设置、删文件(熊猫烧香)
- 蠕虫:占用系统资源(CPU、内存等)
- 木马:盗号木马、远程控制木马(灰鸽子木马)
注意:木马程序一定要和外界通讯。 - 逻辑炸弹:满足某种特定条件触发。
信息传输过程中可能存在的4种攻击类型:
2. 对称加密技术
概念:加密和解密都使用相同的密钥(DES),即加密方和解秘方必须使用同一种加密算法和相同的密钥。
对称加密技术存在通信双方之间需要确保密钥安全交换的问题,即密钥传递的安全性。
3. 非对称加密技术
概念:对信息的加密和解密使用不同的密钥,
(用来加密的秘钥可以公开,即公钥;用来解密的秘钥是需要保密的,即私钥)
原理:
当发送端希望用非对称加密的方法,要将明文加密后发送给接收端时,它首先需要得到接收端的密钥产生器所产生的一对密钥中的公钥,发送端用公钥加密后的密文可以通过网络发送到接收端,接收端使用一对密钥中的私钥去解密,将密文还原成明文。
特点:
非对称加密技术不需要共享通用的密钥,用于解密的私钥不需要发往任何地方,缺点是加密算法复杂,加密与解密的速度比较慢。
4. 数字信封技术
使用两层加密体制:
在内层利用了对称加密技术,每次传送信息都可以重新生成新的密钥,保证信息的安全性;
在外层利用非对称加密技术,加密(动词)(在内层传送信息时生成的)对称密钥,保证了密钥传递的安全性,实现身份认证。
5. 数字签名技术
数字签名:类似日常生活中的亲笔签名,数字签名将信息发送人的身份与信息传送结合起来,可以保证信息在传输过程中的完整性,并实现对发送者的身份认证,以防止信息发送者抵赖行为的发生。
数字签名的工作原理:
(1)发送方使用单向散列函数对要发送的信息进行运算,生成信息摘要;
(2)发送方使用自己的私钥,利用非对称加密算法,对生成的信息摘要进行数字签名;
(3)发送方通过网络将信息本身和已进行数字签名的信息摘要发送给接收方;
(4)接收方使用与发送方相同的单向散列函数,对收到的信息进行运算,重新生成信息摘要;
(5)接收方使用发送方的公钥对接收的信息摘要解密;
(6)将解密的信息摘要与重新生成的信息摘要进行比较,以判断信息在发送过程中是否被篡改过。
单向散列函数
明文 -----------------> 摘要(唯一对应,简化信息长度)
MD5
6. 防火墙Firewalls
概念:在网络之间执行控制策略的系统,包括硬件和软件;
目的:保护内部网络资源不被外部非授权用户使用;防止内部遭到外部非法用户的攻击。
两个基本部件:包过滤路由器(packet filtering router)和应用级网关(application gateway)。
HTTPS
参考链接:点这里
HTTPS,即 HTTP + Secure
本文简述了 HTTPS 通讯过程的基本原理,涉及到了对称加密、非对称加密、信息摘要、签名、密钥交换等技术基础,以及发行机构、数字证书等概念。
1M的宽带有时还不足100K?------谈谈带宽的两种含义
- 在通信中, 带宽的单位是
Hz
, 学过"信号与系统"的人都知道。 - 在计算中, 带宽等价于比特率(
bps
), 其实叫比特率更合适。
很多人装了1M的宽带网,结果网速有时还不到100K,为此在网上大骂上当受骗。我来说一下,宽带的学名叫“带宽”,说带宽1M
实际上是说比特率为1000000b/s
,那么对应的速度就是1000000/(1024*8)KB/s=122KB/s
, 也就是说,从理论上来讲,1M的带宽对应的速度极限为122K
. (请注意,通信中的K和计算机中的K不一样)。 但是, 但是, 但是, 在这里, 业界普遍把1M的带宽中的M认为是1024*1024, 真的乱得有点让人哭笑不得, 按照这样计算, 1M带宽就等于128KB/s了, 和122KB/s的差别不大。
即1M的带宽指的是1000000 bit/s,100K指的是100 KB/s = 100 * 1024 * 8 bit/s = 819200 bit/s,和1百万差点,但不至于差的太多。
更多推荐
计算机网络的笔记
发布评论