王道计算机考研 计算机网络

P16物理层传输介质
传输媒体并不是物理层
传输媒体在物理层的下面,因为物理层是体系结构的第一层,因此有时称传输媒体为0层。
在传输媒体中传输的是信号,但传输媒体并不知道所传输的信号代表什么意思。
但物理层规定了电气特性,因此能够识别所传送的比特流。
(电气特性,比如根据电压来确定0和1)

双绞线:

衰减信号的放大:
- 模拟传输——放大器
- 数字传输——中继器
内导体铜线,可以是单股实心线也可以是多股绞合和在一起的导线
P20


首部和尾部的标志:即在首部和尾部加上一个字节,叫做帧定界符。
帧同步:接收方应当能从接收到的二进制比特流中区分出帧的起始和终止
组帧的四种方法:1.字符计数法,2字符(节)填充法,3.零比特填充法,4违规编码法
1、字符计数法:

2、字符填充法


在发送方添加填充转义字符,在接收方去掉转移字符
3、零比特填充法

4、违规编码法

由于字节计数法中Cout字段的脆弱性(其值若有差错将导致灾难性后果)及字符填充实现
上的复杂性和不兼容性,目前较普遍使用的帧同步法是比特填充和违规编码法。
P33以太网
以太网是基带总线局域网规范,现有局域网采用的最通用的通信协议标准。
只要采用CSMA/CD技术,就可以认为是以太网。

以太网提供服务特点:
无连接:发送方和接收方之间无“握手过程”。
不可靠:不对发送方的数据帧编号,接收方不向发送方进行确认,差错帧直接丢弃,差错纠正由高层负责。
以太网只实现无差错接收,不实现可靠传输。
P34 IEEE802.11标准以及无线局域网
IEEE802.11无线局域网的通用标准

无线局域网的分类



P37链路层设备
主机和集线器的距离不能超过100米,否则失帧的状况就很明显
P47网络地址转换
私有IP地址:只能在本地网中使用,在广域网、互联网中其他路由器以及主机无法识别出来。

本地网络中的主机要与互联网进行通信,要以全球IP地址来发送数据和接收数据。
端口号可以唯一标识主机中的进程。
同一主机中不通进程端口号是不同的。
P48 路由算法与路由协议

最佳路由:“最佳”只能是相对于某一种特定要求下得出的较为合理的选择而己。
(本章所选择的最佳路由通常都是路径最短,也就是经过的路由跳数最短)



RIP:距离向量路由算法、内部网关协议
OSPF:链路状态路由算法、外部网关协议
P49 无分类编址CIDR
在变长的子网掩码的基础之上
无分类域间路由选择CIDR:

CIDR把网络前缀相同的IP地址组成一个"CIDR地址块”
只要知道CIDR地址块中任何一台主机的ip地址,就可以知道这个地址块的起始地址和终止地址(最大地址)以及地址块中的地址数
地址块的记法:地址块起始地址/位数
地址掩码:类似于子网掩码
构成超网(子网聚合)
方法:将网络前缀缩短

构成超网以后,路由表中会发现好几行都是匹配得上的,这时候应该选择哪一跳,从哪一跳走出去呢?
最长前缀匹配
使用CIDR时,查找路由表可能得到几个匹配结果,应选择具有最长网络前缀的路由。前缀越长,地址块越小,路由越具体。

-----------------------------------------------------------
顺序调整
---------------------------------------------------------
P50 ARP协议

ARP高速缓存的都是本网络内的IP地址与MAC地址的映射
若ARP高速缓存中有有3号主机的IP地址和MAC地址的映射,则填充3号的MAC地址
若没有,则要使用ARP协议
如果两个主机在一个网络内
1号主机广播一个ARP的分组请求,一号主机发送一个数据帧

最后一段为目的物理地址,即全F(全1),代表局域网内有广播效益的一个帧(有这一段的话交换机就会从它的所有端口转发这个帧),只有3号主机会响应分组,然后就知道了IP3的IP地址

