嚎羸的博客

因为Hexo是静态博客,部署多有不便,建议查看我的语雀文档

0%

计算机网络

来自韩立刚老师:https://www.bilibili.com/video/BV1WK4y1f71A

计算机网络概述

局域网、广域网、Internet

计算机网络的分类

计算机网络分为几种:

1、局域网

2、广域网

3、Internet

局域网

现在学校里面有几个教室,教室里面有很多电脑

学校的机房里面有交换机,可以链接上网

假如这些教室要上网,有两种方式:

1、所有的电脑都链接机房里面的交换机

2、各自教室里面放一个交换机,电脑分别链接自己机房的交换机,最后教室的交换机链接机房的交换机

显而易见,是第二种方式更好,这样布局更加简洁美观

image-20210218152256231

那么其实对于各个教室的上网情况来说,这就是局域网

各个局域网的交换机是接入计算机的,这叫做==接入层交换机==

对于机房的交换机来说,它是不直接接入计算机的,而是接入接入层交换机的,这叫做==汇聚层交换机==

总得来说,这是一种星型结构,这是有好处的

有的接入层交换机之间进行了接入,最后由某一个交换机接入汇聚层交换机,这显然是一种串行的解决方案,这是十分不规范的

广域网

和局域网是相对的一个概念,它是一个长距离的概念

比如通过光纤来进行上网

Internet

Internet是全世界最大的网络,是由各种运行商(ISP)组成的,主要作用是为网民提供Internet连接

image-20210218153215957

总结

局域网:覆盖范围小,自己花钱购买设备,带宽固定,自己维护

广域网:距离远,宽带不固定(购买)

Internet:是由ISP组成,自己的机房,为广大网民提供网络链接


MAC地址和IP地址

IP地址

IP地址是可以变化的

IP地址分为网段部分和主机部分

比如现在的IP地址是13.0.0.2,子网掩码是255.0.0.0

那么这是什么意思呢

子网掩码先简单了解一下:子网掩码的意思是表示哪里是网段部分,那段是主机部分

有几个255就代表前几位是网段部分,这里的只有一个255,那么就代表13是网段部分

假如是255.255.0.0,那就代表13.0是网段部分

路由器的地址一般是使用主机的第一个部分,比如13.0.0.1,其他计算机是其他部分,比如13.0.0.2

网关:网关的意思是计算机到其他网段应该是给谁,这里肯定就是给路由器,路由器的作用是到其他网段的转发,所以网关应该是13.0.0.1

MAC地址

MAC地址在电脑、路由器等是在出厂的时候就固定的,也称为物理地址

MAC地址全球唯一

MAC地址和IP地址封装

现在的网址为:www.baidu.com,那么现在大体走一遍从客户端到服务器的过程

image-20210220115254831

1、计算机会根据DNS将网址解析为IP地址

2、将数据桢发送到交换机,交换机转发到路由器

讲解一下数据帧,数据帧由数据包+MAC地址构成

数据包:由数据、发送端IP、接收端IP构成

MAC地址:包括发送段MAC地址、接收端MAC地址构成

此时的接收端MAC地址其实是路由器的MAC地址,所以交换机才能通过MAC地址定位到路由器,而不是其他的计算机

3、路由器解析数据帧

路由器解析了数据帧,发现了要发送的目标IP,此时他会重新编写数据帧中的MAC地址

将发送端MAC地址替换为自己的MAC地址,将接收端MAC地址替换为下一个路由器的MAC地址

注意这里的MAC地址还不是最终服务器的MAC地址,而是下一个节点的MAC地址

4、重复以上过程

5、最后,从最后一个路由器到达目标服务器

这个时候仍然替换MAC地址,将当前MAC地址替换为当前MAC地址,将接收端MAC地址替换为服务端MAC地址

6、路由器进行数据帧的解析

路由器返回的数据包一般都比较大,那么就需要将这些数据包进行切割、编号

进行上面的方案之后,将数据包首先放到网卡的缓存里面,我们说只要是电脑网卡,都有缓存

将数据包分别发送到目标地址,发送的过程还是和前面一样

发送的数据包不能删除,避免网络拥塞等情况,导致数据包丢失,丢失重新发

等到客户端给服务端说这个数据包收到了,现在要第二个,这个时候缓存中第一个数据包就可以删掉了,然后发送第二个数据包

7、当客户端将数据包全部都收集全之后,从网卡里面将数据包拼凑起来,显示出页面

那么其实上面这个例子非常明确了,它类似我们发快递的过程,不是一下子就到达某个人的手里,而是要通过各个快递中转来到达最终的目的地

理论上假如全球使用交换机来链接的话,是不需要IP地址,只需要MAC地址的,但是这是不可能的


OSI参考模型

OSI参考模型分为了七层模型,从上到下分为:

1、应用层:能够产生网络数据的层都叫应用层

最上层,不产生网络数据不是应用层

2、表示层:在传输之前是否进行加密或者压缩处理,是什么编码方式

表示层出现了问题,可能会出现被其他人截获内容,或者编码错误等问题

3、会话层

客户端和服务端进行交互,不同的页面打开不同的网站,这种就属于不同的会话

假如没有会话层,一个页面可能会被不同的内容填充,会话层就是这种作用

会话还可以查木马,因为不管木马藏的有多好,只要和服务器进行交互,那么都会建立会话

