纯手工总结超详细关于计算机网络的五层知识点,看看你都掌握了没
文章目录
- 纯手工总结超详细关于计算机网络的五层知识点,看看你都掌握了没
- 1.应用层
- 1.1 HTTP协议
- 1.1.1 URL
- 1.1.2 HTTP方法
- 1.1.3 HTTP请求
- 1.1.4 HTTP状态码
- 1.1.5 HTTP会话保持
- 1.2 HTTPS协议
- 2.传输层
- 2.1 UDP协议
- 2.1.1简介
- 2.1.2 UDP协议报头格式
- 2.2 TCP协议
- 2.2.1 简介
- 2.2.2 TCP协议报头格式
- 2.2.3 TCP三次握手四次挥手
- 2.2.4 滑动窗口
- 2.2.5 拥塞控制
- 2.2.6 延迟应答
- 3.网络层
- 3.1 IP协议
- 3.1.1 IP协议报头格式
- 3.1.2 IP地址
- 3.1.3 解决IP不够用的方法
- 3.2 ICMP协议
- 4.数据链路层
- 4.1 以太网
- 4.1.1 以太网的帧格式
- 5.物理层
计算机网络是现代不可或缺的一个技术点,也是随着万物互联所发展的一个必然趋势。
关于计算机网络,前有OSI(Open System Interconnection)模型将网络从低到高划分成了七个网络层次。但是按照逻辑来讲,我更喜欢将其按照逻辑上精确划分成五大部分:物理层、数据链路层、网络层、传输层、应用层。这五个层级相互依存相互配合,构成了我们今天网络世界的蓝图。那么我们今天就按照这五层来具体罗列一下我们计算机网络的知识点!做到心中有图像,心中有知识。
1.应用层
应用层是用来满足用户日常需求的层级。下面有著名的HTTP和HTTPS协议。
1.1 HTTP协议
1.1.1 URL
http是一种超文本传输协议。具体来说我们平时所输入的网址URL就是由http相关协议来规定的。端口号往往是80。
1.1.2 HTTP方法
HTTP还具体划分有各种方法用来区分HTTP的提交格式。
具体最常用的就是GET方法和POST方法。
在用GET方法提交的HTTP不够私密,我们具体的用户私密数据如密码等容易回显到我们的网址上。
在用POST方法的时候提交的方式比GET方法更私密一点,例如登录注册的时候我们的私密数据会进行加密保存,但不是绝对安全。
1.1.3 HTTP请求
我们一份正式的HTTP请求的格式应该是:
首行:[方法] + [URL] + [版本]
Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束
Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有一个Content-Length属性来标识Body的长度;
但是我们在输入网页的时候不要这么麻烦是因为浏览器自动我帮我们填充了字段!可是正式格式却必须是这样
1.1.4 HTTP状态码
我们在访问网页的时候,如果访问失败了,有时候网页会给我们返回一个三位数字,例如下图的404:
实际上,返回的正是我们的HTTP状态码,404表示错误。具体如下:
简单总结来说:
1xx:正在处理
2xx:成功
3xx:需要额外的操作(重定向) --> 分为永久重定向和临时重定向
4xx: 客户端错误
5xx:服务端错误
1.1.5 HTTP会话保持
在HTTP协议中,我们有时候一个网页需要使用多次,如果按照往常的做法一直断掉再重连的话,就无法追踪用户的状态。于是HTTP会话保持就应运而生。例如我们在一个淘宝网站登录,则只需登录一次后即便关掉网页打开后还是有登陆状态而无需再次登录。
常用的会话保持机制:
cookie:cookie是用来存储用户信息,从而在文件级别上使得服务器能够再次识别客户端。
session: 类似于cookie,可是比起cookie,session一般习惯先创建session ID,之后再在后台保存起来。
1.2 HTTPS协议
HTTPS协议往往是在HTTP协议上增加了安全层级的加密层协议,保证了更为安全的操作。端口号往往是443。
如果说HTTP是以明文传输的,那么HTTPS就是以密文传输。也就是说HTTPS在安全性方面下足了功夫。
关于如何加密,我们一般是使用SSL协议加密通信。具体采用公钥加密(锁)与私钥(钥匙)配对的方式进行。
具体还有分为对称加密(加解锁都是同一个公钥)和非对称加密(反之)
具体安全措施还有:
数据摘要:利用Hash函数运算加密信息从而成为数字签名。
CA认证:有时候我们不知道服务器端是否安全,那么我们需要引入一种由第三方提供的权威认证叫做CA认证。对于认证通过的服务器端网页我们会颁发CA证书。证书中会包含服务器的公钥和相关信息,客户端在链接的时候会受到证书是否有效和可信。
2.传输层
传输层是用来具体将数据从A端发送到B端的一个层级。著名的UDP/TCP协议即于此。
2.1 UDP协议
2.1.1简介
UDP协议是计算机网络传输层的一种协议。它提供了一种无连接、不可靠、面向数据报的传输机制。
面向数据报:数据分成一个个独立的数据包往外发送,每个包都是实体且独立。但是显然不够灵活。
我们在网络传输过程中,数据是以报头 + 有效载荷的形式发送的,报头中包含了发送数据的相关信息。当我们还未发送的时候,数据都是存在发送缓冲区和接收缓冲区的。但是UDP协议没有真正意义上的发送缓冲区。因为udp如果调用发送的sendto,内容会直接交给内核处理!
那么数据如果发送过去了我们面临的一个问题是:报头和有效载荷该如何分离呢?
在UDP下,我们UDP报头有固定长度,即前8字节都是固定为报头的,这意味着我们拿到数据后直接取前8字节数据为报头,后面即为真实数据的有效载荷。
2.1.2 UDP协议报头格式
整个UDP报头占8字节。在协议格式的下图中我们看的非常清楚,包含了我们从哪里来(16位源端口号),说明了我们要往哪里去(16位目的端口号)。我们的数据有多大(16位UDP长度),以及确认我们发送过程中没有丢失数据(16位校验和)
2.2 TCP协议
2.2.1 简介
TCP协议也是一种传输层的协议,但与UDP协议相反,TCP提供了一种可靠、有连接、面向字节流的传输机制。
面向字节流:发送数据时,数据被视为一串连续而灵活的字节流,这意味着可被拆分成任意TCP段。数据太长,则拆成多个数据包,数据太短则等缓冲区到达一定长度后再发送。这样TCP发送时读与写就无需一一匹配了,灵活性大大提高。
TCP的可靠不仅仅体现在有连接、面向字节流,还有更多后文要提到的滑动窗口、拥塞控制等一系列的机制,可以说,TCP协议的生态是非常好的,在整体的安全性、便捷性、错误反馈性上都比UDP要好很多。
那么我们讲了面向字节流,那么我们的TCP有连接体现在哪里呢? 体现在我们接下来要讲的连接断开方式:TCP三次握手连接四次挥手断开。
2.2.2 TCP协议报头格式
整个TCP报头占20字节。在如下图的TCP报头格式中我们发现条目比UDP更多了,除了包含应该有的:我们从哪里来(16位源端口号),说明了我们要往哪里去(16位目的端口号),确认我们发送过程中没有丢失数据(16位校验和),还有确认数据的发送与接收顺序(32位序列号与确认序列号),还有我们根据对方接收能力确认流量(16位窗口大小)等等
其中很重要的一点是TCP没有UDP中有的数据总长度字段,这是为什么呢?
A:因为TCP是面向字节流的,在发送数据的时候数据被视为一个连续的字节流而不是被固定分割,这意味着数据可以被任意拆分成TCP段,每个段都包含头部信息。既然可以被随意拆分,那么就没有必要加入总长度这种字段了,这也是面向字节流的一种体现!
2.2.3 TCP三次握手四次挥手
三次握手指的是连接,四次挥手指的是断开。
首先我们要知道计算机网络中,未能发送到对方主机的数据行为叫丢包,那么为了避免丢包我们很好的解决方案是引入确认应答机制,收到后发送收到的消息,即让客户端知道已收到就能避免丢包。那么我们三次握手四次握手的连接过程必定也少不了应答。
可是我们怎么标识应答呢? 所以我们在TCP中引入了标志位,用ACK来标识应答,相同的还有用SYN来请求连接,用FIN来请求断开。
三次握手:
1.客户端发送连接请求(SYN)。
2.服务端收到请求后响应(ACK),并且同时请求客户端连接(SYN)。
3.客户端收到请求后也响应(ACK)。
至此,一个最基本的连接就连接上了。我们要知道三次是连接的最少次数。那么少一点次数和多一点可不可以呢?
首先,少于三次连接肯定是连不上的,因为我们刚才说了,三次是通信连接的最低成本,就像男女生告白场景
男生: 可以做我女朋友吗?
女生:可以,什么时候开始?
男生:就现在!!
这三次至关重要的响应回答一次都不可缺少!否则连接失败
高于三次后,我们将次数分为奇数和偶数
高于三次偶数次握手不可以! 因为你会发现所有偶数次握手,最后一次发送消息的一定是服务端,而服务端往往面临成千上百个用户,这样就会造成server端繁忙,甚至导致SYN洪水问题(伪造SYN请求耗尽计算机资源),从而容易受到外部攻击。
但是高于三次奇数次可以,但是没必要,因为三次能完成的连接为什么要多次呢?
四次挥手:
1.客户端发送断开请求(FIN)。
2.服务端应答请求(ACK)。
3.服务端也发送断开请求(FIN)。
4.客户端应答请求(ACK)。
四次挥手分别是客户端和服务端的两次请求断开和应答。断开连接是由于双方地位对等,必然需要双方各请求与应答一次才行。否则只是断开了一方发送数据的权利另一端还可以发送的话就不叫断开连接了。
在挥手中值得我们注意的是双方的状态变化:
Client发送后变为FIN_WAIT_1状态,服务端接收后直接成为CLOSE_WAIT状态
服务端发完后变为LAST_ACK状态,后客户端接收到变为TIME_WAIT状态
最后都变为CLOSED状态。
2.2.4 滑动窗口
滑动窗口是一种流量控制的可靠数据传输机制,常用于TCP协议中。
我们都知道在TCP中有发送缓冲区和接收缓冲区,而滑动窗口就是发送缓冲区的一部分。其有发送窗口和接收窗口。
当接收方受到数据包后,向发送方发送应答ACK,标识成功接收到数据,之后发送方会向前滑动窗口,并准备发送下一个窗口的数据包。
说到底,滑动窗口本质就是一段char型的指针数组,而滑动就只是修改下标指针的指向而已。
那么如果说为什么滑动窗口能进行流量控制,我想是因为每个窗口大小都是提前固定好的,都是按照规定发送一个个窗口的数据包而无法越过窗口大小进行超量传送。
不过滑动窗口的发送能力也是结合着许多因素,就比如下面我们要谈的拥塞控制的相关因素。
2.2.5 拥塞控制
当因为网络问题而出现大量丢包的时候,此时的网络就称为网络拥塞,发送方会等待合适时机再择机发送。
当发生拥塞,TCP会引入慢启动机制,也就是先发送少量数据探探路,再按照拥塞情况择机添加或者减少数据发送,那么这个增长或者减少倍数往往是指数级别的,能够在较短时间增加或减少到一个相当高的数量级,之后再恢复平稳增长或减少。
也就是说我们拥塞窗口大小是变化的,所以结合以上的滑动窗口可知,滑动窗口发送的数据量 = min(对方接受能力,拥塞窗口)。
2.2.6 延迟应答
最后我们要提到一个保证TCP性能的机制是:延迟应答。
如果接收数据主机立刻返回应答ACK,那么返回的窗口就比较小,因为反应速度快了,所以我们一般延迟应答就能保证返回的吞吐量大,从而通信效率变高。
3.网络层
网络层是用来具体确认传输路径的层级。著名的IP/ICMP协议即坐落于此。
3.1 IP协议
如果说TCP协议是制定协议大方向的话事人,那么IP协议就是具体完成任务的打工人。也就是说,TCP提供执行策略和能力,
IP具体执行。
在IP协议中,我们常谈到一个概念:分片,指的是**当一个IP数据报报大小超过最大传输单元后会将原始数据报切分成多个较小片段进行传输的过程。**这是IP中最常使用的策略之一,在下面我们会具体谈到。
3.1.1 IP协议报头格式
IP协议报头一般20字节。也包含我们从哪里来(32位源IP地址),要到哪里去(32位目的IP地址),数据有多大(16位总长度),数据是否完整(16位首部校验和),多了:指定服务类型(8位服务类型),分片的片偏移量(13位片偏移),到底要不要分片(3位标志)等
3.1.2 IP地址
谈到IP协议我们就不得不谈到IP地址了。一般地,IP地址 = 目标网络 + 目标主机。例如:192.168.128.10中,192.168.128叫做目标网络,10叫做目标主机,一般IP地址的范围是从0.0.0.0到255.255.255.255。其中有一些特殊用途的IP地址:
一、127.0.0.1 表示本地主机,叫做本地环回,内部是从自顶向下交付后再自下向上返回一遍,不做数据交换,所以叫本地环回。
二、拥有以下格式IP的都是用于组建局域网的私有IP地址:
Ⅰ 10.*
Ⅱ 172.16. ——172.31.
Ⅲ 192.168.*
3.1.3 解决IP不够用的方法
既然IP地址上限只到了255,那么面对全球成千上亿台3设备,IP地址就必然不够用了,那么为了解决IP不够用我们有哪些解决策略呢?
第一点:
CIDR技术标准引入了子网掩码的概念,将IP地址 & 子网掩码 = 网络号,相当于一个真正使用的网络号不仅仅由IP地址评判,也加上了子网掩码这种32位正整数的量来衡量,这样一来,可以使用的IP地址就从2的32次方再次幂上了子网掩码的2的32次方,正好较好的解决了不够用的方法。
例如: 140.252.20.68 & 255.255.255.0 = 140.252.20.0
第二点:
IPV6协议被设计之初衷就是用来解决IPV4数量不足的问题,IPV6使用128位地址分配,理论上可以提供340万亿亿个IP地址。
第三点:
NAT技术是路由器一个重要的功能,用来尝试解决IP地址不够用的问题。原理通过将私有IP和全局IP互相动态转化的原理实现。
第四点:
私有网络或者局域网的部分网段可以重复。在同一个局域网中,我们通常可以将不同设备的网络号标成一致而主机号不一致。这样就可以用最小代价来表示不同主机,同时我们的部分网段也得到了重复利用。
3.2 ICMP协议
ICMP协议是主要提供网络测试的一种协议。最有名的测试网络联通状态的ping命令即来源于此。而且ICMP协议是基于IP协议工作的。
它的主要功能是:
1.确认IP数据包是否到达
2.如果包被丢弃,那么告知原因
在这里面试官喜欢挖坑问:ping是什么端口? 千万注意,这是圈套!! 因为两者根本不在同一层!
ping是ICMP网络层协议,而谈论端口一般是传输层协议,根本不在同一个维度上,ping不关心这些内容!!
4.数据链路层
数据链路层是用来确认两个主机或者节点之间来进行数据交互的层级。著名的以太网就是它的缩影。
4.1 以太网
以太网是一种技术标准,也是最广泛的局域网技术,规定了例如网络拓扑结构,传输速率等,还规定了以太网中的网线必须是双绞线等。
在数据链路层中,MAC硬件地址是用来表示局域网中唯一主机的重要标识。硬件地址例如:00:1A:2B:3C等
4.1.1 以太网的帧格式
首先MAC帧或者说以太网帧是一种数据单位,是用来在局域网中传输数据。
在格式中,我们依旧发现了我们熟悉的我们从哪里来(源地址),要到哪里去(目的地址),以及有效载荷数据等。
但是我们在数据链路层真实传送数据的已经不是IP地址了,而是MAC帧。那么我们要通过MAC帧发送数据就要封装MAC帧,那么我们具体封装MAC帧的MAC地址从哪里来呢? 答案是:通过ARP协议将IP地址转换成MAC地址进而封装MAC帧发送数据。
ARP协议是在数据链路层中,专门将IP地址转化为MAC地址从而封装MAC帧发送数据的协议
5.物理层
计算机网络的物理层是网络协议栈中的最底层,负责实际的物理传输和信号传输,以及接口和介质的规范。物理层主要关注的是如何在物理媒介上传输原始比特流。
在物理设备上,有网卡、路由器、转换器等。其中我们之前提到过的路由器NAT技术也是解决IP地址不够的一大法宝之一。
以下是物理层的主要功能和特点:
- 传输介质:物理层定义了数据传输所使用的物理介质,如双绞线、同轴电缆、光纤等。它规定了传输介质的特性、连接方式和传输速率。
- 数据编码和调制:物理层负责将数字数据转换为模拟信号以供传输,并在接收端将模拟信号转换回数字数据。这包括数据编码和调制技术,如将比特转换为电压、频率或光强度等。
- 传输方式:物理层定义了数据的传输方式,包括串行传输和并行传输。串行传输是逐位地发送数据,而并行传输是同时发送多个比特。
- 时钟同步:物理层需要确保发送方和接收方的时钟同步,以便正确地解释传输的比特流。时钟同步可以通过在数据中引入时钟信号或通过特定的同步协议来实现。
- 基本连接方式:物理层规定了设备之间的基本连接方式,如点对点连接、多点连接和广播连接。
- 数据传输速率:物理层定义了数据传输的速率,即比特率。它决定了在给定的时间内可以传输的比特数量。
- 链路管理:物理层负责管理链路中的物理连接、插拔和识别设备之间的连接状态。
总之,物理层提供了网络中各种设备之间的物理连接和数据传输的基础。它确保了可靠的信号传输和物理介质的适配,为上层的数据链路层和网络层提供了可靠的传输基础。