前言
OSI七层网络
|--------|------------------------------------------------------|----------------------------------|
| 名称 | 解释 | 协议 |
| 应用层 | 定义了各种应用协议的数据规范 | HTTP、HTTPS、SSL FTP、DNS TFTP、SMTP |
| 表示层 | 不同系统之间通信 | |
| 会话层 | 断点续传 | |
| 传输层 | 一个电脑有许多端口,根据端口找到发送方与接收方 确保数据包完整性 | TCP、UDP |
| 网络层 | ARP协议:通过IP地址获取对方的MAC地址 IP协议:逻辑寻址 和 路由 静态路由 与 动态路由 协议 | ARP IP 动态:RIP,OSPF,BGP |
| 数据链路层 | 帧:将比特流8位一组发送 MAC地址:计算机的唯一标识ID | |
| 物理层 | 传输比特流(01串) | |
一、TCP协议
TCP报文 = 报文头 + 数据部分
TCP报文头格式
ACK :确认位(这条消息是一条回复确认消息,确认号是有意义的)
RST :重置位(TCP连接中出现了错误,主机服务器崩溃,要求释放本连接)
SYN :同部位(表示这条消息是一条 1.发起连接 2.确认接受连接 的消息)
FIN : 终止位(表示本次报文发送结束 了,要释放这个连接,TCP四次挥手时)
ack确认号:告知对方,希望下次收到的包的序列号是多少
1.1 三次握手
客户端和服务器基于TCP协议的连接过程为 三次握手。
1.2 四次挥手
1.3 特点
TCP协议是建立连接的,是一种可靠的连接。
一段时间内如果没有收到正确的回执信息和确认号,则会重传。
相比于UDP协议,它可以保证数据传输拥有更好的安全性和完整性。
相比于UDP协议,他的开销更大,速度更慢。
HTTP、HTTPS就是基于TCP的。
二、UDP协议
UDP报文 = 报文头 + 数据部分
|--------|---------|--------------------------------------------------------------|
| 长度 | 名称 | 解释 |
| 16位 | 源端口号 | 表示发送端的端口号。 如果发送端不需要源端口号,这个字段可以设置为0 |
| 16位 | 目标端口号 | 表示接收端的端口号 |
| 16位 | UDP报文长度 | 包括头部和数据部分的总长度 最小值为8字节(仅头部) |
| 16位 | UDP校验和 | 用于检验UDP头部和数据部分是否在传输过程中发生了错误 检验和字段是可选的,但在IPv6 中是强制要求的 |
[UDP报文头]
2.1 特点
UDP协议是不建立连接的,因此尝尝出现丢包的现象,是不可靠的。
相比于TCP协议,它的发送速度更快。(流媒体、游戏、IP电话、流量大的需求)
相比于TCP协议,它的资源消耗小。
DNS域名解析协议就是基于UDP的。
三、HTTP协议
HTTP(Hyper Text Transfor Protocol)为超文本传输协议。
3.1 特点
HTTP协议基于TCP协议,默认端口为 80 (可靠协议)
HTTP协议用于规定客户端和服务器的数据传输格式
HTTP协议是一个基于请求与响应模式的、无状态的、无连接的应用层协议
HTTP协议发送的报文都是明文(未加密)的
3.2 请求
请求报文 :客户端 向 服务器 发送的请求信息
常见的请求方法 :
格式:(分为四部分)
<1> 请求行:请求方法 + URL(统一资源定位符) + HTTP协议版本号
cpp
GET /teams HTTP/1.1
<2>请求头部 :名称 **:**值
|--------------|-------------------------------------------|
| User-Agent | 客户端类型 |
| Accept | 客户端可以识别的内容类型 |
| Host | 请求的主机名 (不一定是IP地址,也可以是域名) |
| Cookie | 与服务器做交互,用于保持会话 (用户名 + 密码) |
| Content-type | 请求体的内容格式 |
| Connection | 值一般为keep-alive,保持TCP连接不关闭 (但不会长久保持连接) |
[常 用 需 要 掌 握 的 请 求]
<3>空一行:就是空出一行,表示请求头部结束了。
<4> 请求体:请求消息的正文内容。
注意:不是每个请求都有请求体,比如 GET请求一般没有请求体。
3.3 响应
响应报文 :服务器 向 客户端 发送的响应信息
响应格式:
<1> 响应行:HTTP版本号 + 状态码 + 解释状态码
cpp
HTTP/1.1 200 OK
|-----------|----------------------------------------------|
| 常用状态码 | 解释 |
| 1XX | 请求正在处理中 |
| 2XX | 请求成功处理完毕 200:请求成功 |
| 3XX | 重定向(转移到另外一个url上) 302:重定向 304:缓存(未改动) |
| 4XX | 客户端导致的错误 |
| 5XX | 服务器导致的错误 |
<2> 相应头部 :名称 : 值 (结束后也要额外空一行,表示头部结束)
|-------------|----------------------------------------------------------|
| Server | 服务器软件信息 |
| Data | 报文的响应时间 |
| Expires | 缓存的过期时间 |
| Set-Cookies | 通过服务器返回的文本设置cookies |
| Connection | 值一般为keep-alive,保持TCP连接不关闭 (但不会长久保持连接) (服务器可设置 --无连接) |
| | |
| | |
| Location | 重定向的新URL |
[常 用 需 要 掌 握]
<3>响应体:响应的正文内容
3.4 无连接
HTTP协议是一种无连接应用协议 :
-
限制每次连接只处理一个请求
-
服务器处理完客户端的请求,并受到客户端的应答后,立即断开连接
设计原因:最早是为了应对单个用户请求间歇性大的问题,但随着网页越来越复杂,因此添加
了connection字段(设置++connection : keep-alive++)。
使用方法 :1.开启:在请求中设置 ++connection : keep-alive++ 请求保持长连接 (HTTP1.1默认打开)
2.关闭:在请求头中设置 ++connection : close++ 关闭长连接
3.设置连接时间:
在请求头中设置 ++Keep-Alive : timeout = 5, max = 1000++
timeout:超时时间(秒),超过这个时间断开连接
max:最多连接次数,超过这个次数断开连接
3.5 无状态
HTTP是一种无状态应用协议:
- 服务器不知道客户端是什么状态
2.每个请求都是独立的,服务器回应后不会留下记录(如果要用之前的请求信息,需重传)
设计原因 :随着动态交互越来越多,重传严重浪费资源,因此设计了++Cookies++ 与++Session++
使用方法:
Cookies :将前面请求的信息保存成一个临时 文件++cookies++值,存放在浏览器中。
Session:相当于一个永久Cookies,关闭客户端依旧存在。
退出客户端后,信息将会以Session的形式保存在服务器,并返回一个Session ID
给客户端。客户端会将Session ID保存在内存中。后续每次请求,都会
加上Session ID,服务器会将Session响应给客户端。
避免Session太多浪费资源:设置 timeout
四、HTTPS协议
HTTPS(Hypertext Transfor Protocol Secure)超文本传输安全协议,是HTTP协议安全版。
因为HTTP是明文 的,并且服务器和客户端都无法核对身份,HTTP不安全。
4.1 特点
HTTPS协议的报文是密文。
HTTPS协议可以对服务器和客户端进行身份认证。
HTTPS协议可以防止信息被篡改,保证信息完整性。
HTTPS协议比HTTP协议多一个SSL层。
4.2 SSL
SSL默认是 443 端口
-
客户端请求建立SSL连接,并将自己支持的一套加密规则发给服务器
-
服务器在其中选出一组加密算法与HASH算法,并将自己的身份证书发送给客户端
(身份证书包括:网址、加密公钥、证书颁发机构等)
- 客户端接收到证书后:
<1> 验证证书合法性。如果合法,则生成一串随机数 密码,用公钥对密码加密。
<2> 将加密密码发给服务器,告知服务器以后报文都加密。(握手结束)
- 服务器接收到加密密码信息后:
<1> 用私钥进行解锁,得到密码
<2> 告知客户端以后报文都加密。(握手结束)
4.2.1 解释
HTTPS是非对称性加密(两边不是通过统一钥匙加密的)
客户端通过自己生成的密码 加密,用公钥解密
服务器通过私钥 解密,用客户端发送过来的密码解密
4.2.2 SSL版本
常用的有:SSL v3,TLS 1.0,TLS1.2