4、传输层:可靠传输、不可靠传输、流量控制

比如要建立会话的,分为多个数据包,数据包发出去没有接收到消息,那就再发一次

比如不需要建立会话的,那就发一个数据包

5、网络层:规划IP地址

选择最佳路径,规划IP地址

6、数据链路层:标定数据帧的开始和结束,透明传输,差错校验

7、物理层:定义了物理接口的标准和电器标准,如何在物理链路上传输更快的速度


分层是有好处的:

1、规范化

2、有一层变化之后,不会对其他层产生影响

这样可以很快对网络排错:

1、首先是物理层:查看连接状态,发送和接受的数据包

2、然后是数据链路层:MAC冲突、欠费、计算机连接到错误的VLAN

3、网络层:IP地址配置错误、子网掩码和网关配置错误、路由器是否没有到达目标网络

4、应用层:应用程序配置错误


TCP/IP 协议栈

我们刚才讲的OSI参考模型是理论性的知识,是一个标准化的模型,但是我们知道,实际生活中和理论总有有一些出入

在长期的演变过程中,各个厂商都默认了将七层模型缩减为五层模型,从上到下为:

1、应用层

2、传输层

3、网络层

4、数据链路层

5、物理层

其中数据链路层和物理层我们经常把他们合并到一起,那么在实际上可以看作四层

我们平时说的 TCP/IP 其实指的是TCP/IP 协议栈,协议栈和协议是不同的,协议栈中包含多个协议

在五层模型中,TCP/IP 协议栈进行了如下划分:

1、应用层协议:HTTP、FTP、DNS 协议

2、传输层:TCP(可靠传输)、UDP(不可靠传输) 协议

3、网络层:ARP、IP、ICMP、IGMP 协议

4、数据链路层和物理层:Ethernet、ATM、Frame Relay 协议

其实TCP/IP 协议栈是使用了TCP和IP做了一个代表,而不是只有这两个协议

其实这几层就是一个套娃的过程:

image-20210222102452737


计算机网络的性能指标

作为IT人员,必须要知道计算机网络的性能指标,否则会显得十分外行

1、速率

连接在计算机网络中的主机在数字信道上传输数据位数的速率,单位为 b/s、Kb/s、Mb/s、Gb/s

数字信道指的是从发送端到接收端这个部分,而且是发送端到接收端这一个信道,不是所有的加起来

2、带宽

数字信道能够达到的最高支持的速率

3、吞吐量

单位时间内通过某个网络的数据量,单位是 b/s、Mb/s等

4、时延

又称为延迟,分为发送时延、传播时延、处理时延、排队时延

发送时延:计算机开始发送到发送到信道上的时延

传播时延:从上一个信道段到路由器上的时延

处理时延:路由器对数据块的处理速度,就是进路由器需要的时间

排队时延:路由器对数据块的处理速度,就是出路由器需要的时间

5、时延带宽积

时延带宽积其实就是传播时延 * 带宽

6、往返时间

从发送方发送数据开始,到发送方收到接收方确认

7、利用率

信道利用率:数据通过的时间/(有+无)数据通过的时间

网络利用率:所有信道利用率的加权平均值


物理层

物理层的基本概念

首先我们来看一下物理层位于五层模型的最后一层

image-20210222110425254

物理层解决的问题:如何在连接各个计算机的传输媒体上传输数据比特流

主要任务是确定传输媒体接口的一些特性,比如:

1、机械特性:接口形状大小,引线数目

2、电气特性:规定电压

3、功能特性:比如 -5V 代表0,+5V 代表1

4、过程特性:也叫做规程特性,规定建立连接时各个相关部件的工作步骤

数据通信的基础知识

相关术语

数据通信不仅仅是计算机,包括所有数据通信

image-20210222111026587

假如是我们的计算机,其实没有经过模拟信号的这一步骤,就是使用数字比特流直接交换的

1、数据:运送消息的实体

2、信号:数据的电气的或者电磁的表现

3、模拟信号:代表消息的参数的取值是连续的

4、数字信号:代表消息的参数的取值是离散的

5、码元:我们看数字比特流,其中的一个变换的小段就叫做码元


信道的知识

之前我们讲过信道是什么,现在讲一下信道的基本知识

1、单向通信(单工通信):只有一个方向的交互,比如只能接受或者只能发送

2、双向交替通信(半双工通信):能发送也能接受,但是要么发送要么接受,不能同时发送接受

3、双向同时通信(全双工通信):能同时发送和接受

基带信号和带通信号

1、基带信号:来自信号源的信号,频率较低,但是代表了我们要传输的数据

2、带通信号:将基带信号经过载波调制之后,将信号的频率范围搬移到较高的频段以便在信道中传输

也就是在一段频率范围内才能够通过信道,所以我们需要将基带信号变为更高频率的带通信号才能传播更远

我们的基带信号其实是传不远的,但是带通信号是可以传递很远的

因此我们在短距离范围内,只需要使用基带信号就可传输

但是只要涉及到远距离,就需要将基带信号转变为能传递更远的带通信号,然后传递过去再由带通信号转变为基带信号

基带信号转变为带通信号的三种方式

1、调幅(AM):出现1有振幅,0没有

2、调频(FM):有振幅,但是1和0的频率不同,出现1则高频振幅

