下文中出现的页数都出自《计算机网络》(第7版 谢希仁著)
一、概述
1.1 网络体系结构
1.1.1 OSI(法律上的国际标准)
-
7层&作用(由上到下)
应用层:文件传输、管理
表示层:确保一个系统的应用层发送的消息可以被另一个系统的应用层读取,编码转换,数据解析,管理数据的解密和加密
会话层:负责在网络中的两节点建立,维持和终止通信,在一层协议中,可以解决节点连接的协调和管理问题
运输层:定义一些传输数据的协议和端口。传输协议同时进行流量控制,或是根据接收方接收数据的快慢程度,规定适当的发送速率,解决传输效率及能力的问题
网络层:控制子网的运行,如逻辑编址,分组传输,路由选择最小单位——分组(包)报文
数据链路层:主要是对物理层传输的比特流包装,检测保证数据传输的可靠性,将物理层接收的数据进行MAC地址的封装和解封装,也可以简单的理解为物理寻址。交换机就处在这一层
物理层:主要对物理连接方式,电气特性,机械特性等制定统一标准并传输比特流
-
概念清楚但复杂不实用
1.1.2 TCP/IP(事实上的国际标准)
- 4层
- 应用层、运输层、网际层、网络接口层
1.1.3 五层协议
-
作用(由上到下)
应用层:通过应用进程间的交互完成特定网络应用。应用层协议:DNS,HTTP,SMTP等。报文在这一层交换
运输层:TCP(可靠)/UDP
网络层:IP
数据链路层:同上1.1.1
物理层:同上1.1.1
1.2 三种交换
- 电路交换:一方发起呼叫,独占一条物理线路。通信时双方一直占用该线路。优点是时延低、实时性强、交换设备成本低。缺点是线路利用率低、通信效率低、不同类型终端间不能通信
- 报文交换:将用户的报文存储在交换机的存储器中。当所需要的输出电路空闲时,再将该报文发向接收交换机或终端,它以“存储——转发”方式在网内传输数据。优点是中继电路利用率高,可以实现不同速率、规程的终端间通信。缺点是实时性差、传输时延大、占用交换机大量内存外存
- 分组交换:采用动态复用的技术。比电路交换的电路利用率高,比报文交换的传输时延小,交互性好
1.3 其它概念
- 为何要分层?P29
- 网络协议三要素:语法、语义、同步
- 带宽、时延
- 协议&服务:使用本层服务的实体只能看见服务,看不见下层的协议(书详细)
- 客户、服务器指的是应用进程
二、物理层
2.1 信道通信方式
- 单工:只要单方向的发送,无反向交互
- 半双工:双向发送,但不可同时发送
- 双工:可以同时发送
2.2 奈奎斯特&香农公式
- 码元速率极限值B与信道带宽的关系:B=2*H(Baud)
- C=2Hlog2N(bps) N为一个码元所取得离散值个数(无噪声)
- 信噪比=10log10(S/N)
- 信道极限传输速率C=Wlog2(1+S/N)(bit/s)(有噪声)
2.3 中继器和集线器的工作原理
- 中继器:原理是信号再生和还原,扩大网络传输距离
- 集线器:实质上是一个多端口的中继器,在网络中只起到信号放大和转发作用,目的是扩大网络的传输范围
三、数据链路层
3.1 数据帧的概念和可靠传输
- 数据帧:数据链路层的协议数据单元,它包括三部分:帧首部,数据部分,帧尾部
- 可靠传输:数据链路层的发送端发送什么,在接收端就收到什么。传输差错分两类:比特差错和传输差错(丢失、重复、失序),没有这两类差错才能算可靠传输。CRC检验能实现无比特差错,但实现不了无传输差错。传输差错可通过帧编号、确认重传机制实现。数据链路层的协议都不是可靠传输(这里会有歧义。现在,对于通信质量良好的线路,数据链路层不使用确认和重传机制,即不要求它提供可靠传输,出现差错时由上层协议如TCP完成。对于通信质量差的线路,要求提供可靠传输)
3.2 差错检测
3.2.1 奇偶检验
根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。通常专门设置一个奇偶校验位,用它使这组代码中“1”的个数为奇数或偶数。
- 缺点:奇偶校验位是一种错误检测码,但是由于没有办法确定哪一位出错,所以它不能进行错误校正。发生错误时必须扔掉全部的数据,然后从头开始传输数据。在噪声很多的媒介上成功传输数据可能要花费很长的时间,甚至根本无法实现
- 优点:它是使用一位数据能够达到的最好的校验码,并且它仅仅需要一些异或门就能够生成
3.2.2 循环冗余检验
P74
- 求添加在数据后面的n位余数:在要传输的数据后面要补n位0. n=除数的位数-1.做除法得到要添加的余数
- 做减法时用异或
- 把余数添加后,做除法,若余数不为0则表明有错误被检测到
3.3 CSMA/CD
- 多点接入:总线型网络
- 载波监听:不停地检测信道的空闲情况
- 冲突/碰撞检测:边发送边监听
- 发送“冲突加强信号”,确保足够的冲突持续时间,以便让所有用户都知道现在发生了冲突
由此判断CSMA/CD只能进行半双工通信
3.3.1 截断二进制指数退避
P88
- 争用期:一个站在发送完数据以后,只有通过争用期的“考验”,即经过争用期还没有检测到碰撞,才能肯定这次发送不会发生碰撞。具体的争用期时间为51.2微秒,对于10Mbit/s以太网,在争用期内可以发送512比特,所以也可以说争用期是512比特时间。这种时间单位与数据率密切相关
- 重传应推后r倍的争用期。r从[0,1,… ,(2^k-1)]里随机选一个。k=Min[重传次数,10]
- 以太网规定了最短帧长64字节。(发送的数据很短会填充到64字节)所以若发生碰撞一定是在发送数据的前64字节,换句话说,凡是长度小于64字节的帧都是由于碰撞(冲突)而终止的无效帧
- 最小帧长=总线传播时延 * 数据传输速率 *2
- 当发送数据的站检测到碰撞后,除了停止发送以外,还要再发送一个人为干扰信号(冲突加强信号32bit或48bit)
- 帧间最小间隔:9.6微秒=96比特时间。检测到信道空闲后,如果在这96比特时间内信道都保持空闲的话就可以发送帧
3.4 MAC地址/MAC帧
- 6字节48位
- 实际上是适配器地址,当适配器接入到一台计算机中时,适配器上的“地址”就变成了这台计算机的MAC地址
- MAC帧长不少于64字节
3.5 交换机&网桥
- 网桥:在数据链路层扩展以太网,最初人们使用网桥,它对收到的帧根据其MAC帧的目的MAC地址进行转发(查找网桥中的地址表)和过滤。用网桥相连的网段仍然是同一个局域网(网络号一样)
- 交换机实质:多接口的网桥。每个接口与一台主机或另一个交换机相连,以全双工工作
- 通过交换机进行通信的主机都是独占传输媒体,无碰撞地传输数据。
3.6 链路层协议
- 回退n帧:一次发多个帧,如果有错误,从那个发生错误的帧开始及其之后所有的帧全部再重新发送。复杂度低,但是不必要的帧会再重发,所以大幅度范围内使用的话效率不高
- 滑动窗口:没收到接收方确认的情况下可以连续把窗口内的数据都发送出去(注意是可以,但也不一定是都发出去,可以发一部分)
- HDLC:可靠传输
- PPP:简单、应用广泛
四、网络层
4.1 IP数据报的格式和分片
P128
- IP协议规定所有主机或路由器都必须能接收长度不大于576字节的数据报。当主机需要发送长度超过576字节的数据报时,应当先了解目的主机能否接受这样长的数据报(是否超过MTU值),否则要进行分片
- 标志位(首部第二行16-18位):最低位MF=1表示后面还有分片,MF=0表示这是若干数据报分片中的最后一片。中间一位DF=0时才允许分片
- 片偏移(首部第二行19-31位):表示某个分片在原分组中的相对位置。以8个字节为偏移单位。即每个分片的长度都应该是8字节(64位)的整数倍
4.2 IP地址
- IP地址::={<网络号>,<主机号>} 32位
- 指派范围:P121
- 当一台主机连接到两个网络上时,该主机就必须同时具有两个相应的IP地址(网络号不同)
- 广播地址:将主机号全部设置为1
- 主机号:将网络号(包括子网号)全部设置为0
4.3 子网划分
- 划分子网是一个单位内部的事情,本单位以外的网络看不见这个网络由多少个子网组成,对外仍然表现为一个网络
- 划分方法:从主机号借用若干位作为子网号。IP地址::={<网络号>,<子网号>,<主机号>}
- 增加了灵活性,但减少了能够连接在网络上的主机总数
4.4 子网掩码
- 默认子网掩码:IP地址中的网络号对应位置全为1,其余为0
- 核心在于让子网掩码和IP地址按位与(AND),能得到子网的网络地址(这样保留了子网号,并清零了主机号)
- 注意区分子网数和可用子网数(-2)
4.5 CIDR
- 无分类地址
- IP地址::={<网络前缀>,<主机号>}
- 斜线记法:在IP地址后面加上“/”,然后写上网络前缀所占的位数
- CIDR地址块:网络前缀相同的连续IP地址(这种地址的聚合常称为路由聚合)
- 地址掩码:一串1和一串0组成。1的个数就是网络前缀的长度(即/后面的数字)
- 核心思想在于:用一个地址(斜线记法)就代表了很多个地址,简化了路由表的查找。把直接的查找分成了好几步,一步步找到目的地址
- 最长前缀匹配:查找路由表时可能会得到不止一个匹配结果,我们应当从中选择具有最长网络前缀的路由
4.6 ARP(地址解析协议)
要搞懂ARP,就要先搞懂IP地址和MAC地址的关系。在OSI模型中,网络层及以上使用IP地址(逻辑地址),数据链路层和物理层使用MAC地址(硬件地址)。发送数据时,数据由上至下,到数据链路上传输。IP数据报交给数据链路层时被封装成为了MAC帧。接收数据时,剥去MAC帧的首部和尾部以后上交网络层,网络层才能找到IP数据报及其中有用的信息。
ARP就是根据IP地址(网络层)获取MAC地址(数据链路层)的一个协议。
全世界各式各样的网络使用不同的硬件地址,为了通信就要进行复杂的硬件地址转换工作(调用ARP)。IP地址把这种转换工作“屏蔽”了,这样互联网上的主机只需要有一个IP地址即可。
- ARP缓存保存IP-MAC地址之间的映射关系
- 如果ARP无相应缓存,则发送广播请求MAC地址
- 使用生存时间定期删除更新
4.7 ICMP(网际控制报文协议)
- 用于在IP主机、路由器之间传递控制信息
- 可用于测试两台主机之间的连通性(探测PING)
4.8 路由表、路由器的工作原理
- 在互联网上转发分组时,是从一个路由器转发到下一个路由器
- 当路由器需要和其他路由器连接时,连接的每个路由器都有若干个不同的IP地址(个数视连接的路由器个数决定)
- 路由表由许多条路由组成。每一条路由最主要的信息是:(目的网络地址,下一跳地址)
- 分组转发算法:如果目的地址是和此路由器直接相连的某个网络地址就直接交付(通过ARP协议把目的地址转换为MAC帧发送),否则根据网络地址确定下一跳地址。如果没有找到指明的下一跳路由器,则发送给默认路由(如果有)
4.9 RIP
- 基于距离向量的路由选择协议
- 使用UDP数据报
- 允许一条路径最多包含15个路由器。“距离”=16时即不可达,故只适用于小型网络
- 选择最短路由(“距离”最短),不会考虑时延等因素
- 仅和相邻路由按固定的时间间隔交换信息,交换的信息是当前本路由器知道的全部信息(自己的路由表),交换后更新路由表
- 好消息传播快,坏消息传播慢
- 实现简单,开销小
路由表更新(交换)的原则是找出到每个目的网络的最短距离。这种更新算法称为距离向量算法。
4.9.1 距离向量算法
P155
- 先把地址为X的路由器发送来的RIP报文距离都+1,并把下一跳地址改成X
- 对比接收的路由表,目的网络没有的就添加。有的话要看下一跳路由器是否一致。若一致就替换,不一致比较距离,比原来距离短就替换
4.10 OSPF
- 基于链路状态的协议
- 使用IP数据报
- 与RIP不同:不只是向相邻路由器发送信息,而是向本自治系统内所有路由器发送信息,交换的信息是和本路由器相邻的所有路由器的链路状态。不是按固定时间发送,而是只有当链路状态发生变化时才发送
- 更新过程收敛快
五、运输层
5.1 TCP
- 面向连接
- 提供可靠交付
- 全双工通信,有拥塞控制
- 点对点(一对一)的连接
- 面向字节流
- 资源开销大
- 报文段结构:P217
- 三/四次握手:P238
5.1.1 TCP拥塞控制
- 慢开始:达到ssthresh前,cwnd每次翻倍
- 拥塞避免:达到ssthresh后,cwnd每次加1
- 快恢复:3-ACK(对同一报文的重复确认)之后把ssthresh设为当前cwnd/2,并设cwnd=ssthresh,然后开始执行拥塞避免算法
- 快重传:3-ACK,发送方收到3个报文的重复确认后就认为需要重传
- 超时:把ssthresh设为当前cwnd/2,并设cwnd=1
- 发送方窗口上限=Min[cwnd,rwnd]
5.2 UDP
- 无连接
- 不可靠交付
- 面向报文(保留报文边界)
- 无拥塞控制
- 支持多种交互通信(一对一、一对多、多对一、多对多)
- 首部开销小
5.3 端口、套接字
P206
- 端口:通信的终点是进程,但实际上我们只要把所传送的报文交到目的主机的某个合适的端口,剩下交付进程的工作交给TCP/UDP完成即可。端口即应用层(各种协议进程)和运输层(运输实体)之间进行层间交互的一种地址
- 计算机要相互通信,要知道IP地址(为了找到对方的计算机),也要找到对方的端口号(为了找到对方计算机中的应用进程)
- 套接字socket=(IP地址:端口号)。是TCP连接的端点
六、应用层
6.1 DNS
- 域名到IP地址的解析
- 各域名服务器的作用
- 主机向本地域名服务器的查询一般采用递归查询
- 本地域名服务器向根域名服务器的查询一般采用迭代查询
6.2 SMTP(邮件传送)POP3(邮件读取)HTTP
- SMTP不使用中间的邮件服务器
- POP3用于用户从POP3服务器读取邮件
(为了找到对方计算机中的应用进程)