接下来再封装,加一个尾部,这个尾部主要是一个帧校验序列FCS(帧尾),最后再在物理层上形成模拟信号,放在链路上面传播

如果两台主机在两个网络内

先用自己的子网掩码和IP5相与,看一下是不是在自己的网段内
如果发现要发送的主机与自己不在一个网络内,再查询默认网关的MAC地址,寄希望于默认网关(为什么不跳交换机?因为交换机没有MAC地址;正确理解“下一跳”)

在路由器处进行数据的解封装和封装的过程(最高解封装到网络层,以为路由器是三层设备)

不考虑NAT的情况,源IP和目的IP是不变的,物理地址要发生变化,因为到了新的网络内
点对点的通信应该使用ppp协议(目的地址是全1)如果不是点对点,就应该填路由器的MAC8
下一个路由器同理

在实际网络的链路上传送数据真是最终必须使用mac地址,因为最终要到一个局域网内部,把这个数据转发出去。在局域网内部只能看得懂mac地址。有的主机在自己的高速缓存中没有找到下一跳的mac地址,就要使用ap协议来帮助自己找到。

Arp协议是自动进行的,主机的使用者并不知道。
P54 RIP协议

灵魂三问:
和谁交换信息
交换什么信息
多久交换信息
要特殊说明:图中几个网络中不含有路由器

路由表是怎么更新的呢?
距离向量算法
路由表的全部信息储存在RIP报文中。相邻路由器交换信息的时候其实交换的是RIP的报文。

下一跳路由器只要是一样的,不管距离是变大还是变小,都是要替换掉(信息还是要以新的为标准 )
这里到net2距离变大了有可能是因为某条路线故障而选择走了其他线路,只要下一跳还是r4就直接替换,不用管距离变大变小





P55 OSPF协议
开放最短路径优先协议
最短路径算法SPF(shortest path first)
OSPF最主要的特征:使用分布式的链路状态协议
注意:这里是区域内每个路由器包含本区域的完整网络拓扑结构,而不是全网的情况
灵魂三问:
和谁交换信息
通过洪泛法(广播)向所有路由器发送信息
交换什么信息
相邻路由器的链路状态
注意:这里与之前的距离向量不一样,那个指的是跳数,这个指的是费用、距离、时延、带宽,取决于自己的标准
多久交换信息
只有当链路状态发生变化时
最终所有路由器都能建立链路状态数据库,即全网拓扑图


基本的一共有5个分组(1~6)
但是网络的状态不是一成不变的,如果链路状态发生变化,要如何使用这些分组?
泛洪发送链路状态更新分组(事实上只是给相邻的路由器发送,再以邻传邻)
每一个路由器的表象全面而杂乱,使用dijkstra算法进行整理(详情见数据结构)

OSPF仍将自治系统划分为更小的分区
主干区域全零,用来连接下面的区域
为防止路由环路,OSPF规定非骨干区域之间不能直接联通,必须通过骨干区域联通

有人说是运输层协议
考纲暂时当做网络层的协议来记忆

P56 BGP(顺序调整)

IGP-interior gateway protocal
EGP-exterior
BGP-border gateway protocal(边界网关协议)

BGP所交换的网络可达性的信息就是要到达某个网络所要经过的一系列AS。当BGP发言人互相交换了网络可达性的信息后,各BGP发言人就根据所采用的策略从收到的路由信息中找出到达各AS的较好路由。
交换的信息:路径的向量(完整的路径)
BGP报文:
- 应用层协议(要先建立TCP连接)(为什么要使用TCP协议?更可靠、简化路由选择协议)




---------------------------------------------------------
----------------------------------------------------------
P44

IP协议占了网络层协议的半壁江山,最重要
IP数据报如果过大,就会进行分片,也即网络层的传输单元/分组
首部分为:固定部分(固定不变20字节)、可变部分(可有可无,大部分时候都没有)

