前言
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报文 = 报文头 + 数据部分
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中是强制要求的 |
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协议版本号
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版本号 + 状态码 + 解释状态码
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协议是一种无连接应用协议 :
1. 限制每次连接只处理一个请求
2. 服务器处理完客户端的请求,并受到客户端的应答后,立即断开连接
设计原因:最早是为了应对单个用户请求间歇性大的问题,但随着网页越来越复杂,因此添加
了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是一种无状态应用协议:
1. 服务器不知道客户端是什么状态
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 端口
1. 客户端请求建立SSL连接,并将自己支持的一套加密规则发给服务器
2. 服务器在其中选出一组加密算法与HASH算法,并将自己的身份证书发送给客户端
(身份证书包括:网址、加密公钥、证书颁发机构等)
3. 客户端接收到证书后:
<1> 验证证书合法性。如果合法,则生成一串随机数密码,用公钥对密码加密。
<2> 将加密密码发给服务器,告知服务器以后报文都加密。(握手结束)
4. 服务器接收到加密密码信息后:
<1> 用私钥进行解锁,得到密码
<2> 告知客户端以后报文都加密。(握手结束)
4.2.1 解释
HTTPS是非对称性加密(两边不是通过统一钥匙加密的)
客户端通过自己生成的密码加密,用公钥解密
服务器通过私钥解密,用客户端发送过来的密码解密
4.2.2 SSL版本
常用的有:SSLv3,TLS1.0,TLS1.2