OSI七层概念模型

在这里插入图片描述

  1. 应用层:负责解决业务问题
  2. 表示层:负责把网络中的消息转换成应用层可以读取的消息
  3. 会话层:负责建立会话、握手、维持连接、关闭
  4. 传输层:负责解决进程与进程之间的通信,例如TCP保证报文的可达性和流量的控制
  5. 网络层:负责解决广域网(Internet)中主机之间数据的传递
  6. 数据链路层:负责局域网中根据MAC地址连接的相应的交换机/路由器进行报文的转发
  7. 物理层:物理传输介质

TCP/IP模型对照

在这里插入图片描述
在这里插入图片描述

分层模型的优点在于当前层只需要考虑与其相邻层的对接交互,即每一层只为其之上的层服务,并使用在其之下的层所提供的服务,而不需要考虑其相邻层之外的其他层做了什么。分层模型的缺点在于不同层之间数据交互需要耗费更多的时间,从而影响网络性能。

TCP协议

传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议

特点:

  • 基于链接的:传输数据之前需要建立链接
  • 全双工:双向传输(请求响应)
  • 字节流:不限制请求大小,打包成报文段,保证有序接受,重复报文自动丢弃
  • 流量缓存:解决双方处理能力的不匹配
  • 可靠的传输服务:保证可达,丢包时通过重发机制实现可靠
  • 拥塞控制:防止网络出现恶性拥塞

报文头部

在这里插入图片描述

一些查看信息命令

  • 查看网络状态。netstat -natp/在mac中需要使用netstat -tlp tcp netstat -tlp udp 来指定其后使用的协议状况。

    • n:拒绝显示别名,能显示数字的全部转化为数字禁止转换,localhost这种形式显示成ip形式
    • t (tcp) 仅显示tcp相关选项
    • p:显示进程的 PID 和名称
  • 抓包:抓80端口的包:tcpdump --n -i eth0 port 80
    抓80端口的包或者apr请求的包:tcpdump --n -i eth0 port 80 or arp

    • –n:显示ip形式,不以localhost方式显示
    • -i:指定网卡
    • port:指定端口
  • IP地址:IP地址就可以访问到每台主机,相当于主机的唯一身份ID

  • 掩码: 子网掩码只有一个功能,就是将IP地址划分为网络地址和主机地址两部分。 如同现实生活中的通讯地址,可以看作省市部分和具体门牌号部分。相同的IP地址,但掩码不一样,则指向的网络部分和主机部分不一样。如IP地址192.168.1.11,255.255.255.0 的掩码表示网络地址192.168.1,主机地址是1;255.255.0.0 的掩码表示网络地址192.168,主机部分是1.1 。

  • 网关:一个网络连接到另一个网络的“关口”

  • dns:进行域名(domain name)和与之相对应的IP地址 (IP address)转换的服务器。

http协议

HTTP协议(HyperText Transfer Protocol,超文本传输协议):是一种无状态的,以请求/应答方式运行的协议,他使用可以扩展的语义和自描述消息格式,与基于网络的超文本信息系统(html)灵活的互动

  • 传输协议实际是交给TCP协议来完成的
  • 无状态:并不会存储用户的信息;如果连接意外断开,整个会话就会丢失,重新连接之后一般需要从头开始
  • 请求/应答:一次请求对应一次响应
  • 可扩展:可以自定义扩展一些head字段等
  • 自描述: 消息体可以是音频视频、文本、图片等(Content-type)

HTTP协议解决了什么问题

  • Form Follows Function 形式服务于功能

  • 解决的是人与机器之间高效的信息交互

报文格式

http请求与响应报文基本相同,由4大部分组成

  • 起始行(start line):描述请求与响应的基本信息(请求行或状态行)
  • 消息报头(四种:普通报头,请求报头,响应报头,实体报头)
  • 空行
  • 消息正文

请求报文

在这里插入图片描述

  • 请求方法:如GET/HEAD/PUT/POST,表示对资源的操作;
  • 请求目标:通常是一个URI,标记了请求方法要操作的资源;
  • 版本号:表示报文使用的HTTP协议版本

响应报文

