网络基础

246 阅读4分钟

1. 同源策略

同源策略是指域名, 协议, 端口相同; 不同源的客户端脚本在没明确授权的情况下, 不能读写对方的资源, 从而保护用户的隐私, 这就是为什么需要同源策略的原因

以百度网址为例https://www.baidu.com/

  • 协议 - https
  • 域名 - www.baidu.com
  • 端口 - 443
  • https 端口默认为 443
  • http 端口默认为 80
  • 默认端口可以隐藏, 加上端口号之后百度网址为 https://www.baidu.com:443/

http://www.example.com/dir/page.html为例, 以下与之的同源情况:

  • http://www.example.com/dir2/other.html同源
  • http://example.com/dir/other.html不同源(域名不同)
  • http://v2.www.example.com/dir/other.html不同源(域名不同)
  • http://www.example.com:81/dir/other.html不同源(端口不同)

1.1 协议

协议简单来说就是人类和计算机沟通的一些交流规则

1.1.1 HTTP

HTTP由请求与响应构成, 是一个标准的客户端服务器模型, HTTP协议永远都是客户端发起请求, 服务器回送响应

HTTP: 超文本传输协议, 是一种用于分布式、协作式和超媒体信息系统的应用层协议

HTTP是一个无状态的协议; 无状态是指客户端和服务器之间不需要建立持久的连接, 所以当客户端向服务器发出请求, 且服务器返回响应之后, 连接就被关闭了

HTTP缺点

  • 通信使用明文, 可能被窃听
  • 不验证通信方的身份, 可能遭遇伪装
  • 无法证明报文的完整性, 有可能遭遇篡改
1.1.2 HTTPS
  • HTTPS: HTTP + 加密 + 认证 + 完整性保护 = HTTPS
  • HTTPS是在HTTP上建立SSL加密层, 并对传输数据进行加密, 是HTTP协议的安全版; HTTPS = HTTP + TLS/SSL

HTTPS: 超文本传输安全协议, 是一种通过计算机网络进行安全通信的传输协议

1.2 域名

域名用于在数据传输时对计算机的定位标识

域名和IP地址是互相映射的, 由于IP地址不方便记忆等特点, 人们设计出了域名; 但是单凭一个域名也不能让我们直接访问到正确的地址, 只有将域名解析成实际的网络地址, 才能访问成功; 这种解析工作则由专门的域名系统——DNS完成

1.3 端口

如果把 IP 地址比作一间房子, 端口就是出入这间房子的门, 一个IP地址的端口可以有多个

1.4 经典问题, 在浏览器中输入一个 url 会发生什么?

  • 浏览器通过DNS域名解析到服务IP
  • 客户端通过TCP协议建立到服务器的TCP连接(三次握手)
    • 三次握手的过程如下
    • 客户端发送连接, 请求报文(SYN), 此时客户端处于SYN_SEND状态
    • 服务端接收连接后回复ACK报文, 并未这次连接分配资源
    • 客户端收到ACK报文后也想服务端发动ACK报文, 并分配资源, 这样TCP连接就建立了

image.png

  • 客户端(浏览器)向web服务器端(HTTP服务器)发送HTTP协议包, 请求服务器里的资源文档
  • 服务器向客户端发送HTTP协议应答包
  • 客户端和服务器断开(四次握手), 客户端开始解析处理HTTP文档
    • 四次挥手过程如下

    • 客户端发起终端连接请求, 也就是发送FIN报文, 服务端接到FIN报文后, 意思是说: "我客户端没有数据要发送给你了, 但是如果你还有数据没有发送完成, 则不必着急关闭(Socket), 可以继续发送数据"

    • 服务端发送ACK, 告诉客户端, 你的请求我收到了, 但是我还没准备好, 请继续等我的消息, waiting: 这时候客户端就进入FIN_WAIT状态, 继续等待服务端的FIN报文

    • 当服务端确定数据已发送完成, 则向客户端发送FIN报文, 告诉客户端, 我这边数据发完了, 准备关闭连接了

    • 客户端收到FIN报文后. 就可以到可以关闭连接了, 但是他还是不相信网络, 怕服务端不知道要关闭, 所以发送ACK后进入TIME_WAIT状态, 如果服务端没有收到ACK则可以重传, 服务端收到ACK后, 就知道可以断开连接了; 客户端等待了2MSL后依然没有收到回复, 则证明服务端已正常关闭, 此时, 客户端也可以断开连接, TCP连接就这样关闭了

image.png