首部长度的单位为4B(每行为4B,32bit),最小为5(从0101这样的二进制的表示形式开始),一共至少5行,每行4B,所以首部固定长度为20B。
区分服务:期望获得那种类型的服务(平时很少用,只有在使用区分服务的时候才起作用)
总长度:首部+数据,单位为1B,2^16-1=65535
生存时间(TTL、Time To Live):IP分组的保质期(IP分组在网络中的寿命),每经过一个路由器TTL-1,最后如果变为0则丢弃。
设置TTL的目的:防止无法无法交付的数据报无限制的在网络中兜圈子。可以理解为最大跳数。
协议:数据部分所使用的的协议。(TCP6,UDP17“遗弃”)
首部检验和:只检验首部。数据报每经过一个路由器,路由器都要重新记录一下首部检验和。
可选字段:0~48B,用来支持拍错、测量以及安全等措施。
字节与比特:
1Byte(字节)=8 bit(比特)
bit比特是二进制位的简称,Byte是计算机数据处理的最小单元
字与字节
字由多个字节组成,1个字节8 比特、
字的位数叫做字长,即CPU一次处理的二进制代码的位数。
字的长度与计算机的架构有关(32位机、64位机)
32位机:1字=32位=4字节
64位机:1字=64位=8字节
IP数据报的分片
最大传输单元MTU:每一个数据帧都有一个可封装数据的上限,即最大传输单元。
以太网 MTU为1500字节(数据帧的数据部分)

如果该分组支持不分片,就没有办法再往下传递,就会返回一个ICMP的差错报文
标识:同一数据包的分片(超过MTU的数据报进行分片,每个分片都有相同的标识)
标志:一共有3位,只有2位有意义
中间位DF(Don‘t Fragment):DF=1,禁止分片;DF=0,允许分片。
最低位MF(More Fragment):MF=1,还有分片;MF=0,代表最后一片/没分片
只有DF=0,MF才有意义
片偏移:某片在原分组中的相对位置,以8B为单位。

单位的记忆方法:“1总8片首4”

IP地址:
寻找一个人:在哪里?叫什么?
寻找一个主机:那个网络?那个主机?
IP给每一个主机或者路由器的接口分配一个地址

并不是一个主机就一个IP地址,一个主机可能有很多接口(比如有线接口和无线接口)。路由器也不只是连接一个主机或路由器,路由器就会有很多接口,每一个接口都会分布唯一一个IP地址。

中间是无编号网络——一共6个网络
P47
网络地址转NAT(network address tranlation)

网络地址转换NAT(Network Address Translation):在专用网连接到因特网的路由器上安装NAT软件,安装了NAT软件的路由器叫NAT路由器,它至少有一个有效的外部全球IP地址。

特殊的IP地址


网段即有几种网络号的分法

网络号全为0,本网络;
主机号全0,本网络的网络号;主机号全1,指的是广播地址,都不能指定特定端口。
P48 子网划分和子网掩码

分类的IP地址的弱点:
1.IP地址空间的利用率有时很低,
2,两级IP地址不够灵活。
解决方法:子网划分

一个单位如果申请过网络号以后可以自己决定是否要划分子网号或者怎么划分子网号,以及子网号应该划分多少位。
某单位划分子网后,对外仍表现为一个网络,即本单位外的网络看不见本单位内子网的划分。
子网号的位数要求:子网号最少可以没有,最多的时候也要给主机号留两位。(因为主机号全1或者全1都是无法指派的)
子网号的内容要求:子网号在一开始是不能全0或全1的,但随着CIDR而技术的发展,全0或全1的情况也被允许。

P48

需要路由器实现一个识别的功能,需要从收到的IP分组中提取收到的目的IP地址,进而判断应该发给本单位哪一个子网里的哪一个主机。

无论是二级IP地址还是三级IP地址,都可以通过子网掩码来确定网络号。

同样的IP地址和不同的子网掩码相与是可以得到相同的网络地址的。但是子网掩码不同,所达到的效果是不同的,决定了最大主机位的多少(之后学习的CIDR技术中还会清除的了解到)
使用子网时分组的转发