3、调相(PM):出现1则为余弦波,否则正弦波

image-20210222112507840

常用编码格式

1、单极性不归码

2、双极性不归码

3、单极性归零码

4、双极性归零码

image-20210222112750594

图中的电压分为:AV(是A伏)、0V、-AV

单极性就是0V以上的电压,双极性就是有正负

不归零就是不到0,归零就是到0

5、曼彻斯特编码

image-20210222113118453

为啥说可以表示没有数据传输了呢,因为不管数据是0还是1,都会有跳转,假如这个编码中没有跳转就是没有数据了

6、差分曼彻斯特编码

image-20210222113334572


image-20210222113452535


信道的极限容量

我们知道信号波形在实际的信道中是有所干扰的,有所干扰就有所失真,失真到一定程度就无法识别

那么我们说信道的极限容量就是失真到将要无法识别信号的那一刻

奈氏准则

奈奎斯特在1924年推导出了著名的奈氏准则

在假想的理想条件下,为了避免码间串扰,码元的传输速率的上限值

在任何信道中,码元的传输速率是有上限的,否则就会出现码间串扰问题,使接收端对码元之间的识别称为不可能

假如信道的频带越宽,也就是能够通过的信号高频分量越多,那么就可以使用更高的速率传送码元而不出现码间串扰

信噪比 和 香农公式

香农推导出了带宽受限并且有高斯白噪声干扰的信道的极限、无差错的信息传输速率C

C = W log2(1+S/N) b/s

  • W:信道带宽,单位为Hz
  • S:信道内所传信号的平均功率
  • N:为信道内部的高斯噪声功率

香农公式告诉我们,只要信息传输速度低于信道的极限信息传输速率,就一定可以找到某种方法来实现无差错的传输

物理层下面的传输媒体

导向传输媒体

指的是电磁波按照固体媒体传输,分为以下几种

双绞线

  • 屏蔽双绞线 STP
  • 无屏蔽双绞线 UTP

同轴电缆

  • 50欧 同轴电缆,多用于基带传输
  • 75欧 同轴电缆,多用途模拟传输,即宽带同轴电缆

光缆

光纤就是通过光信号来传输,只需要光的折射来进行传递,分为单模光纤和多模光纤

单模光纤:比较纤细,传播特性好,只能传递一种电磁波模式

多模光纤:与单模光纤相反


非导向传输媒体

微波方式来传输信号

  • 地面卫星
  • 地面微波接力通信

集线器

工作特点:起到信号放大和重发的作用,目的是扩大网络的传输范围,但是不具备定向发送信号的能力

它在一个时间内只能让两台计算机进行沟通,所以是一个大的冲突域

现在其实基本没有了集线器,基本都是交换机了

信道复用技术

复用是通信技术中的基本概念

就是在多个信道上面,其实还有共享信道的概念,使用共享信道能够让不同信号在同一部分信道内传输

image-20210222143321260

信道复用有几种实现方式:

1、频分复用技术

某几个频率使用合并技术变为一个新的频率

这样虽然表面看上去是发送了一个频率的信号,但其实是多个频率合并起来的,是波的叠加

2、时分复用技术

根据时间的间隔,将数据分为各种块,按照规律来放,最后拼起来

image-20210222143756971

3、统计时分复用

时分复用有些问题,因为分开放的时候,最后拼接不知道该怎么拼接,很难

所以给每一个数据块打上一个标记,这样在收集的时候就很容易拼接

这就是统计时分复用

4、波分复用

其实就是光的频分复用

宽带接入技术

1、xDSL:用数字技术来对现有的模拟电话用户线进行改造,比如我们平常说的电话拨号上网技术是ADSL

本质上就是将低频频率交给打电话,高频频率交给拨号上网

使用频繁多路复用就可以将所有信号传过去,不影响打电话和上网

2、光纤同轴混合网:通过有线电视的网络来进行上网,原理也就是频繁多路复用

3、FTTx:光纤到户

直接拉一个光纤到小区里面


数据链路层

数据链路层基本概念

image-20210222145036721

我们可以看到数据链路层在物理层的上方,那么数据链路层解决的问题是接受数据帧,看看数据帧是不是正确

如果是正确那就交给网络层,其他什么也不管

数据链路层的信道类型

数据链路层使用的信道主要有以下两种

1、点对点信道:使用一对一的通信

2、广播信道:使用一对多的广播通信方式,因此过程比较复杂,必须使用专用的共享信道协议来协调主机的数据

链路和数据链路

1、链路:指的是物理上的线

2、数据链路:物理线路+通信协议

我们说,计算机在传输数据的时候,在网络层会在数据上加上一层IP地址

但是除了IP地址还有帧头和帧尾,还有物理地址、校验值

比如说现在一个火车有五节车厢,带有车头和车尾,那就是车头+车厢数字+车尾

那么我们就可以根据火车头和火车尾来确定一辆火车的起始点和结束点,校验值可以确定数据是否完整

假如帧头和帧尾都确定了,但是数据数量不对,也不是我们需要的数据

所以我们说,数据链路层传输的是帧

帧 = 帧头 + 物理地址 + 校验值 + 数据 + 帧尾

数据链路层的三个基本问题

封装成帧

网络层过来的数据包其实就被数据链路层封装成数据帧,这就叫做封装成帧

