NetWork
计算机网络八股文:
计算机网络八股文(2022最新整理) - 知乎 (zhihu.com)
1.计算机网络和互联网:
1.1什么是Internet?
1.1 从具体的构成的角度:
(1)节点
主机及其上运行的应用程序
路由器、交换机等网络交换设备
(2)边:通信链路
接入网链路:主机连接到互联网的链路
主干链路:路由器间的链路
(3)协议(标准)
对等层的实体之间需要遵循的规则才可以通讯
图片例子:
1.2 从网络互联设备的角度
(1)协议控制发送 、接收消息:
如:TCP,IP, HTTP,FTP,PPP
(2)Internet:"网络的网络”
松散的层次结构,互联的ISP
公共的Internet VS 专用的intranet
(3)Internet 标准:
RFC: Request for comments
IETF: Internet Engineering Task Force
1.3 从服务的角度
(1) 使用通信设施进行通信的分布式应用:
Web、VoIP、email、分布式游戏、电子商务、社交平台……
(2) 通信基础设施为apps提供编程接口(通信服务):
将发送和接收数据的apps与互联网连接起来为app应用提供服务类型、类似于邮政服务.
从1.2-1.4 节我们主要来介绍组成计算机网络的三个重要的组成部件:网络边缘,接入实体,与网络核心:
1.2 网络边缘:
在上一节中,我们给出了因特网和网络协议的总体概述。现在我们将更深入一些来探究计算机网络(特别是因特网)的部件。在本节中,我们从网络边缘开始,观察一下我们 更为熟悉的部件,即我们日常使用的计算机、智能手机和其他设备。在接下来的一节中,我们将从网络边缘向网络核心推进,查看计算机网络中的交换和选路。
回想前一节中计算机网络的术语,通常把与因特网相连的计算机和其他设备称为端系统。如图1 3所示,因为它们位于因特网的边缘,故而被称为端系统。因特网的端系统包 括了桌面计算机(例如,桌面PC、Mac和Linux设备)、服务器(例如,Web和电子邮件 服务器)和移动计算机(例如,便携机、智能手机和平板电脑)。此外,越来越多的非传统物品正被作为端系统与因特网相连(参见“历史事件”)。
1.网络边缘的运行模式:
1,客户/服务器模式(客户端是主动的,服务器是被动的):
弊端:服务器会遭受众多的客户端访问,可扩展性较差,随着请求载荷增加当服务器达到阈值会呈现断崖式的下跌。
2.对等(peer-peer) 模式:
(1)很少有专门的服务器
(2)每一个节点既可以是服务端也可是客户端,互相请求,分布式系统,无客户/服务器模式缺陷如迅雷,不只从一个服务端是下载文件,下载的文件可能分成多个片段,每个片段从不同的服务端进行下载。
2.基础设置为网络边缘应用提供的服务有两种不同的服务方式:
1.面向连接的通信方式:
(1) 需要先建立连接,做好准备,例如通信底层的数据缓冲区的准备,一些超时重传机制的准备工作。
(2) TCP: 1)可靠的、按顺序地传送数据 2)流量控制 3)拥塞控制
(3) 连接状态的维持只是端系统之间来进行维护,中间的网络是不知道的。
2. 无连接的服务:
(1) UDP:无连接,不可靠的数据传输,无流量控制,无拥塞控制
3. TCP与UDP分别的应用:
(1) TCP应用:
HTTP(Web),FTP(文件传送),Telnet(远程登陆),SMTP(email)
(2) UDP应用:
流媒体、远程会议、DNS、Internet电话
1.3 网络核心:
最基本的问题:数据怎么样通过网络进行传播的:两种交换方式
1.电路交换知识点(也称之为“线路交换”)
端到端的资源被分配给从源端到目标端的呼叫叫"call"
(1) 独享资源:不同享
(2) 如果呼叫没有数据发送,被分配的资源就会被浪费
(3) 通常被传统电话网络采用
(4) 网络资源(如带宽)被分成片:
1)频分(FDM): 带宽较宽,我们可以通过频分复用的方式将带宽划分出众多的小片
2)时分(TDM): 按照节点之间的通信的时间来进行划分,分解成以T为单位的周期,将T又分成多个时间片
3)波分(WDM): 采用光纤进行通讯,每一个用户采用一个小的波段进行通讯
弊端:
(1)连接的建立时间太长
(2)计算机之间的通信具有突发性秒如果使用线路交换,则浪费的片较多,即使这个呼叫没有数据传输,其所占的片也不能被别的呼叫使用
(3)可靠性不高
小的例题:
2.分组交换知识点:
(1)以分组为单位存储-转发方式,网络带宽资源不再分为一个个片,传输时使用全部带宽,主机之间传输的数据被分成一个个分组,为什么要存储再转发,因为从主机A到主机B可能需要多个链路,如果不存储再转发就意味着需要占用所有的链路资源保证链路是通畅的,因此也会消耗大量资源,同时空闲链路也不能够支持其他主机的链路之间的通信了。
(2)排队延迟和丢失:如果达到速率大于链路的传输的速率,分组将会排队,等待传输,这就形成了排队时延,如果此时路由器的缓存使用完了,则分组将会被抛弃。
(3)优点与缺点:适合对于突发数据的传输,适合资源的共享。过度使用会导致网络的拥塞,分组的延时和丢失,对于可靠的数据传输需要协议来进行约束:拥塞控制。
总结:
数据报:是按地址找人,不事先确定路好不好走
虚电路:是先去一次,熟悉一下路线,再进行发送
1.4 接入网和物理媒体:
1.4.1 接入网:
考虑了位于“网络边缘”的应用程序和端系统后,我们接下来考虑接入 ",这是指将端系统物理连接到其边缘路由器(edge router)的网络。边缘路由器是端系统到任何其他远程端系统的路径上的第一台路由器。图1 4用粗的、带阴影的线显示了几种类型的接入链路和使用接入网的几种环境(家庭、公司和广域移动无线)。
1.怎样将端系统和边缘路由器连接:
- 住宅接入网络
- 单位接入网络(学校、公司)
- 无线接入网络
- 注意:
- 接入网络的带宽(bits per second)
- 共享/专用
2.住宅接入:modern
1.将上网数据调制加载音频信号上,在电话线上传输,在局端将其中的数据解调出来;反之亦然
- 调频
- 调幅
- 调相位
- 综合调制
2.拨号调制解调器:
- 56Kbps的速率直接接入路由器(通常更低)
- 不能同时上网和打电话;不能总是在线
3.接入网:digital subscriber line(DSL)
4.接入网:线缆网络
FDM:在不同频段传输不同信道的数据,数字电视和上网数据(上下行)
1.HFC:hybird fiber coax
非对称:最高30Mbps的下行传输速率,2 Mbps上行传输速率
2.线缆和光纤网络将每个家庭用户接入到 ISP 路由器
3.各用户共享到线缆头端的接入网络
与DSL不同,DSL每个用户一个专用线路到CO(central office)
5.接入网:家庭网络
6.企业接入网路
7.无线接入网络
1.4.2 物理媒体:
- Bit:在发送-接收时间传播
- 物理链路:连接每个发送-接收对之间的物理媒体
- 导引型媒体:
- 信号沿着固体媒介被导引:同轴电缆、光纤、双绞线
- 非导引型媒体
- 开放的空间传输电磁波或者光信号,在电磁或者光信号中承载数字数据
- 双绞线(TP)
- 两根绝缘铜导线拧合
分类:
1.同轴电缆:
- 两根同轴的铜导线
- 双向
- 基带电缆
- 宽带电缆
2.光纤和光缆
- 光脉冲,每个脉冲表示一个bit,在玻璃纤维中传输
- 高速:点到点的高速传输(如10Gbps-100Gbps传输速率)
- 低误码率:在两个中继器之间可以有很长的距离,不受电磁噪声的干扰
- 安全
3.无线链路
- 开放空间传输电磁波,携带要传输的数据
- 无需物理:”线缆“
- 双向
- 传播环境效应’
- 反射
- 吸收
- 干扰
- 无线链路类型‘
- 地面微波
- LAN
- wide-area
- 卫星
1.5 Internet 结构和ISP:
互联网络结构:网络的网络
-
端系统通过接入ISPs(Internet Service Providers)连接到互联网:
住宅,公司和大学的ISPs
-
接入ISPs相应的必须是互联的:
因此任何2个端系统可互相发送分组到对方
-
导致的“网络的网路”非常复杂
发展和演化是通过经济的和国家的政策来驱动
-
竞争:如果全局ISP是有利可为的业务,那会有竞争者
-
合作:通过ISP之间的合作可以完成业务的扩展,肯定会有互联,对等互联的结算关系 ,例如:移动联通电信
-
然后业务会细分(全球接入和区域接入),区域网络将出现,用于将接入ISPs连接到全局ISPs:
-
然后内容提供商网络(Internet Content Providers,e.g.,Google,Microsoft,Akamai)可能会构建它们自己的网络,将它们的服务、内容更加靠近端用户,向用户提供更好的服务,减少自己的运营支出,例如:百度,谷歌
Internet的结构:
1.松散的层次模型
2.中心:
(1)第一层ISP(如:如UUNet,BBN/Genuity,Sprint,AT&T)国家/国际覆盖,速率极高
- 直接与其他第一层ISP相连
- 与大量的第二层ISP和其他客户网络相连
(2)第二层ISP:更小些的(通常是区域性的)ISP
与一个或多个第一层ISPs,也可能与其他第二层ISP
(3)此三层ISP与其他本地的ISP:
接入网(与端系统最近)
3.结构:
(1)很多的内容提供商(如:Google)可能会部署自己的网络,连接崽自己全球各地的DC(数据中心),走自己数据,会在大洋底部铺设海底的光缆等等。
(2)连接若干local ISP和各级(包括一层)ISP,更加的靠近用户:
(3)ISP之间的连接又分成:
1.POP:高层ISP面向客户网络的接入点,涉及费用结算
如一个低层ISP接入多个高层ISP,多宿(multi home)
2.对等接入:2个ISP对等互联,不涉及费用结算
3.IXP;多个对等ISP互联互通之处,通常不涉及费用结算
对等接入
4.ICP自己部署专用网络,同时和各级ISP连接
1.6 分组延时,丢失和吞吐量:
1.分组丢失和延时是怎样发生的?
路由器缓冲区的分组队列:
- 分组到达链路的速率超过了链路输出的能力
- 分组等待排到队头、被传输
2.四种分组延时
1.节点的处理延时:
- 检查bit级差错
- 检查分组首部和决定将分组导向何处
2.排队延时:
- 在输出链路上等待传输的时间
- 依赖于路由器的拥塞程度
3.传输延时:
- R=链路带宽(bps)
- L=分组长度(bits)
- 将分组发送到链路上的时间=L/R
- 存储转发延时
4.传播延时:
- d=物理链路的长度
- s=在媒体上的传播速度
- 传播时延 = d/s
总结:节点的延时时间的计算:
dnodal=dproc+dqueue+dtrans+dprop
dproc=处理延时 dqueue=排队延时 dtrans=传输延时 dprop=传播延时
3.分组丢失的原因:
- 链路的队列缓冲区容量有限
- 当分组到达一个满的队列时,该分组将会丢失
- 丢失的分组可能会被前一个节点或者源端系统重传,或者根本不重传
4.吞吐量
吞吐量:在源端和目标端之间传输的速率(数据量/单位时间)
- 瞬间吞吐量:在一个时间点的速率
- 平均吞吐量:在一个长时间内的平均值
2.应用层:
2.1 提纲加目标:
提纲:
1 应用层协议原理
2 Web and HTTP
3 FTP
4 Email
SMTP
POP3
IMAP
5 DNS
6 P2P应用
7 CDN
8 TCP套接字(Socket)编程
9 UDP套接字编程
目标:
1.网络应用的原理:网络应用协议的概念和实现方面
(1)传输层的服务模型
(2)客户-服务器模式
(3)对等模式(peer-to-peer)
(4)内容分发网络
2.网络应用的实例:互联网流行的应用层协议
(1)HTTP
(2)FTP
(3)SMTP / POP3 / IMAP
(4)DNS
3.编程:网络应用程序
Socket API
2.2 应用层协议原理:
1.创建一个新的应用:
(1).编程
1)在不同的端系统上运行
2)通过网络基础设施提供的服务,应用进程彼此通信
3)如Web:Web服务器软件与浏览器软件通信
(2).网络核心中没有应用层软件
1)网络核心没有应用层功能
2)网络应用只在端系统上存在,快速网络应用开发和部署
2.网络应用的体系结构:
1.客户-服务器模式(C/S模式)
2.对等模式(P2P模式)例如:迅雷
3.混合体:客户-服务器和对等体系结构 例如:Napster
详情:
1.客户-服务器模式(C/S模式):
服务器:
(1)一直运行
(2)固定的IP地址和周知的端口号(约定)
(3)扩展性:服务器只能通过扩充服务器做相应的集群,扩容等等,扩展性差
客户端:
(1)主动与服务器通信
(2)与互联网有间歇性的连接
(3)可能是动态IP地址
(4)不直接与其他客户端通信
2.对等体(P2P)体系结构:
(1)(几乎)没有一直运行的服务器
(2)任意端系统之间可以进行通信
(3)每一个节点既是客户端又是服务器
(4)自扩展性-新peer节点带来新的服务能力,当然也带来新的服务请求
(5)参与的主机间歇性连接且可以改变IP地址难以管理
3.C / S 和P2P体系结构的混合体:
Napster:
(1)文件搜索:集中
主机在中心服务器上注册其资源
主机向中心服务器查询资源位置
(2)文件传输:P2P
即时通讯:
(1)在线检测:集中
1)当用户上线时,向中心服务器注册其IP地址
2)用户与中心服务器联系,以找到其在线好友的位置
(2)两个用户聊天:P2P
3.进程通信:
客户端进程:发起通信的进程
服务器进程:等待连接的进程
(1)概述:在同一个主机之内,使用进程间通信机制进行通信(操作系统定义),不同主机,通过交换报文来进行通讯,按照应用协议交换报文,借助传输层提供的服务。
(2)分布式进程通信需要解决的问题:
1.问题1:进程标示和寻址问题(服务用户)
2.问题2:传输层-应用层提供服务是如何(服务)
(1)位置:层间界面的SAP(TCP/IP:socket)
(2)形式:应用程序接口API(TCP/IP:socket API)
3.问题3:如何使用传输层提供的服务,实现应用程序之间的报文交换,实现应用(用户使用服务):
(1)定义应用层协议:报文格式,解释,时序等
(2)编制程序,使用OS提供的API,调用网络基础设施提供通信服务传报文,实现应用时序等
问题一解决:
1.进程为了接收报文,必须有一个标示,即:SAP(发送也需要标示)
(1)主机:唯一的32位IP地址
(2)仅仅有IP地址不能够唯一标识一个进程;在一台端系统上有很多应用进程在运行
(3)所采用的传输层协议:TCP or UDP
(4)端口号(Port Numbers)
2.一些知名端口号的例子:
HTTP:TCP 80
Mail:TCP 25
ftp:TCP 2
3.一个进程,用IP+port标示端节点
4.本质上,一对主机进程之间的通信由2个端节点构成
问题二解决:
(1)传输层提供的服务需要穿过层间的信息:
1.层间接口必须要携带的信息
(1)要传输的报文(对于本层来说:SDU)
(2)谁传的:己方的应用进程的标示:IP+TCP(UDP)端口
(3)传给谁:对方的应用进程的标示:对方的IP+TCP(UDP)端口
2.传输层实体(tcp或者udp实体)根据这些信息进行TCP报文段(UDP数据报)的封装
(1)源端口号,目标端口号,数据等
(2)将IP地址往下交IP实体,用于封装IP数据报:源IP,目标IP
(2)传输层提供的服务,层间信息的代表:
-
需要了解Java当中如何自定义一些网络的协议
TCP:
UDP:
(3) 套接字:
问题三解决:
- 数据的格式:
- 应用层需要传输层提供什么样的服务?如何描述传输层的服务?
- Internet 传输层提供的服务:
2.3 Web与Http协议:
2.1 Web与HTTP的一些术语:
-
Web页:由一些对象组成
-
对象可以是HTML文件,JPEG图像,Java小程序,声音剪辑文件等
-
Web页含有一个基本的HTML文件,该基本HTML文件又包含若干对象的引用(链接)
-
通过URL(统一资源定位符)对每个对象进行引用
-
URL的格式:【带方括号的表示为可选项】
protocol / hostname[:port] / path / [;parameters][?query]#fragment
2.2 Http概述:
1.HTTP:超文本传输协议
2.Web的应用层协议
3.客户/服务器模式:
(1)客户:请求、接收和显示Web对象的浏览器
(2)服务器:对请求进行响应,发送对象的Web服务器
4.HTTP 1.0:RFC 1945
HTTP 1.1:RFC 2068
5.使用TCP:
5.1 客户发起一个与服务器的TCP连接(建立套接字),端口号为80
5.2 服务器接收客户的TCP连接
5.3 在浏览器(HTTP客户端)与Web服务器(HTTP服务器server)交换HTTP报文(应用层协议报文)
5.4 TCP连接关闭
6.HTTP是无状态的:
6.1 服务器并不维护关于客户的任何信息,可以支持更多的客户端
6.2 有状态的连接需要: 1)必须维护历史的信息(状态)2)如果服务器/客户端死机,他们的状态信息可能是
不一致的,我们需要一些机制使两者的信息再次保持一致。
2.3 HTTP连接:
4.响应时间模型
(1)往返时间RTT:一个小的分组从客户端到达服务器再回到客户端的时间(传输时间忽略不计,但是
传播时间需要进行计算)
(2) 响应时间包含三个部分:
1) 一个RTT用来发起TCP的连接
2)一个RTT用来发送HTTP请求并等待HTTP响应
3)文件传输时间
2.4 Http请求报文:
- 两种类型的HTTP报文:请求、响应
- HTTP请求报文:
GET请求一般用于用户的请求的操作,POST请求一般用于用户的上传的操作,HEAD请求一般用于做搜索引擎来使用,因HTML整个页面分成head与body,搜索引擎一般获取头,因为头有网页的描述信息,可以用来做索引使用。
3.HTTP请求报文:通用格式
4.数据提交的方法:
(1)Post方法:
1)网页通常包括表单的输入操作
2)包含在实体(entity body)中输入被提交服务器中
(2)Get方式:
1)输入通过URL请求行携带相应的参数进行上传
- Http1.0与Http1.1请求:
2.5 响应报文:
2.6 Cookie:
当Http协议的无状态不态适用的时候我们采取了cookie来记录用户使用http的状态。
2.6 Web 缓存:
2.7 关于Http的八股文:
1.浏览器解析一个URL的全过程:
1、浏览器解析url
2、DNS域名解析
3、浏览器获取端口号
4、TCP建立连接
5、发送HTTP请求
6、服务器处理请求
7、返回响应结果
8、关闭TCP连接
9、浏览器加载解析渲染
参考博客:(43条消息) 详解浏览器解析一个URL的全过程_子木呀的博客-CSDN博客_解析url
2.4 FTP:
FTP的命令是如下的:
2.5 EMail电子邮件:
发送邮件的过程:
SMTP的传送过程:
举例发送报文的过程:
对应的上文的图的过程:
1.标签1张三使用用户代理撰写邮件并发送给李四的邮箱号
2.标签2张三的用户代理将邮件发送到张三的邮件服务器当中,邮件放在报文队列当中
3.标签3SMTP客户端(张三的邮件服务器)打开TCP连接,连接到李四的邮件服务器,建立TCP连接
4.标签4SMTP客户端(张三的邮件服务器)通过TCP连接发送张三的邮件
5.标签5李四的邮件服务器将邮件放到李四的邮箱
6.标签6李四使用用户代理调取自己的邮件服务器中的邮件进行查看
例子:
自然带来的问题:
传送英文是可以的,但是传送中文或者是传送一些可执行的文件都是不可行的了。
总结:
1.SMTP 使用持久性的连接
2.SMTP要求报文(首部和主体)为7位ASCII编码
3.SMTP服务器使用CRLF,CRLF决定报文的尾部
4.HTTP比较:
(1)HTTP:拉(pull),客户端是通过URL统一资源定位符路径拉去资源
(2)SMTP:推(push),客户端是向服务器中推送邮件等资源
(3)二者都是ASCII形式的命令/响应交互,状态码
(4)HTTP:每个对象封装在各自的响应报文当中(因为一个Http响应文件中有多个文件URL路径,他们都各自封装)
(5)SMTP:多个对象包含在一个报文当中
相比于传统的报文格式,我们增加了多媒体的扩展方式,即可以对于支持各种多媒体文件以及各种的中文字符的传送:
2.6 DNS:
实现了从域名到IP地址的转换:
1.DNS的必要性:
1.IP地址标识主机以及路由器,但是IP地址不好记忆
2.人类一般倾向使用一些有意义的字符来标识Internet上的设备
3.存在着字符串向IP地址转换的必要性
4.人类用户提供要访问机器的字符串名称,由DNS负责转换成为二进制的网络地址
2.DNS系统需要解决的问题:
1.如何命名一个设备,使用有意义的字符串,同时需要解决命名的重复性的问题,层次化命名
2.如何完成名字到IP地址的转换,例如:分布式数据库存放域名是不可行的,如何做数据库的维护和响应名字的查询
3.如何进行维护,增加或者删除一个域,需要在域名系统中做哪些工作
3.DNS开发的思路:
1.分层,基于域的命名机制
2.若干分布式的数据库完成名字到IP地址的转换
3.运行在UDP之上的端口号为53的应用服务
4.核心Internet功能,但是不是在网络核心中的应用,是在网络边缘设备当中的应用层实现的协议。
4.解决问题:
问题1的解决:
1.DNS采用层次树状结构的命名方法
2.Internet根被划为几百个顶级域(top lever domains):
(1)通用的(generic):
com;.edu;.gov;.int;.web
(2)国家的(countries):
cn;.us;.nl;.jp
3.每个(子)域下面可划分为若干子域
4.树叶是主机
域名的管理:
(1) 一个域管理其下的子域
(2)创建一个新的域,必须征得它所属的域的同意
(3)域名与物理网络没有一定的关系
问题2,解析问题,名字服务器:
1.一个名字服务器的问题:
(1)可靠性问题:单点故障
(2)扩展性问题:通信容量
(3)维护问题:远距离的集中式数据库
2.如何进行解析:
将域名解析树分成一个个的zone(区域):
(1)区域的划分由区域管理者自己进行决定
(2)将DNS名字空间划分成互不相交的区域,每一个区域都是树的一部分
(3)名字服务器:
1)每一个区域都有一个名字服务器,维护者它所管辖区域的权威信息
2)名字服务器允许被放置在区域之外,以保证响应的可靠性
权威DNS服务器:组织机构的DNS服务器,提供组织机构服务器(如Web和mail)可访问的主机和IP之间的映射.
组织机构可以选择实现自己维护或由某个服务提供商来维护
详解解析的全部过程:
1.顶级域名服务器,负责顶级域名和所有国家级的顶级域名,有例如以下服务器:他们会维护区域名字服务器的相关信息:
2.区域名字服务器维护的资源的记录:
1.应用调用解析器(resolver)
2.解析器作为客户向Name Server发出查询报文(封装在UDP段中)
3.Name Server返回响应报文(name/ip)
我们需要注意我们在自己电脑中的配置的Ip地址,子网掩码与默认网关等等都与DNS解析器解析有关系,我们还可以配置DNS域名解析服务器地址,我们一般配置的时候都是配置跟自己的IP地址在同一个子网里的DNS解析服务器,这样域名解析很快。
1.名字服务器(Name Server):
目标名字在Local Name Server中:
(1)情况1:查询的名字在该区域内部
(2)情况2:缓存(cashing)
2.当本地名字服务器不能解析名字时,联系根名字服务器顺着根-TLD一直找到权威名字服务器
3.递归:
递归查询出现的弊端:
1.名字解析负担都放在当前联络的名字服务器上
2.问题:根服务器的负担太重
3.解决:迭代查询
涉及到的DNS的八股文:DNS的解析过程:
如上图所示,我们将详细阐述DNS解析流程。
1、首先客户端位置是一台电脑或手机,在打开浏览器以后,比如输入zdns.cn的域名,它首先是由浏览器发起一个DNS解析请求,如果本地缓存服务器,或者首先会在本电脑的系统文件中查找Host.txt文件中信息如果找不到结果,则首先会向根服务器查询,根服务器里面记录的都是各个顶级域所在的服务器的位置,当向根请求zdns.cn的时候,根服务器就会返回.cn服务器的位置信息。
2、递归服务器拿到.cn的权威服务器地址以后,就会寻问cn的权威服务器,知不知道zdns.cn的位置。这个时候cn权威服务器查找并返回zdns.cn服务器的地址。
3、继续向zdns.cn的权威服务器去查询这个地址,由zdns.cn的服务器给出了地址:202.173.11.10
4、最终才能进行http的链接,顺利访问网站。
5、这里补充说明,一旦递归服务器拿到解析记录以后,就会在本地进行缓存,如果下次客户端再请求本地的递归域名服务器相同域名的时候,就不会再这样一层一层查了,因为本地服务器里面已经有缓存了,这个时候就直接把zdns.cn的A记录返回给客户端就可以了。
2.7 Java的网络编程的知识:
补充计算机网络编程的知识:
1.应用进程使用传输层提供的服务才能够交换报文,实现应用协议,实现应用:
1.TCP/IP:应用进程使用Socket API访问传输服务
2.地点:界面上的SAP(Socket)
3.方式:Socket API
4.目标:学习如何构建能借助sockets进行通信的C/S应用程序
5.socket:分布式应用进程之间的门,传输层协议提供的端到端服务接口
2.2种传输层服务的socket类型:
TCP:可靠的、字节流的服务
UDP:不可靠(数据UDP数据报)服务
3.TCP套接字编程的步骤流程:
服务器首先运行,等待连接建立:服务器进程必须先处于运行状态
1.创建欢迎socket
2.和本地端口捆绑
3.在欢迎socket上阻塞式等待接收用户的连接
客户端主动和服务器建立连接:
1.创建客户端本地套接字(隐式捆绑到本地port),指定服务器进程的IP地址和端口号,与服务器进程连接
2.当与客户端连接请求到来时,服务器接受来自用户端的请求 ,解除阻塞式等待,返回一个 新的socket(与欢迎socket不 一样),与客户端通信.
3.允许服务器与多个客户端通信,使用源IP和源端口来区分不同的客户端
4.数据结构:
IP地址和port捆绑关系的数据结构(标示进程的端节点)
struct socketaddr_in{
short sin_family;//使用的协议簇,使用的是TCP/IP协议还是其他的协议
u_short sin_port;//端口号
struct in_addr sin_addr;//包含的是一个IP的结构体
char sin_zero[8];//对齐的方式
}
域名和IP地址的数据结构:
struct hostent{
char *h_name; //主机域名
char **h_aliases; //主机一系列的别名
int h_addrtype;
int h_length;//地址长度
char ** h_addr_list;
#define h_addr h_addr_list[0];//IP地址解析的IP数组
}
一个小小的疑问,假设此时我们设计一个服务器,如果此时不同的客户端IP地址不同而且是端口不同的进程同时访问同一个服务器的同一个端口,服务器怎么区分到底是哪个进程发来的数据?
1.端口只是进程运行的数字的辨别,不是真正处理网络编程的判断的标识
2.一个Socket连接的主键(即不同socket之间的区分)是由一个五元组{SRC-IP, SRC-PORT, DEST-IP, DEST-PORT, PROTOCOL}组成,即{源地址,源端口,目标地址,目标端口,协议}组成,那些说四元组不包含协议的说法是错误的,所以只要五元组中有一个数据不一致就会被区分成为两个不同的连接请求,更何况是源IP地址和源端口都不同的进程访问服务器同一个端口的进程了,服务器更能进行区分
3.我们服务器的操作系统可以fork出来多个进程来处理多个进程访问同一服务器端口,来对于多个源主机的请求处理,所以在我们看来多个客户端进程可以访问统一服务器的同一端口。
网络编程的三要素:
协议,IP地址,端口(逻辑端口,可以使用一些软件查看端口号,当我们使用网络软件打开,操作系统就会自动分配给该软件一个端口号)
端口号:(0-65535)
注意:
1024之前端口号我们不能使用,已经被分配,网络软件端口号不能够重复
常用端口号:
80网络端口,数据库端口号:3306 Oracle:1521 Tomcat:8080
TCP通信程序:(三次握手建立连接,安全)
1. 服务端程序,需要事先启动,等待客户端的连接。
2. 客户端主动连接服务器端,连接成功才能通信。服务端不可以主动连接客户端。
3.客户端:java.net.Socket 类表示。创建Socket对象,向服务端发出连接请求,服务端响应请求,两者建立连接开始通信。
4.服务端:java.net.ServerSocket 类表示。创建ServerSocket对象,相当于开启一个服务,并等待客户端的连接。
通信步骤:
1.服务器先启动
2.服务器不会主动请求客户端,必须由客户端请求服务器
3.连接中包含一个对象就是IO对象进行一次通信数据交互;
4.客户端与服务器端进行一次通信数据交互,需要4个IO流对象
注意:现实生活当中始终是多个客户端访问一个服务器
服务器必须明确两件事情:
1.多个客户端与服务器同时进行交互
2.服务器明确和哪一个客户进行交互,在服务器端有一个方法accept可以获取到请求的客户端对象
3.服务器同时和客户端交互就需要使用多个IO流对象,服务器是没有IO流的,服务器可以获取到请求的客户端对象Socket,使用每个客户端Socket中得IO流与客户端进行交互。
套接字:包含了Ip地址与端口号的单位
构造方法:
Socket(String host, int port)
创建一个流套接字并将其连接到指定主机上的指定端口号。(host服务器Ip地址,port服务器端口号)
成员方法:
getOutputStream()
返回此套接字的输出流。
getInputStream()
返回此套接字的输入流。
close()
关闭此套接字。
客户端实现步骤:
1.创建一个客户端对象Socket,构造方法中绑定服务器的ip地址与端口号
2.使用Socket对象种方法获取网络字节输出流对象
3.使用网络字节输出流对象write给服务器发送数据
4.使用Socket对象种方法获取网络字节输入流对象
5.使用read方法读取服务器回写数据
6.关Socket流
注意:
1.客户端与服务器端必须使用Socket中提供的网络流,不能使用自己创建的流对象
2.当我们创建客户端对象时Socket,它就会请求服务器和服务器,和服务器三次握手建立通路
服务器端实现步骤:
读取客户端的请求,读取客户端发送过来的数据,给客户端回写程序
表示服务器的类:
ServerSocket
构造方法:
ServerSocket(int port)
创建绑定到特定端口的服务器套接字。
服务器端明确:
必须得知道那个客户端请求的程序可以使用accept获取到请求的客户端对象Socket
成员方法:
Socket accept()
侦听并接受到此套接字的连接。
实现步骤:
1.创建服务器ServerSocket对象,对应好指定的端口对象
2.使用ServerSocket对象中的方法accept,获取到请求到客户端对象Socket
3.使用Socket对象种方法获取网络字节输入流对象
4.使用网络字节输入流对象read读取发送数据
5.2.使用Socket对象种方法获取网络字节输出流对象
6.使用输出流方法write方法给客户端会写数据
7.释放资源
客户端:
public class TcpClient {
public static void main(String[] args) throws Exception{
Socket socket=new Socket("127.0.0.1",8888);
OutputStream os = socket.getOutputStream();
os.write("你好服务器".getBytes());
InputStream is = socket.getInputStream();
byte[] bytes=new byte[1024];
int len=is.read(bytes);
System.out.println(new String(bytes,0,len));
socket.close();
}
}
服务器端:
public class TcpServer {
public static void main(String[] args) throws Exception{
ServerSocket server=new ServerSocket(8888);
Socket socket = server.accept();
InputStream is = socket.getInputStream();
byte[] bytes=new byte[1024];
int len=is.read(bytes);
System.out.println(new String(bytes,0,len));
OutputStream os = socket.getOutputStream();
os.write("收到谢谢".getBytes());
socket.close();
server.close();
}
}
启动:先启动服务器端,然后再启动客户端:
就会发现在客户端收到了回复信息:收到谢谢
服务器端收到信息:你好服务器
若我们只启动了服务器端,就会一直等待客户端来进行访问:
3. 传输层:
3.1 概述:
1.需要掌握的知识点:
1.概述和传输层服务
2.多路复用与解复用
3.无连接传输:UDP
4.可靠数据传输的原理
5.面向连接的传输:
TCP
(1)段结构
(2)可靠数据传输
(3)流量控制
(4)连接管理
6.拥塞控制原理
7.TCP拥塞控制
2.传输服务和协议:
1.为运行在不同主机上的应用进程提供逻辑上的通信
2.传输协议运行在端系统:
(1)发送方:将应用层的报文分成报文段,然后传递给网络层
(2)接收方:将报文段重组成报文,然后传递给应用层
3.有多个传输层的协议可提供选择:
TCP与UDP
3.传输层与网络层的比较:
1.网络层服务:主机之间的逻辑通信
2.传输层服务:进程间的逻辑通信:
(1)依赖于网络层的服务:延时、带宽
(2)并对网络层的服务进行增强:数据丢失、顺序混乱、加密
(3)有些服务是可以加强的:不可靠 -> 可靠;安全
(4)但有些服务是不可以被加强的:带宽,延迟
4.传输层两个协议的比较:
1.可靠的,保序的传输:TCP
(1)多路复用、解复用
(2)拥塞控制
(3)流量控制
(4)建立连接
2.不可靠、不保序的传输:UDP
(1)多路复用、解复用
(2)没有为尽力而为的IP服务添加更多的其它额外服务
3.都不提供的服务:
(1)延时保证
(2)带宽保证
3.2 多路复用与解复用:
我们参考实际的例子来理解多路复用与解复用:
我们举一个通俗的写信例子,考虑有两家人,一家住在城南,一家住在城东,每家都有20多个孩子,他们互相写信,城南的家庭的所有信件由 kikoking 负责收发,城东的家庭的所有信件收发由 mrlx 进行,他们负责收集家里的信件然后交付给邮政服务传送。
在上述这个例子中 kikoing 和 mrlx 就好比是Socket,邮政服务为两个家庭提供逻辑通信,看似信件是由两家人互相寄出的,而其实是通过邮政服务(传输层以下的服务)传递的。
面向连接的TCP的复用以及解复用的原理:
复用:
(1)我们在上一节知道我们应用层的服务是要通过实现应用层与传输层之间的套接字也就是Socket编程来实现的。而TCP是需要连接的,因此TCP的Socket使用四元组来进行标识(源IP,源端口号,目标IP,目标端口号)。
(2)我们在源端向下层一方面要交付Socket本身还有就是msg.
(3)到达传输层后我们就可以通过Socket中的源端口与目标端口以及msg建立起TCP传输的数据。
(4)再往下层交的时候我们就会从Socket中获得到源IP与目标IP在传输层数据上加上这两个信息形成IP数据报。
解复用:
(1)到目标端后我们将IP的body拿出向上交付给传输层。
(2)将从TCP的头部拿到进程的端口号然后通过Socket找到对应的进程PID然后交付数据然后运行。
无连接的UDP的复用与解复用:
(1)UDP的Socket只有(Socket名,源IP,源端口,PID)
(2)应用层会交付的是msg与Socket还有cad就是目标IP与目标端口的信息。
(3)其他都与TCP的解复用差不多
(4)注意UDP的目标端与源端的Socket存储的信息都是本地的信息,都不互相存对方的IP与端口。只有在cad中才有。
3.3 无连接传输UDP:
1.UDP的数据单元:
注意校验和主要是用来判断UDP数据包在传输的过程当中是否出现了错误,如果出现了错误就抛弃。
存在必要性:
1.不建立连接(会增加延时)
2.简单:在发送端和接收端没有连接状态
3.报文段的头部很小(开销小)
4.无拥塞控制和流量控制:UDP可以尽可能快的发送报文段:
应用->传输的速率=主机->网络的速率
分析UDP报文的格式:
1.16位源端口号:可以写也可以不写,当如果发送端只发送不接受信息时可以全部写成0,如果要接受的话我们就写上源端口的16位端口号。(2^16=65536)正好可以区分所有的端口号。
2.UDP长度就是首部加上数据字段的长度。
3.UDP检验和检测首部与数据是否出错。
UDP校验的过程:
注意几个点:伪首部只有在计算机校验和的时候才会出现。
校验的过程如下:
发送端:
1.在发送之前先填上伪首部
2.先使用全0填充校验和字段
3.全0填充数据部分(UDP数据报要看成许多的4B的字串连接起来)
4.伪首部+首部+数据部分采用二进制反码求和
5.把求和反码填入校验和字段
6.去掉伪首部然后发送
接收端:
1.填上伪首部
2.伪首部+首部+数据部分采用二进制反码求和
3.结果如果全部为1数据不出错,否则出错则进行丢弃或者交付给上层应用层并附上出错警告,让上层来进行纠错。
3.4 TCP协议特点和TCP报文段的格式:
1.TCP协议的特点:
2.TCP报文段的格式:
1.序号:
在一个TCP连接中传送的字节流中的每一个字节都按顺序进行编号,本字段表表示本报文段所发送数据的第一个字节的序号。例如:上面一个例子,当第一个发送的是1-3编号字节是,对于本TCP数据的发送序号就是1,下一个是从4开始的数据则发送的序号就是4
2.确认号:
期望收到对方下一个报文段的第一个数据字节的序号。若确认号为N,则证明到N-1为止的所有数据都已经正确的收到。
3.数据偏移:
向下部网络层交送的TCP字段有TCP首部与TCP的数据部分,因为我们有时整个TCP数据不光有首部,在首部之后还会有选项等等,所以我们就不知道数的起始位是多少了,所以利用数据偏移,我们就可以知道TCP报文段的数据起始处距离TCP报文段的起始处到底有多远,以4B位单位,例如数据偏移是1111,也就是对应十进制15,则首部距离数据字段是15*4B=60B,也就是首部字段占据了60B.
4.6个控制位:
(1)紧急位URG:当URG=1时候,标明此报文段中有紧急数据,是高优先级的数据,应尽快传送,应尽快传送,不用在缓存里面排队,配合紧急指针字段使用。
(2)确认位ACK:ACK=1时候确认号有效,在连接建立之后所有传送的报文段都必须把ACK置为1.
(3)PSH位:PSH=1时候,接收方必须尽快交付接受应用进程,不再等到缓存填满再向上交付,配合紧急位URG使用
(4)复位RST:RST=1时候,表明TCP连接中出现严重差错,必须释放连接,然后再重新建立传输连接
(5)同步位SYN:SYN=1时,表明是一个连接请求/连接接受请求
(6)终止位FIN:FIN=1时,表明此报文段发送完毕,要求释放连接
6.窗口:指的是发送本报文段的一方的接受窗口,即现在允许对方发送的数据量。
7.检验和:检验首部+数据,检验时要加上12B伪首部,第四个字段是6,相比于UDP,UDP第四个字段是17,就是用来标识
到底是UDP数据包还是TCP数据报的。
8.紧急指针:USG=1时才有意义,指出本报文中紧急数据的字节数
3.5 TCP 连接管理:
1.建立连接的过程:三次握手
但是在TCP连接管理的时候会造成安全性的网络攻击即SYN洪泛攻击:
解决的方案是我们可以设置SYN的cookie值。
2.释放连接的过程,四次握手:
注意:我们为什么要等待2MSL时间再关闭连接
因为当客户端向服务器端发送最后的关闭的确认报文后,可能由于网络的原因导致服务器端没有收到确认关闭报文,就会重新的发送最后的分组,这个重发的时间可以在2MSL时间段内完成,这样客户端就知道我最后发送的确认关闭报文还未被服务器端收到于是自己就会再次重新发送,这样就不会导致,如果客户端在发送完最后的确认关闭报文后关闭,如果服务器端一直接收不到,会导致服务器端一直重发最后分组浪费服务器端性能。
3.6 TCP的可靠传输:
保证接收方进程从缓存区读出的字节流与发送方发出的字节流是完全一致的
TCP实现可靠传输的机制有以下几种:
(1)校验
(2)序号
(3)确认
(4)重传
1.校验:
与之前的UDP的校验是同样的操作步骤
2.序号:
1.我们在之前介绍过传输层的多路复用与解复用,其实TCP传输的时候就使用到了多路复用与解复用机制,TCP报文段是存储了发送到不同端口的数据报,把他们组成了一个统一的TCP报文段进行传输
2.我们需要为每一个报文段进行编号来确保发送的顺序性
基于序号机制我们就引起了TCP的确认以及重传机制。
3.确认:
1.TCP首部的确认号是期望收到对方的下一个报文段的数据的第一个字节的序号,例如上面一个图,如果接收方B已经收到第一个报文段,此时B希望收到的下一个报文段的数据是从第四个字节开始的,那么N发送给A的报文中的确认号字段应该为4。发送方的缓存会存储那些已经发送但是未接受到确认的报文段,以便在需要的时候进行重传。
2.TCP使用累计确认机制,即TCP只确认数据流中至第一个丢失字节为止的字节。例如,接收方只收到0-2与6-7字节的数据,由于某种原因还未收到3-5字节的数据,此时B仍在等待字节3,因此B到A的下一个报文段的确认号字段置为3。
4.重传:
方法一:超时
1.TcP采用超时重传机制,即TCP每发送一个报文段,就对这个报文段设置一次计时器。计时器设置的重传时间到期但是还未
收到确认的时候,就需要重传这一报文。
2.但是基于传输层以下的网络层,数据链路层以及物理层他们所选择的路由的变数是很大的,因而传输层的往返的时延的误差就会很大,因此为了能够满足大多数往返的时间时间,我们引入一个加权的RTTs,它会随着测试的样本的RTT变化而动态的计算加权平均往返时间,例如:第一个数据字段RTT是来回是5s钟,第二个字段的RTT是来回4S钟,可能就会设置带三个字段的RTT是(4+5)/2.就这样进行动态的适应
但是有一个弊端是如果RTT太大就是使得发送方在RTT时间段内一致等待就是影响网络传输的性能。我们想快速知道是否报文产生的错误或者丢失
方法二:冗余ACK
发送方通常可在超时事件发生之前通过注意所谓的冗余ACK来较好的检测丢包的情况。冗余ACK就是再次确认某一个报文段的ACK,而发送方已经先前受到过该报文段的确认。
3.7 TCP的流量控制:
注意:
1.我们在发送方发送完毕之后会等待接收方的ACK,若接收方的ACK在传送的路途中产生了丢失,此时接收方就会一直等待接收方发来的ACK确认报文,但是此时接收方又在等发送方发来的数据,这样就会形成一个死锁的局面
2.我们为此引入了TCP的持续计时器,当发送方接收到接收方发来的零窗口报文就会启动计时器,若启动的计时器时间到期,就会发送一个零窗口探测报文段,接收方收到探测报文段就会即时给出现在的窗口值。
3.8 TCP的拥塞控制:
我们需要注意,拥塞控制与流量控制区别:
1.流量控制是点对点的接收端知道向哪个发送端发送消息并告知其发送窗口的大小
2.流量控制是整个网络环境出现了拥塞,接收端不知道到底要交付给哪个发送端让其发送慢点
四种算法:
我们假定:
1.数据单方向传送,而另一个方向只传送确认
2.接收方总是有足够大的缓存空间,因而发送窗口大小取决于拥塞程度
发送窗口=Min{接收窗口rwnd,拥塞窗口cwnd}
慢开始和拥塞避免:
算法的思想如下:
(1)首先介绍概念:
一个传输轮次:
```bash
(1)第一种解释就是:发送了一批报文段并收到他们的确认时间,一个往返时延RTT
(2)第二种解释就是:开始发送一批拥塞窗口内的报文到开始发送下一批拥塞窗口内的报文段的时间
```
(2)算法执行的步骤:
(1)一开始是慢开始的过程,将发送窗口也就是拥塞窗口置为1然后指数增长,cwnd=1就是代表一个报文段,一个最大报文段长度MSS。
(2)当指数增长到16后,发送方就会采取线性增长不端试探是否到达网络拥塞
(3)当达到网络拥塞后,首先会成断崖式的将拥塞窗口立即置为1,与此同时我们会将到达网络拥塞时的拥塞窗口值除以2作为下一次的开始进行加法增大的新的拥塞窗口值
(4)循环上面3个步骤
快重传与快恢复:
1.快重传其实使用到了之前的冗余ACK知识,也就是不必等到超时周期,只要收到3个冗余的ACK我们就会直接减小发送窗口的值
2.此时减小发送窗口并不像慢开始与拥塞避免算法一样将拥塞窗口减小到1,而是之间减小到网络拥塞窗口的一半直接进行线性的拥塞避免算法,看上图就是由24直接减小到12,然后开始线性增大拥塞窗口的值。
3.网络层:
3.1 概述:
3.2 数据交换:
1.首先来看一下三种不同的数据交换的方式:
我们通常采取的是第三种数据交换的方式,就是一个通信网络当中存在众多的交换设备。
2.三种不同的数据交换方式:
(1)电路交换:
在电路交换过程当中我们通常是需要独占线路的,有时候带宽很大的时候哦我们需要对于通信线路采取多路复用的技术:
(1)时分复用(2)频分复用(3)码分复用(4)波分复用
(2)报文交换:
(3)分组交换:
3.我们来比较一下报文交换与分组交换的区别:
1.从源主机到目的主机时间,不考虑传输时延与接收时延
(1)对于报文交换,我们发现从源主机到交换链路需要10s,然后从第一个交换设备到链路需要10s,从第二个交换设备到链路需要10s,因此总共需要30s的时间
(2)而对于分组交换我们只需要考虑最后一个报文进入链路时间,加上在交换链路中的耗时,因为分组就是对于报文的分组,因此最后一个分组进入链路时间是10s,然后第一个交换设备到链路时间是0.0s,第二个交换设备到链路是0.01s,因此总共需要的是10.02s.
3.3 数据报与虚电路:
1.其实分组交换还包括数据报方式与虚电路的方式:
2.我们来回顾一下计算机网络五个层次的传输单元:
1.应用层:就是应用程序传递下来的一整个报文
2.传输层:会将应用层传递下来的一整个报文划分成一个个的报文段
3.网络层:网络层传输单元是IP数据报也可以叫作分组,因为IP数据报可能会跟下层的数据链路层的MTU相关联,因此也可以采取分组
4.数据链路层:帧
5.物理层:比特流
3.数据报与虚电路两种不同的应用:
(1)数据报:
特点:
(1)发送分组前不需要建立连接,发送方可以随时发送分组,网络中的节点可以随时接收分组
(2)网络尽最大努力交付,传输不保证可靠性,所以可能会产生丢失,每一个分组独立地选择路由,转发的路径可能是不同的,因而分组可能不会按序到达目的地
(3)发送的分组中要包含发送端和接收端的完整的地址,以便可以独立的传输
(4)分组在交换结点存储转发时,需要排队等候处理,这回带来一定量的延时。通过交换结点的通信量较大或者网络发生拥塞时候,这种时延会大大增加,交换节点还可以根据情况丢弃部分分组
(5)网络传输路径的多样性
(6)收发双方不独占某一条线路,资源利用率较高。
(2)虚电路:
数据报与虚电路服务的比较:
3.4 路由算法与路由协议概述:
3.5 IP数据报的格式:
1.版本:是用来区分是IPv4还是IPv6
2.首部长度:首部长度的单位是4B,其实就是来区分固定部分与可变部分的大小的,例如:因为首部长度是4位,假设现在是1000表示的是8,也就是首部一共是8*4B=32B,也就可以得出可变部分是32-20=12B.而对于IP数据报来说固定部分一定是20B,因此首部长度的4位一定是从0101开始到1111.
3.区分服务:数据报的优先级别
4.总长度:整个IP数据报长度就是首部加上数据部分长度。
5.标识:(在下一节会讲到)
6.标志:(在下一节会讲到)
7.片偏移:(在下一节会讲到)
8.生存时间:IP分组地保质期,经过一个路由器-1,变成0则进行丢弃
9.协议:数据部分的协议,也就是运输层传递下来的报文段采取的协议
协议名:ICMP IGMP TCP EGP IGP UDP IPv6 ESP OSPF
字段值:1 2 6 8 9 17 41 50 89
10.首部检验和:只检验首部
11.源地址与目的地址
12.可选字段:用来支持排错,测量以及安全等措施
13.填充:使得自己长度达到4字节的整数倍,补0
3.6 IP数据报分片:
标识,标志,以及片偏移的用法:
注意:
(1)我们要首先按照最大MTU进行划分,也就是说除了最后一个分组长度可能达到不了最大MTU,其余都可以
(2)为什么片偏移是划分13,因为数据链路层最大单元MTU是65535,而分片长度是8B的整数倍,因此片偏移一定是能从0-65535都能标识的,也就是0~65535/8=0~8192,而8193正好是2的13次方。
(3)注意分组后每一个分组不光有数据部分而且还要加上原始的首部字段。首部字段继承原始的首部字段。
3.7 IPv4地址:
IP地址经历的阶段:
(1)分类的IP地址
(2)子网的划分
(3)构成超网(无分类编址方式CIDR)
特殊的IP地址:
私有网路地址:
网段个数就是看网络号所占的个数:
常用的三种类别IP地址的使用范围:
3.8 网络地址转换NAT:
私有IP地址是如何跟外界进行通信的:因为私有地址到达普通的路由器是不会产生转发的
3.9 子网划分与子网掩码:
1.子网划分:
(1)用来解决网络划分后的使用率不高的情形,例如:一个单位申请一个B类网络,但是该单位不会包含到6万多台主机,因此会产生地址利用率不高的情况。
(2)两级IP地址不够灵活。
举个例子来查看子网划分:(涉及到子网掩码知识)
怎样判断一个到达路由器的IP地址应该转到哪个网络?
(1)将三级IP地址的子网掩码写出来,就是网络号全1,主机号全0
(2)将得到的子网掩码与原始的三级IP地址做与操作就会得到最后要转发到的网络IP地址。
使用子网划分怎么进行查找主机地址IP:
(1)首先我们会提取IP地址也就是目标地址的值
(2)我们会将目标地址与子网掩码进行逐位与操作来查看是否有与该路由器直接相连的网络,如果匹配成功则进行直接交付,如果匹配不成功则下一步。
(3)若路由表中有目的地址为当前目的IP的特定主机路由,则将分组传送给路由表中所指明的下一跳路由器,否则执行下一步
(4)与路由表中每一行(目的网络,子网掩码,下一跳地址)中的子网掩码和目的Ip逐位相与,若结果匹配,则将分组传送给该行指明的下一跳路由,否则执行第五步
(5)若路由表中有一个默认路由,则将分组传送给路由表中所指明的默认路由器,否则执行第六步,与此同时我们要知道IP数据报在整个网络中传输是有一个TTL的,当TTL到达0时我们也会执行第六步
(6)报告转发分组出错
3.10 无分类编址CIDR:
1.无分类编址CIDR:
2.构成超网:
(1)为的是缩短整个路由表中的数据项:
(2)一个路由表中可能有多个匹配的路径,所以我们选择一个最长前缀匹配的:
选择的结果是B:
3.11 ARP协议:
我们首先要理解计算机网络发送整个数据的过程:因为比如说我们的移动设备比如笔记本等IP地址可以随着我们使用地点的改变而改变的,但是我们物理设备的MAC地址走到哪里都不会改变的,因此我们在传送数据时候从网络层交付给数据链路层进行数据传输的时候得加上物理设备的MAC地址,而我们又不知道相邻设备的MAC地址,因此我们需要一个协议也就是ARP协议来获取物理设备的MAC地址:
注意:ARP高速缓存存储的是本网络内部的IP地址与MAC地址的映射:
1.源主机与目的主机是在同一个网络内部的:
2.源主机与目的主机不在同一个网络当中:
我们首先得将广播的ARP请求分组发送给默认路由,得到默认路由的MAC地址:
(1)到达第一个路由器时会封装成为(IP1,IP5,MAC7,MAC8)
(2)到达第二个路由器时会封装成为(IP1,IP5,MAC8,MAC9)
(3)到达第三个路由器时会封装成为(IP1,IP5,MAC9,MAC5)
ARP的解析步骤:
3.12 DHCP协议:
来动态的分配IP地址:
DHCP协议的请求获取过程:
3.13 ICMP协议:
当我们的数据在通信线路上传输的时候很有可能会出现数据报丢失出差错可能,我们如何让源发送足主机所知道呐?
1.类型:
(1)差错报告报文:
(2)询问报文:(ping的实际应用)
应用:
Traceroute:就是第一个达到路由给分配TTL=1,到达第一个路由就会出现时间戳-1=0就会返回给主机一个传送时间,然后再给第二个路由器发送之前将TTL=2也就是只能到达第二个路由器然后就会报告差错报文然后返回,这样依次类推,直到到达最后的目的主机。
3.14 RIP协议与距离向量算法:
RIP协议:
此过程是循环的当R1收到R2报文时会认为R2可以到达Net1,需要走2+1=3跳,而当R2收到R1报文时会更新成3+1=4跳,直到16,就会知道Net1是不通的。
距离向量算法步骤:
练习题1:
练习题2: