网络

  • URI:Uniform Resource Identifier

  • 统一资源标识符,用来唯一的标识一个资源

  • URL:Uniform Resource Locator

    • 统一资源定位符,URL可以用来表示一个资源,而且还指明了如何定位这个资源
  • URN:Uniform Resource Name

    • 统一资源命名,通过名字来表示资源

URL肯定是一个URI,URI并不一定是URL,也有可能是URN

  • http默认端口号80、https默认端口号443、MySQL默认端口号3306

  • C/S架构

    • Client/Sever
    • 界面与操作丰富、安全性高、响应速度快
    • 通常用于局域网,需要安装特定应用程序或使用特定硬件、维护成本高
  • B/S架构

    • Browser/Server
    • 无需安装客户端程序与特定硬件
    • 跨浏览器兼容性差、功能性相对较弱、设计成本高、安全性弱、交互性弱
  • DNS:Domain Name Server(域名服务器)

    • 把域名转换成对应的ip地址
    • 一个域名对应一个IP地址,但一个IP地址可以对应多个域名
    • gTLD:generic Top-Level DNS Server 顶级域名服务器 | 解析.com、.net
  • IP

    • Internet Protocol Address
    • 互联网协议地址、IP地址
    • 分配给用户上网使用的互联网协议
    • IPv4 | 192.168.0.1(长度32位(四个字节),十进制表示)
    • IPv6 | 地址空间更大(8组(128位),十六进制 0-9-A-F)
      • 更高的安全性
      • 路由表更小
      • 自动配置支持
  • TCP

    • Transmission Control Protocol 传输控制协议
    • 三次握手
    • 面向连接(收发数据前,必须建立可靠的链接)
    • **优点:**稳定、重传机制、拥塞控制机制、断开链接
    • **缺点:**速度慢、效率低、占用资源、容易被攻击(三次握手->DOS、DDOS攻击)
    • TCP/IP协议组:提供点对点的连接机制,制定了数据封装、定址、传输、路由、数据接受的标准
  • UDP

    • User Data Protocol 用户数据报协议
    • 面向无连接(不可靠的协议,无状态传输机制)
    • 无连接信息发送机制
    • 无需确保通讯质量且要求速度快、无需确保信息完整
    • 消息收发、语音通话、直播
    • **优点:**安全、快速、漏洞少(UDP flood攻击)
    • **缺点:**不可靠、不稳定、容易丢包
    • 只要目的源地址、端口号、发送方地址、发送方端口号确定,则可以直接发送信息报文,但不能保证一定能收到或收到完整的数据
  • HTTP

    • Hyper Text Transfer Protocol 超文本传输协议
    • 定义:客户端和服务器端请求和应答的标准,用于从WEB服务器传输超文本到本地浏览器的传输协议
    • HTTP请求:按照协议规则先向WEB服务器发送的超文本传输到本地浏览器的请求
    • HTTP是不安全的(监听和中间人攻击等手段,获取网站账户信息和敏感信息)
    • HTTP协议的传输内容都是明文,直接在TCP连接上运行,客户端和服务器都无法验证对方身份
  • HTTPS

    • Hyper Text Transfer Protocol Secure 超文本传输安全协议
    • HTTP的安全版(安全基础是SSL/TLS)
    • SSL:Secure Sockets Layer 安全套接层
    • TLS:Transport Layer Security 传输层安全
    • 为网络通信提供安全及数据完整性的一种安全协议,对网络连接进行加密
    • HTTPS可防止被攻击
    • HTTPS协议的传输内容都是被SSL/TLS加密,且运行在SSL/TLS上,SSL/TLS运行在TCP连接上,所以数据传输是安全的
  • 建立TCP连接

    • 标志位:数据包
    • SYN:Synchronize Sequence Numbers 同步序列编号
    • ACK:Acknowledgement 确认字符
    • 状态
      • LISTEN:侦听TCP端口的连接请求
      • SYN-SENT:在发送连接请求后等待匹配的连接请求
      • SYN-RECEIVED:在收到和发送一个请求后等待对连接请求的确认
      • ESTABLISHED:代表一个打开的连接,数据可以传送给用户
    • **第一次握手:**客户端向服务器发送SYN标志位(序号是J),并进入SYN_SEND状态(等待服务器确认状态)
    • **第二次握手:**服务器收到来自客户端的SYNJ,服务端会确认该数据包已收到并发送ACK标志位(序号是J+1)和SYN标志位(序号是K),服务器进入SYN_RECV(请求接收并等待客户端确认状态)
    • **第三次握手:**客户端进入连接建立状态后,向服务器发送ACK标志位(序号是K+1)确认客户端已收到建立连接确认,服务器收到ACK标志位后,服务端进入连接已建立状态
  • HTTP报文

    • HTTP基于TCP/IP通信协议来传递数据
    • HTTP基于客户端/服务端(C/S)架构模型
    • 通过一个可靠的连接来交换信息,是一个无状态的请求/响应协议
    • 限制每次连接只能处理一个请求,服务端处理完客户的请求,并受到客户的应答后,即断开连接,节省传输时间
    • 客户端以及服务器制定使用合适的MIME-type内容类型
    • Multipurpose Internet Mail Extensions type 多用途互联网邮件扩展类型
  • HTTP报文-请求方式

    • put:上传资源,form表单不支持、提交即存储的原则(无验证机制,安全漏洞)、需配置服务器支持put方式转发给后端操作
    • delelte:删除资源,form表单不支持、提交即删除的原则(无验证机制,安全漏洞)、需配置服务器支持put方式转发给后端操作
    • post:修改资源
    • get:修改资源
    • 更好语义化请求目的
  • POST请求

    • POST更安全,不会作为url的一部分,不会被缓存,不保存在服务器日志喝浏览器记录中
    • POST发送的数据量更大,(GET有url长度限制)、
    • POST能发送更多的数据类型(各种类型的文件)、GET只能发送ASCII字符
    • POST比GET速度慢
      • POST请求包含更多请求头
      • POST接收数据之前会先将请求头发送给服务器确认,然后发送数据
        • POST过程
        • 第三次握手,浏览器确认并发送post请求头 request header
        • 服务器返回状态码100后,continue响应
        • 浏览器开始发送Form Data数据
        • 服务器返回200 OK响应
        • GET过程
        • 第三次握手,浏览器确认并发送请求头和数据
        • 服务器返回200 OK响应
        • GET会进行数据缓存,POST不会
        • POST不能进行管道化传输
  • HTTP报文-状态码

    • 1xx:信息,服务器收到请求,需要请求者继续执行操作
    • 2xx:成功,操作被成功接收并处理
    • 3xx:重定向,需要进一步的操作以完成请求
    • 4xx:客户端错误,请求包含语法错误或无法完成请求
    • 5xx:服务器错误,服务器在处理请求的过程中发生了错误
  • 浏览器缓存

    • 减少网络带宽的消耗
    • 降低服务器压力
    • 减少网络延迟
    • Pragma:no-cache(忽略缓存)
    • Cache-Control 缓存控制
      • no-cache:指示浏览器忽略资源缓存副本,强制到服务器获取资源(浏览器依然缓存)
      • no-store:强制缓存在任何情况下都不要保留任何副本
      • max-age=31536000:指示缓存副本的有效时长,从请求时间开始到过期时间之间的秒数
      • public:表明响应可以被任何对象(包括:发送请求的客户端,代理服务器,等等)缓存
      • private:表明响应只能被单个用户缓存,不能作为共享缓存(即代理服务器不能缓存它)
    • Expires:启用缓存和定义缓存时间,告诉浏览器资源缓存过期时间(格林威治时间 东加西减)
  • Connection:keep-alive 长连接开启 | close

  • Content-Length:用于描述HTTP消息实体的传输长度

  • Referer:来源域名

  • 关闭TCP连接

    • 客户端发送连接关闭报文(此时已停止发送数据)(第一次挥手)
      • 报文首部:FIN=1(序列号seq=u)
      • 此刻:客户端进入终止等待(FIN-WAIT-1)状态
    • 服务器收到连接关闭报文,并发送确认报文(第二次挥手)
      • 报文首部:ACK=1 ack = u+1(确认FIN)(序列号seq=v)
      • 此刻:服务端进入关闭等待(CLOSE-WAIT)状态
        • 连接半关闭状态,客户端没有数据要发送,但服务器如果还要发送数据,客户端依然需要接收
    • 客户端收到服务器的确认请求后,客户端进入终止等待2(FIN-WAIT-2)状态
      • 服务器在这期间还要确认客户端所需要的数据是否真的发送完毕了,如果还没发送完毕,则继续发送数据
    • 服务器确认数据已发送完毕后,向客户端发送连接关闭报文(第三次挥手),服务器进入最后确认(LAST-ACK)状态
      • 报文首部:FIN=1 ACK=1 ack = u+1(确认上一次数据包)序列号seq=w
    • 客户端收到服务器的连接关闭报文后,发出接收确认报文(第四次挥手),客户端进入时间等待(TIME-WAIT)状态
      • 报文首部:ACK=1 ack = w+1(确认上一次数据包)序列号seq = u+1
    • 服务端收到客户端发出的确认,立即进入TCP关闭状态(CLOSE),TCP连接结束(TCP关闭,服务端要比客户端早一些)
      • TIME-WAIT时长:2MSL Maximum Segment Lifetime 最大报文生存时间
  • 同源策略

    • 相同的协议&相同的域名&相同的端口