透明传输

现在有一个问题,假如现在我们的帧头为 0000 0001,帧尾为 0000 0100

假如现在中间传输的数据恰好也是0000 0100,就是恰好为帧尾,这种问题叫做透明传输,那么针对这种透明传输该怎么办?

像现在的这种例子,数据链路层有了一个比较合理的解决方案:使用字节填充解决透明传输的问题

我们只要在发现出现这种帧头或者帧尾,就会插入一个转义字符,等到我们到了数据链路层则不会插入转义字符

所以等到接受的时候,会看到转义字符和帧头/尾同时出现,那么就不是真正的结束,没有则是结束了

image-20210222150735984

差错检测

主机A向B发送数据,假如中间的传输出现了错误,数据链路层会丢弃掉这个数据

那么主机B没有收到,主机B会告诉主机A会再次发送一次

循环冗余检验CRC

这是一个检验数据是否出错的一个算法,根据这个数据算出一个冗余码添加到数据最后,在检验的时候通过数据再次推算冗余码来判断数据是否出错


两种情况下的数据链路层

我们刚才说,数据链路层的通讯分为两种

1、点到点通信

2、广播通信

点到点通信(广域网)

使用PPP协议,这个协议是数据链路层的协议,适用于点到点之间的协议,用户拨号上网时一般使用PPP协议

像数据链路层的基本是有的,比如封装成帧、解决透明传输、差错检验、支持多种网络层协议等

但是没有的功能也有很多:纠错、流量控制、序号、多点线路、半双工或者单工

广播信道通信(局域网)

我们这个局域网可以通过广播信道来进行通信,使用的协议是 CSMA/CD 协议,是带冲突检测的协议


以太网

以太网

以太网是第一个局域网的标准

为了让数据链路层更好适用多种局域网标准,局域网的数据链路层拆分为两个子层:

1、逻辑链路控制子层:LLC

2、媒体接入控制子层:MAC

但是现在很多厂商生产的适配器上面只有MAC协议没有LLC协议,所以我们现在也可以认为数据链路层只有MAC协议

现在的以太网是使用集线器来链接的,集线器的内部结构其实就是一堆线,每一个发送数据的口都接到了其他所有收数据的口上了,集线器只管收发信号,看不懂任何信号内容,傻瓜设备,带宽还是共享的

所以说只要在以太网内,只要有一个数据的发送,其他所有计算机都能接受到发送的数据

MAC层和帧格式

硬件地址又被称为物理地址,或者说MAC地址

适配器从网络上收到一个MAC地址就要进行检验,看一下是不是自己需要的,无效的MAC帧就丢弃


网络层

网络层提供的服务

网络层提供的服务:加上原地址和目标地址,形成数据包,其他的顺序、数据包是否丢掉都不管

数据包的顺序和数据包是否丢掉,这种可靠传输是传输层的事情

网络设备和OSI参考模型

计算机通信的过程:

1、应用层 准备好数据

2、传输层 将数据分为小的数据数据段并且标好顺序号

3、网络层 添加原IP地址和目标IP地址,形成数据包

4、数据链路层 形成数据帧,此时分为两种情况

1、要通讯的计算机和自己是一个网段,直接通过直接解析目标的IP地址

2、要通讯的计算机和自己不是一个网段,将将数据包加上目标和原MAC地址和帧校验序列,交给路由器

5、物理层 将数据帧转换为比特流

image-20210223100119971

网络层协议

我们来看一张 TCP/IP 的协议栈

image-20210223100431852

最上层的是应用层、橙色的是传输层、下面的是网络层

我们这里主要是讲解网络层的几种协议: ARP、IP、ICMP、IGMP

ARP协议

ARP协议的作用:将IP地址转换为MAC地址

看起来很高大上,但是其实是一个比较笨的方法,具体的方法是发送一个广播,向全网问这个IP地址的MAC地址是多少

假如有这个IP的计算机一看,问的是我的MAC地址,那么就回复,然后就得到了目标的MAC地址放到了缓存里面

但是注意了,这个ARP协议的广播必须是本网段才能广播到的,否则全球那么多计算机,岂不是每时每刻都在广播

而且他的解析也只能解析本网段的

ARP协议缓存的这个MAC地址是动态的,因为IP随时都有可能改变

所以说ARP协议其实比较占用资源,但是虽然占用资源,也必须使用

ARP协议其实是在进行数据通信之前的工作

虽然和其他的协议都处于网络层,但是从目的和结果上来看,它是为网络层的其他协议提供一个前提条件的基石

ARP欺骗

刚才我们说ARP协议可以进行全网广播,将IP地址对应的MAC地址缓存到本地,比如我们说是M1

假如我现在有一个MAC地址是M2,在M1这个Mac地址发送给需要的主机之后再次将自己的M2发送给主机,那么主机就会将M1替换为M2

那么假如现在主机发送一个数据包,就会通过路由器直接转发给M2,然后M2可以任意修改之后转发给M1

这样M1的所有数据都是被M2截获的,这就是ARP欺骗

其实只要截获到了任意的数据包,那么就可以做任意的事情,比如传递假消息,拒绝消息,截获消息等等。。。

甚至说只要有了ARP欺骗,一个中间人就可以掌控这个网关中的所有消息

