OSI七层模型
第一层:物理层
规定一些通信设备的机械的、电气的、功能的特性,比如尺寸规格 引脚数量等。这一层数据的单位是比特(bit)。
第二层:数据链路层
物理层的介质是不可靠的,例如光信号、电信号什么的容易受到别的信号或者什么的干扰,而导致数据有差错,要通过数据链路层提供可靠的传输。而且物理层只管传输,他只听命令说要发给谁就发给谁,而不管怎么去知道发给谁;也不管发的是什么,是有用的信息,让它发乱码它也发。 数据链路层的主要作用是:物理地址寻址(知道要发给谁;MAC地址),数据成帧,流量控制,数据检错、重发(可靠的传输)等。
成帧:一是加上头部,能够识别出来这段数据是谁发给谁的;另外也是以帧为单位更容易进行数据的检错【错了请您指点,谢谢】
第三层:网络层
通信过程中,肯定要经过很多的链路 以及很多的子网,网络层的作用是搞清楚 两个计算机通信时,首先是哪两个子网要互通,然后知道要想从一个子网传到另一个子网,要经由怎样的路径过去。
第四层:传输层
通过网络层的信息 比如IP地址和子网掩码,我们能够确认是哪两个计算机在通信,但是现在计算机上有很多的通信软件,当计算机接收到一个IP数据包,它知道是发给它的,但是不知道是发给那个软件(端口)的,因此有了传输层的端到端的概念,首先传输层增加了端口,能够识别出来是计算机中那个软件(端口)发(接受)的消息。
【5-7层是我抄的】
第五层是会话层
这一层也可以称为会晤层或对话层,在会话层及以上的高层次中,数据传送的单位不再另外命名,而是统称为报文。会话层不参与具体的传输,它提供包括访问验证和会话管理在内的建立和维护应用之间通信的机制。如服务器验证用户登录便是由会话层完成的。
第六层是表示层
这一层主要解决拥护信息的语法表示问题。它将欲交换的数据从适合于某一用户的抽象语法,转换为适合于OSI系统内部使用的传送语法。即提供格式化的表示和转换数据服务。数据的压缩和解压缩, 加密和解密等工作都由表示层负责。
第七层应用层
应用层为操作系统或网络应用程序提供访问网络服务的接口。应用层协议的代表包括:Telnet、FTP、HTTP、SNMP等
下面学习一些比较常见的协议:
HTTP:
请求报文:
- 请求行:包括请求方法、URL、协议/版本
- 请求头(Request Header)
- 空行
- 请求数据
响应报文:
- 状态行
- 响应头
- 空行
- 响应正文
变化: 1.0 ====> 1.1
支持了长连接和请求的流水线处理,也就是说 一个TCP连接上可以传送多个HTTP请求和响应了,而不是每次请求都要招手挥手。当然要开启connection: keep-alive(默认的)。
HTTP 1.1状态代码及其含义
状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求
变化:1 ====> 2 (https)https://www.jianshu.com/p/52d86558ca57
多路复用 (Multiplexing)
多路复用允许同时通过单一的 HTTP/2 连接发起多重的请求-响应消息。在 HTTP/1.1 协议中浏览器客户端在同一时间,针对同一域名下的请求有一定数量限制。超过限制数目的请求会被阻塞。这也是为何一些站点会有多个静态资源 CDN 域名的原因之一,拿 Twitter 为例,http://twimg.com,目的就是变相的解决浏览器针对同一域名的请求限制阻塞问题。而 HTTP/2 的多路复用(Multiplexing) 则允许同时通过单一的 HTTP/2 连接发起多重的请求-响应消息。因此 HTTP/2 可以很容易的去实现多流并行而不用依赖建立多个 TCP 连接,HTTP/2 把 HTTP 协议通信的基本单位缩小为一个一个的帧,这些帧对应着逻辑流中的消息。并行地在同一个 TCP 连接上双向交换消息。
变化: HTTP ====> HTTPS https://zhuanlan.zhihu.com/p/72616216
http和https使用连接方式不同,默认端口也不一样,http是80,https是443。
一般http中存在如下问题:
- 请求信息明文传输,容易被窃听截取。
- 数据的完整性未校验,容易被篡改
- 没有验证对方身份,存在冒充危险
HTTPS使用了 SSL/TLS,通过SSL证书来验证服务器的省份,并且为通信加密
SSL(Secure Socket Layer,安全套接字层):1994年为 Netscape 所研发,SSL 协议位于 TCP/IP 协议与各种应用层协议之间,为数据通讯提供安全支持。
TLS(Transport Layer Security,传输层安全):其前身是 SSL,它最初的几个版本(SSL 1.0、SSL 2.0、SSL 3.0)由网景公司开发,1999年从 3.1 开始被 IETF 标准化并改名,发展至今已经有 TLS 1.0、TLS 1.1、TLS 1.2 三个版本。SSL3.0和TLS1.0由于存在安全漏洞,已经很少被使用到。TLS 1.3 改动会比较大,目前还在草案阶段,目前使用最广泛的是TLS 1.1、TLS 1.2。
HTTPS的通信过程:
- 首先客户端通过URL访问服务器建立SSL连接。
- 服务端收到客户端请求后,会将网站支持的证书信息(证书中包含公钥)传送一份给客户端。
- 客户端的服务器开始协商SSL连接的安全等级,也就是信息加密的等级。
- 客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。
- 服务器利用自己的私钥解密出会话密钥。
- 服务器利用会话密钥加密与客户端之间的通信。
DNS:
当客户端通过域名向服务端发送消息时,得先知道这个域名对应的IP地址是什么,因为下层协议是通过IP地址进行通信的。
DNS就是帮助查找某个域名的IP地址的。直接来看一下过程:
1. 查看浏览器本地的DNS缓存。如果有就直接返回。 这个缓存来自于上一次访问后查询到的IP地址,这上一次访问一定是在TTL(Time To Live),因为当一个缓存超过了这个时间,他就失效了。
2. 检查操作系统的缓存中是否有
3.请求配置好的DNS服务器
4. 还没有的话,配置的那个DNS服务器向根服务器请求(13台)
5. 根服务器也没有,会告诉本地DNS服务器,顶级域名的服务器的IP地址
6. 本地服务器访问顶级域名的服务器,下一步的权限服务器是谁
7. 本地服务器访问权限服务器,得到IP地址,返回给浏览器
TCP:
TCP数据包的结构: https://blog.csdn.net/baidu_17611285/article/details/80171239
前32位分别是发送方的端口号 和 接收方的端口号
32位序号(seq)是说 我这一方这一次要发送的数据包的编号是多少,首次通信时的序号是随机数
32位确认号(ack)是说 我这一方期待对方下次发来的数据报编号是多少
4位头部长度是说 我这个TCP头部一共有几个32bit(4字节),因为4位最多表示15,因此TCP头部最多60字节
6位保留位,必须为0
6个标志位:
- URG紧急指针是否有效
- ACK标志32确认号是否有效,当第一次握手时ACK为0 ,因为才第一次通信,发送发从未收到过接收方的消息
- SYN表示请求建立连接,前两次握手时SYN为1
- FIN表示通知对方本端连接要关闭了
16位窗口大小:指本端的TCP缓冲区还能容纳多少字节的数据
16位校验和:用于进行CRC算法,检查报文在传输过程中是否有损坏
16位紧急指针:
TCP头部选项:TCP头部的最后一个选项字段(options)是可变长的可选信息。这部分最多包含40字节,因为TCP头部最长是60字节(其中还包含前面讨论的20字节的固定部分)。
TCP三次握手 四次挥手
挥手的时候,在客户端接收到了服务端的FIN请求并回应后 要再等两个MSL(最大报文生存时间)才能CLOSE
TCP和UDP的区别
TCP需要建立连接,UDP不需要
TCP只能1-1,UDP可以1-1 多-多 多-1
发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付IP层。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。因此,应用程序必须选择合适大小的报文; 而TCP
TCP有缓冲窗口,拥塞控制,重传等机制
TCP拥塞控制
四种算法:慢开始,拥塞控制,快重传,快恢复
https://blog.csdn.net/qq_41431406/article/details/97926927