怎么利用子网掩码才能正确地将IP数据报送到子网中所对应的主机上呢?
每一个路由器都有一个路由表:
1.目的网络地址
2.目的网络子网掩码
3.下一跳地址(下一跳是走哪一个路由器以及是走哪一个路由器的哪一个接口)
直接交付与间接交付
直接交付:直接交付给路由器所连的一个子网。
间接交付:路由器所连的网络中并不存在目的地址,需要从这个路由器转到下一个路由器,甚至再转很多个路由器才能到目的主机。
(判断方法:目的IP分别与子网的子网掩码分别进行相与的操作,得到的网络号与某个子网的网络号相同,则应转发给这个子网中)
P 50 arp协议
P51DHCP
主机如何获得IP地址:
- 静态配置
- ip地址
- 子网掩码
- 默认网关(一个网络中所有主机与外界进行交流的端口)
- 动态配置
- 由DHTP服务器动态分配IP地址
关于DHCP
- 应用层协议
- 基于UDP
- 客户端/服务器方式,C\S之间通过广播的方式进行交互
- 提供即插即用联网机制
- 动态分配,允许地址重用,支持移动用户加入网络
- 支持用户地址续租(分配的ip地址有时间限制,超过时间可以重新分配也可以续租)

1.主机广播DHCP发现报文
2.DHCP服务器广播DHCP提供报文
3.主机广播DHCP请求报文(既然已经找到了双方,那为什么要广播?这样就可以告诉其他的DHCP服务器可以把ip地址分配给下一台主机)
4.DHCP服务器广播DHCP确认报文
P52 ICMP协议


2、数据报要传到主机,路由器还没有到最后,如果到路由器的TTL已经变为0,那么后面肯定传不过去了。即:终点无法收到完整的数据报,那么就把之前收到的数据报全部丢弃。


组播:一点到多点
广播:一点到所有点


回送请求和回答报文:典型应用ping。测试目的站是否可达并了解其状态。
ICMP典型应用:
- PING:回送请求和回答报文,测试连通性
- Traceroute:时间超过差错报告报文,跟踪一个分组从原点到终点的路径
发送一连串的报文,分别设置TTL,等TTL等于0,则丢弃并返回时间超过差错报文
P62 UDP

应用层的报文长度应当适当
过长:由于UDP是不可靠传输,损失的数据量会比较大
过短:由于在传输层会加上UDP首部,数据部分太少会使网络层传输效率较低

源端口号可有可无,看需不需要回复,需要回复就添上,如果不需要就全部置零
UDP长度是首部+数据部分的长度和
UDP检验和:检验整个UDP数据报(包括首部字段以及数据字段)有没有出错,出错则丢弃UDP数据报
分用时(网络层交付运输层)找不到对应端口号,则丢弃报文,并发送ICMP
下面详细解释UDP检验和的校验过程:

在首部中又增加了伪首部(与IP数据报中的首部有点类似:源IP地址、目的IP地址、协议字段)
伪首部只有在计算校验和的时候才出现,不向下传递也不想上递交(发送端和接收端在校验数据有没有出问题的时候才会出现伪首部,在传输过程中伪首部自始至终都不会出现的)
如何通过伪首部来校验UDP数据报有没有发生差错?

1字节Byte = 4 bit = 8位

虽然都是“伪首部+首部+数据部分”,但是发送端的校验和字段全为0,在接收端的校验和字段是我们刚刚计算出来的校验和
交给应用层附上差错警告,由应用层来处理差错

1,TCP是面向连接(虚连接)的传输层协议。打call
2.每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的。
3、TCP提供可靠交付的服务,无差错、不丢失、不重复、按序到达。可靠有序,不丢不重
4,TCP提供全双工通信。
全双工通信:发送方和接收方角色不定,两个人可以同时发送和接受数据。
全双工通信的两端会设置
发送缓存:
- 准备发送的数据
- 己发送但尚未收到确认的数据
接收缓存:
- 按序到达但尚未被接受应用程序读取的数据
- 不按序到达的数据