我们说虽然ARP协议是网络层的,但是MAC地址是在数据链路层加上的,所以假如出现了ARP欺骗,那就是属于数据链路层的故障

我们可以使用arp -a来查看计算机中的所有MAC地址,来排查MAC错误

ICMP协议

用于测试网络层是否故障,是检测用的,它的使用最多命令是ping,比如ping www.baidu.com

这个命令其实就是使用的ICMP协议

image-20210223171632634

其中time是延迟毫秒,TTL指的是生存周期,也就是数据包的生存周期

并且我们还可以使用TTL判断对方大概的系统

1、Linux的TTL是64

2、Windows的TTL是128

3、Unix的TTL是255

注意,这个是默认的值,这个东西可以改的

并且也不是一定是这几个数,而是这几个数字的范围

IGMP协议

组播,也叫做多播

网络上面有几个概念:

1、点到点通讯

2、组播

3、广播

看名字就知道了,点到点通讯是目标MAC地址确定的,广播是向所有计算机的,组播是对某几个计算机的通讯

这个计算机其实只要绑定目标的主机,那么就能够收听到信息包

其实就像电视节目一样,调整到哪个台,进入哪个频道就能够听到这个数据,调走之后就不听了

那么IGMP协议其实就是周期性去访问,看看有几个计算机符合这种绑定的,也就是是否在这个频道上,没有则会告诉这个主机别放了,没人听

IP协议

我们说ARP协议是从IP找到MAC地址,那么IP协议其实是将数据包从一个网段转移到另外的一个网段

那么IP协议可以说是网络层中非常重要的协议

那么IP协议其实就是一个总称,就像汽车一样,有小轿车、卡车、货车、….

在学习IP协议之前,我们要了解静态路由和动态路由,其实非常简单:

1、静态路由:指的是从一个网段到另一个网段中,类似管理员人工给一个路由表,然后从这张表上寻找,表上没有就不能转发到另外一个网段,可以说是比较死板

需要管理员告诉路由器所有没有直连的网络下一条给谁

适合小规模的网络,但是难以扩展

2、动态路由:指的是从一个网段到另一个网段中,自动寻找路由

周期性广播路由表,动态更新,自动调整

我们说这个动态路由其实就是IP要解决的问题,IP协议分为两种:

  • RIP协议:根据最小转发路径来确定路由器转发
  • OSPF协议:根据带宽来确定路由器转发

传输层

传输层的功能

首先我们还是来看TCP/IP协议栈

image-20210223175031852

我们可以看到网络层一大堆协议,应用层一大堆协议,但是传输层只有两个协议,但是这两个协议是十分重要的

TCP

中文名叫做传输控制协议

传输的数据需要建立会话、分段传输、可靠传输、流量控制的时候就需要TCP协议

啥叫可靠传输呢,比如现在将数据全部分段了,然后TCP会给这些数据段标上序号,交给下一层

目标主机没收到,就重新传

UDP

中文名叫做用户数据报协议

当传输的数据,一条数据就能完成数据通信,那就不需要分段,不需要建立会话,不需要流量控制,不需要可靠传输‘

这个时候就需要UDP了

那假如说UDP不可靠,丢弃了数据包怎么办?再发一次呗,不需要建立会话,不需要可靠传输

比较经典的是域名解析,QQ文字聊天、屏幕广播等场景

但是QQ文件发送就需要的是TCP,因为肯定需要分段、可靠传输、流量控制

包括发邮件这种可能带有大量附件的也是TCP协议


那么我们说其实这两个都叫做传输层的内容,传输层的作用就是为相互通信的两方提供了逻辑通信的功能

那么和网络层是有区别的,网络层的作用是主机到主机,传输层是从主机到进程

比如现在有主机A,主机B提供服务Y

那么主机A想要访问服务Y,就需要根据网络层定位到主机B,然后用传输层定位到服务Y

传输层面向连接和无连接,就是TCP和UDP分别提供的功能

传输层还要对接收到报文进行差错检验


传输层协议和应用层协议之间的关系

其实各种的应用层协议其实就是使用传输层的两个协议加上各种端口号,我们看这个表格

应用层协议名称 传输层协议+端口号
HTTP TCP + 80
HTTPS TCP + 443
RDP(链接远程桌面) TCP + 3389
FTP TCP + 21
访问共享文件夹 TCP + 445
SMTP(发邮件) TCP + 25
POP3(收邮件) TCP +110
telnet TCP +23
SQLServer(链接微软的SQLServer) TCP +1433
DNS(TCP/UDP都行,域名解析) TCP/UDP + 53
TFTP UDP + 69
SNMP UDP + 161
RIP UDP + 520

服务器使用 TCP/UDP 的端口来监听客户端的请求,客户端使用IP定位服务器,使用端口定位服务

我们可以在网卡上设置只开放必要的端口来实现网络安全

那么现在又出现一个问题,端口是什么东西?

端口其实就像房间号码,是由16位二进制来标识的,端口的取值范围为 0 - 65535

已经被占用的端口就是上面表格上面的那些,但是上面的表格肯定是不全面的,还有一些占用的没有写

大体上被占用的端口是 0 - 1023

这些端口其实不一定非要占用上面的端口,但是处于一种约定俗成的规矩,人们一直这样用


UDP

在TCP和UDP之间,我们先学习UDP

