计算机网络原理
概述
概念
组成
分类
总结
性能指标
速率
带宽
吞吐量
时延
往返时延(RTT)
时延带宽积
利用率
总结
分层结构
为什么要分层
(1)发起通信的计算机必须将数据通信的通路进行激活。
(2)要告诉网络如何识别目的主机。
(3)发起通信的计算机要查明目的主机是否开机,并且与网络连接正常。
(4)发起通信的计算机要弄清楚,对方计算机中文件管理程序是否已经做好准备工作。
(5)确保差错和意外可以解决。
分层结构
总结
参考模型
OSI模型
OSI模型
OSI流程简介
网络层及以上,每一层都要对上一层发送的数据进行处理(加个头部)
数据链路层不仅需要加头部,还需要加尾部
物理层什么都不加,只管发送数据(比特流)
TCP/IP模型
五层参考模型及其传输过程简介
物理层(Physical Layer)
基本概念
电脑要组网,第一件事要干什么?当然是先把电脑连起来,可以用光缆、电缆、双绞线、无线电波等方式。
这就叫做”实体层”,逼格高一点的叫法就是物理层。它就是把电脑连接起来的物理手段。它主要规定了网络的一些电气特性,作用是负责传送0和1的电信号。
至于0和1的信号是什么,还轮不到物理层还决定。
数据通路基本知识
一个数据通信例子
相关术语
三种通讯方式
两种数据传输方式
码元(Symbol)
定义:码元是指用一个固定时长的信号波形(数字脉冲),代表离散数值的基本波形。当有多个离散状态时,成为M进制码元
一个码元可以携带多个比特的信息
个人理解:码元就是在网线上传输的一个个信号段。码元的不同进制就是用来表示不同的数值的
波特(Baud)
用来指一秒可以传输多少个码元
速率
分为码元传输速率和信息传输速率.
信息传输速率就是b/s,就是我们平常说的网速
码元可以理解为几个比特的集合,所以信息传输速率(网速)=码元传输速率x码元所带信息量(多少比特)
码元所带信息量(比特数)=log2(码元进制数)
带宽(Band Width)
用来表示最高数据速率
奈式准则(Nyquist)
是在理想状态下得出的结论
香农公式(Shannon)
是在有噪声的信道中得出的结论
基带信号和宽带/带通信号(Base band,pass band)
计算机网络中用的基带信号是数字信号
编码
将数据转化为数字信号
数字数据(digtal data)通过 数字发送器(digit emitter) 转化为 数字信号(digtal signal)
模拟数据(analog data)通过 PCM编码器(PCM coder) 转化为 数字信号 (digtal signal)
单极性不归零编码:只使用一个电压值,高电平表示1,低电平表示0.
双极性不归零编码:用幅值相等的正负电平表示二进制数1和0.
单极性归零编码:发送码1时高电平在整个码元期间只持续一段时间,其余时间返回零电平。
双极性归零编码:正负零三个电平,信号本身携带同步信息。
曼彻斯特编码:单极性编码的缺点是没有办法区分此时是没有信号,还是有信号,但是信号是0.
这种编码方式是bit中间有信号,低-高跳转表示0,高-低跳转表示1,一个时钟周期只可以表示一个bit,并且必须通过两次采样才能得到一个bit。它能携带时钟信号,而且能区分此时是没有信号还是信号为0.
差分曼彻斯特编码:抗干扰能力比曼彻斯特编码更强。bit与bit之间有信号跳变,表示下一个bit为0,bit与bit之间没有信号跳变,表示下一个bit为1。
数据转化为模拟信号
常用的调制方法:调频(AM),调频(FM),调相(PM)
模拟数据(analog data)通过 调制器(modulaotr) 转化为 模拟信号 (analog signal)
数字数据(digtal data)通过 调制器(modulaotr) 转化为 模拟信号 (analog signal)
物理层传输介质
传输介质分为导向性传输介质和非导向性传输介质
常见的导向性传输介质
双绞线
根据有无屏蔽层分为屏蔽双绞线(STP) 和 无屏蔽双绞线(UTP)
同轴电缆(Coaxial Cable)
光纤(Optical fiber)
根据入射角不同,又分为单模光纤和多模光纤
常见的非导向性传输介质
包括无线电波,微波,红外线和激光等
物理层设备
中继器(RP repeater)
释:5-4-3规则是为了限制中继器使用次数的,理由可见图
5是指不能超过5个网段
4是指在这些网段中的物理层网络设备(中继器,集线器)最多不超过4个
3是指这些网段中最多只有三个网段挂有计算机
集线器(Hub)
集线器是个大的冲突域,同时只能有两个设备进行通讯,只会传输信号,没有智能。
总结
数据链路层(Data Link Layer)
基本概念
物理层为我们传输01电信号做出了不少贡献。但是在物理层也提到,物理层自己不知道自己传输的信号有什么意义。
这就是”链接层”的功能,它规定了解读方式:多少个电信号算一组?每个信号位有何意义?
链路层编址
以太网规定,一组电信号构成一个数据包,叫做”帧”(Frame)。每一帧分成两个部分:标头(Head)和数据(Data)。
“标头”包含数据包的一些说明项,比如发送者、接受者、数据类型等等;
”数据”则是数据包的具体内容。
“标头”的长度,固定为18字节。”数据”的长度,最短为46字节,最长为1500字节。因此,整个”帧”最短为64字节,最长为1518字节。如果数据很长,就必须分割成多个帧进行发送。
MAC地址
上面提到,以太网数据包的”标头”,包含了发送者和接受者的信息。那么,发送者和接受者是如何标识呢?
以太网规定,连入网络的所有设备,都必须具有”网卡”接口。数据包必须是从一块网卡,传送到另一块网卡。网卡的地址,就是数据包的发送地址和接收地址,这叫做MAC地址。长度为6字节,共48比特,通常用十六进制表示法,地址的每个字节被表示为一对十六进制数
每个适配器具有一个唯一的MAC地址,不随位置发生变化(就像人的身份证,而IP则像人的邮政地址)
一台路由器的每个接口都有一个ARP模块和一个适配器;
MAC地址分配:当一个公司要生产适配器时,它支付象征性的费用购买一块MAC地址空间,IEEE分配这块地址时,固定前24比特,让公司自己为每个适配器生成后24比特的唯一组合
ARP协议(地址解析协议)
通过MAC,我们定义了地址。但是我们紧接着就有一个问题,那就是一块网卡怎么会知道另一块网卡的MAC地址?
答案就是ARP协议。
每个节点的ARP模块都在它的RAM中有一个ARP表,包含IP地址到MAC地址的映射关系,每个表项还包含TTL字段,表示表项过期时间(ARP表是自动创建的,如果某节点与子网断开连接,它的表项最终会从留在子网中的节点的表中删除。通常一个表项的过期时间是20分钟)
主机向其ARP模块提供一个IP地址,ARP模块返回IP地址对应的MAC地址
(注释:在OSI七层模型中,ARP属于链路层模型,所以这里也先简单介绍一下,构建知识体系)
广播的概念
其次,就算有了MAC地址,系统怎样才能把数据包准确送到接收方?
回答是以太网采用了一种很”原始”的方式,它不是把数据包准确送到接收方,而是向本网络内所有计算机发送,让每台计算机自己判断,是否为接收方。
上图中,1号计算机向2号计算机发送一个数据包,同一个子网络的3号、4号、5号计算机都会收到这个包。它们读取这个包的”标头”,找到接收方的MAC地址,然后与自身的MAC地址相比较,如果两者相同,就接受这个包,做进一步处理,否则就丢弃这个包。这种发送方式就叫做”广播”(broadcasting)。
有了数据包的定义、网卡的MAC地址、广播的发送方式,”链接层”就可以在多台计算机之间传送数据了。
封装成帧与透明传输
封装成帧就是加将网络数据报加头加尾,相当于将数据打包
透明传输就是为了防止特殊的数据无法正常传输的的情况的发生,比如说在封装成帧的过程中,可能出现数据中的某些标记符与开始/结束标记符恰巧重复的情况,如果不加以处理,那么会导致无法判定帧的开始于结束。
透明传输的实现方法
字符计数法
就是在帧的首部做计数,这个字符记录了当前帧有多少个字符。
缺点:如果在某一个帧内,标记位后面的某个字节的数据丢失,那么会影响后面的帧
比如3 1 1 和 4 2 2 2,如果前面的帧丢失变成 3 1,那么后面的4就会被补到前面变成 3 1 4导致错误
字符填充法
就是加头加尾分别标记开始结束,和零比特填充法(见下)对比,开始和结束的对应的字符不一样
但有可能出现数据内某段比特流数据正好与标记字段重复,从而导致误判断的情况
解决方法:
添加转义字符。即对于那些与标记字符重复的数据流,在它们的前面添加一段转义字符,这样接收方在解析帧时,看到这些转义字符就不会认为那些特殊的数据当成帧的开始/结束了。
零比特填充法
违规编码法
因为曼彻斯特编码不使用高-高,低-低来表示,所以如果使用高-高,低-低来表示帧起始和终止就不会与数据冲突
差错控制
差错是什么,从哪来的
数据链路层的差错检测的是比特的错误
需要注意的是,即使采用差错检测比特,也还是可能有未检出比特差错的情况。
因此,主要是选择一个差错检测方案,使得这种事件发生的概率很小
为什么要在数据链路层进行差错控制?
因为错误可以尽早发现,不会让一个错误的数据包发送了很长时间到达最终目的地之后才被发现,从而导致网络资源的浪费
检错编码
奇偶校验码
奇偶校验:只需包含1个附加比特。
对于偶校验,选择一个值,使得所有比特中1出现偶数次。
对于奇校验,选择一个值,使得所有比特中1出现奇数次。接收方通过检测1出现的次数判断是否出现差错。如果出现偶数个比特差错,则检验不出
缺点:只能检测出1,3,5,7…等等奇位数错误,检测成功率位50%
循环冗余码CRC
发送方和接收方协商一个r+1比特的生成多项式(G),要起其最高比特位为1。发送方通过在d比特的数据后附加r比特,使得整个(d+r)比特的值能够被G整除。接收方用G去除(d+r)比特,如果余数非0,则出现差错
实际例子
注释:
1.阶数就是最高位是哪位,然后位数-1,如10011就是5-1=4,1011就是4-1=3
2.异或运算就是相同得0,不同得1,比如100和101做异或,结果就是001
3.出书和最后的余数添加到要发送的数据后面,称为帧检验序列FCS
接收方收到数据后进行检测
需要注意的地方
纠错编码(海明码)
分为四步
第一步 确认校验码位数r
第二步 确定校验码和数据的位置
注释:
1.为什么是10为数据位?因为4位校验码+6位信息位=10位
2.校验码放到2的几次方的位置,其他的地方按顺序放已知的信息位
第三步 求出校验码的值
注释
1.先是通过二进制位确定有几位。本题中因为最大位10的二进制是1010,所以是4为,将其标注
2.然后从p1开始看,看p1的二进制位的数值和所有信息位的对应位置的数值是否相同,然后找出来这些位
这里有点难理解,这里以p1为例辅助理解,这里找出来的就是P1,D1,D2,D4,D5
然后计算异或值,比如说这里D1=1,D2=0,D4=1,D5=0,就是p1要同时和0,1,0,1进行异或之后得到0,为了标识我加粗原始计算数据
举例:0和1异或得1,1和0异或得1,1和1异或得0,那么p1和0异或得0,p1就是0了
3.其他同理,按顺序计算出P2,P3,P4,然后填入表格
第四步 检测并纠错
就是和上面一样,将所有校验位进行运算,得出的结果的值就是错误的位
数据链路层的流量控制和可靠传输
流量控制与可靠传输
流量控制是为了让传输过程中的发送速度和接受速度匹配,减少传输出错与资源浪费
可靠传输是发送端发送什么,接收端就要受到什么
停止等待协议(Stop-and-Wait)

