关于我的仓库
- 这篇文章是我为面试准备的学习总结中的一篇
- 我将准备面试中找到的所有学习资料,写的Demo,写的博客都放在了这个仓库里iOS-Engineer-Interview
- 欢迎star👏👏
- 其中的博客在简书,CSDN都有发布
- 博客中提到的相关的代码Demo可以在仓库里相应的文件夹里找到
前言
- 该系列为学习《趣谈网络协议》的系列学习笔记
- 总结内容包括其中的重要知识概念,以及课后题的解答
- 计算机网络的协议不仅是为了能作为进入大厂的敲门砖,也是希望能抓到计算机世界不变的本质,希望能在计算机领域努力下去
- 与同步学习的网课《数据结构与算法之美》不同,计算机网络明显抽象,之前的接触基本为0【只有大一学习计算机导论的时候会涉及部分】,也不是很能明白其中的知识点之类的,只能说希望在学习过程中多摸索吧!
- 由于欠缺的基础知识比较多,系列文章不会只涉及网课,该补充的知识还是得放上去
- 多说无益,你应该开始学了
00讲想成为技术牛人?先搞定网络协议!
- 开讲词跟多的是涉及讲课的内容与方式,学习摘录的点不多
- 很多情况下,只要搞定了网络,一个大型系统也就搞定了一半
- 想要不被滚滚而来的新技术淘汰,就要掌握这些可以长 久使用的知识,而网络协议就是值得你学习,而且是到 40 岁之后依然有价值的知识。
- 困难:
- 网络协议知识点太多,学完容易忘
- 看上去懂了,经不住问
- 知识点学会了,实际运用依然不会
- 金句:看上去最是枯燥,最基础的东西往往具有最长久的生命力
01讲为什么要学习网络协议?
引入:什么是协议?
- 这里以编译器“翻译”编程语言举例,以OC举例:
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
}
return 0;
}
- 这里我们希望在控制台中打印出“Hello, World”,我们使用OC或者其他的高级编程语言就是一种”协议“,这个协议保证的就是让计算机能理解我们的需求,通过协议,计算机才能明白我们希望它们做什么
协议三要素
-
由于我们使用的还是高级语言,所以需要编译器给我们进行翻译工作,这里就体现出了协议的三要素
- 语法:要遵循的规则与格式【括号要成对,结束要使用分号等】
- 语义:这一段要具备某种意义【数字减去数字是有意义的,数字减去文本一般来说就没有意义。】
- 顺序:先做什么,后做什么【可以先加上某个数值,然后再减去某个数值】
- 协议还有其他的特点:
- 协议中的每个人都必须了解协议,并且预先知道所要完成的所有的步骤。
- 协议中的每个人都必须同意并遵循它。
- 协议必须是清楚的,每一步必须明确定义,并且不会引起误解。
- 另外,虽然老师举了编译器中国例子,但现在通行的理解会直接把协议就默认为网络协议
协议例子
- 网易考拉的例子:
HTTP/1.1 200 OK
Date: Tue, 27 Mar 2018 16:50:26 GMTContent-Type: text/html;charset=UTF-8
Content-Language: zh-CN
<!DOCTYPE html>
<html>
<head>
<base href="https://pages.kaola.com/" />
<meta charset="utf-8"/> <title> 网易考拉 3 周年主会场 </title>
- 语法:符合语法,也就是说,只有按照上面那个格式来,浏览器才认。例如,上来是状态,然后是首部,然后是内容。【这里稍微有点web开发小基础就能明白三块分别是什么,哪怕是我这种天天翘课的水平😝】
- 语义:符合语义,就是要按照约定的意思来。例如,状态 200,表述的意思是网页成功返回。如果不成功,就是我们常见的“404”。【就是第一行中的200】
- 顺序:符合顺序,你一点浏览器,就是发送出一个 HTTP 请求,然后才有上面那一串 HTTP 返回的东西。
【准备掉头发吧!】以一个在电商网站上下单的过程初识有哪些常用网络协议
- 学00讲的时候还很快乐,觉得学这个很有用,blbl雄心壮志,结果01讲这个神仙例子就把我整懵了,乃至学完这节后每次点击链接都会想下其中有那么复杂的流程。。。还我上网体验!🌚
- 由于还在学习前期,其实对于这个例子涉及到的东西有些还是不太理解,如果有大神看到这篇文章,愿意指出错误,不胜感激!
- 唉,多说无益,开整吧!
目标IP地址
- 我们在输入框中输入的只是URL网址:https://www.kaola.com
- 现在我们的浏览器只知道名字是“www.kaola.com”,并不知道具体的地点,此时,我们需要获取到目标IP地址
- 这里有两种方式:
- 一般的地址簿协议DNS
- 更加精确的地址簿查找协议HTTPDNS
- 无论使用什么方式,最后都会获取到106.114.138.24这个地址【没明白,这个IP地址好像没什么特别的。。。】
- 而IP就是互联网世界的门牌号
- 下面就要开始打包请求,进入传输层
补充知识:URL
- url是统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。url 是网民们在 Internet 知识海洋中寻找资源、获取信息、用 E- mail 通讯、网上交流等所必不可少的。
- 基本URL包含模式(或称协议)、服务器名称(或IP地址)、路径和文件名,如“协议://授权/路径查询”。完整的、带有授权部分的普通统一资源标志符语法看上去如下:协议://用户名:密码@子域名.域名.顶级域名:端口号/目录/文件名.文件后缀参数=值#标志。
- 第一部分:模式/协议(scheme):它告诉浏览器如何处理将要打开的文件。最常用的模式是超文本传输协议(Hypertext Transfer Protocol,缩写为HTTP),这个协议可以用来访问网络
- 第二部分:第二部分是 Internet 主机名。我们希望访问的 WWW 页 面就存放在该计算机上。有了这台计算机的名 字,Internet 通过 DNS( 域名服务器) 找到与这台计算机的英文名相对应的数字地址,也叫做 IP 地址,就能够在全世界范围内找到这台计算机,不管它是在哪个国家或哪个地区。 文件所在的服务器的名称或IP地址,后面是到达这个文件的路径和文件本身的名称。服务器的名称或IP地址后面有时还跟一个冒号和一个端口号。它也可以包含接触服务器必须的用户名称和密码。
- 第三部分:url的第三项为路径。它定义信息保存在 这台计算机上的什么地方,即哪个子目录中。 每个子目录的前面有 一条斜杠 。路径部分包含等级结构的路径定义,一般来说不同部分之间以斜线(/)分隔。询问部分一般用来传送对服务器上的数据库进行动态询问时所需要的参数。
- 第四部分:url的第四项是文件名或主页名。也就是我们想要访问的某个具体信息的文件名或主页名。在 http://home.netscape.com/pub/ma in/index.html 中 index.html 为主页名。当然,文件名也是可以省略的,如果省略,你所连接的计算机将自动决定使用哪一个文件。常见的 文件类型有:正式的 Web 页( .html) 、纯文本文件( .txt 或.text) 、图片文件( .gif 或.jpeg) 、声音文件( .wav 或.au) 、电 影文件( .avi 或.mpeg) 等。
- 上面👆这些内容来自百度百科,我们根据我们这个例子来看看每个部分是什么
- 我们这个例子就两部分,http是协议,www.wangyikaola.com就是域名,也就是第二部分里面的主机名,我们根据它来获取到唯一的IP地址
- 参考:快速搞懂URL的构成
应用层
- 这里注意,虽然我把查找IP地址部分放在了应用层上面,但是DNS协议也是应用层的协议,换句话说上面这部分也是应用层的操作
- 我们在知道目标地址后,会开始打包请求,对于一般的请求,使用http;由于购物中往往需要加密传输,我们使用HTTPS协议
- 我们会在这一层写清楚“我要买什么,买多少”【用户输入的内容】
- 这里捋一捋,我们现在知道目标IP地址,目标URL,以及我们的内容
- DNS、HTTP、HTTPS 所在的层我们称为应用层。经过应用层封装后,浏览器会将应用层 的包交给下一层去完成,通过 socket 编程来实现。下一层是传输层。
补充知识:http与https
- http:HyperText Transfer Protocol,超文本传输协议
- http的中文叫做超文本传输协议,它负责完成客户端到服务端的一系列操作,是专门用来传输注入HTML的超媒体文档等web内容的协议,它是基于传输层的TCP协议的应用层协议
- HTTP是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII码形式给出;而消息内容则具有一个类似MIME的格式。这个简单模型是早期Web成功的有功之臣,因为它使得开发和部署是那么的直截了当。
- https:Hyper Text Transfer Protocol over Secure Socket Layer 或 Hypertext Transfer Protocol Secure,超文本传输安全协议
- https是基于安全套接字的http协议,也可以理解为是http+ssl/tls(数字证书)的组合
- 是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。
- 区别:
HTTP 的 URL 以 http:// 开头,而 HTTPS 的 URL 以 https:// 开头
HTTP 是不安全的,而 HTTPS 是安全的
HTTP 标准端口是 80 ,而 HTTPS 的标准端口是 443
在 OSI 网络模型中,HTTPS的加密是在传输层完成的,因为SSL是位于传输层的,TLS的前身是SSL,所以同理
HTTP无需认证证书,而https需要认证证书
简单来说http是用来进行html等超媒体传输的,但是http不安全,为了安全,使用证书SSL和HTTP的方式进行数据传输,也就是HTTPS
- 参考:HTTP和HTTPS的区别和常见的面试题
传输层
传输层有两种协议, 一种是无连接的协议UDP,一种是面向连接的协议TCP。对于支付来讲,往往使用 TCP协议。所谓的面向连接就是,TCP 会保证这个包能够到达目的地。如果不能到达,就会重新发送,直至到达。【UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。】
UDP没有被完全淘汰,但既然http都是基于TCP的应用层协议,这个UDP,emm。。。
TCP 协议里面会有两个端口,一个是浏览器监听的端口,一个是电商的服务器监听的端 口。操作系统往往通过端口来判断,它得到的包应该给哪个进程。【顶不住了,怎么突然开始操作系统,线程了😿】
- ???:这里的端口指的是总结电脑上的东西,我们在浏览器上下单,这个电商应用端口是个啥子东西
补充知识:端口
- "端口"是英文port的意译,可以认为是设备与外界通讯交流的出口。
- 端口是指接口电路中的一些寄存器,这些寄存器分别用来存放数据信息、控制信息和状态信息,相应的端口分别称为数据端口、控制端口和状态端口。
电脑运行的系统程序,其实就像一个闭合的圆圈,但是电脑是为人服务的,他需要接受一些指令,并且要按照指令调整系统功能来工作,于是系统程序设计者,就把这个圆圈截成好多段,这些线段接口就叫端口(通俗讲是断口,就是中断),系统运行到这些端口时,一看端口是否打开或关闭,如果关闭,就是绳子接通了,系统往下运行,如果端口是打开的,系统就得到命令,有外部数据输入,接受外部数据并执行。 - TCP端口:TCP端口就是为TCP协议通信提供服务的端口。TCP (Transmission Control Protocol) ,TCP是一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transport layer)通信协议,由IETF的RFC 793说明(specified)。在计算机网络OSI模型中,它完成第四层传输层所指定的功能。我们的电脑与网络连接的许多应用都是通过TCP端口所实现的。
网络层【计算机网络露出了狰狞的笑容】
- 这里我们会看到目前为止,我们还是在自己电脑上折腾,还没有走出去,而网络层就会真正带我们进行传输
- 网络层相关的协议就是我们最开始就提到的根据域名获取到的IP协议。
- 在 IP 协议里面会有源 IP 地址,即浏览器所在机器的 IP 地址和目标 IP 地址,也即电商网站所在 服务器的 IP 地址。
- 现在我们知道了目标IP地址,需要根据它到达目标机器
- 但由于我们是要与远方的机器进行交互,要出国,所以我们首先要到网关
- 操作系统启动的时候,就会被 DHCP 协议配置 IP 地址,以及默认的网关的 IP 地址 192.168.1.1。【后面会学到】
- 192.168.1.1属于IP地址的C类地址,属于保留IP,专门用于路由器设置
- 现在我们有本地的IP地址,有网关的IP地址,现在要将目标IP地址发给网关,此时会通过ARP协议【链路层】将本机的MAC地址,网关的MAC地址一起打包发给网关【夭寿了,MAC即是电脑又是口红还是地址】
- 又网关给我们进行转发,带我们找到目标
- 这里涉及到的链路层貌似只是为了获取下MAC地址,取出MAC地址接下来还是网络层方面的传输【可能理解不太对】
补充知识:MAC地址
- MAC地址(英语:Media Access Control Address),直译为媒体存取控制位址,也称为局域网地址(LAN Address),MAC位址,以太网地址(Ethernet Address)或物理地址(Physical Address),它是一个用来确认网络设备位置的位址。在OSI模型中,第三层网络层负责IP地址,第二层数据链路层则负责MAC位址。MAC地址用于在网络中唯一标示一个网卡,一台设备若有一或多个网卡,则每个网卡都需要并会有一个唯一的MAC地址 。
- 每个网卡都会有个唯一的MAC标识符,刘超老师在后面会有更精彩的比喻讲解
下面是一段刘超老师的神奇比喻
- 网关收到包之后,会根据自己的知识,判断下一步应该怎么走。网关往往是一个路由器,到 某个 IP 地址应该怎么走,这个叫作路由表。
- 路由器有点像玄奘西行路过的一个个国家的一个个城关。每个城关都连着两个国家,每个国家相当于一个局域网,在每个国家内部,都可以使用本地的地址 MAC 进行通信。
- 这里需要一波理解:路由器是城关,国家是一个局域网,在局域网的内部可以直接使用MAC地址通信【就像上面我们使用本机的MAC地址向网关发送我们的包】
- 路由表:在计算机网络中,路由表(routing table)或称路由择域信息库(RIB, Routing Information Base),是一个存储在路由器或者联网计算机中的电子表格(文件)或类数据库。路由表存储着指向特定网络地址的路径(在有些情况下,还记录有路径的路由度量值)。路由表中含有网络周边的拓扑信息。路由表建立的主要目标是为了实现路由协议和静态路由选择。
- 现在我们到达了下一个路由器【城关】,需要问一下接下来怎么走【在IP头中有记录源IP以及目标IP】
- 城关往往是知道这些“知识”的,因为城关和临近的城关也会经常沟通。到哪里应该怎么 走,这种沟通的协议称为路由协议,常用的有OSPF和BGP。【网络层】
在到下一个国家还是一样先通过国家里的MAC地址获取到下一个城关的MAC地址【这里就能大概理解到为什么一定要通过MAC地址通信,城关就是路由器,默认的IP地址是一样的,如果不加以区分,显然会出错】
当到达目标城关后【进入了目标局域网】,在这里就能根据目标IP获取到目标MAC
目标服务器发现 MAC 地址对上了,取下 MAC 头来,发送给操作系统的网络层。发现 IP 也对上了,就取下 IP 头。IP 头里会写上一层封装的是 TCP 协议,然后将其交给传输层,即TCP 层【传输层】。
对于传输层,只要收到一个包就会回复一个包说明收到了,这个包里只是TCP层一个说明,说明收到了。这个回复包会根据来时的路走回去报个平安。
为什么呢?因为我们使用的面向连接的TCP协议,它如果迟迟收不到回复会重新发送
这里需要一波理解:我们在应用层下单,进入传输层,再下到网络层,通过链路层获取MAC地址后,回到网络层,在网络层见通信找到了目标机器,这是一个由上至下的过程;而发送到以后,会先根据MAC地址验证,往上到网络层,验证IP地址,再往上到传输层,发送收到的包。这个整个流程应用层只干一次活,都是TCP埋头苦干,注意⚠️
当网络包平安到达 TCP 层之后,TCP 头中有目标端口号,通过这个端口号,可以找到电商 网站的进程正在监听这个端口号,假设一个 Tomcat,将这个包发给电商网站。
可以看到,我们的请求一开始只有正文部分,随着一层层往下,添加了各种内容,而发送到以后,随着一层层往上,内容不断被剥除
电商网站的进程得到 HTTP 请求的内容,知道了要买东西,买多少。往往一个电商网站最 初接待请求的这个 Tomcat 只是个接待员,负责统筹处理这个请求,而不是所有的事情都 自己做。例如,这个接待员要告诉专门管理订单的进程,登记要买某个商品,买多少,要告 诉管理库存的进程,库存要减少多少,要告诉支付的进程,应该付多少钱,等等。
如何告诉相关的进程呢?往往通过 RPC 调用,即远程过程调用的方式来实现。远程过程调 用就是当告诉管理订单进程的时候,接待员不用关心中间的网络互连问题,会由 RPC 框架 统一处理。RPC 框架有很多种,有基于 HTTP 协议放在 HTTP 的报文里面的,有直接封装 在 TCP 报文里面的。
- 当接待员发现相应的部门都处理完毕,就回复一个 HTTPS 的包,告知下单成功。这个 HTTPS 的包,会像来的时候一样,经过千难万险到达你的个人电脑,最终进入浏览器,显 示支付成功。
所有涉及到的协议
课后题:当网络包到达一个城关的时候,可以通过路由表得到下一个城关的 IP 地址,直接通过 IP 地 址找就可以了,为什么还要通过本地的 MAC 地址呢?
- mac好比人的身份id,IP好比他的住址,住址可以变,人的身份🆔不会变。
- IP是网络层使用的 mac是链路层使用的 ip包最终还是要通过物理链接和mac地址进行交互的
- 因为mac地址是全世界唯一的,不会找错人!而ip地址会是发生改变的!有可能现在ip地址 A是这里的地址!在下一刻就是B的地址了!
- 综上所述:所以要有mac地址!
02讲网络分层的真实含义是什么?
还好第二讲不是很复杂,讲道理如果你把第一讲像我一样精读过去,第二讲其实没什么新的东西【当然,要是每一讲都跟第一讲一样复杂,咱也顶不住】
由于目前还没有学过计算机网络,所以里面一些概念其实咱也不懂,没系统了解过,看后面会不会讲清楚吧!
这一讲以四个问题引入的,第一,第三问在这一讲讲清楚了,在这里总结下
当然,这两个问题感觉本质上就一个问题,就是在说明网络上跑的包一定是完整的
为了讲清楚这是为什么,我们需要补充点营养,慢慢来呗
网络迷思:分层秘辛
- 我们知道网络会分成应用层,传输层,网络层,链路层,物理层
- 分层是复杂程序的标配,只要接触过软件开发的童鞋肯定都会接触到分层
- 当然网络包的格式很复杂,这个程序也很复杂。复杂的程序都要分层,这是程序设计的要 求。比如,复杂的电商还会分数据库层、缓存层、Compose 层、Controller 层和接入层, 每一层专注做本层的事情。
- 这里老师教导我们要像一个处理网络包的程序一样去思考,什么意思呢?就是说我们自己就是掌控整个发送网络包流程的大管家,不管是在路由器,交换机,服务器上都是由我们来掌控。从这个角度去思考,了解整个发送网络包的过程
卑微的“我”——工作流程
- 这里我们先不看具体实现细节,总览一下整个流程
- 整个流程分为两个部分,左半部分是GET请求,获取网页内容,右半部分是一个POST请求,我们要发送一个请求
- 这两个部分设计到的函数都是伪代码,且正好一一对应
- process中的layer2,3,tcp分别验证了【扒下了】MAC头,IP头,TCP头,最后根据HTTP头展示内容
- send也一样的流程只是从上到下,把最初的一个http请求一步步往下包装,知道最后又了MAC头后进行发送
- 这个流程告诉我们什么呢?其实我们真正的目的只是通过网络层去进行通信,因为我们知道的就是当前IP地址以及目标IP地址,但是我们的通信还是要往下扒到MAC层
- 具体结论后面看
层与层之间的关系
么得灵魂的比喻
- 这里讲到一般情况下我们会把每个层比作一家公司,各个层就好像是各个阶层,一家公司也是分“层次”的,分总经理、经理、组长、员工。总经理之间有他们的沟通方式,经理和经理之间也有沟通方式,同理组长和员工。
- 根据这个比喻的话,大致就是总经理就是应用层,经理就是传输层,等等
- 这个比喻坏在他只能说明同一阶层才能相互交流,比如只有网络层与网络层之间才能沟通
- 但他没有讲明白交流的真正情况,就比如上面这个例子,我们其实只是想根据目标IP地址发送包,但是我们必须往下获取到了MAC地址才能发送
- 放在比喻里就类似总经理谈话,底下的人必须都在场,显然和现实不太符合
刘超的奇妙比喻
- 总经理之间沟通的时候,经理将总经理放在自己兜里,然后组长把经理放自己兜 里,员工把组长放自己兜里,像套娃娃一样。那员工直接沟通,不带上总经理,就不恰当 了。
- 现实生活中,往往是员工说一句,组长补充两句,然后经理补充两句,最后总经理再补充两句。但是在网络世界,应该是总经理说话,经理补充两句,组长补充两句,员工再补充两句。
- 这个比喻其实和我想的不太一样,我想的是总经理间交流要把下面的人一层层放兜里,这里是总经理间交流是底下的员工要把上面的人揣兜里
- 但最后想来,还是超哥有一手👋,这样的比喻就能很好讲明白,所有包都是由下往上的,也就是说可以有下层没上层,不可能有上层没下层【这么说来,可能这个公司的比喻先天不足,还是容易让人迷惑】
- 因此理解这个之后,我们就能明白,假如上层就是皇帝,下层就是太监,皇帝动动嘴,太监跑断腿不是开玩笑的。以TCP层的三次握手为例,看起来是TCP发送的消息,其实下面的IP,MAC扛着它跑的,为此费了很大功夫了
重要结论
- 只要是在网络上跑的包,都是完整的。可以有下层没上层,绝对不可能有 上层没下层。
- 对 TCP 协议来说,三次握手也好,重试也好,只要想发出去包,就要有 IP 层和 MAC 层,不然是发不出去的。
- 所谓的二层设备、三层设备,都是这些设备上跑的程序不同而已。一个 HTTP 协议的包经过一个二层设备,二层设备收进去的是整个网络包。这里面 HTTP、TCP、 IP、 MAC 都 有。什么叫二层设备呀,就是只把 MAC 头摘下来,看看到底是丢弃、转发,还是自己留着。那什么叫三层设备呢?就是把 MAC 头摘下来之后,再把 IP 头摘下来,看看到底是丢弃、转发,还是自己留着。
课后题
如果你也觉得总经理和员工的比喻不恰当,你有更恰当的比喻吗?
- 看到有一个比喻有点妙
- 通信协议就像没有天桥的双子楼,要从A座的24层到达B座24层就得先下楼梯再上楼梯
- 由于双子楼之间没有天桥,必须先从24楼到一楼,才能到B楼上去
- 完美契合上面几个重要结论呀👏👏👏
要想学习网络协议,IP 这个概念是最最基本的,那你知道如何查看 IP 地址吗?
- 下一讲就会讲到啦
03讲ifconfig:最熟悉又陌生的命令行
- 这一讲不是很友好,我用的是macOS系统的电脑,有些东西和Linux不太一样,还查不到很多资料,很烦
- 另外,这一讲的课后老师提到了讲课时讲的不清楚的地方说明当前不用了解太深,后面会补上,所以我平时对于不会的知识点,搜波资料,先mark住,兄弟们
- 另外,做客户端感觉和程序员常识有点脱节的,这个命令对我来说是陌生又陌生的命令🌚,当然也没什么好抱怨的,赶紧变强吧!
macOS系统查看IP地址
- 命令和老师讲的一样:ifconfig
- 但是第二个命令ip addr没有,结果会是这样【直接全部输出太长了,就看lo0和en0的,对应了老师的那两个网卡】:
- 大致内容和老师的可以一一对应,讲几个不太一样的
- MAC地址就是en0中ether后面跟着的
- 对于net_device flags,网络设备的状态标识,和老师举的例子多了几个,我却么得找到解释,很烦
IP地址
- IP 地址是一个网卡在网络世界的通讯地址,相当于我们现实世界的门牌号码。
- 一个IP地址由四部分组成,每个部分占8位,也就是一共是32位
- 对于A,B,C类地址分成了网络号与主机号两部分,大概就是一个是小区号一个是门牌号
- C 类地址能包含的最大主机数量实在太少了,只有 254 个
无类型域间选路(CIDR)
- 由于上面讲的划分的ABC类地址不太合理,所以在我们一般生活中几乎不用区分几类地址,而是通过CIDR去划分
- 将 32 位的 IP 地址一分为二,前面是网络号,后面是主机号。从哪里分 呢?你如果注意观察的话可以看到,10.100.122.2/24,这个 IP 地址中有一个斜杠,斜杠 后面有个数字 24。这种地址表示形式,就是 CIDR。后面 24 的意思是,32 位中,前 24 位是网络号,后 8 位是主机号。
- 我们举一个10.100.122.2/24的例子来说明下面的概念:
- 首地址:10.100.122.1
- 子网掩码:255.255.255.0
- 广播地址:10.100.122.255。如果发送这个地址,所有 10.100.122 【网络号】网络里面的机器都可以收到。
- 将子网掩码和 IP 地址进行 AND 计算。前面三个 255,转成二进制都是 1。1 和任何数值 取 AND,都是原来数值,因而前三个数不变,为 10.100.122。后面一个 0,转换成二进制 是 0,0 和任何数值取 AND,都是 0,因而最后一个数变为 0,合起来就是 10.100.122.0。这就是网络号。将子网掩码和 IP 地址按位计算 AND,就可得到网络号。
公有IP地址和私有IP地址
- 我们先看回上面这张图:
尽管我们基本上已经用不上ABC类地址的划分,但是私有与公有IP地址依然是个很重要的概念
公有IP是唯一的,在互联网世界只此一家,人们可以根据IP地址找到你,而下面的私有IP地址是可以内部随意分配的
表格中的 192.168.0.x 是最常用的私有 IP 地址。你家里有 Wi-Fi,对应就会有一个 IP 地 址。一般你家里地上网设备不会超过 256 个,所以 /24 基本就够了。有时候我们也能见到 /16 的 CIDR,这两种是最常见的,也是最容易理解的。
不需要将十进制转换为二进制 32 位,就能明显看出 192.168.0 是网络号,后面是主机号。 而整个网络里面的第一个地址 192.168.0.1,往往就是你这个私有网络的出口地址。例如, 你家里的电脑连接 Wi-Fi,Wi-Fi 路由器的地址就是 192.168.0.1,而 192.168.0.255 就是 广播地址。一旦发送这个地址,整个 192.168.0 网络里面的所有机器都能收到。
这里老师举了一个计算的例子:16.158.165.91/22 这个 CIDR
这里说明对于子网掩码应该是网络号全是1,主机号全是0;对于广播地址应该是网络号不动,主机号全是1
global:网卡对外,可以接收各个地方的包
lo:环回借口用于本机通信
为什么有了MAC地址还是需要IP地址
- 这里的比喻讲的还是很清楚的,我们的MAC地址只是一个身份证,它虽然独一无二,有点小拽,但是没什么用,我们无法通过身份证去找到一个人
- 而IP地址就不一样了,虽然IP地址可能会重复,但是IP地址会带着我们找到目标MAC所在的子网
- 而MAC只能在同一子网下进行查找【也就是老师上面讲的吼一嗓子,工头吼一嗓子】
- MAC 地址的通信范围比较小,局限在一个子网里面。例如,从192.168.0.2/24 访 问 192.168.0.3/24 是可以用 MAC 地址的。一旦跨子网,即从192.168.0.2/24 到 192.168.1.2/24,MAC 地址就不行了,需要 IP 地址起作用了。
网络设备状态标识
- 这一段知识很迷,我在网上不管是搜中文还是搜英文都搜不到老师讲的这些内容
- 就是找不到一个标识符大全,很奇怪
- 咱也搞不清楚我的macOS电脑多出来的这几个标识什么意思
- 这时,网课第一定律出现,你现在理解不了的东西说明不需要理解,后面就会懂的
- 所以,愉快的跳过吧
补充知识:IPv6
- IPv6是英文“Internet Protocol Version 6”(互联网协议第6版)的缩写,是互联网工程任务组(IETF)设计的用于替代IPv4的下一代IP协议,其地址数量号称可以为全世界的每一粒沙子编上一个地址。
- 由于IPv4最大的问题在于网络地址资源有限,严重制约了互联网的应用和发展。IPv6的使用,不仅能解决网络地址资源数量的问题,而且也解决了多种接入设备连入互联网的障碍。
- 互联网数字分配机构(IANA)在2016年已向国际互联网工程任务组(IETF)提出建议,要求新制定的国际互联网标准只支持IPv6,不再兼容IPv4。
小结
- IP 是地址,有定位功能;MAC 是身份证,无定位功能;
- CIDR 可以用来判断是不是本地人;
- IP 分公有的 IP 和私有的 IP。
课后题:
你知道 net-tools 和 iproute2 的“历史”故事吗?
- net-tools起源于BSD,自2001年起,Linux社区已经对其停止维护,而iproute2旨在取代 net-tools,并提供了一些新功能。一些Linux发行版已经停止支持net-tools,只支持 iproute2。 net-tools通过procfs(/proc)和ioctl系统调用去访问和改变内核网络配置,而iproute2则通 过netlink套接字接口与内核通讯。
- 聪明的读者就会发现我只是马住了
这一节讲的是如何查看 IP 地址,那你知道 IP 地址是怎么来的吗?
- 网协是怎样实现的?网络互连设备,如以太网、分组交换网等,它们相互之间不能互通,不能互通的主要原因是因为它们所传送数据的基本单元(技术上称之为“帧”)的格式不同。IP协议实际上是一套由软件、程序组成的协议软件,它把各种不同“帧”统一转换成“网协数据包”格式,这种转换是因特网的一个最重要的特点,使所有各种计算机都能在因特网上实现互通,即具有“开放性”的特点。
04讲DHCP与PXE:IP是怎么来的,又是怎么没的?
- 这一章两个东西感觉都是linux相关的,其中DHCP确实是应用层的协议,好好看看,后面那个PXE大概了解下【马住,马住就对了】
- gogogo
为什么我们无法随意配置IP地址
- 假如我们配置的IP地址与其他机器不在一个子网下,当我们发送包时,虽然已经有了源IP地址以及目标IP地址,但根据我们前面学到的层层嵌套模型,我们还是要获取到目标MAC地址
- 而这种情况下,判断出这个地址是个外国人,我们会先把数据发给网关
- Linux 默认的逻辑是,如果这是一个跨网段的调用,它便不会直接将包发送到网络上,而 是企图将包发送到网关。
- ???:这里还是有点不明白,虽然要经过网关,怎么就不行了?
- 我怀疑是由于我们的IP地址是乱填的,因此也没有正确配置网关,导致包发送不了
- 马住
动态主机配置协议(DHCP)
- 上面这个问题不仅是说明了不能乱配IP地址,也间接说明了动态分配IP地址的重要性,这就是我们的DHCP
- 需要配置一段共享的 IP 地址。每一台新接入 的机器都通过 DHCP 协议,来这个共享的 IP 地址里申请,然后自动配置好就可以了。等人 走了,或者用完了,还回去,这样其他的机器也能用。
- 如果是数据中心里面的服务器,IP 一旦配置好,基本不会变,这就相当于买房自 己装修。DHCP 的方式就相当于租房。你不用装修,都是帮你配置好的。你暂时用一下, 用完退租就可以了。
- 下面看下DHCP工作的方式:
DHCP工作方式
- DHCP Discover:新来的机器使用 IP 地址 0.0.0.0 发送了一个广播包,目的 IP 地址为 255.255.255.255。广 播包封装了 UDP,UDP 封装了 BOOTP。其实 DHCP 是 BOOTP 的增强版,但是如果你 去抓包的话,很可能看到的名称还是 BOOTP 协议。
- DHCP Offer:DHCP Server给租一个IP地址,同时会保留这个IP地址,不提供给别人【此时还没真正租出去】
- 这个消息还是以广播地址发出去的,因为新人还没有自己的IP地址。DHCP Server 回复说,我分配了一个可用的 IP 给你,你看如何?除此之外,服务 器还发送了子网掩码、网关和 IP 地址租用期等信息。
- 新人在接收到多个提供的IP后,一般会选择最早的那一个接受,此时它会在此发一个广播,说明自己选择了那一个IP,告知其他提供的IP可以给别人用了由于还没有得到 DHCP Server 的最后确认,客户端仍然使用 0.0.0.0 为源 IP 地址、 255.255.255.255 为目标地址进行广播。在 BOOTP 里面,接受某个 DHCP Server 的分配 的 IP。
- 当 DHCP Server 接收到客户机的 DHCP request 之后,会广播返回给客户机一个 DHCP ACK 消息包,表明已经接受客户机的选择,并将这一 IP 地址的合法租用信息和其他的配置 信息都放入该广播包,发给客户机,欢迎它加入网络大家庭。
这是整个分配流程,接下来的就是续租&&收回流程:
客户机会在租期过去 50% 的时候,直接向为其提供 IP 地址的 DHCP Server 发送 DHCP request 消息包。客户机接收到该服务器回应的 DHCP ACK 消息包,会根据包中所提供的 新的租期以及其他已经更新的 TCP/IP 参数,更新自己的配置。这样,IP 租用更新就完成 了。
预启动执行环境(PXE)【全部马住】
小结
DHCP 协议主要是用来给客户租用 IP 地址,和房产中介很像,要商谈、签约、续租,广 播还不能“抢单”;
DHCP 协议能给客户推荐“装修队”PXE,能够安装操作系统,这个在云计算领域大有用 处。
课后题:PXE 协议可以用来安装操作系统,但是如果每次重启都安装操作系统,就会很麻烦。你 知道如何使得第一次安装操作系统,后面就正常启动吗?
- 现在一般电脑的网卡几乎都支持PXE启动, PXE client 就在网卡的 ROM 中,当计算机引 导时,BIOS 把 PXE client 调入内存执行。 安装完成后,将提示重新引导计算机。这个时候,在重新引导的过程中将BIOS修改回从硬 盘启动就可以了。