1、UDP无连接,也就是发送数据之前不需要建立会话,因为只需要一个数据包

2、UDP使用最大能力交付,也就是不保证可靠性传输

3、UDP是面向报文的,没有拥塞控制,非常适合多媒体通信的要求

4、UDP支持一对一、一对多、多对多的通信

5、UDP首部开销很小,只有8个字节

TCP

TCP有以下特点:

1、TCP是面向连接的传输层协议,需要建立会话

2、每一个TCP连接只能有两个端点也就是点对点的(这个点的意思是IP+端口,俗称套接字 socket)

3、TCP提供可靠交付的服务

因为TCP处理的一般是比较大流量的,不能像UDP一样一个数据就可以发送,需要将数据切割成数据段

然后将这些数据段编号一个一个发送

4、TCP提供全双工通信

5、面向字节流

比如现在从主机A传输到主机B一部电影

那么TCP协议就需要将这部电影分段打上序号,先确保网络是通的,然后发送一个给主机B

主机B接收到一个数据包之后,说我处理好了,你发下一个,那么主机A就发送下一个数据包

在这个期间,因为信道上面不仅仅只有这两个主机,还会有其他的主机通信,当流量太大,数据包难免就丢失了

所以主机A根据TCP需要进行拥塞控制

从上面这个例子中,我们已经知道了TCP协议主要要学习的内容:

1、可靠传输

2、流量控制

3、避免网络拥塞


TCP实现可靠传输

我们说可靠传输的前提是建立会话,但是我们要首先讲传输数据包的情况,至于建立会话等会讲

image-20210224110430867

上面的图其实是比较详细,但是还是再说一下

对于完全正常的情况来说就是无差错情况,对于有问题的情况下有很多,比如说超时重传

==无差错情况==

网络层是不可靠的,网络层只管传输,其他啥也不管,所以需要TCP的可靠传输,可靠传输靠的就是停止等待协议

比如说主机A的端口X发送到主机B的端口Y

主机A会给主机B一个数据包,主机B会给一个确认的消息

然后这个时候主机A就会从网卡的缓存里面删除这个数据包,发送下一个数据包…

==超时重传==

比如现在主机A给主机B一个数据包,主机B等着

假如这个时候出错了,数据包没有发送到主机B那里去,可是现在主机A还等着主机B的消息,那肯定不能一直等着

其实就是等一个来回的时间,等一个RTT

主机A发送给主机B一个数据包,主机B确认收到,然后发送收到消息给主机A,主机A由确认

这个叫做一个来回的时间,也叫做RTT

这个超时重传可以比RTT长一点点,但是不能短

那么等完这个时间之后,主机A觉得已经超时了,再次重新发送这个数据包,再等着

image-20210224111425977

下面还是错误的情况处理

==确认丢失==

我们先来第一个,确认丢失

这个意思是A发送的数据包B收到了,然后B也确认了,但是B确认的消息在给A传输的时候丢失了

那么在A看来就是B没有发送确认消息,那么A就会认为B没有收到这个数据包,会重新发送一次

那么这个重新发送的数据包到达B,就会顶替之前的那个数据包

==确认迟到==

发送的数据包B收到了,然后B也确认了,但是B确认的消息在给A传输的时候迟到了

那么在A看来就是B没有发送确认消息,那么A就会认为B没有收到这个数据包,会重新发送一次

那么这个重新发送的数据包到达B,就会顶替之前的那个数据包

那么可能再次发送几个数据包之后,迟到的数据包才会到达A

这个时候虽然A已经收到了这个消息,但是不做处理,因为按照正常的情况,确认B接收到之后,网卡中的这个包的缓存已经被删除了

流水线传输和累积确认

image-20210224112941412

我们刚才的效率其实是非常低的,因为发送一个数据包就要确认一次,发送一个数据包就要确认一次,一个电影得发送到啥时候

所以想了一个方法,就是一次性发送多个数据包(我们将这个个数称为发送窗口),比如现在有12个数据包,发送1-5的

这样发送的效率就大大增加了

那么这样发送的数据包应该如何确认呢?其实这是一种累积确认的方法

假如数据包1、2、3、4、5全都收到了,那么主机B会发送一个5,这个意思是前五个全都收到了,发送窗口就从6开始

假如数据包1、2、4收到了,3和5丢了,那么主机B会发送一个2,说明到2为止数据包还是全的

发送窗口会挪动到3,然后从3开始重新传递

也就是说发送窗口会确认第一个连续的数据包们,但是会从第一个断点开始重新传输


拥塞控制

拥塞的意思,就是网络堵了,也就是说当非常多的计算机在这个道路上通信,导致数据包堵着出不去,就像是开车,车道堵了

可以说这个网络阻塞不是一个计算机的事情,而是在这个信道上通信的所有的计算机的事情

TCP是可以进行拥塞控制的,就是说当它发现有几个数据包可能没发出去的时候,就会自动降低发送数据包的频率

对于这个信道上来说,只要是使用了TCP协议,就会有这种放慢发送数据包的能力


TCP的传输连接

TCP是可靠传输的,在传输之间要建立会话吗,等到传输完毕要将会话关掉

主动发起的叫做客户端 client,被动接受的叫做服务端 server

三次握手

==TCP的三次握手==

image-20210224114621194

