OSI七层模型(应表会传物链网)
应用层 协议
- 各种应用协议(HTTP,FTP,DNS,SMTP等等),规定各种应用程序数据传输格式。
表示层 翻译
- 不同操作系统之间进行翻译(语法,语义,加解密,压缩,解压缩等等)
会话层 进程之间
- 进程之间会话管理,同步
- 断点续传,自动收发包,自动寻址的功能。
传输层(用错流可靠)端口 用户数据报 进程之间
- 发送数据分装交给网络层—通过TCP或者UDP协议(进程和进程之间的通讯)
- 端对端的进行可靠的传输服务(port-port)
网络层(拥错流路由)路由器 数据报、ip分组 主机之间
- 怎么知道对方的mac地址?—使用ARP(address resolution protocol)协议,通过ip地址知道对方的mac地址
- 怎么判断是否在一个子网(ip地址网络段相同,主机号不同)?—使用ip协议
- 怎么选择最优的路径?—通过一些路由协议
数据链路层 (传错流成帧)网桥、网卡、交换机 帧
- 对比特流进行处理,分组之后成数据帧。
- 会带上原mac地址和目标mac地址。
物理层 (一传两定)中继器、集线器、光猫 比特流
-
互联物理链路,物理介质,例如网线(双绞线)、光纤、无线电波。 以比特
-
流的方式传输,也就是电信号或者二进制(010101)传输。
-
光猫 :光纤的调制解调器,在电信和光信号之间调制和解调。现在都是光纤入户了。
我们要跟目标主机通信,就必须知道目标主机的ip和mac地址。
如果源主机与目标主机不属于同一子网,那么目标mac地址为默认网关的mac地址。随后数据被发送到默认网关,发送的方式参考上面同一子网内主机的通信(因为默认网关与源主机必定是在同一个子网中的)。默认网关收到后,将目标mac地址设置为下一跳的路由器的mac地址(找不到下一跳的mac地址就使用arp协议,广播到所有子网设备)。在这一过程中目标IP和源IP始终不变,只有目的mac地址不断变化。
为什么要同时使用mac地址和ip地址?
不同的地址作用于不同的层,mac作用于数据链路层,ip作用于网络层;数据包中,“mac地址包在ip地址之外面” ,每当一个数据包被解析时,总是mac地址先被解析到。如果数据包的mac地址跟当前设备的mac地址不符,则直接丢弃,反之会继续向上层发送,这样能够提高效率。所以可以这样理解,ip地址是逻辑地址,它可以计算网络的最短路径,为数据包指明了下一个应该去的设备,将下一个设备的mac地址设为目的mac地址,从而使得该数据包能够被送到那个路由器。
总结起来可以这么理解,ip地址为数据包去向指明了方向,下一个站是哪里;而mac地址有点类似于一个跑腿的,能够将数据包运送到指定的设备。因此,可以看到在整个传输过程中目的ip始终不变,应为它表明了数据包的终点,每次到达一个路由器,都会计算出下一步怎么走最优,一旦找到了下一个目标路由器,则将目的mac设为那个路由器的mac,至于怎么到达,就不是ip地址需要操心的了,而是由数据链路层和物理层负责。
TCP/IP四层(应传网口)日常使用甚多
应用层=应用层+表示层+会话层
传输层=传输层
网络层=网络层
网络接口层=数据链路层+物理层
数据传输过程
网络层
主机联网的默认网关:192.168.0.1 (路由器的ip)
ARP协议(地址解析协议)
实现特定的ip地址,查询其对应的物mac地址(子网内查询,也就是同一个网络号之内查询),包括查询网关的mac。
IPV4协议
传输层
TCP协议(有点全面,头大)
特点:有链接,点对点(而不是广播),全双工通讯(非半双工,单工),面向字节流,可靠传输和交互,报文首部较大。
首部:20B ,有源目端口,序号,确认号,标志位(SYN,ACK,FIN,RESET等等)
什么保证了可靠传输机制:
- 序号(sequence)
- 确认号(ack)
- 重传机制(超时重传,冗余确认)
连接管理:三次握手建立连接,四次挥手释放连接(SYN->ACK->FIN的过程)
应用层
HTTP协议 默认端口80
特点:无连接,无状态,可靠、基于TCP协议,端口默认是80
功能:用来规定客户端和服务端的数据传输格式。
HTTP请求详解
HTTP请求报文包含四个部分(请求行,请求头,空一行,请求体)
**请求行**
GET / HTTP/1.1
#请求行:请求方法(get)+URL(/)+HTTP版本信息(HTTP/1.1)
**请求头部** key:value的形式
Host: www.graduate.nuaa.edu.cn
#host:请求的主机名
Connection: keep-alive
#Connection:是否需要持久连接
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36
# user-agent:产生请求的客户端类型
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
#accept:客户端可以识别的内容类型列表
Accept-Encoding: gzip, deflate
#客户端使用的编码环境
Accept-Language: zh-CN,zh;q=0.9
#客户端使用的预言环境
Cookie: Hm_lvt_b3b075d90cc24dcb1d5795260f02e2d6=1598665997; Hm_lpvt_b3b075d90cc24dcb1d5795260f02e2d6=1598672394; JSESSIONID=8CDABACD806F0607B0725EC3EB3C3966
#Cookie 存储保持回话的重要信息(解决http的无状态)
**空一行**
**请求体**post方法中,会把请求需要的数据以key value形式发送请求
HTTP响应报文(响应行,响应头,空一行,响应体)
**响应行**
HTTP/1.1 200 OK #版本信息+http状态码+原因描述
**响应头部** key:value的形式
Server: nginx
#server:http服务器软件信息
Date: Sat, 16 Jan 2021 09:38:45 GMT
#date 响应时间
Content-Type: text/html
#Content-Type响应类型
Content-Length: 9408
Connection: keep-alive
#保持TCP连接不关闭,但是不会长久保持连接,服务器可设置(解决http的无连接)
X-Frame-Options: SAMEORIGIN
Frame-Options: SAMEORIGIN
Accept-Ranges: bytes
Vary: Accept-Encoding
Content-Encoding: gzip
X-Cache: MISS from nuaa
X-Cache-Lookup: MISS from nuaa:80
Via: 1.1 nuaa (squid/3.5.20)
Access-Control-Allow-Headers: X-Requested-With
Access-Control-Allow-Headers: Authorization
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
**空一行**
**响应体(响应正文)**
<!DOCTYPE html>
<html lang="zh-CN">......
HTTP常见的状态码
1xx -接收的请求正在被处理
2xx -请求正常处理完毕 200
3xx -重定向302 304缓存 not modify
4xx -客户端出错了 404
5xx -服务器出错了 503
HTTP无连接
keep-alive设置
- 1.开启:connection:keep-alive 表示长连接,不需要重新建立连接。
- 2.关闭:在http请求头中设置connection:close 表示关闭长连接。
- 3.设置连接时间:可在http header 中设置 keep-alive:timeout=5,max=1000
timeout:超时时间,单位秒,超过这个时间之后就释放连接。
max:最多的连接次数,若超过这个次数就强制断开连接
HTTP无状态
对每次请求服务器没有记录状态。
每个请求都是独立的。
优点:释放了服务器的压力
缺点:重传重复内容,增大数据量-资源浪费
- cookie
前面的请求信息保存为一个临时文件—cookie值,存放在浏览器里。
关闭浏览器之后cookie会被清除。 - session(永久的cookie的值)
session id 保存在服务器上,传给客户端,客户端保存在内存中。
session id可设置超时时间。
HTTPS (超文本传输安全协议) 默认端口443
https协议特点:
- 传输数据加密
- 身份认证 :可保护用户在与网站交互的时候免于窃取个人信息和计费数据(证书包含了网站地址,加密公钥,以及证书颁发机构等)
- 保证传输数据完整性:防止信息被篡改。
HTTPS=HTTP+加密+身份认证+完整性保护
披着SSL外壳的http协议!