基础编程学习快乐每一天
首页
留言
Siddim.com
当前位置:
首页
>
编程知识库
>
后端开发知识
>
三天两夜肝完这篇万字长文,看完它,面试再也不用怕被问到 TCP/IP 了
三天两夜肝完这篇万字长文,看完它,面试再也不用怕被问到 TCP/IP 了
阅读
1
2020-08-30
:
001
期~
150
期汇总,方便阅读,不断更新中.....
前言
计算机网络是一门基础课程,但是老师所讲的东西无非起到一个抛砖引玉的作用。然而对于需要自学的人来说,无疑是更难的。前路漫漫~~
计算机网络本来就是比较枯燥的,文章内容较多,建议读者耐心看完这篇文章,希望大家看完后都能有所收获。先把这篇文章的大致结构放上来。
<br/>预备知识
谢希仁的那本《计算机网络》是很多大学选择的计网教材,在第一章是一个概论,大致讲了计算机网络的发展,也可以说是每个人都必须了解的小常识。在这里,我就做一个总结概括,把它作为学习计网预备知识。
互联网简史
第一阶段:
20
世纪
50
年代,数据通信技术与网络理论基础研究
第二阶段:
20
世纪
60
年代,
ARPANET
与分组交换技术
第三阶段:
20
世纪
70
年代中期,网络体系结构与网络协议的标准化
第四阶段:
20
世纪
90
年代,互联网、高速网络、无线网络、移动互联网与网络安全技术发展
互联网的发展
「计算机网络的发展主要经历了下面的七个阶段。」
「批处理」:为了让更多的人使用计算机,出现了批处理系统。所谓的批处理,是指事先把用户数程序数据装入卡带或者磁带,并由计算机按照一定顺序读取。
「分时系统」:批处理系统之后,又出现分时系统。它是指多个终端同时与计算机连接,允许多个用户同时使用计算机。
「计算机通信技术」:在分时系统中,我们看到了终端和计算机的连接,但这并不意味着计算机与计算机之间也已互联连接。随着计算机的数量普及,计算机之间的数据交互的便捷性越来越受到重视,最开始两个主机之间交互数据过程相当繁琐,因此计算机通信技术(计算机与计算机之间由通信线路连接)应运而生。人们可以很轻松的即时读取另一台计算机中的数据,从而极大地缩短了传输数据的时间。
「计算机网络的产生」:
20
世纪
70
年代,人们开始实验基于分组交换技术的计算机网络,并着手研究不同厂商的计算机之间相互通信的技术。到了
80
年代,一种能够互联多种计算机的网络应运而生。网络通信技术进入了发展的高速公路。
「互联网的普及」:进入
20
世纪
90
年代,随着计算机的价格降低、性能增强、各类应用纷纷冒头,计算机普及程度越来越高。面对这一趋势,各家厂商不仅要保证生产产品的自身互联性,还着力于让自己的网络技术不断与互联网技术(
TCP
/
IP
)兼容。
「互联网时代」:随着互联网的普及,现在,人们越来越离不开互联网了。生活、学习工作也都得依靠网络信息,万物互联的时代早就已经到来了。
「网络安全时代」:互联网给世界带来了颠覆性的改变,给人们日常生活带来了极大的便利,互联网呈现给现代人一个高度便捷的信息网络环境,在国家面前,犹如水电煤气一样,成为了国家必不可少的重要资源,随着万物互联,网络安全必定是国家安全最重要的一环。在互联网普及的初期,人们更关注单纯的连接性,注重不受任何限制的建立连接。但现在,人们不再满足与“单纯的连接”而是更为追求“安全的连接”。
网络的性能指标
「比特」:比特(
bit
)是计算机中数据量的单位,也是信息论中使用的信息量的单位。英文单词
bit
来源于
binary
digit
,意思是一个“二进制数字”。网络技术中的速率指的是连接在计算机网络上的主机在数字信道上传送数据的速率,它也称为数据率(
data
rate
)或比特率(
bit
rate
)。
「带宽」:在计算机网络中,带宽用来表示网络的通信线路传送数据的能力,因此网络带宽表示单位时间内从网络中的某一点到另一点所能通过的“最高数据率”。这种意义的带宽的单位是比特/秒。
「吞吐量」:吞吐量(
throughput
)表示在单位时间内通过某个网络(或信道、接口)的数据量,他表示当前网络传输数据的能力。
时延:
1
、
「发送时延」:指主机或路由器发送数据帧所需要的时间,也就是从发送数据帧的第一个比特算起,到该帧的最后一个比特发送完毕所需要的时间。
2
、
「传播时延」:指电磁波在信道中传播一定距离需要花费的时间。
「时延带宽积」:时延带宽积表示链路可容纳的比特数,因此,链路的时延带宽积又称为以比特为单位的链路长度。
「往返时间
RTT
」:往返时间
RTT
,表示从发送方发送数据开始,到发送方收到来自接收方的确认(接收方收到数据后便立即发送确认),总共经历的时间。往返时间一般就会包括分组在网络中的各种时延。
「利用率」:利用率可以分为信道利用率和网络利用率两种。信道利用率指出某信道有百分之几的时间是被利用的(有数据通过)。完全空闲的信道的利用率是零。网络的利用率则是全网络的信道利用率的加权平均值。信道利用率并非越高越好,这是因为,根据排队论的理论,当某信道的利用率增大时,该信道引起的时延也会迅速增加。信道或网络的利用率过高会产生非常大的时延。
不能不知道的小常识
计算机网络的分类
按照「地理覆盖范围」来分类的话,计算机网络可以被分为一下三个部分:
「局域网」(
Local
Area
NetWork
,
LAN
),常见的办公室、宿舍或网吧中的网络就是局域网几米到
10km
以内。其特点是:连接范围窄,用户少,配置容易,连接速率高。
「城域网」(
Metropolitan
Area
NetWork
,
MAN
),用于将一个城市、一个地区的企业、机关或学校的局域网连接起来,实现区域内的资源共享
「广域网」:广域网(
Wide
Area
Network
,
WAN
),也称为远程网,不同城市间的
LAN
或者
MAN
网络互连,因为距离远,信息衰减比较严重,所以这种网络一般要租用专线,通过特殊协议进行连接,构成网状结构,广域网因为所连接的用户多,所以每个用户的连接速率一般较低。
计算机网络的拓扑结构
总线结构
:
优点:费用较低,易于扩展,线路的利用率高;
缺点:可靠性不高,维护困难,传输效率低。
环形结构
:
优点:令牌控制,没有线路竞争,实时性强,传输控制容易;
缺点:维护困难,可靠性不高
星型结构
优点:可靠性高,方便管理,易于扩展,传输效率高.
缺点:线路利用率低,中心节点需要很高的可靠性和冗余度。
计算机有哪些结构
有三种不同的计算机网络分层模型:
「
OSI
七层模型」
「五层结构模型」
「TCP/IP分层结构模型」
TCP
/
IP
协议是当前互联网所遵循的协议,它并不是单纯地由
TCP
或者
IP
组成,而是由各层的协议一起组成的,构成我们通常说说的
TCP
/
IP
协议栈。但是为了更好的理解,后面文章也是按照五层协议来写的。
物理层
这边先给一个建议,大家在学习计算机网络的时候不应该把每个网络协议单独拿出来学习,应该明白它的产生原因以及在整个计算机网络的作用。
数字信号与模拟信号
它的作用是:屏蔽不同的传输媒体和通信手段的差异。我们都知道,自然界的信号无非就是两种,一种是数字信号,另一种就是模拟信号。那么是什么模拟信号?什么又是数字信号呢?
说白了,所谓的模拟信号就是连续变化的物理量,模拟信号其特点是幅度连续(连续的含义是在某一取值范围内可以取无限多个数值)。模拟信号,其信号波形在时间上也是连续的,因此它又是连续信号。我们对连续信号进行抽样,就会得到抽样信号,但抽象信号就是离散的(说着说着就说到了信号系统,看来补考对我的影响还是有的)。但数字信号是不同于模拟信号的,他在时间域上是离散的,它有两种不同状态的物理量,分别用“
0
”,“
1
”来表示。这就好像电灯开关一样,也有两种不同的状态。
当然,数字信号与模拟信号是可以相互转换的,模拟信号通常使用
PCM
(脉冲编码调制)方法量化并转换为数字信号,
PCM
方法是使不同范围的模拟信号对应不同的二进制值。通常,数字信号通过载波相移得到模拟信号。
物理层的传输媒介
我们大家都知道,数据在物理层传输的媒介是不一样的,工作在物理层的是「集线器」。不过,大致可以为一下两类:
「引导型传输媒介」:引导型传输媒体中又有不同的类别,比如同轴电缆、光缆、双绞线,其中双绞线根据是否屏蔽又可以继续细分。
「非引导型传输媒介」:非引导型传输媒介指的是无线电波在空间中的传播,利用不同的频段可以传输不同的信号。
信道
说起信道,前面的基础篇提到过信道的利用率,但至于信道更详细的介绍,就没有提到,现在就来仔细看看。按照传输媒介可以分为三类:
「有线信道」:有线信道以导线为传输媒质,信号沿导线进行传输,信号的能量集中在导线附近,因此传输效率高,但是部署不够灵活。这一类信道使用的传输媒质包括用电线传输电信号的架空明线、电话线、双绞线、对称电缆和同轴电缆等等,还有传输经过调制的光脉冲信号的光导纤维。
「无线信道」:无线信道主要有以辐射无线电波为传输方式的无线电信道和在水下传播声波的水声信道等。无线电信号由发射机的天线辐射到整个自由空间上进行传播。不同频段的无线电波有不同的传播方式。
「存储信道」:在某种意义上,磁带、光盘、磁盘等数据存储媒质也可以被看作是一种通信信道。将数据写入存储媒质的过程即等效于发射机将信号传输到信道的过程,将数据从存储媒质读出的过程即等效于接收机从信道接收信号的过程。
信道是传输信息的信道,信道容量描述了信道无差错地传输信息的最大能力,可以用来衡量信道的好坏。
关于信道,还有一个重要的参数,那就是信噪比,信噪比越大,信道的容量也越大,这里的话给出著名的香农公式:
其中,
C
为信道容量,
B
为带宽,
S
/
N
为信噪比。
信道复用
我们知道,当没有数据进行传输的时候,信道是十分空闲的。但是在网络数据请求量大的时候,比如说最近的
618
,信息的传播速度就会受阻。那什么是信道的复用,复用就是重复使用的意思。信道的复用可以分为以下几个方面:
「时分复用」:所谓的时分复用,就是把做整个信道分为不同的时间。当采用时分复用时,所有用户在不同的时间占用同样的频带宽度(分时不分频)。时分复用可能会造成线路资源的浪费
「频分复用」:频分复用就是把信号分成不同的频率,当采用频分复用技术时,所有用户在同样的时间占用不同的带宽资源。当采用频分复用技术时,所有用户在同样的时间占用不同的带宽资源。
「统计时分复用」:所谓的统计时分复用系统,我们也可以称为异步的时分复用系统。它有一个类似缓冲的机制,当数据到达一定量的时候,才会转发,这大大提高了信道的利用率。
数据链路层
以太网帧
数据链路层接收来自网络层的
IP
数据报,通过一定的封装,让
IP
数据报能在数据链路层上传输。像这样,装好了的
IP
数据报,我们称之为以太网帧,也叫
MAC
帧。
MAC
帧由以下几个重要的部分组成:
「目的
MAC
地址」:
MAC
帧的目的地址占据
6
个字节,它标志了目标主机的地址。
「源
MAC
地址」:和目的地址一样,源地址也占据
6
个字节,它标志的源主机的地址。
「类型」:类型占据
2
个字节,它记录上层使用的协议
0X0800
表示
IP
协议。
「数据部分」:数据部分自然是来自上层的
IP
数据报。
「
FCS
」:
FCS
占据
4
个字节,它是用来进行差错检测的,如果一个
MAC
帧发生了错误,则不能发送到目的主机上。
差错检测
为什么要进行差错检测?
现实的通信链路都不会是理想的。这就是说,比特在传输的过程中可能会产生差错:
1
可能会变成
0
,
0
可能会变成
1
,这就叫做比特差错。在一段是时间内,传输错误的比特占所传输比特总数的比率成为误码率
BER
(
Bit
Error
Rate
)。误码率与信噪比有很大的关系,在实际通信中不可能使误码率下降到零。因此,为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检测措施。
MAC
帧在传播的过程中会产生差错,差错的产生是不可避免的。前面在以太网帧部分我们提到过差错检测序列
FCS
,根据
FCS
我们就可以知道这个
MAC
帧在传输的过程中是否出现了错误或者丢失。
后面讲到传输层的时候我们也会提到差错检测,那么这两者到底有啥区别了?总结起来,可以用一句话概括:
数据链路层的差错检测的目的是做到"无比特差错"。
传输层的差错检测的目的是做到"无传输差错"。即弥补帧丢失、帧重复、帧失序。
差错检测的方法主要有两种:奇偶校验法(
PCC
)和循环冗余校验
CRC
,
PCC
非常简单,不是这篇文章的重点,下面主要讲一下
CRC
循环冗余校验。
循环冗余校验是一种根据传输或保存的数据而产生固定位数校验码的方法,主要用来检测或校验数据传输或者保存后可能出现的错误。生成的数字在传输或者储存之前计算出来并且附加到数据后面,然后接收端进行检验确定数据是否发生变化。
通过
CRC
,我们可以计算出
FCS
冗余校验码,
FCS
位于
MAC
帧的尾部。通过
FCS
,我们就可以知道这个
MAC
帧是否发送了错误。
适配器
说到适配器,其实完全可联想一下生活中的适配器。比如我们给手机充电的时候需要有电源适配器,电源适配器无非就是转换的作用,或者作为一个载体,实现能量的转移。实际上,电脑里的适配器也是一样。结合下面这张图来理解:
我们都知道,数据在外部媒介中的传输方式是串行传输,然而计算机处理内部指令的时候,用的是并行的方式。怎样把串行传输的数据转换成并行传输呢?这就需要适配器了。适配器就像是起到了桥梁的作用,通过它,就可以轻松实现数据传输方式的转换。
CAM表
我们都知道交换机,交换机是一种多端口的网桥,在数据链路层使用
MAC
地址转发数据。在交换机类不实际存储以一张表,叫做
CAM
表。这张表记录了主机的
MAC
地址以及对应的接口,看看下面的这张图:
有三台主机
A
,
B
,
C
和交换机连接在一起,最开始,
CAM
里没有存储任何信息。
突然有一天,主机
A
(源
MAC
)想要给主机
B
(目的
MAC
)发送消息。这个时候,交换机就会检查自己的
CAM
表里是否存储了主机
A
的信息,交换机一看没有
A
的信息,就把
A
的信息写进自己的
CAM
表里。现在,交换机的
CAM
表变成了这样:
这个时候,交换机的
CAM
表里已经存储了主机
A
的信息,但是主机
A
却想要给主机
B
发送信息。这可怎么办呢?「首先」,交换机会检查自己的
CAM
表里是否存在
B
的信息,「如果存在」,就直接把信息转发给
B
。「如果不存在」,那又怎么办呢?犹豫了一下,交换机又有了一个想法,它把主机
A
发给主机
B
的消息以广播的形式发给了所有连在它身上的主机。主机
C
也收到了这条消息,但是主机
C
检查了一下目的地址,不是发给自己的,就果断丢弃了这条消息。主机
B
收到了这条消息后,同样也检查了收件人(目的地址),发现是给自己的消息,于是就收下了这条消息。之后,交换机就更新了自己的
CAM
表,上面增加了一条信息:
就这样,
CAM
表里存储了主机
A
,和主机
B
的信息。下一次,主机
A
想要给主机
B
发送信息的时候,交换机就不需要广播了。
CSMA/CD协议
到目前为止
CSMA
/
CD
的使用已经相当少了,它的使用在下面两个地方:
使用的是有线网络
应用在
10M
/
100M
的半双工有线网络中
「使用
CSMA
/
CD
协议的的网络有以下三个特点:」
「该网络是总线结构」,所有的计算机接在同一总线上,同一时间内,只允许一台计算机发送(或接收)消息,也就是采用半双工通信。
「载波监听」:在发送前、发送中都要不停地对信道进行监听,只有在信道是空闲的时候才能发送消息。
「碰撞检测」:主机会在发送消息前,发信息的过程中不断对进行信道检测,如果有两台主机同时发送消息,则消息传输立即停止。随机等待一段时间再进行发送消息,这就是退避算法。
「补充一下退避算法的特点:」
「非坚持的
CSMA
」:线路忙,则等待一段时间,再监听;不忙时,立即发送;减少冲突,信道利用率降低
「
1
坚持的
CSMA
」:线路忙,继续侦听;不忙时,立即发送;信道利用率提高,冲突增大。
「
P
坚持的
CSMA
」:线路忙,继续侦听;不忙时,根据
p
概率进行发送,另外的
1
-
p
概率为继续侦听(
p
是一个指定概率值)。
网络层
IP协议
IP的概述
IP
协议对应的是
IP
地址,那么什么是
IP
地址呢?
维基百科上是这样解释的:
❝
IP
地址(英语:
IP
Address
, 全称:
Internet
Protocol
Address
),又译为网际协议地址、互联网协议地址。当设备连接网络,设备将被分配一个
IP
地址,用作标识。通过
IP
地址,设备间可以互相通讯,如果没有
IP
地址,我们将无法知道哪个设备是发送方,无法知道哪个是接收方。[
2
]
IP
地址有两个主要功能:标识设备或网络 和 寻址(英语:
location
addressing
)。
❞
上面的一堆文字其实无非解释了两个点,总结如下:
IP
地址是用来标记主机的地址,没有
IP
地址就无法识别主机。(标志主机)
因为唯一标记主机,所以可以用来在网络中查找主机。(寻址)
现在想一下前面我们说到的
MAC
地址,
MAC
地址是一台主机的身份象征。一台主机从出厂以后,
MAC
地址就唯一确定了,无法更改(当然也可以通过软件修改,但是必须得确保同一局域网下不能有两台
MAC
地址相同的主机)。
「那么,为什么有了
MAC
地址,还需要
IP
地址?或者说是有了
IP
地址,还需要
MAC
地址?」
这其实也算是一个经典的问题了,网上也有不少答案,这里推荐两篇文章:
有了
IP
地址,为什么还要用
MAC
地址?
为什么有
MAC
地址,还要有
IP
地址??
看完上面两篇文章,我总结如下:
「历史原因:」 以太网诞生于因特网之前,在
IP
地址之前
MAC
地址就已经在使用了。两者结合使用,是为了不影响已存在的协议
「分层实现:」 对网路协议进行分层以后,数据链路层的实现不需要考虑数据之间的转发,网络层的实现不需要考数据链路层的影响。
「分工合作:」
IP
地址是会随着主机接入网络的不同而发生改变的,而
MAC
一般不会改变。这样的话,我们可以使用
IP
地址进行寻址,当数据报和目的主机处于同一网络时,就使用
MAC
地址进行数据交付。
IP数据报
IP
数据的样子是这样的:
有几个重要的东西必须得进行说明一下:
「版本号」:占用
4
位二进制数,表示该
IP
数据报使用的
IP
协议版本。目前
Internet
中使用的主要是
TCP
/
IP
协议族中版本号为
4
的
IP
协议。
「头长度」:占用
4
位二进制位,此域指出整个报头的长度(包括选项),该长度是以
32
位二进制数为一个计数单位的,接收端通过此域可以计算出报头在何处结束及从何处开始读数据。普通
IP
数据报(没有任何选项)该字段的值是
5
(即
20
个字节的长度)。
「服务类型」:服务类型(
TOS
、
type
of
service
):占用
8
位二进制位,用于规定本数据报的处理方式。
「生存时间(
TTL
,
Time
To
Live
)」:占用
8
位二进制位,它指定了数据报可以在网络中传输的最长时间。实际应用中把生存时间字段设置成了数据报可以经过的最大路由器数。
TTL
的初始值由源主机设置(通常为
32
、
64
、
128
或
256
),一旦经过一个处理它的路由器,它的值就减
1
。当该字段为
0
时,数据报就丢弃,并发送
ICMP
报文通知源主机,因此可以防止进入一个循环回路时,数据报无休止地传输下去。
「上层协议标识」:占用
8
位二进制位,
IP
协议可以承载各种上层协议,目标端根据协议标识就可以把收到的
IP
数据报送到
TCP
或
UDP
等处理此报文的上层协议了。
子网掩码与IP地址
前面说到
IP
地址的组成的时候,说到过网络号。常见的
IP
地址无非就是由网络地址和主机地址组成。那么什么是网络号?网络号就是计算机当前所在网络的名字,在这个网络下,又由许多的主机构成。那又该怎么计算网络号了?这时候,子网掩码派上了用场。
通常,计算机的
IP
地址和子网掩码是成对出现的,通过子网掩码和
IP
地址进行对照就可以知道主机号和网络号。为了方便表示,子网掩码前面通常是连续的
1
,后面部分是连续的
0
,不能出现
0
和
1
交替的情况。
请看下面的例子。
现在已经知道了主机
A
的
IP
地址和子网掩码,把它们转化成二进制的形式。通过二进制对应子网掩码的
1
的部分对应
IP
地址的网络号,子网掩码为
0
的部分对应主机号。下面的这张图画的很清楚:
ICMP协议
我们知道,
IP
协议是不可靠的传输协议,网络中进行可靠传输的是
TCP
协议,这个后面在讲传输层的时候会说到。那么,如果在消息没有送达的情况下,网络层是怎么解决的了?这个时候,就需要用到
ICMP
协议。什么是
ICMP
协议了?
ICMP
是网络控制报文协议(
Internet
Control
Message
Protocol
,
ICMP
)。
它的作用:更加有效地转发
IP
数据报作为
IP
数据报的数据部分,可以分为
ICMP
差错报文,和
ICMP
查询报文。差错报文是用来简单的报告错误的, 至于对于错误怎么处理是高层协议的职责。同时, 差错报文总是发送给最初的数据源(这是因为在
ICMP
数据报中唯一可以使用的就是源
IP
和目的
IP
),查询报文总是成对出现。
ARP协议
前面说到
IP
地址用来寻址,当目的地址和数据报处于同一网络时,
MAC
地址用来交付数据报。现在有一个问题,主机
A
要给主机
B
发送消息,消息经过一系列地转发,终于找到了主机
B
的
IP
地址。但是,我们都知道,数据在链路层的传输是需要
MAC
地址的,仅仅知道
B
的
IP
地址是无法进行通信的。请看下面这张图:
这个时候,
ARP
协议就派上用场了。
ARP
全称是地址解析协议(
Address
Resolution
Protocol
),其基本功能为透过目标设备的
IP
地址,查询目标设备的
MAC
地址,以保证通信的顺利进行,它是
IPv4
中网络层必不可少的协议。
「如同交换机工作在数据链路层一样,路由器是工作在网络层的。交换机有
CAM
表,路由器也有路由表。」
现在路由器要给主机
B
发送一条消息,必须得知道主机
B
的
MAC
地址才能进行通信。这个时候路由器会发送一个
ARP
请求,该请求是以广播的形式发送的,每一台连接到该路由器的主机都收到得到这条消息。但是只有主机
B
检查到自己的
IP
地址符合要求。于是主机
B
发送给路由器一条
ARP
响应,把自己的
MAC
的地址告诉了路由器。就像下面图示的那样:
每次路由器发送一个
ARP
请求的时候,就会增加一条数据,这一条数据记录了
IP
地址对应的
MAC
地址,这样路由器下次再给该主机发送消息的时候就不用广播了。当然如同交换机的
CAM
表中的数据有生存了时间一样,路由表中的数据也有生存时间。试想一下,如果数据一直存在,那么路由器岂不是需要花大量的存储空间来缓存已经失效的数据。
内部网关协议
互联网的路由选择协议主要有两种,分别是
RIP
和
OSPF
。下面具体介绍这两种协议。
「先介绍
RIP
协议」:
路由信息协议(
RIP
) 是内部网关协议
IGP
中最先得到广泛使用的协议。
RIP
是一种分布式的基于距离矢量的路由选择协议,是因特网的标准协议,其最大优点就是实现简单,开销较小。
基本算法:矢量距离算法(简称
V
-
D
算法)的思想是:网关周期性地向外广播路径刷新报文,主要内容是由若干(
V
,
D
)序偶组成的序偶表;(
V
,
D
)序偶中的
V
代表“向量”,标识网关可到达的信宿(网关或主机),
D
代表距离,指出该网关去往信宿
V
的距离;距离
D
按驿站的个数计。其他网关收到某网关的(
V
,
D
)报文后,据此按照最短路径原则对各自的路由表进行刷新。
它只适用于小型的网络(
15
跳就达到极限),如果网络过于庞大,当网络出现故障时,要经过比较长的时间才能将此信息传送到所有的路由器。
「接下来说说什么是
OSPF
:」
基本定义:
OSPF
(
Open
Shortest
Path
First
开放式最短路径优先)是一个内部网关协议(
Interior
Gateway
Protocol
,简称
IGP
),用于在单一自治系统(
autonomous
system
,
AS
)内决策路由。
基本算法:迪克斯加算法。主要是通过向邻居发送
HELLO
包来建立邻居关系,选取
DR
等。
参考文章:计算机网络原理之
RIP
以及
OSPF
对比
NAT协议
NAT
技术其非常简单,那么
NAT
它的作用是什么呢?
NAT
(
Network
Address
Translation
,网络地址转换)是
1994
年提出的。当在专用网内部的一些主机本来已经分配到了本地
IP
地址(即仅在本专用网内使用的专用地址),但现在又想和因特网上的主机通信(并不需要加密)时,可使用
NAT
方法。
这种方法需要在专用网连接到因特网的路由器上安装
NAT
软件。装有
NAT
软件的路由器叫做「
NAT
路由器」,「它至少有一个有效的外部全球
IP
地址」。这样,所有使用本地地址的主机在和外界通信时,都要在
NAT
路由器上将其本地地址转换成全球
IP
地址,才能和因特网连接。另外,这种通过使用少量的公有
IP
地址代表较多的私有
IP
地址的方式,「将有助于减缓可用的
IP
地址空间的枯竭」。
「简单来说,
NAT
技术就是实现局域网与互联网通信的一项协议。」
NAT
又可以分为三种不同的类型:
「静态
NAT
(
Static
NAT
):」 静态
NAT
设置起来最为简单和最容易实现的一种,内部网络中的每个主机都被永久映射成外部网络中的某个合法的地址。当一个内部主机必须被作为一个固定的外部地址访问时,通过静态
NAT
实现。
「动态地址
NAT
(
Pooled
NAT
):」 动态
NAT
则是在外部网络中定 义了一系列的合法地址(地址池),采用动态分配的方法映射到内部网络。动态
NAT
转换的工作过程是这样的,当有一个内部主机需要访问外网时,从公用
IP
地址池中取出一个可用的地址分配给该主机使用。当通信完成后,所获取的公用
IP
地址也被释放回地址池中。外部公用
IP
在被分配给一个内部主机通信使用时,该地址不能不能再次被分配给其他内部主机使用。
「网络地址端口转换
NAPT
(
Port
-
Level
NAT
):」
NAPT
是把内部地址映射到外部网络的一个
IP
地址的不同端口上。
NAPT
(
Network
Address
Port
Translation
),即网络端口地址转换,可将多个内部地址映射为一个合法公网地址,但以不同的协议端口号与不同的内部地址相对应,也就是&
lt
;内部地址 内部端口&
gt
;与&
lt
;外部地址 外部端口&
gt
;之间的转换。
参考文章【计算机网络】
NAT
:网络地址转换
IPV6协议
我们前面说的
IP
地址其实是
IPV4
,那么,为什么已经有
IPIV4
了,还要来一个
IPV4
呢?原来是这样的,早在上个世纪,人们就预料到
IPV4
地址枯竭的一天,为了解决这个问题,开始了
IPV6
的研发。
「
IPv6
(
IP
version
6
)是为了根本解决
IPv4
地址耗尽的问题而被标准化的网际协议。」
IPv4
的地址长度为
4
个
8
位字节,即
32
比特。而
IPv6
的地址长度则是原来的
4
倍,即
128
比特,一般写成
8
个
16
位字节。可以看到,
IPV6
的地址是取之不尽,用之不竭的,那么现在为什么不把
IPV4
全部换成
IPV6
呢?
从
IPV4
切换到
IPV6
极其耗时,需要将网络中所有主机和路由器的
IP
地址进行重新设置。当互联网广泛普及后,替换所有
IP
地址会是更为艰巨的任务。
在现存的网络中,既有
IPV4
又有
IPV6
,那么它们之间是怎么通信的呢?有两种技术:「双协议栈」、「隧道技术」,下面分别进行介绍:
「双协议栈」:改变
IP
地址的首部,在首部进行转换的过程中,
IPV6
的首部的部分信息会丢失,而且这种转换的损失不可避免。
「隧道技术」:何谓隧道技术了?其实完全可以通过字面的意思理解。下面还是以画图的方式帮助大家理解。隧道技术说白了就是数据在传输的时候进行了另一种的封装与解封,如图数据由
IPV6
网络进入到
IPV4
的网络,需要把
IPV6
的数据包封装在
IPV4
的数据包里。
传输层
停止等待协议
什么是停止等待协议了?看完下面一张图你可能就懂了
停止等待协议可以由以下三个部分组成:
「无差错情况」:就像上面那个图一样,为了保证无差错的情况,主机
A
还要继续向主机
B
发送消息,就必须得到主机
B
的回复。
「出现差错」:如果出现差错,比如主机
A
一直没有收到主机
B
的回复,那么就会有一种机制,使得主机
A
把这条消息再一次发送给主机
B
。这中间涉及到一个
「重传时间」的选择,这里得话,这个重传时间应该不小于
RTT
(主机
A
给主机
B
发送消息,主机
B
再给主机
A
发送消息的时间和)。
「确认丢失和确认迟到」:确认迟到和确认丢失,看看下面的这张图你可能就明白了
数据在传输过程中可能会出现丢失和迟到的情况,对于丢失的数据进行重传,对于迟到的数据不做处理。既然说到了停止等待协议,那我就不得不补充一下
ARQ
协议。是什么
ARQ
协议了?
ARQ
协议就是发送方不必收到对上一条消息的确认,一次可以发出多个分组,这样就提高了信道的利用,可以在某一时间内传送足够的数据量。
UDP
UDP
协议相对与
TCP
协议来说是相当简单的,传输层的重点自然也是
TCP
协议。下面先简单解释一下
UDP
协议。
「
UDP
具有以下特点:」
面向无连接的协议,进行不可靠的传输
面向数据报
没有拥塞控制
UDP
数据报首部开销小
支持一对一,一对多,多对多,多对一的数据传输
TCP
TCP概述
「
TCP
是传输层的另一个协议,它具有以下特点:」
TCP
协议是面向连接的传输层协议
提供可靠交付
使用全双工通信
面向字节流
TCP数据报
请看下面的这张图片(图片来源于网络)。
这里的话对数据报的某些字段作一下解释:
「源端口」:发送主机的端口号
「目的端口」:接收主机的端口号
「序号」:在一个
TCP
连接中传送的字节流中的每一个字节都按顺序编号。字节流的起始序号必须在连接建立时设置。
TCP
数据报首部中的序号字段值则指的是本报文段所发送的数据的第一个字节的序号。
「确认号」:即期望收到对方下一个报文段的第一个数据字节的序号。若确认号为
N
,则表明:到序号
N
-
1
为止的所有数据都已正确收到。
「数据偏移」:它指出
TCP
报文段的数据起始处距离
TCP
报文段的起始处有多远。
「窗口」:窗口字段明确指出了现在允许对方发送的数据量。窗口值经常在动态变化着 窗口指的是发送本报文段的一方的接收窗口(而不是自己的发送窗口)。
「校验和」:检验和字段检验的范围包括首部和数据这两部分 在计算检验和时,要在
TCP
报文段的前面加上
12
字节的伪首部(同
UDP
)
「确认
ACK
」:仅当
ACK
=
1
时确认号字段才有效。当
ACK
=
0
时,确认号无效。
TCP
规定,在连接建立后所有传送的报文段都必须把
ACK
置
1
。
「推送
PUSH
」:当两个应用进程进行交互式的通信时,有时在一端的应用进程希望在键入一个命令后立即就能够收到对方的响应,而不再等到整个缓存都填满了后再向上交付。这时,发送方
TCP
把
PSH
置
1
,并立即创建一个报文段发送出去。接收方
TCP
收到
PSH
=
1
的报文段,就尽快地(即“推送”向前)交付接收应用进程。
「复位
RST
」 :当
RST
=
1
时,表明
TCP
连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。
「
SNY
」:在连接建立时用来同步序号 当
SYN
=
1
而
ACK
=
0
时,表明这是一个连接请求报文段。
「
FIN
」:用来释放一个连接。
滑动窗口
TCP
进行数据发送,为了提高数据传输的效率,采用了一种叫做滑动窗口的机制来进行数据发送。
下面是发送端滑动窗口的示意图,滑动窗口的大小是绿色部分和红色部分的序列长度。它工作的机制是这样的,一旦发送端收到一个确认,滑动窗口就会向右移动。
流量控制
关于流量控制,用一句简短的话就可以概括。
❝
接收端会给发送端一个负反馈,通过这个负反馈可以控制发送端的滑动窗口的大小。
❞
下面可以看一下知乎上是怎么说的,我找了一条讲的最形象,可以结合着理解一下。
知乎:
TCP
协议的滑动窗口具体是怎样控制流量的?
拥塞控制
「慢启动:」 慢启动值得就是一条
TCP
链接刚建立时不要一下发送大量数据导致网络拥塞激增,而是由小到大根据反馈逐渐增大拥塞窗口。
「拥塞避免:」 拥塞避免就是让滑动窗口缓慢增大,而不是像慢开始那样成倍增长。
「快重传:」 发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段,而不必继续等待设置的重传计时器到期。
「快恢复:」 快恢复具有下面两个特点
当发送方连续收到三个重复确认时,就执行 “乘法减小” 算法,把慢开始门限减半。这是为了预防网络发生拥塞。注意,接下去不执行慢开始算法。
执行快恢复算法时,改变滑动窗口的值,然后开始执行拥塞避免算法,使得拥塞窗口缓慢性增大。
三次握手
三次握手与四次挥手可以说是面试常考的知识点了,不过在介绍三次握手之前,我觉得有必要了解一下「理想传输条件的共性」:
传输信道不产生差错
不管发送方以多快的速度发送数据,接收方总是能够及时接收数据。
理想的情况终究是理想的,上述两种情况在实际环境是不可能发生的。那么,我们就来说说怎样使得我们的实际情况更加接近理想,这就是我们接下来要讲的三次握手。
首先,三次握手和后面要讲的四次挥手都是针对
TCP
来说的,
UDP
是面向无连接的协议,不可能存在的三次握手与四次挥手。三次握手与四次挥手是为了更好进行可靠的传输,下面先看下面三次握手的流程图。
既然是为了进行可靠的传输,无非是要保证客户端与服务器之间的数据发送和接收的正常进行。
「第一次握手」:
Client
什么都不能确认;
Server
确认了
Client
发送正常。
「第二次握手」:
Client
确认了:自己发送、接收正常,对方发送、接收正常;
Server
确认了:自己接收正常,
Client
发送正常。
「第三次握手」:
Client
确认了:自己发送、接收正常,对方发送、接收正常;
Server
确认了:自己发送、接收正常,对方发送接收正常。
为什么需要进行第三次握手了?一句话,主要防止已经失效的连接请求报文突然又传送到了服务器,从而产生错误。
通过上面的三个步骤,
Client
和
Server
能够进行可靠的传输,缺一不可。
四次挥手
既然理解了三次握手,想必四次挥手也没有啥难度,先把流程图附上。
如同三次挥手一样,四次挥手也是为了可靠的传输。四次挥手就是
Client
和
Server
断开连接的过程,那么你可能会觉得,建立连接的过程需要三次到还可以理解,为啥连断开连接都需要四次。难道一次或者两次就不可以了吗?
是这样的,既然三次握手的需要发送方和接收方确认,那么四次挥手也要得到发送方和接收方的确认。
「第一次挥手」:
Client
向
Server
发送断开的连接的请求。
「第二次挥手」:
Server
向
Client
发送断开连接的确认。
Client
收到以后,这个时候
TCP
进入了半连接的状态,从
Client
向
Server
发送数据的通道被关闭了。
「第三次挥手」:
Server
向
Client
发送一个断开连接的请求。
「第四次挥手」:
Client
向
Server
发送断开连接的确认。
Server
收到以后,这个时候
TCP
连接就完全断开了。
也可以这样考虑,上面提到的问题。假如在第二次挥手的时候,
Server
在给
Client
发送
ACK
的同时,也发送了
FIN
的请求。那么如果,
Server
还在接收从
Client
传输过来的数据,则会因为
Client
的下一个
ACK
而关闭接收数据的通道,数据就会接收失败就像下面的这个图那样。
这里推荐一篇文章,帮助大家更好理解
TCP
连接地建立和断开的过程:两张动图-彻底明白
TCP
的三次握手与四次挥手
TCP与UDP的应用场景
至于
TCP
与
UDP
的关系,看完下面的这张图你可能就懂了(图片来源于网络):
TCP
是可靠的传输,
UDP
是不可靠的传输,那为什么我们还需要使用不可靠的
UDP
进行数据传输呢?
我们知道,
UDP
在传送数据之前不需要先建立连接,远地主机在收到
UDP
报文后,不需要给出任何确认。虽然
UDP
不提供可靠交付,但在某些情况下
UDP
确是一种最有效的工作方式(一般用于即时通信),比如:
QQ
语音、
QQ
视频 、直播等等。
TCP
提供面向连接的服务。在传送数据之前必须先建立连接,数据传送结束后要释放连接。
TCP
不提供广播或多播服务。由于
TCP
要提供可靠的,面向连接的运输服务(
TCP
的可靠体现在
TCP
在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源),这一难以避免增加了许多开销,如确认,流量控制,计时器以及连接管理等。这不仅使协议数据单元的首部增大很多,还要占用许多处理机资源。
TCP
一般用于文件传输、发送和接收邮件、远程登录等场景。
应用层
HTTP协议
关于
HTTP
的定义,可以看一下维基百科上是怎么说的:
❝
在网页浏览器的地址栏上显示
HTTP
网络协议的插图
HTTP
是一个客户端(用户)和服务端(网站)之间请求和应答的标准,通常使用
TCP
协议。通过使用网页浏览器、网络爬虫或者其它的工具,客户端发起一个
HTTP
请求到服务器上指定端口(默认端口为
80
)。我们称这个客户端为用户代理程序(
user
agent
)。应答的服务器上存储着一些资源,比如
HTML
文件和图像。我们称这个应答服务器为源服务器(
origin
server
)。
❞
http
协议现在已经广泛用于万维网,关于
http
,后面单独那个文章出来讲,不过现在得先说一下
https
。
其实
http
和
https
是一种协议,只不过
https
经过了
SSL
(
Secure
Socket
Layer
,安全套接字层)或
TLS
(
Transport
Layer
Security
,传输层安全)的封装。单从这两个协议就可以知道,
https
安全的,而
http
是不安全的。
FTP协议
FTP
(
File
Transfer
Protocol
)文件传输协议,在
TCP
/
IP
协议族中属于应用层协议运行于
TCP
协议之上是一种可靠的传输协议,主要功能用于实现用户间文件分发共享,以及网络管理者在进行设备版本升级、日志下载和配置保存等业务操作时,均会使用到
FTP
功能。
DNS协议
前面说到
IP
地址是用来定位主机的,但是我们在生活中是很难记住这些没有规律的
IP
地址,我们只知道网站的域名。那现在要怎么办了?
于是
DNS
协议出现了。
DNS
是域名解析协议,假如我们知道了域名,但是不知道服务器的
IP
地址,就需要用到
DNS
协议。
DHCP协议
什么是
DHCP
协议了?还是看看维基上的定义
❝
动态主机设置协议(
DHCP
)是一种使网络管理员能够集中管理和自动分配
IP
网络地址的通信协议。在
IP
网络中,每个连接
Internet
的设备都需要分配唯一的
IP
地址。
DHCP
使网络管理员能从中心结点监控和分配
IP
地址。当某台计算机移到网络中的其它位置时,能自动收到新的
IP
地址。
❞
维基上已经解释的非常清楚了,
DHCP
的作用就是动态地给主机分配
IP
地址,大大减少了网络管理员的工作负担。
来源:
juejin
.
im
/
post
/
6850037269244575757
? ~
以上数据来源于网络,如有侵权,请联系删除。
上一篇:
面试官:来谈谈SQL中的in与not in、exists与not exists的区别
下一篇:
面试官:你来说说Redis两种持久化方式的优缺点
评论
(0)
提交
类别
基础编程学习
HTML
PHP
Python
编程知识库
后端开发知识
热门文章
Java并发中的同步容器与并发容器,你了解多少?
Innodb中的事务隔离级别和锁的关系,难倒一半面试者!
SpringBoot + minio实现分片上传、秒传、续传
面试官:你知道消息队列如何保证数据不丢失吗?
JAVA知识 Java8新特性
面试官:谈谈为什么要限流,有哪些限流方案?
说说动态代理与静态代理区别
面试官:思考Tomcat 类加载器为什么要违背双亲委派模型?
boot-admin 基于SpringBoot的后台权限管理系统,可作为脚手架,用于快速搭建项目
SpringBoot+Vue+App+硬件实现智能家居系统项目