客户端A要访问服务端B

1、A向B发送一个同步数据包

SYN是TCP的首部,标记位为1

ACK是确认标记,标记为0,这个0没什么用

seq是序列号,序列号为x,x是一个数值

2、计算机B收到这个数据包,就知道这是一个主动发起连接的数据包,然后它会返回一个同步数据包

SYN的标记也是1

ACK确认标记为1,不是0了

seq序列号为y,这个y是由计算机B指定的

ack也是确认标记,只不过这个确认标记是序列号+1,也就是说假如A的seq是10,那么ack就是11

3、计算机A收到计算机B的确认,再次返回一个数据包确认收到

SYN没有了

ACK确认标记还是1

seq序列号为计算机B发送数据包的ack

ack确认标记为计算机B的seq+1

==为什么需要第三个数据包==

假如是两次握手,那么我们说这样一种情况:

1、A向B发送请求建立会话的数据包X

2、数据包X阻塞到路上了

3、A等不到确认消息,再次发送数据包,我们称为Y,请求链接

4、B接收到Y,向A发送数据包Z

5、A接收到数据包Z,开始建立会话

6、B接收到数据包X,认为是另一台计算机要和它建立会话,那么发送回一个数据包M

7、A接收到数据包M,但是A已经和B建立了会话,所以不搭理这个数据包

8、B等了一会,发现第二次它回馈的数据包M方的会话没有回馈,资源浪费了

以上情况是我们没有第三次数据包的情况,这样就是会导致白白建立会话浪费资源

所以我们需要三次握手

==TCP三次握手的各个状态==

image-20210224121259828

客户端:closed–>syn-sent–>estab-lished

服务端:closed–>listen–>syn-rovd–>estab-lished


四次挥手

为啥需要四次挥手,而不是两次或者五次呢?这是因为接收端可能还会向发送端发送点数据啥的。

四次挥手同样需要两个报文:FIN、ACK,只不过这次的发送和三次握手有点区别

1、发送端向接收端发送FIN+ACK数据,表示不再发送数据

2、接收端发送ACK数据,确认收到

3、接收端主动发送FIN和ACK数据,告诉接收端它也没有数据要向接受端发送的

4、接收端收到,发送ACK数据,表示收到


应用层

应用层概述

应用层其实最主要的就是各种各样的协议,每一个协议都是一个服务

DNS

域名系统,是我们使用最多的一个服务,他的作用是将域名转换为IP地址

比如说www.baidu.com,这是一个域名,我们的DNS就是将域名解析为IP地址,也就是这一步解析是在访问网站之前执行的

有的时候电脑会出现这样一个问题:QQ能够登陆,但是直接输入域名不能上网。

其实QQ也是一样的,它首先根据域名来解析地址,假如域名解析错误,那么就通过IP直接访问

域名是全球唯一,在使用之前需要在互联网上进行注册

域名

  • 根:域名的根是从点开始的,也就是.
  • 顶级域名:有comedunetcnorggov
  • 二级域名:比如baidu

Google的DNS服务器:8.8.8.8

电信的DNS服务器:222.222.222.222

DHCP

动态主机配置,请求分配IP地址

静态IP地址

很经典的,计算机比较固定,比如说学校机房,固定的计算机在固定的地方

动态IP地址

我们比较常见的就是动态的IP地址,因为我们的电脑不知道啥时候搬走了

DHCP服务器其实就是给计算机分配IP地址的,假如有多个DHCP服务器给一个计算机分配地址,那么计算机还要选择

其实DHCP服务器是比较重要的,他需要正确不出错,否则假如有一个服务器分配了错误的网段,那就上不了网了

FTP

文件传输协议,在网络上大部分的传输文件都是使用FTP协议

FTP建立连接有两种方式:

1、主动模式

FTP客户端告诉FTP服务器客户端使用什么端口去,然后FTP服务器和FTP的客户端上的这个端口主动建立链接

2、被动模式

FTP服务器开放了一个端口,FTP客户端去连接FTP服务端

FTP的服务器端如果有防火墙,那么我们需要开放21和20端口,使用主动模式进行数据传输

有人问为什么不用被动模式?因为防火墙

端口只能在一段时间内被一台客户端链接

假如现在使用被动模式,那么又来了一个计算机,还要在防火墙上再打开一个端口吗?那岂不是防了个寂寞

FTP的连接方式有几种,分别为:

1、控制连接,默认使用端口21,用于发送FTP命令信息

2、数据连接:默认使用端口20,用于数据的上传和下载

FTP的传输模式有几种:

1、文本模式:使用ASCII模式,用文本序列传输数据

2、二进制模式:使用Binary模式,用二进制序列传输数据

TELNET

远程终端协议,默认使用23端口,就是说我可以在这台电脑上敲命令,然后通过网络发送到目标电脑上去执行

我们使用的XShell就是这样

RDP

远程桌面协议

HTTP

超文本传输协议,是我们使用的最多的协议

电子邮件

SMTP叫做简单邮件传输协议,用来发邮件

POP3和IMAP是收邮件的协议,其中IMAP更强大

发邮件的流程:

1、写邮件,点击发送,使用SMTP协议

会首先发送到一个中继发件箱,这个过程叫做邮件的中继

这个过程中需要身份验证,从我们的角度上来说就是需要账号和密码

