0.OSI七层模型
自己的理解:应用层:生成HTTP请求报文-----表示层:将请求报文转换成适合网络传输的数据格式,加密压缩编码等-----会话层:管理两个应用程序之间的会话,包括连接中断等------传输层:实现端到端通信(主机到主机),但它的职责不仅仅是主机到主机之间的通信,还需要确保数据能够被正确的应用程序接收。所以将数据分成更小的数据段(
- 适应MTU限制:分段可以确保数据能够在网络中传输,而不会因为过大而被拒绝传输。
- 提高可靠性:分段减少了重传的开销,提高了错误处理的效率。
- 流量与拥塞控制:分段有助于动态调整传输速度,避免网络拥塞。
- 网络兼容性:分段提高了数据在不同类型网络中的传输兼容性。)
,并分别加上端口号,以使其到达正确的应用程序------网络层:给数据段加上网络IP地址,并且选择最佳路由------数据链路层:可靠传输、差错检测、封装成帧-----物理层:将数据转换成适合在网线中传输的电信号。
另外,数据链路层也会和传输层一样进行校验、流量控制,但是针对的对象、作用是不一样的。传输层实现的是端到端的通信,数据链路层实现的则是点对点的通信。点对点一般指设备相连,是局部的,而端到端则可能是跨越了全局网络,中间会经历多次路由器和交换机。
另外,物理层是用什么传输介质、什么物理接口、什么信号表示0和1,解决了两台计算机可以通过信号来传输比特0或1。数据链路层是如何标识MAC地址,如何从比特流中区分地址、数据,如何协调主机争用主线,实现了分组在一个网络上传输。网络层如何标识IP地址,如何路由选择,解决了在多个网络上传输的问题。传输层确定哪个进程通信,解决传输错误问题。应用层制定网络协议,编写网络应用,来实现特定的网络功能。
通过IP地址确定目标主机所在的局域网,然后通过ARP协议把IP地址对应的MAC地址找到,然后在同一片网络中找到目标主机。IP地址的前三个数标识网络,后一个数标识主机。
OSI七层模型的功能概述
-
物理层:负责物理设备之间的原始比特流的传输,包括电缆、网卡等硬件。它定义了接口类型、电压、电流等物理特性。
-
数据链路层:负责节点之间的可靠传输,包括错误检测与纠正、帧的创建与识别、流量控制等。数据链路层将数据封装成帧并通过物理层传输。
-
网络层:负责数据包的路由与转发,决定数据如何从源节点到达目标节点。典型的协议如IP(Internet Protocol)。
-
传输层:提供端到端的通信服务,确保数据的完整性和可靠性。主要协议包括TCP(传输控制协议)和UDP(用户数据报协议)。
-
会话层:管理会话,建立、维持和终止通信会话,确保数据交换的有序性。
-
表示层:处理数据格式的转换,确保发送端和接收端能够理解数据的格式。它涉及数据的加密解密、压缩解压等。
-
应用层:直接为用户或应用程序提供网络服务,如电子邮件、文件传输等。应用层是用户与网络的接口。
通过例子说明七层模型的作用
假设你在计算机上使用浏览器访问一个网站(比如打开一个网页),从输入网址到网页显示在屏幕上的过程,可以说明OSI模型各层的作用:
-
应用层:你在浏览器中输入网址并点击“回车”,浏览器(作为应用层)生成一个HTTP请求,这个请求包含你想要访问的网页地址。
-
表示层:在发送HTTP请求之前,表示层负责将请求数据转换为可以被网络传输的格式,可能还会进行数据的压缩和加密。
-
会话层:表示层之后,会话层建立一个通信会话,这个会话保证请求和响应之间的数据交换有序且同步。
-
传输层:会话层之后,传输层将数据分成更小的数据段(如TCP段),并为每个数据段加上端口号,以确保数据能够传输到正确的应用程序。
-
网络层:传输层之后,网络层根据目标网址的IP地址(通过DNS解析获取)为每个数据段加上源和目标IP地址,并选择最优路径将数据段发送到目标服务器。
-
数据链路层:网络层之后,数据链路层将数据段封装成帧,并通过物理介质(如网线)传输。数据链路层还负责检测和纠正物理层传输中可能出现的错误。
-
物理层:最终,物理层将数据帧转化为电信号,通过网络电缆或无线信号发送到目标服务器的物理设备。
目标服务器接收到这些信号后,会逆向处理这些层,从物理层到应用层,将最终的HTTP响应发送回你的浏览器,浏览器再将网页显示在屏幕上。
1.UDP头部格式
UDP的头部比较简单,只有8个字节,这也是为什么UDP不能像TCP那样实现可靠传输的原因。源端口和目标端口表示数据传输的来源和去向,包长度表示数据报文的总长度(包含了头部和数据部分),方便接收方正确地处理数据。检验和则是用于验证UDP数据报在传输过程中是否发生了错误。它帮助确保数据的完整性。
2.TCP头部格式
TCP的头部一般是20个字节,复杂的头部决定了它的可靠传输。校验和保证了数据的完整性和错误检测;序列号进行了数据的顺序控制;ACK实现了重传机制,确认和重传;滑动窗口进行流量控制;拥塞控制;三次挥手和四次握手进行连接管理。
3.IP地址
IPV4地址,四位,主机号全为0的是网络地址,全为1的是广播地址。A类,第一位范围1-126,127是本地环回测试地址。后三位范围是1-2^24-1,全1表示广播地址。
网络号是IP地址中的一部分,用于标识某个特定的网络。相同网络号的设备处于同一网络中。主机号是IP地址中的另一部分,用于标识网络内的具体设备(主机)。网络地址是指IP地址中主机号部分全为0的地址,它标识的是整个网络,而不是网络中的具体设备。广播地址是指IP地址中主机号部分全为1的地址,用于向网络中的所有设备发送信息。
4.流量控制
滑动窗口机制中的流量控制主要依赖接收方的接收窗口大小来调节数据传输速率。
-
接收窗口大小的动态调整:
- 接收方在接收到数据包后,会根据当前缓冲区的可用空间和处理能力来决定是否调整接收窗口的大小。如果接收方的缓冲区空间充足且处理能力良好,它可能会增大接收窗口的大小,允许发送方发送更多的数据包。反之,如果接收方的缓冲区接近满载,它会缩小接收窗口,以减缓发送方的数据传输速度。
-
通过ACK通知窗口大小的变化:
- 每当接收方收到数据包并处理完毕后,它会发送一个ACK(Acknowledgment,确认)消息回给发送方。这个ACK消息不仅确认了已成功接收的数据包,还携带了一个重要的字段:接收窗口大小(Receive Window Size)。
- 这个字段明确告知发送方,接收方当前还能接收的数据量是多少。比如,如果接收窗口大小是500字节,发送方就知道它最多还能发送500字节的数据而不必等待进一步的ACK。
- 如果接收方的缓冲区快要满了,它会在ACK消息中报告一个较小的接收窗口大小,通知发送方降低数据传输速率,避免缓冲区溢出。
5.拥塞控制
慢开始、拥塞避免、快重传、快恢复。
TCP发送方一开始使用慢开始算法,让拥塞窗口值从1开始按指数规律增大,当拥塞窗口值增大到慢开始门限值时,执行拥塞避免算法,让拥塞窗口值按线性加1的规律增大,当发生超时重传时,就判断网络很可能出现了拥塞,这时将慢开始门限值更新为发生拥塞时拥塞窗口值的一半,并将拥塞窗口值减少为1,并重新执行慢开始算法,拥塞窗口值又从1开始按指数规律增大,当增大到了新的慢开始门限值时,停止使用慢开始算法,执行拥塞避免算法。
后来又加入了快重传和快恢复,快重传是指收到三个重复确认。快恢复是指快重传之后门限值更新发生拥塞时拥塞窗口值的一半,并将拥塞窗口值也更新为发生拥塞时拥塞窗口值的一半,而不是更新为1。
6.三次握手
第一次握手发送端向接收端发送请求连接SYN,接收端收到,并且得知发送端具有发送能力。第二次握手接收端向发送端发送确认连接ACK,发送端得知接收端具有接受能力,并且向发送端发送请求连接,发送端收到,得知接收端具有发送能力。第三次握手,发送端向接收端发送确认连接,接收端得知发送端具有接收能力。这样一来,两端都知道对方具有发送和接收能力,两端建立连接可以正常的传送数据。三次握手才能确认双方的接收和发送能力是否正常。
如果是两次握手,如果某次发送的报文因为网络延误了,又重新发送了一次连接,延误的发送在重新的连接释放之后才到达服务端,这时候服务端会认为发送端又发送了一次连接请求,于是向发送端发送确认请求,同意建立连接,但客户端实际并未发送,所以忽略请求,于是服务端一直等待,浪费资源。
7.四次挥手
通过四次挥手的过程,TCP协议确保了双方都能够正常地关闭连接,并且所有未完成的数据传输都能顺利结束。第一次挥手:客户端发送FIN,表示没有数据要发送了。第二次挥手:服务器发送ACK,确认收到FIN请求。第三次挥手:服务器发送FIN,表示没有数据要发送了。第四次挥手:客户端发送ACK,确认收到服务器的FIN请求,连接关闭。
8.HTTP请求方法
应用层产生的请求报文里面会含有请求行、请求头、请求体(post会有,get没有),
- 请求行:包括请求方法、请求 URI 和 HTTP 版本。
- 请求头:提供关于请求的附加信息,例如主机名、用户代理、接受的内容类型等。
- 请求体:包含要发送给服务器的数据,适用于需要提交数据的请求方法如
POST
和PUT
。
GET POST PUT PATCH TRACE OPTIONS CONNECT HEAD DELETE
9.HTTP状态码
1XX 信息性状态码 接收的请求正在处理,正常,继续;
2XX 成功状态码 请求正常处理完毕; 200 204 206
3XX 重定向状态码 资源位置发生变化,需要新的URL; 301 302 304
4XX 客户端错误状态码 服务端无法处理客户端的请求;400 403 404
5XX 服务端错误状态码 服务端在处理请求时自身错误; 500 501 502 503
10.HTTP协议的几个版本
HTTP1.0 短连接,请求响应模型,多媒体 (支持文本、音视频等),简单易用,扩展性,但是短连接导致效率低、延迟高、浪费资源,无持久连接导致没法在同一个连接中处理多个请求;
HTTP1.1 持久连接,请求管道化,缓存控制,性能提升,带宽利用率高,更灵活的请求处理,但是管道化局限,队头阻塞;
HTTP2 二进制格式,头部压缩,多路复用(流),服务器推送,但复杂性增加,基于TCP(仍受到握手、丢包重传等限制);
HTTP3 基于QUIC协议,更快的连接建立,改进的流量控制,内建的加密,性能卓越,但是依赖基础设施,实现复杂。QUIC允许对每个流单独进行流量控制,而不仅仅是针对整个连接进行流量控制。这样可以更好地适应不同流的数据传输需求,提高传输效率。
11.GET和POST的区别
1. 用途:GET用来请求数据,POST修改/提交数据;
2. 数据传输方式:URL传递,请求体传递;
3. 安全性:URL上数据可见,请求体内稍微安全一些,但是都不安全,HTTP明文;
4. 幂等性:GET每次请求都会得到相同的数据,POST每次创建则会产生不同的资源;
5. 数据大小限制:URL长度限制,请求体可以大数据;
6. 缓存:GET每次请求可以缓存下来,方便下次请求,POST每次创建不同,不缓存;
7. 语义安全:GET修改服务器数据,POST不修改。
12.HTTP缓存方式
1. 强制缓存(HTTP1.0 Expires
头部字段,绝对时间,HTTP1.1 Cache-Control
头部字段,更灵活)
优点是在缓存有效期内,浏览器无需与服务器通信,直接使用本地缓存资源,提升加载速度。缺点是如果资源在缓存期间发生了变化,用户可能无法及时获取到最新的内容。
2. 协商缓存是指浏览器每次请求资源时,都会先向服务器询问资源是否已经更新,如果没有更新,则继续使用缓存。如果更新了,则下载新的资源。
优点是既能减少不必要的数据传输,又能保证获取最新的资源。缺点是相比强制缓存,每次请求都需要与服务器进行验证,带来了一定的延迟。
13.HTTP和HTTPS
区别:安全、连接、端口、证书
1. HTTP超文本传输协议,明文,不安全。HTTPS在TCP和HTTP之间加入了SSL/TLS安全协议,使得报文能够加密安全传输。
2. HTTP只需要三次握手就能建立连接,HTTPS则还需要SSL/TLS握手。
3. 端口号80与443。
4. HTTPS需要向CA申请身份证书,来保证服务器是安全可靠的。
14.HTTPS能解决什么问题
信息加密解决安全机密,校验机制解决篡改信息,身份证书解决不可信服务器。