第一阶段:单个网络Arpanet
第二阶段:三级结构网络
第三阶段:多层ISP(网络服务提供商)互联网(主干——地区——局域)
1980互联网实验——1989第一个公共网络运行——1994年接入国际互联网
中国电信——中国联通——中国移动——中国教育科研——中国科学技术网
1996年,张朝阳搜狐——1997年,丁磊创建网易——1998年,王志东创建新浪——1998年,马化腾创建腾讯——1999年,马云创建阿里巴巴——2000年,李彦宏创建百度。
OSI七层模型/TCP/IP四层协议
设计原则:各层之间相互独立;每一层有足够的灵活性;各层之间完全解耦;
OSI七层模型
应用层
表示层
会话层
传输层
网络层
数据链路层
物理层
但是市场化时遇到困难,而且TCP/IP四层模型早已出来,而且设计七层模型的专家缺乏实践经验,制定周期过长,无法及时进入市场,并且存在不合理性 ,多层重复出现。
TCP/IP(中间窄,两端宽)
应用层——HTTP、FTP、SMTP、POP3
传输层——TCP、UDP
网络层——IP、ICMP
网络接口层——Ethernet、ARP、RARP
边缘部分(平时接触最多的)
手机、电视……终端——路由器——网关(内部、统一类型)——地区ISP
核心部分(和一般人没啥关系)
小型网络、中型网络、大型
主干ISP——地区ISP——校园、公司、家庭、个人……
(客户——服务器模式接触是最多的,主要是因为我们更容易接触和看到
对等连接(P2P)模式;)
星型网络——总线型网络——树型网络(前两个的综合)——环型网络——网状型网络
五、网络的性能指标
网络速度
网络速度常用单位是bps;bps=bit/s ;一个字节等于八个比特位;100Mbps=100/8MB;
时延
发送时延(数据长度(用户决定)/发送速率(计算机网卡决定,bit为单位))
|
传播时延(传播路径距离(例如北京到上海)/传输速率(传输介质决定))
|
排队时延(数据包在网络设备中等待被处理的时间)
|
处理时延(数据包到达设备或者目的机器被处理的时间)
总时延(四者相加)
往返时间RTT
表示的是数据报文在端到端通信中的来回一次的时间
通常使用ping命令查看(各地不同,时间也不同;例如:美国的一个IP地址:191.101.238.160;澳大利亚:1.1.1.1)
连接不同的物理设备(无屏蔽双绞线、屏蔽双绞线,同轴电缆、光纤、遥控器(红外线))
比特流——高低电平
往一个方向传送信息的媒体
包含一个接收和一个发送信道
物理层通过信道的不同,可以分为单工(只能一个方向,有线电视、无线电收音机)、半双工(双方都可以发送和接收,但不可以同时)、全双工通信信道
信道里面:频分复用、时分复用、波分复用、码分复用
**“**帧”是数据链路层的基本单位;发送端在网络层的一段数据前后哦添加特定标记形成“帧”;接收端根据前后特定标记识别出“帧”;
若数据里面恰好有这些比特流怎么办?
一种实际存在的事物却又看起来不存在一样(就好像玻璃、还有物理层提供的接口)
应用到数据链路层的表现:即是控制字符在帧数据中,但是要当做不存在的去处理
编程语言中“\”一般为转义字符;控制字符:“\n”、"\t";“\”,"\"
物理层只管传输比特流,无法控制是否出错
奇偶校验码
所以提出
循环冗余校验码CRC(广泛使用)
一种根据传输或保存的数据而产生固定数校验码的方法
检测数据传输或者保存后可能出现的错误
生成的数字计算出来并且附加到数据后面
所以需掌握模”2“除法(实际是”异或“操作;两个比特位不一样为1,一样为0)
如何计算呢?看图片就懂了
CRC的错误检测能力与位串的阶数r有关
数据链路层只进行数据的检测,不进行纠正
另外提一点常用的G(x)位串,这是有根据的并不是随意的
最大传输单元MTU(受限于底层物理硬件的特性)
数据链路层的数据帧也不是无限大的
数据帧长度受MTU限制
数据帧过大过小都会影响传输的效率(以太网MTU一般为1500字节)
路径MTU(整个链路中最小的MTU)
广泛使用的局域网技术;可以完成相邻设备的数据帧传输
虚拟互联网络:实际的计算机网络是错综复杂的;不同的物理设备通过使用IP协议,屏蔽了物理网络之间的差异;重点关注端到端的连接
IP协议使得复杂的实际网络变为一个虚拟互连的网络
IP协议使得网络层可以屏蔽底层细节而专注网络层的数据转发
IP协议解决了在虚拟网络中数据报传输路径的问题
IP协议的转发流程(逐跳)
路由表;它和MAC表差不多
通过观察我们可以发现:数据帧每一跳的MAC地址都在变化
数据报每一跳的IP地址始终不变
注:虽然ARP协议直接封装在数据帧的,主要是因为ARP协议使用到了IP地址
ARP地址解析协议(Address Resolution Protocol)
网络层IP32位地址——》数据链路层MAC48位地址
ARP缓存表是ARP协议和RARP协议运行的关键
ARP缓存了IP地址到硬件地址之间的映射关系
ARP缓存表中的记录并不是永久有效的,有一定的期限
cmd中(arp -a)
RARP协议(逆地址解析协议)
ARP协议是TCP/IP协议栈里卖最基础的协议;而且对程序员是透明的;有助于我们了解网络分层的细节
复习前面IP地址的知识
IP地址长度为32位,常分成4个8位
IP地址常使用点分十进制来表示(0255.0255.0255.0255)
分类的IP地址
网络号+主机号:总共32位
A类地址:8位的网络号(0开头)+24位的主机号
B类地址:16位的网络号(10开头)+16位的主机号
C类地址:24位的网络号(110开头)+8位的主机号
127.0.0.1,通常被称为本地回环地址,不属于任何一个有类别地址类。它代表设备的本地虚拟接口,所以默认被看作是永远不会关掉的接口。所以通常在安装网卡之前就可以ping通这个本地回环地址。 一般都会用来检查本地网络协议、基本数据接口等是否正常的。
D类(1110)、E类地址(1111)
划分子网
相当于把IP地址划分为:网络号+子网号+主机号
子网号这么多的话,有没有办法迅速判断某个IP的网络号呢?
:答案是肯定的,这时候就有了子网掩码这一说
无分类编址CIDR
IP地址为192.168.10.2,子网掩码为255.255.255.240。
先将十进制转换成二进制:
IP地址: 11000000 10101000 00001010 00000010
子网掩码: 11111111 11111111 11111111 11110000
进行与运算:--------------------------
11000000 10101000 00001010 00000000
则可得其网络标识为192.168.10.0,主机标识为2。
现代主要以CIDR无分类编址技术为主,要想更好的理解,就必须熟悉之前的子网划分和子网掩码
内网地址:内部机构使用,比如家庭,个人,手机,笔记本;避免与外网地址重复
外网地址:全球范围内使用;全球公网唯一性;
外部使用同一个地址,内部使用不同个地址,以方便使用网络
这时候就会出现一个问题:
内网多个设备使用同一个外网IP请求外网的服务,外部怎么知道具体是哪个设备在请求的?
这时候就要用到网络地址转换NAT技术
:所谓NAT技术就是用于多个主机通过一个公有IP访问互联网的私有网络中
NAT虽然减缓了IP地址的消耗,但是增加了网络通信的复杂度!
网络控制报文协议
历程:IP协议(传输真实的数据)——ARP协议(32位的IP地址转换成48位的MAC地址)——RARP协议(48位的MAC地址转换为32位的IP地址)——ICMP协议(辅助IP协议进行数据传输的,可以报告异常情况和错误情况,使IP协议更好的传输数据)
ICMP的应用
ping命令(判断网络的畅通和质量)
:字节——命令发出的报文长度为32字节,也就是封装的数据报的长度为32字节
时间——请求到应答的时间
TTL——报文在网络传输之后的寿命为多少跳,如果TTL为0的话就会丢弃报文。
如果ping 127.0.0.1不通的话说明电脑的协议栈出现了问题,这时候需要重装系统或者重新安装协议栈
ping 网关地址;ping远端地址
Traceroute
可以探测IP数据报在网络中走过的路径
其中重要的是TTL
:而TTL的主要作用是避免IP包在网络中的无线循环和收发,节省了网络资源,并能使IP包的发送者能收到告警消息
TTL是由发送主机设置的,以防止数据包不断在IP互联网络上永不终止的循环。转发IP数据包时,要求路由器至少将TTL减小1.
TTL值在注册表中,找到具体位置中DefaultTTL的DWORD值,其数据就是默认的TTL值,我们可以进行修改,但不能大于十进制的255.。Windows设置后重启才生效。
来自百度:
生存时间,就是一条域名解析记录在DNS服务器中的存留时间。当各地的DNS服务器接受到解析请求时,就会向域名指定的DNS服务器(权威域名服务器)发出解析请求从而获得解析记录;在获得这个记录之后,记录会在DNS服务器(各地的缓存服务器,也叫递归域名服务器)中保存一段时间,这段时间内如果再接到这个域名的解析请求,DNS服务器将不会向NS服务器发出请求,而是直接返回刚才获得的记录;而这个记录在DNS服务器上保留的时间,就是TTL值。
路由算法(本质上是图的算法)(数据结构)
:算法是正确的、完整的
算法在计算机上应该尽可能地简单
算法可以适应网络中地变化
算法是稳定的和公平的
对互联网的划分
自治系统(AS)(内部网络自行管理)(相当于前面章节所说的网络层次:主干—地区—校园)
内部路由的协议称为:内部网关协议(RIP、OSPF)
外部路由的协议称为:外部网关协议(BGP)
距离矢量(DV)算法(核心)(跟路径有很大的关系)
RIP协议的过程
优点:实现简单;开销很小;限制了网络规模
路由信息协议(Route Information Protocol)
把网络的跳数作为DV算法的距离
每隔30s交换一次路由信息
默认把跳数>15的路由则为不可达
当使用时:
对相邻路由器X发过来的信息,对信息的内容进行修改(下一跳地址设置为X,所有距离加1)
i:检索本地路由将信息中的新的路由插入到路由表里面
ii:检索本地路由,对于下一跳为X的,更新为修改后的信息
iii:检索本地路由,对比相同目的的距离,如果新信息的距离更小,则更新本地路由表
如果3分钟没有收到相邻的路由信息,则把相邻路由设置为不可达(16跳)
其中有个最致命的缺点:
就是故障信息传递慢:(随便相信隔壁老王;自己不思考,视野不够,只能看到相邻节点的信息;)
Dijkstra(迪杰斯特拉)算法
插入这个协议的原因是,后面的OSPF协议会用到这个协议
著名的图论算法;解决有权图从一个节点到其他节点的最短路径问题
“以起时点为中心,向外层层扩展”
链路状态(LS)协议;建议与前面的RIP协议相结合
** **:向所有的路由器发送消息;一传十,十传百(RIP协议只和相邻的路由器交换信息)
消息描述该路由器与相邻路由器的链路状态
只有链路状态发生变化时,才发送更新消息
解决RIP协议“随便相信隔壁老王”“视野不够”的缺点
OSPF协议的过程(OSPF协议就是一种链路状态协议的实现)
OSPF(Open Shortest Path First:开放最短路径优先)
核心算法就是Dijikatra算法
五种消息类型
问候消息(Hello):非常短;维护该路由器与相邻路由器的可达性的
链路状态数据库描述信息: 向隔壁的路由器发送简单的链路状态数据库的消息
链路状态请求信息:向隔壁数据库请求链路状态消息
链路状态更新信息:路由器通过广播消息
链路状态确认信息:
BGP(Border Gateway Protocol:边际网关协议)
BGP协议是运行在AS之间的一种协议
为什么要使用BGP协议呢?
:i互联网的规模很大(在AS之间选择这个路由十分困难;如果在AS之间使用LS协议的话,每个路由器都要存储许多链路状态的路由信息;并且要使用迪杰斯特拉算法的话,这个速度是很慢的)
iiAS内部使用不同的路由协议:比如
iiiAS之间需要考虑网络特性以外的一些因素(政治、安全……)
因为这些原因,所以BGP协议能够找到一条到达目的比较好的路由(找不到最好的路由)
配置BGP协议
关键词:BGP发言人(speaker),也就是路由器
为什么有这个发言人呢?
:BGP并不关心内部网络拓扑
AS之间通过BGP发言人交流信息的
BGP Speaker可以人为配置策略(也就是网络可以人为 的进行干预)
管理端到端的通信连接
用户的最底层;面向通信的最高层
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ksdjjh4J-1595119770594)(https://uploader.shimo.im/f/dVRtcmPBIoEQ39F2.png!thumbnail)]
UDP协议(User Datagram Protocol:用户数据报协议)
UDP是一个简单的协议(无连接协议:意思就是不需要提前建立连接)
:数据报——UDP不会进行处理,直接封装后传输出去;数据长短主要是由应用层决定 的。
UDP不能保证可靠的交付数据(想发就发;UDP头部过于简单)
UDP是面向报文传输的(不会对报文进行任何处理)
UDP没有拥塞控制(不管网络是否拥塞,都会发出数据)
UDP的首部开销很小
TCP标记:占六位;
三种情况
每发送一个消息,都需要设置一个定时器:
(TCP里面总共四个定时器,还有三个,后续学习)
总结
提高信道利用率
因为停止等待协议的效率并不高,所以在这基础上开发了连续ARQ协议
ARQ(Automatic Repeat reQuest:自动重传请求)
“既然单个发送和确认效率低,可不可以批量发送和确认?”引出了ARQ协议
情况1:中间并没有出现数据超时
情况2:出现数据超时
情况3:都发送都未确认
情况4:特殊情况;未按顺序传输
这些情况都会降低传输效率;所以就提出了
选择重传
更多的情况下是对一段字节进行重传的,主要是因为考虑实际情况
(处理后马上交给应用层,接收方会告诉rwnd=1000
这样的话发送方又可以继续发送了!)
特殊情况
如果接收方给发送方传输的窗口大小信息(rwnd=1000)丢失了,发送方会一直的等待,以进行新的数据的发送;而接受方已经把窗口调大的消息发出去了,所以接收方一直进行等待发送方发送数据,这时候就形成了“死锁”的局面。
那么TCP不是可靠传输吗?
:我们在进行TCP的可靠传输讨论的时候,是从数据的角度去考虑的,都是对数据的确认,比如序列号,确认号等。而对特殊的消息,窗口大小调整的消息是没有超时重传机制的,所以会形成死锁。
这时候就要
(解决“死锁”局面)
总结
TCP协议使用滑动窗口实现流量控制
坚持定时器的作用
可以对上节所述流量控制进行简单的区分
:流量控制考虑点对点的通信量的控制(通过控制窗口的大小来控制流量传输)
而拥塞控制考虑整个网络,是全局性的考虑。
:报文超时则认为是拥塞,但是通过报文超时判断网络是否一定发生拥塞是不成立的。
(如果我们进行物理层上面的更改,就不是报文的超时,而是网络故障;比如把光纤拔了)
慢启动算法
指数增长;而且有慢启动阈值(ssthresh)
拥塞避免算法
(指数增长——线性增长)
为什么发送发要发出第三个确认报文呢?
:避免失效的连接请求报文传送到对方,引起错误
比如两次握手的后果:连接两次
当进行三次握手建立连接时,发送方第二次建立起第二次握手时比发送方第一次建立起第二次握手时要快;这时候,发送方第二次建立起第二次握手并进行了第三次握手,表明TCP连接建立成功,就算第一次建立了属于它的第二次握手,但这个连接已建立,所以会忽略掉!
连接的释放
为什么要等待2MSL?
(而且2MSL是网络中报文存活的最长时间)
而这个组合我们就叫做套接字(Socket);而它是个抽象概念,表示TCP连接的一端
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vNBOFEMc-1595119770611)(https://uploader.shimo.im/f/UEm8wDA7PhQxCnzl.png!thumbnail)]
网络套接字——域套接字(Linux操作系统中的知识)
DNS(Domain Name System:域名系统)
树状结构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tcQQnTa0-1595119770620)(https://uploader.shimo.im/f/PwfAStjijQvj18He.png!thumbnail)]
HTTP(HyperText Transfer Protocol:超文本传输协议)
:硬件与软件部分;
:在地址中指定;
在请求数据里面指定
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B7GlZAat-1595119770625)(https://uploader.shimo.im/f/3pjsIP2lsqrsU9mQ.png!thumbnail)]