文章目录
计算机网络知识
1、HTTP
HTTP是一种:超文本传输协议
-
超文本:不关是文本,还可以是图片、音频、视频甚至点击。
-
传输:把超文本解析成二进制数据包,由传输载体负责把二进制数据包由计算机终端传输到另一个终端的过程。
-
协议:计算机之间通信中需要遵守的一定的规则。
所以HTTP就是在计算机世界里专门在两点之间传输文字、图片、音频、视频的超文本数据的约定和规范
1.1 HTTP相关的协议
TCP/IP
TCP/IP称为协议簇,其中不仅有TCP协议和IP协议,还是一系列网络通信协议的统称。
- TCP:传输控制协议,可靠能保证数据不丢失
- IP:解决通信双方的寻址问题。
DNS
域名系统,作为将域名和IP地址相互映射的一个分布式数据库。
URI/URL
- URI:统一资源标识符,使用它能唯一地标记互联网上的资源
- URL:统一资源定位符,即网址,是URI的一个子集
URI不仅包含URL还包含URN(统一资源名称)
1.2 HTTP协议版本
- http 0.9
- 只有一个GET命令,服务器只能回应HTML格式的字符串
- http 1.0
- 引入了POST和http数据头部
- 每个TCP请求只能发送一个请求,发送数据完毕后,连接就关闭
- 头信息是ASCII码,后面数据可为任何形式,服务器回应时会告诉客户端,数据是什么格式,即Content-Type字段的作用
- http 1.1
- 新增方法PUT、PATCH、OPTIONS、DELETE
- 引入了持久连接,即TCP连接默认不关闭,可以被多个请求复用。
- 同一个TCP连接中,所有数据通信都是依次进行,容易造成队头阻塞
- http 2.0
- 头信息和数据体都是二进制,称为头信息帧和数据帧
- 复用TCP连接,在同一连接中,客户端和浏览器都可以同时发送多个请求或者回应,且不用按照顺序一一对应,避免了“队头堵塞”,此时双向的实时通信称为多工
- 引入头信息压缩机制;客户端和服务器同时维护一张头信息表,所有字段都会存入这个表生成一个索引号,不发送同样字段只发送索引号,提高速度。
- 允许服务器未经请求、主动向客户端发送资源,即服务器推送
http1.0和http1.1的区别
- 长连接:http1.1支持长连接和请求的流水线处理
- 缓存处理:http1.1引入更多缓存控制策略
- 带宽优化和网络连接使用
- 错误通知的管理
- Host头处理
1.3 HTTP的几种请求方法用途
- GET:发送一个请求来获取服务器上的某一些资源
- POST:向URL指定的资源提交数据或附加新的数据,没有指定资源在服务器的位置
- PUT:可以向服务器提交数据,并指定了资源在服务器的位置
- HEAD:请求页面的首部
- DELETE:删除服务器上的某西苑
- OPTIONS:用于获取当前URL所支持的方法,请求成功后会在Allow的头包含类似GET、POST等信息
- TARCE:用于激发一个远程的应用层的请求消息回路
- CONNECT:把请求连接转到TCP/TP通道
GET和POST的区别
- GET用于信息获取,使用URL传递参数,发送信息的数量有限
- POST是用于修改服务器上的资源
HTTP协议的主要特点
- 简单快速
- 灵活可扩展
- 无连接、无状态
- 支持客户-服务器模式
- 可靠传输
HTTP缺点
- 无状态
- 明文传输
- 队头阻塞
1.4 HTTP报文的组成部分
1.4.1 请求报文
- 请求行
- 请求方法
- 请求URL
- HTTP协议以及版本
- 请求头
- 一堆键值对
- 空行
- 表明后面的内容是请求体
- 请求体
- 请求数据
1.4.2 响应报文
- 状态行
- HTTP协议和版本
- 状态码
- 状态描述
- 响应头
- 空行
- 响应体
1.5 HTTP请求标头
1.5.1 通用标头
- Date:出现在请求标头和响应标头中,表示的是标准时间
- Cache-Control:出现在请求标头和响应标头中,主要大类有可缓存性、阈值性、重新验证并重新加载和其他特性
- Connection:决定当前事务(握手和挥手后)完成后,是否要关闭网络状态。
- 持续性连接:不关闭网络状态
- 非持续性连接:一次事务完成后关闭网络连接
其他:
1.5.2 请求标头
1.5.3 响应标头
1.5.4 实体标头
2、HTTPS
HTTP协议是承载与TCP协议上的,在HTTP和TCP之间添加一个安全协议,SSL或者TSL,就是HTTPS
2.1 Https和Http对比
-
传输方式
- http传输方式:明文传输、网站或相关服务与用户之间的数据交互无加密,容易被监听,篡改
- https传输方式:在HTTP加入了SSL层,用户数据传输加密
-
身份认证
- http:无身份认证,用户无法通过http辨认出网站的真实身份
- https:经过CA多重认证,包含域名管理权限认证等
-
成本
- http:无任何使用成本,所有网站默认都是http模式
- https:需要成本,需要申请SSL整数来实现https
-
连接端口
- http:80
- https:443
3、从浏览器输入url到显示页面的步骤
- 浏览器查找域名的IP地址:
- 查找浏览器缓存:DNS记录
- 查找系统缓存:hosts文件
- 查找路由器缓存:DNS缓存
- 递归查询
- 迭代查询
- 浏览器与目标服务器建立TCP连接
- 通过DNS解析找到IP地址建立TCP连接
- 三次握手
- 浏览器通过http协议发送请求
- 浏览器向主机发送一个HTTP—GET方法报文请求。
- 某些服务器会做永久重定向响应
- 重定向的作用:为了负载均衡或者导入流量,提高SEO排名,利用一个前端服务器接受请求,然后负载到不同的主机上,可以大大提高站点的业务并发处理能力;重定向也可将多个域名的访问,集中到一个站点;
- 浏览器跟踪重定向地址
- 服务器处理请求
- 服务器发送一个HTML响应
- 释放TCP连接
- 浏览器显示页面
- 浏览器发送获取嵌入在HTML中的其他内容
4、三次握手与四次挥手
三次握手:SYN、ACK
-
建立连接时,客户端发送SYN包到服务器,并进去SYN_SENT状态,等待服务器确认,其中SYN就是同步序列编号
-
服务器收到SYN包,必须确认客户的SYN包,同时自己特发送一个SYN包,即SYN+ACK包,此时服务器进入SYN_RECV状态
-
客户端接收服务器的SYN+ACK包,向服务器发送确认包ACK,此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手
第三次握手:防止失效的连接请求报文段被服务器端接收,从而导致错误
四次挥手
- 主动关闭的一方,发送一个FIN传送数据,用来告诉对方,不会再给你主动发送数据了。此时主动关闭的一方还可以接受数据
- 被动关闭放收到FIN包,发送ACK给对方,确认序号
- 被动关闭放 发送一个FIN给关闭方,说不会再给你发送数据了
- 主动关闭方收到FIN、发送给ACK,用来确认序号
5、web性能优化技术
减少客户端忘了延迟和优化页面渲染性能来提升web性能
- DNS查询优化
- 客户端缓存
- 优化TCP连接
- 避免重定向
- 网络边缘的缓存
- 条件缓存
- 压缩和代码极简化
- 图片优化
6、网站性能优化
- 内容方面:减少HTTP请求(合并文件、CSS精灵)减少DNS查询(DNS缓存,将资源分布到合适的数量的主机名)、减少DOM元素的数量
- Cookie方面,减少其大小
- css方面,将样式表放到页面顶部;不使用css表达式;压缩css,css从外部引入
- 优化代码以及图片
7、Http状态码以及含义
- 1XX 为信息状态码
- 100 为继续,表示确认,成功返回具体参数信息
- 2XX 成功
- 200 正常返回信息
- 201表示请求成功并且服务器创建了新的资源
- 202 表示服务器已接收请求但尚未处理
- 3XX 重定向
- 301 永久重定向
- 302 临时性重定向
- 303 临时重定向,且总是使用GET请求新的URl
- 304 自从上次请求后,请求的页面未修改过
- 4XX 客户端错误
- 404 未找到
- 401 请求未授权
- 403 禁止访问
- 5XX 服务器错误
- 500 常见的服务器错误
- 503 服务器暂时无法处理请求,可能是过载或维护
8、cookies、sessionStorage和localStorage的区别
- cookie是网站用来标识用户省份而存储在用户本地终端上的数据
- cookie的数据始终在同源的http请求中携带,即使是不需要的情况,所以其会在浏览器和服务器中间来回传递
- sessionStorage和localStorage不会自动把数据发送给服务器,仅仅在本地保存
- 存储大小
- cookie的数据大小不能超过4K,sessionStorage和localStorage可以达到5M或更多
- 有限期时间
- localStorage存储持久数据,浏览器关闭后数据不会丢失,除非主动删除
- sessionStorage数据在当前浏览器窗口关闭后自动删除
- 设置过cookie过期时间之前都有效,就算关闭窗口或者浏览器关闭
9、多域名存储网络资源的好处
- CDN缓存更加方便
- 突破浏览器并发限制
- 节约cookie带宽
- 节约主域名的连接数,优化页面响应速度
- 防止不必要的安全问题
10、浏览器生成http请求消息
11、OSI模型
- 物理层::考虑的是怎么在传输媒体上传输数据比特流,尽可能的屏蔽传输媒体和通信手段的差异。(中继器。)
- 数据链路层:互联设备之间传送和识别数据帧(网桥)
- 网络层:地址管理与路由选择(路由器)
- 传输层:管理两个节点之间的数据传输(TCP、UDP)
- 会话层:通信管理、负责奖励和断开通信连接
- 表示层:设备固有数据格式和网络标准数据格式的转换
- 应用层:对特定应用的协议(HTTP、FTP)
12、TCP/IP模型
- 应用层:决定了想用户提供应用服务时通信的活动(HTTP、FTP)
- 传输层:对应上层应用层,提供处于网络连接中两台计算机之间的数据传输(TCP、UDP)
- 网络层:用来处理网络上流动的数据包(因特网协议IP)
- 链路层:用来处理连接网络的硬件部分(以太网、WI-FI)
13、UDP
- UDP面向报文的协议,不会对报文进行任何拆分和拼接操作,头部只有8字节
- 是无连接的、不可靠的、没有拥塞控制、会出现丢包
14、TCP
- 是基于连接的协议、头部20字节
- 全双工,双向传输
- j基于字节流、不限制数据大小,打包成报文段,保证有序接收、重复报文自动丢弃
- 有拥塞控制,用来处理双方处理能力的不匹配
- 拥有可靠的传输服务,保证可达,丢包时通过重发机制实现可靠性
- Sequence number 序号保证TCP传输的报文是有序的
- Window Size 表示窗口大小,还能接受多少字节的数据
- Acknowledgement Number 表示上一个序号的数据以及接受到,接收端希望接受的下一个字节编号是多少
14.1 标识符
- ACK=1 表示确认号字段有效
- SYN=1 ACK=0 表示当前报文段是一个连接请求报文
- SYN=1 ACK=1 表示当前报文段是一个统一建立连接的应答报文
- FIN=1 表示此报文段是一个释放连接的请求报文
- URG 紧急值有效
- RST 重置连接
- PSH 接收方应该尽快将这个报文交给应用层
- SYN超时怎么办:
- 需要慢慢重试,阶梯型重试
- 为什么要有TIME_WAIT
- 断开连接发起方在接受到接收方的FIN并回复ACK以后并没有直接进入CLOSED状态而是进行了一波等待,等待时间是2MSL(报文最长生存时间)
14.2 TCP拥塞控制
拥塞窗口
慢启动阈值
15、安全问题CSRF和XSS
15.1 CSRF:跨站请求伪造
-
CSRF攻击:攻击者盗用了你的身份,以你的明细发送恶意请求
-
CSRF原理:登录受信任的网站A,在本地生成cookie,在不登出A的情况下,访问危险网站B
-
CSRF防御方式
- Token验证(使用最多)
- 服务器发送给客户端一个token
- 客户端提交的表单中带有这个token
- 如果这个token不合法,那么服务器就拒绝这个请求
- 隐藏令牌
- 把token隐藏在http的head头中
- Referer验证
- Referer指的是页面请求来源,只接受本站的请求,服务器才做响应,如果不是就拦截
- Token验证(使用最多)
15.2 XSS:跨域脚本攻击
xss是一种发生在web前端的漏洞,恶意攻击者王web页面里插入恶意的script代码,在浏览器中运行scrip代码。达到恶意攻击用户的目的。
- xss攻击:需要向web页面注入恶意代码、这些恶意代码被浏览器成功执行
- xss攻击方式
- 反射型:发送请求时,xss代码出现在url中,作为输入提交到服务器端,服务器端解析后相应,XSS代码随着相应一起传给浏览器,最后在浏览器解析执行XSS代码。
- 存储型:提交的代码会存储在服务器端(数据库、内存、文件系统)下次请求目标页面时不用再提交xss代码
15.3 两者的区别
- CSRF需要先登录,获取COOKIE,然后利用网站本身的漏洞去请求网站的api
- XSS不需要登录,直接向网站注入JS代码,篡改网站的内容
16、cookie
cookie是网站为了辨别用户身份,进行session跟踪而存储在用户本地终端的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息
-
存储在用户本地终端上的数据
-
用来辨别用户身份
-
保存在用户本地终端
cookie的作用就是解决如何记录客户端的用户信息
16.1 cookie原理
浏览器第一次请求服务器,服务器响应请求中携带cookie,给浏览器,后续浏览器再携带cookie给服务器,服务器根据cookie判断用户,也可以修改cookie的内容
16.2 cookie的属性
Name、Value、Domain、Path、Expires/Max-Age、Size、HttpOnly、Secure、SameSite
-
HttpOnly
这个属性设置为true时,就不能通过js脚本获取cookie的值,能够有效的防止xss的攻击
-
Secure
标记为Secure的cookie只能被https协议加密过的请求发送给服务端。单也无法保证其安全保障
-
SameSite
Cookie运行服务器要求某个cookie在跨站请求时不会被发送,从而可以阻止扩展请求伪造攻击(CSRF)
- None:浏览器再同站请求、跨站请求下继续发送cookies,不区分大小写(所有三方请求都会携带cookie)
- Strict:浏览器只在访问相同站点时发送cookie(所有第三方的连接都不会携带cookie)
- Lax:Same-site cookie将会为一些跨站请求保留,如图片加载或frames的调用,单只有当用户才外部站点导航到URL时才会发送(只有同步且是get请求才可携带cookie)
17、token
token作为客户端的一个令牌,在第一个登陆的时候获取到,以后就不需要频繁访问数据库,查询用户密码。
- 解决的问题:
- Token完全由应用管理,所以它可以避开同源策略
- Token可以避免CSRF攻击
- Token可以是无状态的,可以在多个服务器间贡献
- tocken的有点
- 无状态,可扩展
- 安全性
- 多平台跨域
- 基于标准
18、cookie,session,token
- cookie:存放在客户端,用来保存客户端会话信息,安全性不能完成保证
- session:放在服务器端,保存认证用户信息
- token:是一种认证方式(是“令牌”的意思,主要是用于身份的验证方式)
19、URI
URL统一资源定位符,URI,统一资源标识符。URI用来区分网络上的不同资源
URI包含了URN和URL
20、三大交换方式:
- 电话交换:建立专用的物理链路,始终占用;简单粗暴,资源利用率不高,
- 报文交换:就是把整个报文完整的发送到链路中,在某个节点存储下来之后再发送到下一个节点。
- 分组交换:将一个长报文先分割为若干个较短的分组,然后把这些分组(携带源、目的地址和编号信息)逐个地发送出去。
21、时延
时延=发送时延+传播时延+处理时延+排队时延。
- 发送时延(传输时延):从开始发送数据帧,到数据帧发送完毕所需的全部时间。
- 传播时延:发送端开始发送数据到接收端收到数据所需要的全部时间。(电磁波在信通中的时间)
22、WEB页面请求过程:
- 向DNS服务器发送DNS查询报文来解析域名。
- 开始进行HTTP会话,需要先建立TCP连接。
- 在运输层的传输过程中,HTTP报文被封装进TCP中。HTTP请求报文使用端口号80,因为服务器监听的是80端口。连接建立以后,服务器会随机分配一个端口号给特定的客户端,以后的TCO传输都是使用这个端口号。
- 在网络层的传输过程中,TCP报文段会被封装进IP分组中,IP分组经过路由选择,最后到底目的地。
- 在链路层,IP分组会被封装进MAC帧中,IP地址解析成MAC地址需要使用ARP。
- 客户端发送HTTP请求报文,请求获取页面。
- 服务器发送HTTP相应的报文,客户端从而获取该页面。
- 浏览器得到页面内容以后,解析并渲染,向用户展示页面。
23、滑动窗口与拥塞控制
23.1滑动窗口
滑动窗口是用来进行流量控制的,也就是接收方告诉发送方,我还能接收多少数据
如果接收方回复的窗口一直是0怎么办,TCP有一个ZWP技术会发送一个ZWP包给接收方,来判断这个接收方到底行不行
23.2拥塞控制
加拥塞控制是因为TCP不仅仅就管两端之间的情况,还需要知晓一下整体的网络情况。
为了避免因为网络问题造成的无脑重传。就提出了拥塞控制
23.2.1 拥塞控制步骤
- 慢启动,探探路
- 拥塞避免,感觉差不多了就减速
- 拥塞发生快速重传
最后
- 如果觉得看完有收获,希望能给我点个赞,这将会是我更新的最大动力,感谢各位的支持
- 欢迎各位关注我的公众号【java冢狐】,专注于java和计算机基础知识,保证让你看完有所收获,不信你打我
- 如果看完有不同的意见或者建议,欢迎多多评论一起交流。感谢各位的支持以及厚爱。