在这里插入图片描述

  • 版本号:表示报文使用的HTT协议版本;
  • 状态码:一个三位数,用代码的形式表示处理的结果,比如200是成功,301/302是重定向,404是NOT FOUND,500是服务器错误;
  • 原因:作为数字状态码补充,是更详细的解释文字,帮助人理解原因

HTTP头字段

头部字段是key-value的形式,key和value之间用"“分隔,最后用CRLF换行表示字段结束。比如前后分离时经常遇到的要与后端协商传输数据的类型"Content-type:application/json”,这里key就是"Content-type",value就是"applicationjson"。HTTP头字段非常灵活,不仅可以使用标准里的Host,Connection等已有头,也可以任意添加自定义头,这就给HTTP协议带来了无限的扩展可能

头字段注意事项
  • 字段名不区分大小写,字段名里不允许出现空格,可以使用连字符"-",但不能使用下划线"_"(有的服务器不会解析带 " _ " 的头字段)。字段名后面必须紧接着":",不能有空格,而 “:” 后的字段值前可以有多个空格;
  • 字段的顺序是没有意义的,可以任意排列不影响语义;
  • 字段原则上不能重复,除非这个字段本身的语义允许,例如Set-Cookie。

常用头字段

HTTP协议中有非常多的头字段,但基本上可以分为四大类:

  • 请求字段:请求头中的头字段;如Host,Referer
  • 响应字段:响应头中的头字段,如:Server
  • 通用字段:在请求头和响应头里都可以出现,如Content-type,Connection;

请求过程

在这里插入图片描述

HTPS协议

由于HTTP天生“明文"的特点,整个传输过程完全透明,任何人都能够在链路中截获、修改或者伪造请求/响应报文,数据不具有可信性。例如:一个网站时没有广告的,打开后全是广告,其实就是被劫持过程中修改了

因此就诞生了为安全而生的HTTPS协议使用HTPS时,所有的HTTP请求和响应在发送到网络之前,都要进行加密。

https利用摘要算法、对称加密算法、非对称加密算法来完成的
在这里插入图片描述
在这里插入图片描述

我们为什么需要HTTPS?

主要有三个原因:

  1. 保护隐私:所有信息都是加密传播,第三方无法窃听数据。如果使用HTTP明文传输数据的话,很可能被第三方劫持数据,那么所输入的密码或者其他个人资料都被暴露在他人面前,后果可想而知。
  2. 数据完整性:一旦第三方篡改了数据,接收方会知道数据经过了篡改,这样便保证了数据在传输过程中不被篡改 —— 数据的完整性。
  3. 身份认证:第三方不可能冒充身份参与通信,因为服务器配备了由证书颁发机构(Certificate Authority,简称CA)颁发的安全证书,可以证实服务器的身份信息,防止第三方冒充身份。(也有少数情况下,通信需要客户端提供证书,例如银行系统,需要用户在登录的时候,插入银行提供给用户的USB,就是需要客户端提供证书,用来验证客户的身份信息。)

Web架构的七大关键属性

  • 性能:影响高可用的关键因素

  • 可伸缩性:支持部署可以互相交互的大量组件

  • 简单性:易理解、易实现、易验证

  • 可见性:对两个组件间的交互进行监视或者仲裁的能力。如缓存、分层设计等

  • 可移植性:在不同的环境下运行的能力

  • 可靠性:出现部分故障时对整体的影响程度

  • 可修改性:对系统做出修改的难易程度,由可进化型、可定制性、可扩展性、可配置性、可重用性构成

五种架构风格

  • 数据流风格 Data-flow Styles
    优点:简单性、可进化性、可扩展性、可配置性、可重用性
  • 复制风格 Replication Styles
    优点:用户可察觉的性能、可伸缩性,网络效率、可靠性也可以得到提升
  • 分层风格 Hierarchical Styles
    优点:简单性、可进化性、可伸缩性
  • 移动代码风格 Mobile Code Styles
    优点:可移植性、可扩展性、网络效率
  • 点对点风格 Peer-to-Peer Styles
    优点:可进化性、可重用性、可扩展性、可配置性

更多推荐