1 应用层
1.1 HTTP(TCP)
浏览器访问WWW服务器过程:首先进行域名解析,然后通过TCP向服务器发送连接请求
HTTP本身是无连接,无状态的。无状态特性使服务器能够支持大量的并发HTTP请求。实际应用中,通常使用Cookie加数据库跟踪用户活动。
Cookie原理:用户访问使用Cookie的网站,服务器生成一个唯一识别码,在响应报文中添加Set-cookie首部行,用户收到后,在本机特定文件中记录主机名和cookie。当用户再次浏览时,用户会取出对应cookie放入请求报文的首部行。
持续连接:分为流水线方式和非流水线方式,默认采用流水线方式,共经历1个RTT延迟
非持续连接:每个网页对象都需要建立一个TCP连接
HTTP面向文本的,报文中每个字段都是ASCII字符串
1.2 SMTP/POP3(TCP)
推协议:SMTP(端口号25,TCP连接)、HTTP
拉协议:POP3(TCP)、IMAP、HTTP
1.3 DNS(UDP)
根域名服务器-顶级域名服务器-权限域名服务器-本地域名服务器
域名解析方式:
-
递归解析
-
迭代解析
本地域名服务器一般会保存查询结果的缓存,待下次再次查询时,可直接返回查询结果。
1.4 FTP(TCP)
工作方式:客户机/服务器,TCP可靠传输服务
服务器进程组成:(主进程和从属进程并发执行)
- 主进程:负责接受新的请求
- 若干从进程:负责处理单个请求
使用两个并行的TCP连接:控制连接(21端口号)和数据连接(20端口号)
控制连接:用来传输控制信息(连接请求、传送请求等)
数据连接:客户端和服务端的数据传输
1.5 网络应用模型
客户机/服务器模型:
-
服务器可以通过权限访问控制客户机的活动
-
客户机之间不直接通信
-
可扩展性不强,服务器支持的客户机数量有限
P2P模型:
- 减轻计算压力
- 可扩展性好
- 网络健壮性强
但是影响本机的速度,占用本机的内存
2 运输层
套接字:唯一标识网络中的一台主机和其中的一个应用,相当于IP+端口号
TCP:面向连接的可靠传输服务
UDP:无连接非可靠传输协议,仅提供两个服务(多路复用和对数据的错误检查)
2.1 UDP
分组首部8B
,UDP支持一对一,一对多,多对多的通信
地址标识:(目的主机IP + 进程端口号)
特点:
- 无连接
- 无拥塞控制
- 不可靠,数据可靠通过应用层实现
但有校验和,检测出错后,报告应用层(或者丢弃),运输层不改动
2.2 TCP
首部为20B
地址标识:(源主机IP + 源端口号 + 目的主机IP + 目的端口号)
面向连接的可靠传输协议:
- 面向连接:三握四挥
- 可靠传输:差错检测,确认重传,定时器管理
- 流量控制:滑动窗口
- 拥塞控制:慢开始,拥塞避免,快重传,快恢复
三次握手:
- TCP请求报文段
- TCP连接响应报文段
- TCP连接确认(附带应用层请求报文)
- 应用层响应报文进行响应
为什么不是两次握手:在某些情况下(网络延迟,数据丢失),服务器连接响应报文可能无法到达客户端,导致连接无法建立
四次挥手:
- 客户(客户端和服务端都可以主动提出)主动提出释放连接请求
- 服务端进行响应确认,通知应用进程关闭服务线程
- 服务端关闭线程后,发送关闭连接的确认响应
- 客户端接受到关闭通知后,发送确认响应
三次挥手可能出现的问题:
- 出现半开连接,客户端发送关闭连接请求,并且收到服务器的ack确认响应,于是关闭连接,但是服务器没有检测到连接已经关闭,导致服务器资源一直被占用
- 客户端和服务端都以为连接已经关闭,实际上没有关闭,这种情况称为死链接,占用网络资源
可靠传输:
TCP头部包含:校验和,序号和确认号,超时计数器
序号:占 4B ,每个字节都要编一个号,序号字段的值为本报文段发送数据的第一个字节的序号。
确认号:期望对方下一个报文段接受到的字节序号,若确认号为N,代表序号到N-1为止的数据全部收到。
每发送一个报文段,就对这个报文段设置一次定时器,TCP超时重发定时器的值是自适应变化的。
停等协议:发送方等待接收方确认才能发,不能流水线发送,信道利用率低
流水线协议:发送方在等待确认时可以继续发送报文,信道利用率提高
回退N步协议:报文段错误后,将重发此报文段后续所有报文段,提高信道利用率,浪费带宽(重发所有无序的报文段)
选择重传协议:缓冲其他后续接受到的报文段,发送方仅仅重发错误的报文段
流量控制:
滑动窗口协议:
- 收发主机设置各自的TCP数据缓冲区
- 在缓冲区设置发送窗口和接收窗口
- 发送方窗口等于接收方窗口
如果接收方处理数据的速度大于接受数据的速度,接受方窗口大小就会扩展,并且之后会把窗口大小传给发送方,引起发送方窗口增大。反之,接收方窗口减小,引起发送方窗口减小。
拥塞控制:
传送数据过多,数据重传。拥塞窗口随拥塞情况动态变化
接受窗口表示接收方缓冲区的接受容量(运输层)
拥塞窗口表示网络的吞吐量(网络层)
发送方窗口大小=min(接收窗口,拥塞窗口)
慢开始算法:拥塞窗口小于慢开始门限,新拥塞窗口 = 原拥塞窗口 * 2
拥塞避免算法:当前拥塞窗口大于慢开始门限,新拥塞窗口 = 原拥塞窗口 + 1MSS
在定时器超时前,未受到确认,认定网络拥塞发生。此时重设门限值为当前拥塞窗口的一半。重新慢开始算法,拥塞窗口从1MSS开始
MSS:最大报文长度
快重传算法:发送方发送 M 1 , M 2 , M 3 , M 4 , M 5 , M 6 M_1, M_2, M_3, M_4, M_5, M_6 M1,M2,M3,M4,M5,M6 , M 3 M_3 M3 丢失,接收方收到无序报文段,对于 M 4 , M 5 , M 6 M_4, M_5, M_6 M4,M5,M6 的回复重复确认 M 3 M_3 M3 ,发送方立即重传 M 3 M_3 M3 ,此时并没有超时,网络没有拥塞,防止误判重新慢开始,防止网络传输率下降
快恢复算法:发送方收到三个连续重复确认,直接执行拥塞避免算法
此时的操作为:慢开始门限等于当前拥塞窗口的一半,当前拥塞窗口等于慢开始门限。也就是当前拥塞窗口直接等于新的慢开始门限,就要执行拥塞控制算法
3 网络层
3.1 网络层服务
通信网络:
- 电路交换网络:独占预先分配链路资源
- 分组交换网络:按需分配链路资源
- 虚电路网络:发送数据报前确定了线路
- 数据报网络:发送数据报前不确定线路(采用)
数据报统一地址寻址:最长前缀匹配原则来确定数据转发的网络接口(二叉树查找路由表)
路由选择与分组转发:
路由:软件实现,确定从发送主机到接受主机之间的传输数据报的路径,主要应用于整个网络
转发:硬件实现,从路由器一个网络接口接受,另一个网络接口转发出去。(检索转发表,比对首部参数值,确定出口)
转发表由路由协议中的路由算法决定
数据报的拆分和重组:MTU(最大传送单元,链路层的装载载荷,包括网络层及以上的数据)和MSS(最大报文长度,传输层报文载荷,不包括头部,包括应用层信息)
只在目的主机进行数据报分片的重组,路由器只转发,不组合
3.2 IPv4
数据报组成:首部(20B)+数据部分
IP首部部分重要字段:
分片标识号:同一数据报的分片具有相同的标识号
分片标志位:DF = 0
允许分片,MF = 0
代表是最后一片
分片偏移量:拆分数据报中数据首字节的序号,以8 Byte
为单位计算,第1400个字节,片偏移为 1400 / 8 = 175 1400 / 8 = 175 1400/8=175 。
分片是因为不同的网络MTU不一样,需要对数据进行拆分
IPv4地址:IP地址 = 网络ID + 主机ID
(网络ID和主机ID都是既不能全0又不能全1)
A:网络位8位,主机位24位(127为特殊地址不分配)
B:网络位16位,主机位16位
C:网络位24位,主机位8位
私有地址:内部网络使用,公网不被承认
- A:10.0.0.0
- B:172.16.0.0 - 172.31.0.0
- C:192.168.0.0 - 192.168.255.0
三层网络划分:
IP地址 = 网络ID + 子网ID + 主机ID(主机高位进行子网划分)
同一子网的主机具有相同的子网地址,可以直接互通数据报,路由器的不同接口连接不同的子网
子网掩码 & IP地址 = 子网地址(网络ID+子网ID+主机ID(主机ID全0))
子网掩码作用:求得子网地址,划分子网
划分子网的数量由掩码的主机地址中1的数量
n
决定,为 2 n − 2 2 ^ n - 2 2n−2
路由选择根据网络ID和子网ID进行,局域网之外根据网络ID,局域网之内根据子网ID
网关:路由器某一网络接口的IP地址,与主机在同一子网中
同一子网判断:主机A子网掩码与B的IP地址得到A认为B的子网地址,然后将A的子网地址和B的子网地址比较
地址分配:
- 静态配置:手动配置
- 动态配置:DHCP(发现,提供,选择,确认)
CIDR无类域间路由:使用不属于任何类的网络地址块
地址格式: a.b.c.d/x
这里的 x
表示地址中网络部分的位数。
好处:提高IP地址分配效率,提高路由效率(可以进行路由聚合,多个子网汇聚成一个大子网)
CIDR查找路由表的方法:最长前缀匹配原则,将路由表存放在层次数据结构中,自上而下进行层次查找。常用的是二叉搜索。
使用CIDR时,路由表由网络前缀和下一条网络地址组成。查找路由表时可能得到不止一个匹配结果,应该选择具有最长前缀的路由。因为网络前缀越长,地址块越小,路由越具体。
最小的子网:主机位最小为2位
3.3 NAT
私有IP地址转化为公有IP地址
路由器IP地址,一个配置私有IP地址,一个配置公有IP地址
使用NAT的局域网运行一个对外的服务器,需要解决穿透NAT问题
NAT中有一张转换表(源私有IP,源端口号,公有地址,新端口号)
转发数据报到外网添加新记录,从外网接受数据时,查找相应记录,转发至内网
IP数据报承载的如果不是TCP(TCP才有IP+端口号)
,则NAT无法工作
3.4 IPv6
128位,头部固定长度40字节,IPv6只允许在发送端进行数据报拆分,分为8部分
单播地址:一个单播地址对应一个唯一的网络接口(010标识该地址为单播地址)
多播地址:一个多播地址对应一组网络接口,数据报送到该地址对应的一组接口上(数据报送到该组的每一个接口)
任播地址:一个任播地址对应一组网络接口(数据报转发到该组对应的最近的一个接口)
IPv4路由也可分片,IPv6只在发送主机分片(路由器发现大于MTU的数据报直接丢弃,并发送ICMP差错报告)
过渡技术:
- 隧道技术
- 双协议栈技术
3.5 ICMP
ICMP被封装在IP数据报中进行传输
- 差错报文
传输数据出错,ICMP向发送主机汇报情况,不进行纠错。
- 网络探询报文
确定网络层是否联通(ping
命令):发送主机,发送ICMP回送请求报文;目的主机返回ICMP回送应答报文
确定往返时间:发送主机,发送ICMP时间戳请求报文;目的主机返回ICMP时间戳应答报文
3.6 ARP地址解析协议
把IP地址映射到MAC地址,网络接口之间传递数据看的是MAC地址
应用范围:同一子网中
ARP是即插即用的,自动创建ARP地址解析表(IP地址,MAC地址,TTL),无需管理
同一子网中,主机A的ARP表中没有主机B的MAC地址,解析过程:
- 主机A发送ARP请求数据报,发送广播帧到子网中
- 子网中所有网络接口收到广播帧,看目的IP地址与自己IP地址是否匹配,匹配的话返回ARP响应数据报
- 主机A接受到相应数据报,保存在ARP表中
不同子网中
- 主机A查找ARP表,获得默认网关的MAC接口,发送数据报封装成帧给默认网关
- 默认网关提取IP数据报,查找路由表,转发至对应接口
- 接口查找ARP表得到B的MAC地址,封装成帧发给B
3.7 路由选择算法
路由器的两个功能:路由选择和数据转发
路由器中有路由表:记录目的网络地址和下一跳的节点地址
路由表:
- 静态路由:记录目标地址的下一跳的网络地址
- 动态路由:通过运行的RIP, OSPF,BGP协议动态更新
路由选择算法:
- 距离向量算法
动态的分布式算法,在RIP协议中使用,应用于较小的网络
路由器只了解自己与邻居节点的链路成本,然后通过迭代计算,与邻居路由器交换路由信息。
距离矢量算法(DV)他会把自己的路由表分享给自己的所有相邻节点,那么这些节点如果发现通过新的路由表自己到其他节点的距离改变了,那么再把自己的更新的路由表发送给自己的周围节点,所以这个过程是迭代的,异步的。
本节点 S S S 的距离更新相当于 m i n ( D S Y , D S X + D X Y ) min(D_{SY}, D_{SX} + D_{XY}) min(DSY,DSX+DXY) ,XY的距离发生了更新,将信息发送给了S
缺点:不适合大型网络,适合小型网络
- 链路状态算法(典型的链路状态算法OSPF)
三个步骤:
(1)路由器探测所有邻居节点,计算链路成本,组装成数据报
- 向每个端口发送hello数据报,获得邻居节点地址
- 向邻居节点发送echo数据报,等待响应,获得往返时间(链路成本)
(2)路由器发送自己链路数据报,通过洪泛法发送至网络中所有路由器
洪泛法:不计算路径,有路就走
存在问题:数据报重复到达某一节点,可以通过设置已收过的数据不再接受,对数据报设置标记,数据更新则标记更新,标记用来标识是否是同一个数据报
(3)每台路由器将获得整个网络拓扑结构信息,使用dijkstra算法更新路由表
优点:适用于大型网络,收敛性好
缺点:计算量和存储量大
3.8 路由选择协议
自治系统:具有单一管理权限的网络
内部网关协议:AS之内的路由选择
- RIP(路由选择协议,距离向量算法),在应用层,使用UDP
距离度量:每个链路一跳,最大15跳(16跳表示无穷大)
每隔30秒:邻居交换一次距离度量
- OSPF(开放最短路优先协议,链路状态算法),在网络层,链路状态数据报封装在IP数据报进行传输
适用于大型网络,每条链路可设置不同的成本度量(吞吐量,时延,带宽)
外部网关协议:AS之间的路由选择,不同AS之间的路由器需要运行同一种路由选择协议,边界路由器同时运行内部网关和外部网关路由协议
BGP:边界网关协议,路径向量算法,找出一条较好的路径,并非找出最佳路径,故是路径向量算法
单播路由选择:一个发送主机和一个接收主机,协议选择:RIP,OSPF,BGP
多播路由选择:一个发送主机和一组接收主机
4 链路层
4.1 功能
核心部件:网卡
转发数据报:封装网络层数据报形成一帧,发送帧到物理层
封装成帧:添加帧首部和帧尾部,和帧数据部分(MTU最大传送单元)进行组装
物理寻址:网卡地址,检测帧中的目的地址和自身网卡地址是否匹配
物理地址=网卡地址=MAC地址=LAN地址=以太网地址
发送接口和接受接口的网卡必须在同一子网中
可靠传输:以太网(无确认无连接),无线通信(有确认无连接)
差错控制:循环冗余校验码(检错,具有纠错能力,但没用到),海明码(可纠正一位错误)
流量控制:相邻两节点之间的流量,滑动窗口大小固定不变
窗口中存的是帧的序号,故接受窗口大小 + 发送窗口大小 ≤ 2 n \le 2 ^ n ≤2n
流量控制采用的协议:停等协议,后退N帧协议(累计确认),选择重传协议
4.2 介质访问控制MAC
- 随机访问MAC协议:在任意时刻,各点可以随时发送信号,产生冲突再恢复
ALOHA协议:不监听,随机发,容易冲突,吞吐量低
时隙ALOHA协议:按时隙发,减少冲突概率
CSMA载波监听多路访问:各点发送数据帧之前,监听信道,减小冲突概率,不能消除冲突(冲突由节点距离和延迟引起的)
CSMA/CD载波多路监听访问/冲突检测:检测到冲突停止发送,减少资源浪费
CSMA/CA载波多路访问/冲突避免:发送时先广播通知其他节点,不要发送,尽量避免冲突,有确认重传机制
- 信道划分MAC协议:将共享链路分给各点,不冲突
时分多路复用,频分多路复用,码分多路复用
- 轮询访问MAC协议:任意一个时刻,只允许一个点发送信号,不冲突
4.3 以太网
拓扑结构:总线型,星型
集线器:物理层设备,转发比特,需要介质访问控制,不能分割冲突域
网桥:链路层设备,可以扩展局域网,分割冲突域
交换机:具有n个接口的网桥,隔离冲突域,内部有交换表,具有自我学习功能,无需配置,形成广播域
网络层设备:阻隔广播风暴