文章目录
名称 | 链接 |
---|---|
概述 | 概述 |
物理层 | 物理层 |
数据链路层 | 数据链路层 |
网络层 | 网络层 |
运输层 | 运输层 |
应用层 | 应用层 |
一、基本概念
OSI 有哪几层,以及各自作用
- 应用层(数据):确定进程之间通信的性质以满足用户需要以及提供网络与用户应用;
- 表示层(数据):主要解决拥护信息的语法表示问题,如加密解密;
- 会话层(数据):提供包括访问验证和会话管理在内的建立和维护应用之间通信的机制,如服务器验证用户登录便是由会话层完成的;
- 传输层(段):实现网络不同主机上用户进程之间的数据通信,可靠与不可靠的传输,传输层的错误检测,流量控制等;
- 网络层(包):提供逻辑地址(IP)、选路,数据从源端到目的端的传输;
- 数据链路层(帧):将上层数据封装成帧,用 MAC 地址访问媒介,错误检测与修正;
- 物理层(比特流):设备之间比特流的传输,物理接口,电气特性等;
知道各个层使用的是哪个数据交换设备。
- 网关:应用层、传输层(网关在传输层上以实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关的结构也和路由器类似,不同的是互连层。网关既可以用于广域网互连,也可以用于局域网互连);
- 路由器:网络层(路由选择、存储转发);
- 交换机:数据链路层、网络层(识别数据包中的 MAC 地址信息,根据 MAC 地址进行转发,并将这些 MAC 地址与对应的端口记录在自己内部的一个地址表中);
- 网桥:数据链路层(将两个 LAN 连起来,根据 MAC 地址来转发帧);
- 集线器(Hub):物理层(纯硬件设备,主要用来连接计算机等网络终端);
- 中继器:物理层(在比特级别对网络信号进行再生和重定时,从而使得它们能够在网络上传输更长的距离);
二、物理层
三、数据链路层
1. 三个基本问题 以及 MTU
三个基本问题
封装成帧、透明传输、差错检测、顺序控制、流量控制(后两个目前已不用)
- 封装成帧:就是在一段数据的前后分别添加首部和尾部,然后就构成了一个帧。
每一种数据链路层协议都规定了帧的数据部分的长度上限——最大传输单元 MTU。(数据链路层的最大MTU为1500字节,最小MTU为64字节) - 透明传输:表示无论什么样的比特组合的数据都能通过这个数据链路层。
具体方法:字节填充 或 字符填充 - 差错检测:在传输过程中可能会产生比特差错:1 可能会变成 0 而 0 也可能变成 1。
循环冗余检验CRC。 - 顺序控制:发送端先发的帧在点到点的线路上由于某种原因没有到达接收端;发送端后发的帧先于先发的帧到达接收端。
解决方法:通过在帧中增加序号管理字段,来解决接收端能按顺序接收到发送端发来的数据。 - 流量控制:收发双方由于收发速率不协调,导致接收端缓冲区溢出。
解决方法:建立反馈应答机制。
数据链路层 MTU 的最大值和最小值是多少?
- 数据链路层的最小MTU 为 64 字节。对于 IEEE802.3,两个站点的最远距离不超过 2500m, 由 4 个中继器连接而成,其冲突窗口为 51.2us(2 倍电缆传播延迟加上 4 个中继器的双向延迟)。对于 10Mbps 的 IEEE802.3 来说,这个时间等于发送 64 字节,即 512 位的时间,64 字节就是由此而来的。如果一个站点已经传输了 512bit,就认为它已经占用了这个信道。
- 数据链路层的最大 MTU 为 1500 字节,即数据字段的最大长度。
2. 点对点协议 PPP
点对点协议PPP
- PPP 是面向字节的,所有的 PPP 帧的长度都是整数字节。
- PPP协议应满足的需求:
简单(首要要求)、封装成帧、透明性、多种网络层协议、多种类型链路、差错检测、检测连接状态、最大传送单元、网络层地址协商、数据压缩协商; - PPP 协议的组成:
一个将 IP 数据报封装到串行链路的方法;
一个链路控制协议 LCP (Link Control Protocol);
一个网络控制协议 NCP (Network Control Protocol) ;
3. CSMA/CD 协议
载波监听多点接入/碰撞检测(Carrier Sense Multiple Access with Collision Detection)
CSMA/CD 协议 要点
- 多点接入:网络上所有工作站收发数据共同使用同一条总线,且发送数据是广播式的。
- 载波监听:网络上各个工作站在发送数据前都要确认总线上有没有数据传输。若有数据传输(称总线为忙),则不发送;若无数据传输(称总线为空),立即发送。
- 碰撞检测:为了减少碰撞发生后的影响,工作站在发送数据过程中还要不停地检测自己发送的数据,看有没有在传输过程中与其他工作站的数据发生碰撞。(也称为 冲突检测)
CSMA/CD 协议 的思想
- 先听后发
- 边听边发
- 冲突即停
- 延迟重发
争用期
- 最先发送数据帧的站,在发送数据帧后至多经过时间 2τ (两倍的端到端往返时延)就可知道发送的数据帧是否遭受了碰撞。
- 以太网的端到端往返时延 2τ 称为争用期,或碰撞窗口。
- 经过争用期这段时间还没有检测到碰撞,才能肯定这次发送不会发生碰撞。
- 例如,对于10 Mb/s以太网,发送 512 bit(即 64 字节) 的时间需要 51.2μs。以太网在发送数据时,若前 64 字节没有发生冲突,则后续的数据就不会发生冲突,以太网取 51.2 μs 为争用期的长度。对于100 Mb/s以太网,争用期为 5.12μs。
- 以太网上帧的最小时间间隔为 9.6 μs,相当于传输96比特所需的时间。
四、网络层
1. IP 协议
如何理解 IP 的不可靠和无连接
- 不可靠:指的是不能保证数据报能成功地到达目的地。发生错误时候,丢弃该数据包,发送 ICMP 消息给信源端。 可靠性由上层提供。
- 无连接:IP 不维护关于后续数据报的状态信息。体现在,IP 数据可以不按顺序发送和接收。A 发送连续的数据报,到达 B 不一定是连续的,
来回路由选择可能不一样,路线也不一样,到达先后顺序也不一样。
IP 报文的格式和各个字段的含义
- 版本——占 4 位,指 IP 协议的版本目前的 IP 协议版本号为 4 (即 IPv4)。
- 首部长度——占 4 位,可表示的最大数值是 15 个单位(一个单位为 4 字节),因此 IP 的首部长度的最大值是 60 字节。
- 区分服务——占 8 位,用来获得更好的服务,在旧标准中叫做服务类型,但实际上一直未被使用过。1998 年这个字段改名为区分服务。只有在使用区分服务(DiffServ)时,这个字段才起作用。在一般的情况下都不使用这个字段 。
- 总长度——占 16 位,指首部和数据之和的长度,单位为字节,因此数据报的最大长度为 65535 字节。总长度必须不超过最大传送单元 MTU。
- 标识(identification)——占 16 位,它是一个计数器,用来产生数据报的标识。
- 标志(flag)——占 3 位,目前只有前两位有意义。
- 标志字段的最低位是 MF(More Fragment)。MF = 1 表示后面“还有分片”。MF = 0 表示最后一个分片。
- 标志字段中间的一位是 DF (Don’t Fragment) 。只有当 DF = 0 时才允许分片。
- 片偏移——占13 位,较长的分组在分片后,某片在原分组中的相对位置。片偏移以 8 个字节为偏移单位。
- 生存时间——占8 位,记为 TTL (Time To Live),数据报在网络中可通过的路由器数的最大值。
- 协议——占8 位,字段指出此数据报携带的数据使用何种协议,以便目的主机的 IP 层将数据部分上交给哪个处理过程。
- 首部检验和——占16 位,字段只检验数据报的首部,不检验数据部分。这里不采用 CRC 检验码而采用简单的计算方法。
- 源地址——占32位(4字节)。
- 目的地址——占32位(4字节)。
为什么 IP 首部中要有总长度字段?
- 因为一些数据链路(以太网)需要填充一些数据以达到最小长度。因为以太网帧的最小长度是 46 个字节,但是 IP 长度可能更短,所以需要总长度来确定 IP 数据部分的内容。
IP 首部校验和怎么计算的,与 ICMP,IGMP,TCP,UDP 的首部校验和有什么区别与共同点?
- IP 首部校验和的计算
(1) 先把校验和字段置 0。
(2) 对首部中每个 16 位比特进行二进制反码求和。
(3) 结果存在检验和字段中。
(4) 收到一份 IP 数据包后,同样对首部中每个 16bit 二进制反码求和。
(5) 最后结果全为 1,表示正确,否则表示错误。
(6) 如果是错误的,IP 就丢弃该数据报,但是不生成差错报文,由上层去处理。 - 共同点:用到的算法都是一样的。
- 区别:IP 计算的时候没有将数据包括在内。
ICMP,IGMP,TCP,UDP 同时覆盖首部和数据检验码。
主机和路由器本质区别是?
- 主机从不把数据报从一个接口转发到另一个接口,而路由器则要转发数据报。
IP 路由选择的过程是怎么样的?
- 根据最长匹配原则,找到条目,发送到指定的路由器。如果不能找到,返回一个“主机不可达”或“网络不可达”的错误。
IP 路由选择的特性有什么?
- IP 路由选择是逐跳进行的。IP 并不知道到达任何目的的完整路径,只提供下一跳地址。
- 为一个网络指定一个路由器,而不是为每个主机指定一个路由器。这样可以缩小路由表规模。
IP 搜索路由表的步骤
- 搜索匹配的主机地址 ----> 搜索匹配的网络地址 ----> 搜索默认选项
- IP 层进行的选路实际上是一种选路机制,它搜索路由表并决定向哪个网络接口发送分组。
如果路由表中没有默认项,而又没有找到匹配项,这时如何处理?
- 结果取决于该 IP 数据报是由主机产生的还是被转发的。
- 如果数据报是由本机产生的,那么就给发送该数据报的应用程序返回一个差错,或者是“主机不可达差错”或者是“网络不可达差错”。
- 如果是被转发的数据报,就给原始发送一份 ICMP 主机不可达的差错报文。
IP 地址的分类,如何划分的,及会计算各类地址支持的主机数
- A 类地址:首位为 0,1.0.0.1~~126.255.255.254;主机号 24 位
- B 类地址:首位为 10,128.0.0.1~~191.255.255.254;主机号 16 位
- C 类地址:首位为 110,192.0.0.1~~223.255.255.254;主机号 8 位
- D 类地址(多播地址,也叫做组播地址):首位为 1110,224.0.0.1~~239.255.255.254
- E 类地址:此类地址是保留地址,首位为 11110,240.0.0.1~~254.255.255.254
2. ICMP 协议
ICMP 的层次和作用。
- ICMP 一般认为是在三层的。主要传递一些差错报文和其他需要注意的信息。
ICMP 报文的分类?
- ICMP 分为两类,一类是 ICMP 查询报文,另一类是 ICMP 差错报文。
ICMP 的主机不可达报文是在什么情况下发出的?
- 三层设备(路由器)给该主机寻路时,没有找到相应路径,向源 IP 发回 ICMP 主机不可达
什么情况不会导致产生 ICMP 差错报文?
- ICMP 差错报文。
- 目的地址是广播地址或者多播地址的 IP 数据报。
- 链路层广播的数据报
- 不是 IP 分片的第一片
- 源地址不是单个主机的数据包。
ICMP 重定向差错报文是怎么来的,在何种场合出现?
- 主机发送 IP 数据报给 R1,因为主机的默认路由指向的下一跳是 R1。
- R1 收到数据报并且检查它的路由表,发现 R2 是发送该数据报的下一跳。当他将数据报发送给 R2 的时候,发现发送的接口与接受的端口是一样的,因此同时发送一个 ICMP 重定向报文给主机。
- R1 接受到 ICMP 重定向报文后,接下来的数据报就发送给 R2,而不再发送给 R1。
重定向报文有什么规则?
- 重定向报文只能有路由器生成。
- 重定向报文是为主机而不是为路由器使用的。
Ping 命令的具体过程是怎么样的?
3. 划分子网和构造超网
4. 地址解析协议 ARP
ARP 的作用?
- ARP 为 IP 地址到对应的硬件地址提供动态映射。
点对点链路使用 ARP 吗?
- 不使用
ARP 高效运行的关键是什么?
- 关键是每个主机上都有一个 ARP 的高速缓存。
ARP 报文的各个字段以及含义?
- 帧类型:ARP:0x0806 (2) ARP 首部:
- 硬件类型:硬件地址的类型,1 表示以太网地址。(2)
- 协议类型:协议地址的类型,0x0800 表示 IP 地址。(2)
- 硬件地址长度:字节为单位 6 (1)
- 协议地址长度:字节为单位 4 (1)
- 操作类型:2 个字节。 ARP 请求 1,ARP 回复 2,RARP 请求 3,RARP 应答 4。(2)
- 发送者硬件地址:6 个字节(6)
- 发送者 IP 地址:4 个字节(4)
- 目标硬件地址:6 个字节(6)
- 目标 IP 地址:4 个字节(4)
- CRC 校验:4 个字节 (4)
- 总结:
arp 总共 28 个字节。
记忆方法: 以太网先目地后源,ARP 先发送端后目地端。先硬件后协议。
ARP 协议有什么弱点?
- 缓存:主机的地址映射是基于高速缓存的,动态更新的。地址刷新是有时间限制的。 可以通过下次更新之前修改计算机上的地址缓存,造成拒绝服务攻击或者 ARP 欺骗。
- 广播: 攻击者可以伪装 ARP 应答。
- ARP 应答没有认证,都是合法的。可以在不接受到请求的时候就发出应答包。
ARP 代理的概念和应用场景
- 若 ARP 请求是从一个网络的主机发送给另一个网络上的主机,那么连接这两个网络的路由器就可以回答该请求,这个过程叫做 ARP 代理。ARP 代理路由器响应 ARP 请求的 MAC 地址为路由器的 MAC 地址而非 ARP 请求的主机的 MAC 地址。
- ARP 代理的应用环境:
两个物理网络之间的路由是使用相同的网络号,两个路由器设置成 ARP 代理,实现相互隐瞒物理网络
免费 ARP
- 指主机发送 ARP 查找自己的 IP 地址,即数据链路层 SIP=DIP
- 作用有两个:
- 一个主机使用免费 ARP 确定是有存在有其他主机设置了相同的 IP 地址
- 如果发送免费 ARP 的主机改变了 MAC 地址,可以通过发送免费 ARP 的方式告知其他主机端更新 ARP 表
五、运输层
1. UDP 协议
UDP 和 TCP 的简单介绍。
- UDP 是一个简单的面向数据报的运输层协议:进程的每个输出操作都正好产生一个 UDP 数据报,并组装成一份待发送的 IP 数据报。
- TCP 是面向流字符,应用程序产生的全体数据与真正发送的单个 IP 数据报可能没什么联系。
UDP 报头字段和含义?
- 源端口号(2)
- 目地端口号(2)
- UDP 长度:是 UDP 的报文总长度,是多于的。 IP 总长度减去首部长度就是此值。(2)
- UDP 校验和:注意点:校验和是可选的。 (TCP 是必选的)校验和覆盖 UDP首部和数据(TCP 也一样覆盖首部和数据,但是 IP 指覆盖首部)(2)
UDP 的校验和是怎么计算的?
- UDP 的校验和要计算首部和数据部分。首部还包括伪首部。
- 多了 12 个字节的伪首部。
- 注意点:UDP 长度计算两次。
如果检验和有错,则 UDP 数据报被悄悄丢弃,不产生任何差错报文。
为什么要加有伪首部?
- 目的是让 UDP 两次检查数据是否已经正确到达目的地。
- IP 接受正确的目的地址,传送到正确的上层程序。
- 所有伪首部包括:源 IP 地址,目的 IP 地址,0,协议号,UDP 长度。
2. TCP 协议
TCP 通过哪些方式来保证可靠性?
- 应用数据被分割成 TCP 认为最适合发送的数据块。
- 确认机制,发送报文后,等待确认。
- 重发机制,没有收到确认,将重发数据段。
- 保持它首部和数据的校验和。确认数据的准确性。
- 排序,丢弃重复的,流量控制。
TCP 与 UDP 的概念相互的区别及优劣
TCP | UDP |
---|---|
面向连接 | 无连接 |
可靠传输,使用流量控制和拥塞控制 | 不可靠传输,不使用流量控制和拥塞控制 |
只能是一对一通信 | 支持一对一,一对多,多对一和多对多交互通信 |
面向字节流 | 面向报文 |
首部最小20字节,最大60字节 | 首部开销小,仅8字节 |
适用于要求可靠传输的应用,例如文件传输 | 适用于实时应用(IP电话、视频会议、直播等) |
TCP、UDP 为什么存在伪报头?
- UDP(TCP)检验和:是根据 UDP(TCP)数据报和伪报头计算得到的差错检测值。
- 伪报头包含源和目的 IP 地址,以及来自 IP 数据报报头的协议值。IP 数据报在网络中传送时包含 UDP 数据报。
- 伪报头并不会在网络中传送,校验和中所包含的伪报头内容可以避免目的端错误地接收错误路由的数据报。校验和值的计算方法和 IP 报头检验和的计算方法类似。
为什么要 3 次握手,4 次挥手
- 3 次握手:防止已过期的连接请求报文突然又传送到服务器,因而产生错误
- 4 次挥手:确保数据能够完成传输,但关闭连接时,当收到对方的 FIN 报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可以未必会马上会关闭 SOCKET,也即你可能还需要发送一些数据给对方之后,再发送 FIN 报文给对方来表示你同意现在可以关闭连接了,所以它这里的 ACK 报文和 FIN 报文多数情况下都是分开发送的。
TCP 的流量控制机制
- 慢启动(慢开始):
- 慢开始不是指 cwnd 的增长速度慢(指数增长),而是指 TCP 开始发送设置 cwnd=1。
- 思路:不要一开始就发送大量的数据,先探测一下网络的拥塞程度,也就是说由小到大逐渐增加拥塞窗口的大小。这里用报文段的个数的拥塞窗口大小举例说明慢开始算法,实时拥塞窗口大小是以字节为单位的。
- 为了防止 cwnd 增长过大引起网络拥塞,设置一个慢开始门限(ssthresh 状态变量)
当 cnwd<ssthresh,使用慢开始算法
当 cnwd=ssthresh,既可使用慢开始算法,也可以使用拥塞避免算法
当 cnwd>ssthresh,使用拥塞避免算法
拥塞避免:
- 拥塞避免并非完全能够避免拥塞,是说在拥塞避免阶段将拥塞窗口控制为按线性规律增长,使网络比较不容易出现拥塞。
- 思路:让拥塞窗口 cwnd 缓慢地增大,即每经过一个往返时间 RTT 就把发送方的拥塞控制窗口加一。
无论是在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(其根据就是没有收到确认,虽然没有收到确认可能是其他原因的分组丢失,但是因为无法判定,所以都当做拥塞来处理),就把慢开始门限设置为出现拥塞时的发送窗口大小的一半。然后把拥塞窗口设置为 1,执行慢开始算法。 如图所示:
- 快速重传:
- 快重传要求接收方在收到一个失序的报文段后就立即发出重复确认(为的是使发送方及早知道有报文段没有到达对方)而不要等到自己发送数据时捎带确认。快重传算法规定,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段,而不必继续等待设置的重传计时器时间到期。
- 由于不需要等待设置的重传计时器到期,能尽早重传未被确认的报文段,能提高整个网络的吞吐量。
- 快速恢复:
- 当发送方连续收到三个重复确认时,就执行“乘法减小”算法,把 ssthresh 门限减半。但是接下去并不执行慢开始算法。
- 考虑到如果网络出现拥塞的话就不会收到好几个重复的确认,所以发送方现在认为网络可能没有出现拥塞。所以此时不执行慢开始算法,而是将 cwnd 设置为 ssthresh 的大小,然后执行拥塞避免算法。
3. 停止等待协议
4. ARQ 协议
六、应用层
DNS 的概念,用途,DNS 查询的实现算法
- 概念
- 域名解析,www.xxx.com 转换成 ip,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的 ip 地址
- DNS 协议运行在 UDP 协议之上,使用端口号 53
- 主机解析域名的顺序
- 浏览器缓存
- 找本机的 hosts 文件
- 路由缓存
- 找 DNS 服务器(本地域名、顶级域名、根域名)
- 迭代查询、递归查询
http 基本格式
- HTTP 请求
- HTTP 响应
GET、POST 区别
Cookies 和 Session 的区别
- cookie 是一种发送到客户浏览器的文本串句柄,并保存在客户机硬盘上,可以用来在某个 WEB 站点会话间持久的保持数据
- session 其实指的就是访问者从到达某个特定主页到离开为止的那段时间。 Session 其实是利用 Cookie 进行信息处理的,当用户首先进行了请求后,服务端就在用户浏览器上创建了一个 Cookie,当这个 Session 结束时,其实就是意味着这个 Cookie 就过期 了
- cookie 数据保存在客户端,session 数据保存在服务器端
一次完整的 HTTP 请求所经历的步骤
http2.0 和 http1.1 的区别