序号seq:在一个TCP连接中传送的字节流中的每一个字节都按顺序编号,本字段表示本报文段所发送数据的第一个字节的序号。
确认号ack:期望收到对方下一个报文段的第一个数据字节的序号。若确认号为N,则证明到序号N-1为止的所有数据都己正确收到。
数据偏移(首部长度):TCP报文段的数据起始处距离TCP报文段的起始处有多远,以4B位单位,即1个数值是4B。
紧急位URG(发送方的紧急处理):URG=I时,标明此报文段中有紧急数据,是高优先级的数据,应尽快传送,不用在缓存里排队,配合紧急指针字段使用。
确认位ACK:ACK=1时确认号有效,在连接建立后所有传送的报文段都必须把ACK置为1,与ack序列号字段搭配sh
推送位PSH(接收方进行的紧急处理):PSH=1时,接收方尽快交付接收应用进程,不再等到缓存填满再向上交付。
同步位SYN:SYN=1时,表明是一个连接请求的发送或确认
终止位FIN:FIN=1时,表明此报文段发送方数据己发完,要求释放连接。
窗口:指的是发送本报文段的一方的接收窗口,即现在允许对方发送的数据量。
检验和:检验首部+数据,检验时要加上12B伪首部,第四个字段为6(TCP)。
紧急指针:URG=1时才有意义,指出本报文段中紧急数据的字节数。
选项:最大报文段长度MSS、窗口扩大、时间戳、选择确认
以上所有的这些都是以字节为单位的

假设运行在一台主机(客户)上的一个进程想与另一台主机(服务器)上的一个进程建立一条连接,客户应用进程首先通知客户TCP,他想建立一个与服务器上某个进程之间的连接,客户中的TCP会用一下步骤与服务器中的TCP建立一条TCP连接:


第三步已经可以携带数据了
SYN洪泛攻击




什么是可靠?
保证接收方进程从缓存区读出的字节流与发送方发出的字节流是完全一样的。
流量控制

利用滑动窗口机制来实现流量控制
接收方根据自己接收缓存大小,动态调整发送方发送窗口大小
发送窗口取:
MIN{接收窗口rwnd,拥塞窗口cwnd}
接收方会返回一个窗口信息,发送方根据接收窗口和拥塞窗口确定发送窗口
发送方的发送窗口可以动态变化的,取决于接收方所返回的报文段,可以使确认报文段,也可以是数据报文段
发送窗口也可以是0,发送方将没有办法把数据发送给接收方,接收方则把接收的缓存上传到上层应用,直到上传完毕,接收方再重新发送报文段告诉发送方可以发送报文段了

TCP协议并不适用停等协议(并不是发送一个报文段,收到一个确认才能接着收到下一个报文段,而是可以采取累积确认的机制,把之前全部按序排列的报文段用一个报文段来进行确认)
注意:第五行ack虽然是201,但是还没到重传时间,不确定201那个报文段是还在路上还是丢了。看哪一个更快吧,如果第三个ACK帧在计时器计满后才到达,那么就是超时重传,如果是在计时器计满前,ACK先到,那么就是快重传
如何打破主机A和主机B之间互相死锁的局面?

即使主机B发送的报文段丢失了,主机A会发送探测报文段,主机B再回复主机A确定是否可以发送数据了
P67 TCP拥塞控制
拥塞:对资源的需求总和 >可用资源
拥塞控制:防止过多的数据注入网络
拥塞控制VS流量控制

拥塞控制是全局性的控制;
流量控制是点到点的控制。

慢开始和拥塞避免:

之前是指数规律增长
ssthresh慢开始门限,此后拥塞窗口进入加法增大(线性增长)
直至发生网络拥塞
然后瞬间将拥塞窗口减少到只有一个报文段
新的门限值ssthresh(新的门限值为上次的网络拥塞/2)
快重传和快恢复:

P70 DNS
域名每一段称为一个标号
每个标号不能超过63个字符,最好不超过12个字符,不区分大小写字母,由字母和数字组成(有时候出现-),其他字符不能使用




高速缓存:会定时更新(为每一个内容设置一个计时器,并且处理每一个超过时间的项)
有的主机也有高速缓存