全双工(Full Duplex)是通讯传输的一个术语。通信允许数据在两个方向上同时传输,它在能力上相当于两个单工通信方式的结合。全双工指可以同时(瞬时)进行信号的双向传输(A→B且B→A)。指A→B的同时B→A,是瞬时同步的。
单工就是在只允许甲方向乙方传送信息,而乙方不能向甲方传送 。(比喻汽车的单行道。)
停止等待协议的无差错情况
注释:因为一次就一个,所以用0和1标记ack(确认序号)就行
停止等待协议的有差错情况:
使用一个超时计时器,每发一帧就开始计时,设置时间略长于一个RTT(往返时延)。
发送端发送数据开始,到发送端收到来自接收端的确认(接收端收到数据后便立即发送确认),总共经历的时延
RTT=传播时延x2+处理时间(有时可能直接忽略)
停止等待协议的特点
1.简单
2.信道利用率低。大部分时间数据都在路上,发送方很长时间闲置,资源浪费
后退N帧协议(GBN)
因为停止等待协议太浪费时间了,所以尝试采用GBN,发送连续多个数据帧,以增大信道利用率
注释:
累计确认:就是收到一个确认帧,那么它和它之前的所有帧都默认已收到,反之,如果某个确认帧没收到,那么它和它之后的所有帧都默认丢失(即使收到了也丢掉),进行重传
图是一个实例
注释:此图发送2帧时丢失,所以接收方几首收到后面的帧也是直接丢弃并且发送最晚收到的有效帧1的ACK,直至2帧的超时重传机制被触发进行重传并得到ACK之后,接收方才会接受2帧以及后面的帧
如果所示,GBN的形式就像排队,接收端为所有帧“预定”了接收位置,如果接收端发送的数据因为某些原因没有接收到,即使收到了这一帧后面所有的帧,这些“排在后面的”帧也要被丢弃
发送窗口不能无限大,与使用的编号的比特数有关,二进制表示。
很简单,就是1比特编号0和1,
同理2比特编号0-3,二进制表示就是00,01,10,11。
如果用1比特编号,却要4个窗口长度,那么窗口内数据编号都编不过来,直接乱套了
GBN的优缺点也显而易见,优点是相对于上面的停止等待协议,明显提高了信道利用率,缺点是因为重传机制的原因,导致已经收到数据却需要强行丢弃,进而造成浪费
选择重传协议(SR)
吸取了GBN协议的教训,我们打算尝试只重传错误的帧,这样的话就不用浪费资源把已经收到的帧再重传一次了。
在GBN中,仅有接收端有一个窗口来存放数据帧,在SR中,两者都有窗口了。
和GBN的区别其实就是做了一个数据缓存,已经收到的帧不用扔了,等待之前因意外丢失的帧收到的时候确认即可,但是只能缓存窗口尺寸内的包含的帧(注释:缓存不可能无限大)
SR运行过程:
注释:2帧丢失之后仍然在发送,但是2帧丢失之后只是缓存,并没有移动窗口;它可以继续接受窗口范围内排在2帧后面的数据帧,直至最后2帧收到后一次性确认窗口内的所有已经收到的帧,再移动窗口。
同样的,因为编号的问题,发送窗口不能无限大
当发送窗口最后和接受窗口大小相同时,利用率比较高
介质访问控制技术
就是让节点之间的通信不会进行相互干扰
信道划分协议
虽然使用一条共享信道,但是通过多路复用技术组合进行传输,提高了信道的利用率
频分多路复用FDM
时分多路复用TDM
TDM的缺点就是利用率低,所以又衍生出了STDM
统计时分复用STDM
STDM的原则是先到先走,满了就发,相对于TDM提高了利用率
码分多路复用CDM
每个节点分配一种不同的编码,每个节点使用其唯一的编码来对发送的数据进行编码(如果精心选择编码,不同节点能同时传输)
随机接入协议
所有用户都可以随机发送信息,发送时可以占用全部带宽,理论上个人使用时比静态分配信道的速度更快
ALOHA协议
帧到达节点时,立刻传输。如果发生碰撞,节点将立即(在完全传输碰撞帧后)以概率p重传。否则,等待一个帧传输时间,再以概率p重传。信道有效传输速率实际不是R bps,而是时隙ALOHA的一半
时隙ALOHA协议
时间被划分为时隙,每个节点的时间同步,帧的传输只在时隙的开始时进行。如果发生碰撞,在下一个时隙开始时以概率p重传,否则等待一个时隙再以概率p重传…(信道有效传输速率实际不是R bps,而是0.37R bps)
CSMA协议(载波侦听多路访问)
CSMA/CD协议
概述
因为链路实际有长短,发送数据需要时间,这个时间内可能就被其他节点当成空闲状态导致发生碰撞。 先侦听信道,如果没有其它节点在使用信道,则传输数据。但是有碰撞检测,如果发生碰撞,会停止传输剩下的数据,等待一个随机时间(通常比传输一帧短)后,再进行尝试。 知道自己发生碰撞的最长时间是2τ(两倍的传播时延),就是一去一回
图示传播时延对载波监听的影响
CSMA/CA协议
CSMA/CD 与 CSMA/CA的区别
轮询访问介质访问控制
主要包括两大类,一个是轮询协议,另一个是令牌传递协议
轮询协议
就是选出一个代表,让他控制所有的传输
注释: 轮询开销在随着服务的节点越多,需要用于查询是否发送数据发送的数据帧也就越多,会造成一定开销 等待延迟就是因为这是轮流“邀请”,所以难免某个节点需要发送数据,但是主节点还在较远的需要里有需求的节点那边,导致需求得不到立即响应. 单点故障很好理解,就是代表挂了
令牌传递协议
注释:在节点之间没有收发数据的需求时,令牌在节点之间循环。
发送数据的流程:
—->当一个节点需要时就可以获得这个令牌。然后修改这个令牌的状态(空闲->占用)
—->再将令牌与数据帧结合,让其在节点构成的环之间流动
—->不是目的地的节点收到令牌也不接受,直接略过,目标节点收到信息并复制一份到本地(传输完成),因为是个闭环,所以发送节点最后得到令牌
—->最后,发送令牌的节点对令牌的内容进行检查,如果发现数据出错还要重新发一遍 问题基本和轮询协议相同
局域网
局域网的概念
概括:范围小,速度快,延迟低,节点平等
局域网的网络拓扑结构`
常用的是总线型拓扑
局域网的传播介质
局域网介质访问方法
局域网的分类
IEEE802标准
IEEE802描述的局域网参考模型
以太网
以太网概念
以太网的发展
适配器和MAC地址
以太网MAC帧
注释:
1.这里的mac层指的是数据链路层
2.之前说过数据链路层将上一层ip数据包加头加尾:
头就是目标地址(6字节),源地址(6字节),类型(2字节)
尾就是FCS(帧检验序列),(4字节)
3.前导码不是MAC帧的一部分,目的是使时钟同步
4.为什么数据长度时46~1500? 因为有最小传输字节64字节,mac占用6+6+2+4=18,所以数据最小为64-18=46,1500则是规定的默认最大字节,没有理由
10BASE-T以太网
高速以太网
无线局域网
两种无线局域网
广域网
广域网的概述
概括一下,一个字大
PPP协议(Point-to-Point Protocol)
PPP协议是目前使用最广泛的数据链路层协议,拨号基本都是PPP协议
PPP协议仅支持全双工链路
PPP协议需要满足的要求
PPP协议不需要满足的要求
PPP协议组成成分以及功能
PPP协议的帧格式
HDLC协议(High-Level Data Link Control)
HDLC协议概述
HDLC的三种站
HDLC的帧格式
PPP协议和HDLC协议对比
为什么HDLC协议更可靠,但是我们使用PPP协议?
因为现在网络要求高,数据链路层本来就是不可靠的尽力传输,差错控制这些复杂的交给了TCP等
链路层设备
网桥(Bridge)
使用网桥时,由于网桥会根据mac地址进行过滤,所以不会形成冲突域
两种网桥
透明网桥
通过自学习来构建转发表。每一个通过网桥的数据包都会被记录下网桥收到数据时数据对应的地址和网桥自己的接口,通过许许多多的数据包的构造的缓存,网桥就可以知道哪个数据包在哪个接口,以后如果要传数据包就知道要往哪个接口发送数据包了
原路由网桥
在发送时,直接将最佳路径放到帧首部。那么网桥如何获得最佳路径?通过广播方式向目标地址发送广播,此时可能会经过不同路由产生不同的路径,目标地址收到后再将每一条路径都发一个响应帧给网桥,网桥经过对比就知道哪个接口最快了
交换机
网桥接口越来越多,网桥就变成了交换机
交换机的任务是接收入链路层帧并将它们转发到出链路
交换机自身对节点透明:某节点向另一节点寻址一个帧,顺利地将该帧发送进LAN,而不知道这个帧经过了某个交换机的接收与转发
1)交换机转发与过滤
过滤:交换机决定一个帧是应该转发还是应该丢弃
转发:决定一个帧应该被导向哪个接口
2)自学习(即插即用)
交换机表是自动、动态、自治地建立的,没有来自网络管理员或配置协议的任何干预。换句话说,交换机是自学习的
交换机表初始为空
源地址为DD-DD-DD-DD-DD-DD的帧从接口x到达时,如果不存在则新建一项;存在则更新当前时间
如果一段时间后,在x接口没有来自DD-DD-DD-DD-DD-DD的帧,则将该表项删除
冲突域和广播域
总结
网络层
概述
网络层的由来
在数据链路层中,我们提到了MAC地址这个唯一的身份编址。理论上,单单依靠MAC地址,上海的网卡就可以找到洛杉矶的网卡了,技术上是可以实现的。但是,这样做有一个重大的缺点。以太网采用广播方式发送数据包,所有成员人手一”包”,不仅效率低,而且局限在发送者所在的子网络。也就是说,如果两台计算机不在同一个子网络,广播是传不过去的。这种设计是合理的,否则互联网上每一台计算机都会收到所有包,那会引起灾难。
因此,必须找到一种方法,能够区分哪些MAC地址属于同一个子网络,哪些不是。如果是同一个子网络,就采用广播方式发送,否则就采用”路由”方式发送。
这就导致了”网络层”的诞生。它的作用是引进一套新的地址,使得我们能够区分不同的计算机是否属于同一个子网络。这套地址就叫做”网络地址”,简称”网址”。于是,”网络层”出现以后,每台计算机有了两种地址,一种是MAC地址,另一种是网络地址。两种地址之间没有任何联系,MAC地址是绑定在网卡上的,网络地址则是管理员分配的,它们只是随机组合在一起。
网络层的主要功能
TCP/IP体系中的网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。网络层不提供服务质量的承诺,不保证分组交付的时限,所传送的分组可能出错、丢失、重复和失序。进程之间通信的可靠性由运输层负责。
注释:
数据报和分组的关系:数据报是一段比较长的数据,将它进行切割成一段段之后就得到分组
功能一就是让数据在路由器之间走最佳的路径
功能二就是让不同的设备(手机,电脑,平板等)都能正常连接
功能三见图中解释
开环控制就是在拥塞之前就提前设计解决
闭环控制就是在拥塞时自动调整解决问题
数据交换方式
什么要进行数据交换?因为每个节点之间都拉网线太麻烦了也不实际,所以通过大量交换设备互联进行数据交换
电路交换
常见的例子:打电话
注释:
链路支持多路复用(可参考数据链路层的TDM等)
特点是独占资源,因为两者建立了连接
报文交换
注释:报文发送的过程
1.源先根据报文加上ip地址,物理地址等,通过物理层发送
2.交换机收到报文之后,先进行存储,等待链路空闲之后进行转发,但是转发的路径不是固定的,是比较随机的
3.最后通过许多交换机最终到达目的地
分组交换
分组交换和报文交换基本相同,就是将报文切割之后再进行发送
分组交换和报文交换的具体计算对比
注释:是怎么计算的?
报文交换:一共三段,每段都需要10000bit/1000bps=10s,三段就是3x10=30s
分组交换:可以分为两段,一个是第一个数据开始发到最后一个数据从源发出,一段是最后一个数据到达目的地。第一段总时间是10000bit/1000bps=10s,第二段总时间是(10/1000)*2=0.02s,所以总时间是10.02s。
理解一下,这里就是报文交换的时候,由于报文没有分割,所以即使先到的数据也不能先发走,只能等到最后一段报文全部到了之后才能一起走,相对于分组交换明显拖慢了前面数据的速度,所以导致报文交换明显慢于分组交换
可以看到分组交换明显快于报文交换,所以我们通常使用分组交换
分组传输的两种传输方式-数据报与虚电路
综述
数据报
虚电路
路由算法和路由协议概述
路由算法就是让路由知道收到报文之后下一步怎么走
AS就是多个路由器之间构成的单独的小圈子,圈子内使用自己的协议,圈子和圈子之间用的是BGP协议
RIP协议和距离向量算法
RIP协议概述
通过交换信息构建路由表
如何建立路由表
RIP协议报文格式
RIP协议特点
就是来回更新路由表,错误信息被覆盖,导致直至达到距离上限强制错误时才可以得知出错
距离向量算法
注释:
为什么改地址?因为图中是从x得到的信息
为什么距离固定+1?因为路由器只从相邻路由器之间获取RIP报文,举例只会是1
为什么下一跳是x就要替换?因为网络环境不断变化,可能这次某个节点挂掉,所以保持最新的
为什么下一跳不是x时有更新和不处理两种手段?因为这样可以提高效率,比原来快就换,比原来慢就保留原来的,也可以理解
OSPF协议和链路状态算法
OSPF协议概述
OSPF的其他特点
为什么OSPF收敛速度快?因为它只是刷新一下链路状态,得知其是否连通,不需要和RIP一样进行对照,而是直接通过Dijilstra算法来自己算出路径
链路状态路由算法
了解即可
OSPF区域
了解即可
OSPF分组
了解即可
BGP协议
BGP协议简介
BGP协议交换信息的过程
了解即可,只需要知道BGP交换协议里面交换的是一组路径向量
BGP协议报文格式
BGP是应用层协议
BGP协议特点
BGP的四种报文
三种路由协议的比较
IP数据报
IP数据报格式
注释:
计算偏移量时记住是以0开始的就行,以每一篇最开始的除以8得到的数值就是偏移量
MF和DF的定义见上图
IP
ipv4地址
全球唯一的表示某一个主机或者路由器接口的编码
ip地址分类
特殊ip地址
私有ip地址
解释一下
为什么A类最大是126.xxx.xxx.xxx?
因为网络号最开始第一位是0,一共八位,所以二进制表示位0xxxxxxx,最大就是2^7-1=127,但是因为127.xxx.xxx.xxx是特殊ip地址,所以将其去掉
为什么B类最大是191.255.xxx.xxx?
因为网络号最开始第一位是10,一共八位,所以二进制表示位10xxxxxx,最大就是10111111=191,最小就是10000000=128,无特殊ip地址
为什么C类最大是223.255.xxx.xxx?
因为网络号最开始第一位是110,一共八位,所以二进制表示位110xxxxx,最大就是11011111=223,最小就是10000000=192,无特殊ip地址
网络地址转换NAT
注释:连接内网和外网,就是找个代理的用它的ip地址与外面收发数据
NAT需要构建NAT转换表,既要存广域网(WAN,外网)也要存局域网(LAN,内网)的ip地址和端口号
子网划分和子网掩码
为什么需要子网划分
总结一下,就是ip不够用,所以需要额外整个子网扩展ip
注释:
为什么子网好能全0或者全1:因为CIDR编址(可见下一段)
为什么主机号不能全0或者全1:因为全0代表本网络,全1代表广播分组
子网掩码
子网掩码就是用来和ip地址一起计算子网的地址的
方法就是将子网掩码逐位写成二进制然后和原来ip地址进行与运算,就可以得到子网ip地址
因为255是11111111,所以如果写着255的话,ip地址和子网ip地址对应的地方的数值就相同
这道题可以看出来,即使子网掩码不同,相同ip地址对应的子网ip地址也可能相同
但是子网掩码不同,划分的子网数目不同
为什么划分的子网数目不同?或者说怎么算划分的子网位数目?
以255.255.192.0为例,255是11111111即八个1,192是11000000即2个1,一共是82+2=18个1,一共有32位地址,所以剩余有32-18=14位
以255.255.224.0为例,255是11111111即八个1,224是11100000即3个1,一共是82+3=19个1,一共有32位地址,所以剩余有32-19=13位
这道题先将255.255.252.0计算出一共有8+8+6=22位网络号位
所以就有32-22=10位主机号位
将180.80.77.55解析,可以知道在77部分某部分开始会用来表示主机号位
77的二进制是0100 1101,因为一共有22位网络号位,所以010011 (此处分开) 01,从这个01开始是主机号位。
所以用来表示子网ip地址的应该是180.80.76(010011 00).xxx PS注意76括号内后两位二进制00
但是本体是发布广播地址,所以主机号全部都要是1
所以应该是180.80.79(010011 11).255(11111111)注意79括号内后两位二进制11
注释:
1.这里特定主机路由就是指找特定的处理这里这个ip地址的路由
2.默认路由会将这个数据报发给另一个路由,直至找到对应的路由,或者TTL耗尽被丢弃
无分类编制CIDR
使用CIDR可以聚合网络
如图,通过缩短前缀,R1和R2就可以合并在206.1.0.0/16的子网下
但是这样转发表之中就会有多个匹配结果,所以我们使用最长前缀匹配
最长前缀匹配就是在计算后符合同一子网的时候,选前缀越长的
这道题选B
因为本网络是192.168.5.0/24,就是192.168.5.(0000 0000)/24,将248写成二进制是11111 000,有五个1,所以前五位都可以作为子网的编号,剩下的三位就是用来分配子网内剩余的地址了,因为不能全0或者全1,所以还要减2
ARP协议
DHCP协议
ICMP协议
ICMP协议概述
ICMP,IGMP处于网络层和传输层之间,就是为了更好地转发ip数据报和提高交互成功的几率
ICMP差错报告报文
ICMP差错报告报文如何与IP数据报结合
五种ICMP差错报文
其中源点抑制已废弃不用
四种不发送ICMP差错报文的情况
注释:组播是指由一点到多点,但不是无脑发到所有点,无脑发到所有点的是广播,组播有筛选条件
ICMP询问报文
四种ICMP询问报文
后两种是掩码地址请求和回答报文,路由器询问和通告报文,这两个已经废弃不再使用
ICMP的应用
1.ping命令:测试两个主机之间连通性,使用了ICMP回送请求和回答报文
2.traceroute命令:跟踪一个分组从原点到终点的路径,使用了ICMP时间超过差错报告报文
IPV6
为什么会有IPV6
就是IPV4地址用完了,从根本上增加ip地址数目,之前讲的NAT和CIDR也只是在IPV4的基础上扩展了IPV4地址数目,治标不治本
IPV6地址表示形式
IPV6数据报格式
IPV4和IPV6的区别
IPV6基本地址类型
IPV4和IPV6之间的过渡
如果是ipv6的数据报到了ipv4,就用ipv4重新封装,把ipv6数据报前面加上ipv4伪装成ipv4数据报继续传输,直至到了ipv6路由再解开ipv4伪装
IP组播(多播)
什么是组播
单播只能一对一,广播必须一对全部,组播就可以是一对全部中的一部分
辅助理解:单播所占资源多
组播明显减轻了压力
IP组播地址
硬件组播
就像全F的mac地址代表广播一样,00-10-5E打头的MAC地址就代表组播
7为什么最大是00-10-5E-7F-FF-FF?因为只有最后23位决定
IGMP协议与组播路由选择协议
IGMP协议
注释:IGMP只能知道有没有组播组成员,对有几个组播组成员,成员在哪个地方都不知道
组播路由选择协议
有了这个,成员可以自行找到转发组,自行决定参加哪个组播(就像电视机选台一样)
移动IP
移动IP不等于动态IP(DHCP获得的)
移动IP的可以让用户因为地理原因等等,即使不在内网也可以访问内网的东西
移动IP的相关术语
移动IP通信过程
网络层设备
路由器
路由器的构造
路由器的输入输出端口构造
集线器,网桥,路由表几层设备比较
路由器的路由表和转发表
这里实际上就是对前面知识的复习了
总结
传输层
概述
传输层的意义
传输层的由来
有了MAC地址和IP地址,我们已经可以在互联网上任意两台主机上建立通信。 接下来的问题是,同一台主机上有许多程序都需要用到网络,比如,你一边浏览网页,一边与朋友在线聊天。当一个数据包从互联网上发来的时候,你怎么知道,它是表示网页的内容,还是表示在线聊天的内容? 也就是说,我们还需要一个参数,表示这个数据包到底供哪个程序(进程)使用。这个参数就叫做”端口”(port),它其实是每一个使用网卡的程序的编号。每个数据包都发到主机的特定端口,所以不同的程序就能取到自己所需要的数据。 “端口”是0到65535之间的一个整数,正好16个二进制位。0到1023的端口被系统占用,用户只能选用大于1023的端口。不管是浏览网页还是在线聊天,应用程序会随机选用一个端口,然后与服务器的相应端口联系。
“传输层”的功能,就是建立”端口到端口”的通信。相比之下,”网络层”的功能是建立”主机到主机”的通信。只要确定主机和端口,我们就能实现程序之间的交流。因此,Unix系统就把主机+端口,叫做”套接字”(socket)。有了它,就可以进行网络应用程序开发了。
网络层可以把数据从一个主机传送到另一个主机,但是没有和进程建立联系;传输层就是讲进程和收到的数据联系到一起,使数据能够为应用服务
所以说传输层是主机才有的层次
传输层的两个协议
传输层的寻址和端口
端口号只用于计算机分辨本地进程,总共有2^16=65536种端口号,端口号有很多种,不能随便使用
常见的应用程序端口号
UDP协议
UDP概述
因为UDP一次发送一个完整报文不会分片,所以需要应用层传输过来的数据不能太大,否则网络层分片任务就很重,但是也不能太小,不然效率较低
UDP适合一些实时应用,因为实时应用延迟要求高,需要立即响应
UDP首部格式
UDP的校验位构成
这里的伪首部只是用来计算检验和的,计算完了就丢弃,可以见下UDP的校验方式
UDP校验方式
在发送端:
就是将每一行(4字节)拆成两部分,左右平均2字节大小,将这两字节数据写成二进制,那么2字节一共就需要2*8=16位。此时检验和没有计算,默认填充0,同时如果数据字段不整齐,则用0补齐,这样就可以写出几十行二进制数,如图中所示
在接收端:
与发送端的时候不同的是,此时检验和字段不是0了 按照发送端的步骤再将所有数据写成二进制进行二进制反码运算求和
如果最后得到结果全1就是没问题,否则丢弃
2.3 UDP补充
1.UDP怎么保证能收到数据?
UDP将可靠传输的实现放到了应用层,然后类似于TCP,实现确认机制,重传机制 UDP不属于连接型协议,因而具有消耗资源小,处理速度快等优点,所以通常音频、视频通话在传送时使用UDP比较多,因为它们即使丢失一两个数据包也不会对结果产生太大影响
目前有如下开源程序利用UDP实现了可靠的数据传输;分别有RUDP, RTP, UDT
TCP协议
TCP协议的特点
TCP必须要建立连接之后才可以进行数据交换,所以TCP是面向连接的
TCP传输数据是随机切割数据的
TCP报文段的首部
见上图,可以看到TCP是将数据随机分割后加上TCP头传输的,所以 序号就是为了标记这些随机分割之后的数据,这里把第一个字节的编号当成序号
确认号就是收到之后做一下标记,代表这之前的都收到了,希望收到的下一个编号的数据就是确认号打头的那个数据
偏移量就是为了标记一下距离TCP开始多少字节是数据,这里的单位是4B,这个偏移量就是TCP首部长度
窗口就是接收方告诉发送方,还有多少地方(缓存)可以放数据
紧急指针就是告诉TCP从哪里到哪里是紧急数据
TCP的六个控制位
紧急位URG
URG的特点就是让数据插队,URG=1的就会在缓存中被提前到第一个传输
确认位ACK
推送位PSH
就是接收端的URG,将PSH=1的数据尽快接收
如果没有PSH,一般都是接收方缓存满了之后再将数据发送到主机
复位RST
同步位SYN
A和B主机要建立连接,就A先发一个报文,其中SYN=1
B收到之后也回复一个SYN=1的报文,代表接受连接
终止位FIN
TCP连接管理
TCP三次握手(建立连接)
TCP的连接建立
ROUND1的意思是
SYN同步序号=1:(A)要建立连接了!
seq序号=x(随机):因为还没有数据,所以写什么都无所谓
ROUND2的意思是
SYN同步序号=1:我(B)同意你(A)建立连接!
ACK确认序号=1:连接建立了,之后的ACK必须都置为1
seq序号=y(随机):因为还没有数据,所以写什么都无所谓
ack确认号=x+1:之前发送方(A)说发送的是第x位数据(虽然发送方是瞎说的),所以我(B)要的是x+1位数据
ROUND3的意思是
SYN=0:SYN只有在建立连接时才为1,其他时候均设为0
ACK=1:连接建立了,之后的ACK必须都置为1
seq=x+1:我(A)发送的报文段的第一个字节就是x+1
ack=y+1:之前接收方(B)说发送的是第y位数据(虽然接收方是瞎说的),所以我(A)要的是y+1位数据
注意一下,TCP是双向的,所以不存在绝对不变的发送方接收方,这里的两台主机都同时是发送方和接收方
TCP三次握手特定导致的SYN洪泛攻击
TCP四次挥手(连接释放)
TCP的连续释放
ROUND1的意思是
FIN=1:(A)要释放连接了!
seq=u:发了好多数据,这里只是用u指代一下,这里u是有确定值的
ROUND2的意思是
ACK=1:连接建立了,之后的ACK必须都置为1
seq=v:发了好多数据,这里只是用v指代一下,这里v是有确定值的
ack=u+1:之前发送方(A)说发送的是第u位数据,所以我(B)要的是u+1位数据(尽管此时A已经决定释放连接了)
ROUND3的意思是
FIN=1:(B)要释放连接了!
ACK=1:连接建立了,之后的ACK必须都置为1
seq=w:发了好多数据,这里只是用w指代一下,这里w是有确定值的
ack=u+1:之前发送方(A)说发送的是第u位数据,所以我(B)要的是u+1位数据(因为A直接不发数据了,所以第二段第三段的ack都是u+1)
ROUND4的意思是
ACK=1:连接建立了,之后的ACK必须都置为1
seq=u+1:之前发的数据时第u位数据,B也要第u+1位数据,所以我发第u+1位数据
ack=w+1:之前发送方(B)说发送的是第w位数据,所以我(A)要的是w+1位数据
为什么需要等待计时2MSL?
因为这样可以保证B可以收到A的终止报文段进而进入关闭状态
比如说如果A的第四段报文丢失,那么等待1MSL之后B就会重传第三段报文,花费小于1MSL之后A就会再收到第三段报文,之后就可以再次向B发送第四段报文提示B关闭连接
TCP可靠传输
TCP是提供可靠传输,UDP这种本身还是不可靠传输的就再靠应用层解决了
序号
就是TCP根据下方数据链路层的MTU(最大传输单元)来随即将数据切割成好几端并且进行编号
确认
发送方每一次发送数据之后都需要接收方进行确认。 TCP使用的是累计确认机制,就是从第一个丢失的字节开始请求丢失的报文段。如图中456丢失,78到达,但仍然请求发送的数据序号是4
重传
为什么要使用自适应算法?网络环境太复杂,路径又长又短,RTT设置短了照顾不了距离远的,RTT设置长了又导致网络利用率降低,所以使用RTTs
TCP流量控制
简单来说就是接收方可以动态地发送信息告诉发送方发送窗口的大小。
接收方接受不过来了就让发送方发送窗口小点,这样发送方发送的速率就慢下来了,接收方就有时间处理它的数据了
接受方处理完了也可以发送请求让发送方发送窗口大点,这样发送方发送的速率就快起来了,接收方就可以处理更多数据而不是空闲等着收数据了
计时器
在本例子中,使用的累计确认机制(一次回复收到ack=201)和三次流量控制机制。
但是有一个情况就是,如果最后B不允许A再发送数据了,B在处理完数据之后想要恢复窗口大小时发送的有rwnd大小的数据报丢了怎么办?此时A有B的指令在前,发送窗口为0无法发送数据,B也在等待A回复,造成了类似死锁的现象
解决方法:使用计时器
TCP拥塞控制
流量控制是对单独一个来说的,拥塞控制是一群
拥塞控制四种算法
这里虽然是四种算法,但是通常是两两结合进行使用
慢开始和拥塞避免
这里开始时以指数形式增长,ssthresh的意思是慢开始门限,代表从这个地方注入的报文段就比较多了,需要开始慢速增加了。
之后一段都是线性增长,每次增加1,直至达到网络拥塞状态
瞬间将cwnd设置为1,同时调整原来的ssthresh的值到之前达到网络拥塞状态的1/2,(这里是24降到12)
重复以上步骤,但是注意此时ssthresh变了之后线性增长的转折点也变了
快重传和快恢复
这里和上面的慢开始和拥塞避免的一开始步骤差不多,都是先指数增长再转变为线性增长。
不同的点是快重传和快恢复算法是在收到连续的ack确认之后执行,这里的ack就是冗余ack,冗余ack的特点是如果多次对某一段请求的数据没有被收到,达到一定数目之后就会立即执行重传。但是此时只是降到现在cwnd的一半,再重新线性增长。而不是像慢开始和拥塞避免的从头开始
传输层常见题目收集
TCP、UDP区别及使用场景
TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接。
TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达; UDP尽最大努力交付,即不保证可靠交付。TCP通过校验和,重传控制,序号标识,滑动窗口、确认应答实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。
UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。
每一条TCP连接只能是点到点的;UDP支持一对一、一对多、多对一和多对多的交互通信。
TCP对系统资源要求较多,UDP对系统资源要求较少。
TCP两次握手可以吗?
第三次握手主要为了防止已失效的连接请求报文段突然又传输到了服务端,导致产生问题。
比如客户端A发出连接请求,可能因为网络阻塞原因,A没有收到确认报文,于是A再重传一次连接请求。
连接成功,等待数据传输完毕后,就释放了连接。
然后A发出的第一个连接请求等到连接释放以后的某个时间才到达服务端B,此时B误认为A又发出一次新的连接请求,于是就向A发出确认报文段。
如果不采用三次握手,只要B发出确认,就建立新的连接了,此时A不会响应B的确认且不发送数据,则B一直等待A发送数据,浪费资源。
第四次挥手为什么要等待2MSL?
1.保证A发送的最后一个ACK报文段能够到达B。
这个ACK报文段有可能丢失,B收不到这个确认报文,就会超时重传连接释放报文段,然后A可以在2MSL时间内收到这个重传的连接释放报文段,接着A重传一次确认,重新启动2MSL计时器,最后A和B都进入到CLOSED状态,若A在TIME-WAIT状态不等待一段时间,而是发送完ACK报文段后立即释放连接,则无法收到B重传的连接释放报文段,所以不会再发送一次确认报文段,B就无法正常进入到CLOSED状态。
2.防止已失效的连接请求报文段出现在本连接中。
A在发送完最后一个ACK报文段后,再经过2MSL,就可以使这个连接所产生的所有报文段都从网络中消失,使下一个新的连接中不会出现旧的连接请求报文段。
如果 1、2、3 次握手分别丢包了,会发生什么?
第一次客户端发的 SYN 丢了:
客户端迟迟接不到响应,超时重传。
第二次服务端发的 SYN 和 ACK 丢了
客户端迟迟接不到响应,超时重传
第三次客户端发的 ACK 丢了?
因为第三次发完 ACK 之后,随时接下来会继续往服务端发数据,我看过一篇博客里写的是发数据时会带上 ACK,所以客户端响应的 ACK 包丢了,服务器也能够通过之后的包来建立连接。
第三次故意不发送 ACK 呢?
洪水攻击,服务器在等待第三次握手时是处于半连接状态,也是需要耗费资源的,如果有攻击者故意不发送第三次 ACK,让大量连接处于半连接状态,那么会把服务器资源耗尽,洪水攻击的目的就达到了。
总结
应用层
概述
因为不同的网络应用之间需要有一个确定的通信规则
两种常用的网络应用模型
客户/服务器模型(Client/Server)
P2P模型(Peer-to-Peer)
网络健壮性指的是P2P模型不容易坏掉,即使一个节点坏了也没问题,可以有其他节点代替
域名系统协议(DNS)
概述
DNS就是将打在地址栏的域名转化为IP地址的东西
域名
域名就是www.xxx.com,当然这是最简单的一种
.com之后还可以有东西,称之为根
域名从左向右,级别逐渐增高
域名服务器(DNS服务器)
DNS服务器有很多台,根据层次结构分为三层,根域名服务器,顶级域名服务器,权限域名服务器
本地域名服务器不算层次结构,特点是里主机比较近,当主机和另一台比较近的主机通信时,就不用走那些更高级的服务器了
根域名服务器并不是一个域名只有一台,而是一个域名对应多台域名服务器,全世界一共有13个这样的域名,分别是a.rootservers.net,b.rootservers.net,c.rootservers.net,~m.rootservers.net
在权限域名服务器中,虽然看似abc.com比y.abc.com少了一位,但是他们的地位仍是对等的,对应的两台权限域名服务器
域名解析过程
递归查询
在上图中
主机先是想本地域名服务器发送请求,如果查不到的话,
本地域名服务器向根域名服务器发送请求(找别人),如果还是查不到的话,
根域名域名服务器向顶级域名服务器发送请求(找别人),如果还是查不到的话,
顶级域名服务器向权限域名服务器发送请求(找别人)
可以看到每一次向下一个查询的服务器都变了,不是主机一个个去问,而是服务器自己一个个问下去
迭代查询
在上图中
主机先是想本地域名服务器发送请求,如果查不到的话,
本地域名服务器就让主机去向根域名服务器发送请求(主机去找,本地域名给目标根域名服务器的IP地址),如果还是查不到的话,
根域名域名服务器让主机去向对应的顶级域名服务器发送请求(主机去找,根域名给目标顶级域名服务器的IP地址),如果还是查不到的话,
顶级域名服务器让主机去向权限域名服务器发送请求(主机去找,顶级域名给目标权限域名服务器的IP地址)
可以看到这里是主机一个个挨个问的地址
高速缓存
为了减少多次查询同一个域名的资源浪费,本地域名服务器会存储最近使用的ip地址解析,下次再访问同一个域名就不需要这么多查询步骤了。同时这个高速缓存主机本身也有存储
同时本地域名服务器还可以对顶级域名服务器,权限域名服务器的地址进行缓存,下一次即使是不知道的ip地址,查询也可以更快
高速缓存为了保持正确性,需要定时更新
文件传输协议(FTP,TFTP)
概述
TFTP是一个轻量的,比较容易实现的,面对小文件的,UDP的文件传输协议
这里我们重点是FTP协议
FTP的服务端和客户端
FTP的工作原理
为什么有匿名登陆:对于一些公共服务器来说,增加验证阶段就是增加资源开销,减少验证阶段就可以节省资源来更好地服务
主进程和从属进程的区别:主进程是打开端口,让外部发送的数据可以进来,并且将这些数据逐个分配各从属进程。从属进程则是单独为这些数据服务
先注释一下这里的主进程被忽略掉了,只是没标在上面,不是没有啊
这里客户端和服务器端先建立TCP连接,端口是21,称为控制连接
然后看情况是主动建立连接还是被动建立连接
主动建立连接是指服务器端主动发送请求和客户端进行连接,此时端口号固定是20
被动连接是指客户端发送请求和服务器端建立数据传送连接,此时端口号是不确定,有两者协商得到
数据传输完成之后,数据连接断开,控制连接继续保持,直至两边发送断开请求
FTP的两种传输模式
电子邮件
概述
电子邮件的格式
电子邮件系统的组成结构
用户代理的四个功能解释:
撰写就是给用户编辑信件的环境
显示就是可以看到自己写的和自己收的信件内容
处理就是对信件进行操作,包括删除,打印,转发等等
通信就是可以将邮件发送到邮件服务器当中,同时可以从邮件服务器当中读取邮件
邮件服务器的功能注释:
邮件服务器端的发送和接受是指从自己的用户代理处接收邮件,之后向对面的邮件服务器发送邮件
邮件服务器的报告邮件发送结果就是投递是否成功这种情况
邮件服务器既可以作为客户端又可以作为服务器端,使用的是C/S方式
协议的功能注释:
发邮件用的是SMTP
收邮件的是POP3或者IMAP
几个邮件协议
简单邮件传送协议SMTP
注意一下,这里STMP客户和服务器不是固定死的,用户可以成为服务器,服务器也可以成为用户,由发送方和接收方决定,发送方就是客户,接收方就是服务器
比如:
1 | 220 service ready |
都是应答信息
这里RCPT能有多条命令的原因是,电子邮件可以有多个收件人,就是群发,所以允许多个RCPT
再强调一下,这里服务器和客户端可以互换,视具体情况而定,发送方是客户端,接收方是服务器端
改进SMTP缺点的MIME协议
MIME改善SMTP发送数据的缺点,是SMTP的功能性扩展
MIME协议已经逐渐开始应用到浏览器当中,通过对不同文件类型用不同的标识符标识,来让浏览器读取通过MIME的相关文件
邮局协议POP3
这里接收方是客户端,邮件服务器是服务器端
POP3确实很简单,但是有不少缺点,比较难受的就是邮件一旦下载就自动删除了
比较复杂的读取邮件的协议——IMAP协议
基于万维网的电子邮件
与之前的不同的地方就是,基于万维网的电子邮件的邮件服务器端可以不同
同时,发送邮件使用的SMTP/MIME和收邮件时的POP3/IMAP协议都换成了HTTP协议
万维网和HTTP协议
万维网概述
URL用来标识整个互联网当中的某一个资源(文字,视屏,音频等)的位置
HTTP用来将这些资源传送给用户
HTML帮助设计者来设计页面,让不同设计者设计的页面都可以在界面上显示
HTTP协议
HTTP协议的过程
这张图里讲了HTTP的具体过程
服务器通过TCP 80端口来监听HTTP请求
注意HTTP可以不一次性下载完页面的所有资源,可以只下载文本部分,其他音频视频等待用户下一步请求之后再传输
xxxxxxxxxx spring: cloud: gateway: globalcors: # 全局的跨域处理 add-to-simple-url-handler-mapping: true # 解决options请求被拦截问题 corsConfigurations: ‘[/**]’: allowedOrigins: # 允许哪些网站的跨域请求 - “http://localhost:8090“ allowedMethods: # 允许的跨域ajax的请求方式 - “GET” - “POST” - “DELETE” - “PUT” - “OPTIONS” allowedHeaders: “*” # 允许在请求中携带的头信息 allowCredentials: true # 是否允许携带cookie maxAge: 360000 # 这次跨域检测的有效期yaml
HTTP协议的特点
HTTP的连接方式——持久连接和非持久连接
非持久连接在TCP三次握手的第三次握手时发生,将HTTP请求作为第三次握手的数据部分发给服务器,服务器收到请求之后将HTTP相应报文传输给客户。耗时就是RTT*2+文档传输时间。
缺点就是这样如果再想传输,那么就需要重新建立TCP连接从头开始
持久连接和非持久连接类似,都是在第三次握手时发生,将HTTP请求作为第三次握手的数据部分发给服务器,服务器收到请求之后将HTTP相应报文传输给客户。但是持久连接再需要请资源的时候就不需要建立新的TCP连接了
持久连接的两种方式——非流水线和流水线
非流水线就是发一个,确认一个,才能再发下一个
流水线就是一个个连着发,然后多个确认
和之前说过的停止等待协议,后退N帧协议和选择重传协议很像,忘了的话可以去复习一下
HTTP的报文结构
开始行用于区别请求报文和响应报文。可以明显的看到两者第一行的东西都不一样
请求报文的方法是指命令,就是对所请求的对象进行什么操作,如获取/删除等等
URL就是之间说的资源标识符
版本是指使用的是什么版本的HTTP协议
CRLF相当于我们程序里面的;,标识一行的结束。同时,在整个首部行结束时,为了区别首部行和实体主体还会有一行单独的CRLF
这里举了请求报文的例子,和一些常用的状态码




















































































































































































































































