这个过程一定是需要身份验证的,否则会诞生一堆妖魔鬼怪,什么内容都发送,到处给别人发邮件

2、邮件会到达一个中继的发件箱,使用这个中继节点和SMTP发送出去

也就是说,平常我们发送邮件不是真正的发送邮件,而是首先要到达一个中继节点,通过这个节点来发送邮件

这两次的发送都是使用SMTP协议

从中继节点发送邮件是匿名的

3、目标使用POP3或者IMAP收邮件


网络安全

网络安全介绍

安全包括哪些方面

1、数据安全

2、应用安全

3、操作系统安全

4、网络安全(我们这一章讲)

5、物理安全

6、用户安全教育

计算机网络上面的通讯面临以下四种威胁

1、截获

2、中断

3、篡改

4、伪造

两类加密技术

加密技术分为两大类:

1、对称加密:加密和解密是一个密钥

2、非对称加密:加密和解密不是一个密钥,是一个密钥对,分为公钥和私钥

这个公钥私钥是一对的,没有规定是谁加密,谁解密

假如是公钥加密的,那么就私钥解密

假如是私钥加密的,那么就公钥解密

并且,知道了一个密钥,也推到不出另一个密钥

从这个描述上来看,很显然是非对称加密是更高级的,对称加密缺点太大,只要截获密钥就和没加密一样

但是对称加密比非对称加密简单

但是我们说,既然都要用到加密了,你还在说这个加密是不是简单,那简单就可能被简单破解

但是又回来说,只要这个加密密钥不被截获到,对称加密还是非常好的

非对称加密细节

其实我们说对称加密其实更快,但是非对称加密更安全

那么对于大量的数据来说,其实非常难以选择,因为非对称加密时间上更多,更复杂

但是小孩子才选一个,大人全都要

具体的步骤是:先使用对称加密来加密我们需要的文件或者数据,然后使用非对称加密密钥来加密对称密钥

这就是全都要,混合了两者的优点

数字签名

签名的意思本质上来说其实就是让有权限的人确认一个信息,比如说员工报销一定的金额,领导同意了,那就签个名

然后只有有这个签名的报销才能有效

在计算机中,数字签名的作用和我们真实世界中的签名是一样的作用

数字签名能够检查签名之后,内容是否被更改,是不是这个开发者或者某个团队的开发内容

比如我们在下载某些软件的时候,有时候会弹出一个对话框,提示签名已经被更改,那这就说明不是原开发者开发的内容

数字签名的实现:现在有公司A和公司B进行合作

1、公司A有一对非对称加密函数,有一对公钥和私钥,有一些数据X

2、将数据使用一个叫做单向散列函数进行处理,生成一个128位的摘要Y,这个摘要Y可以理解为数据的指纹

3、使用公司A的私钥进行加密,加密之后得到的内容就是数字签名

4、公司B也有相同的原数据X,进行相同的单向散列函数之后得到摘要Y

5、公司A将数字签名发送给公司B

6、公司B使用公钥将数字签名解密,查看摘要Y是否相同,假如相同则证明数字签名是正确的

证书颁发机构

现在有一个问题,公司A和公司B要进行合作,数字签名十分正常,但是要签合同的时候公司A忽然来了一句:这不是我的数字签名,这个公钥和私钥也不是我的,那公司B就傻了

再比如,我自己做一个身份证,给别人看,别人信不信?其实是不信的

那么我们就需要一个机构来为这些公司进行背书,保证这些公司是可信的

这个机构在网络上就是证书颁发机构,我们称为CA

证书颁发机构颁发一个证书,同样靠的是我们的非对称加密,颁发出来的证书给各个公司

各个公司拿到证书之后,以后在交易的时候不仅给别人看自己的数字签名,也要给别人看数字证书,只有从CA中拿到的公钥可以顺利解锁,才说明这个企业是合法的

那么其实这个证书的颁发机构必须要足够强大,能让所有的公司能够信任

安全套接字SSL

SSL在应用层和传输层之间,但是它还是属于应用层安全

他的作用就是应用层在交给传输层数据的时候进行一次加密和解密处理

SSL加密我们在平常上网的时候经常使用,其实就是https开头的协议,至于传统的http其实是没有进行加密的

那么SSL密钥是怎么配置的?密钥传输的时候不怕截获吗?

那么其实就是使用的非对称加密+对称加密

1、现在有客户端A,服务器B,客户端要访问服务器

2、服务器B产生一对公钥和私钥,然后将公钥通过网络的形式传输给客户端A

3、客户端收到了公钥,生成一串对称加密的密钥,然后使用公钥加密这个对称加密的密钥

4、客户端将加密之后的对称性加密密钥传输给服务器

5、服务器使用私钥解密,得到对称性密钥

6、双方约定成功,则使用此对称性密钥进行来往加密和解密

那么除了HTTPS使用这样的加密方式,其他的协议也有这种加密,比如imap升级称为imaps,pop3升级为pop3s

那么使用了安全协议之后,占用的端口:

IMAPS使用 TCP的993端口

POP3S使用 TCP的995端口

SMTPS使用 TCP的465端口

HTTPS使用 TCP的443端口

那么SSL提供以下三个功能:

1、SSL服务器鉴别

2、加密的SSL通话

3、SSL客户鉴别