文章目录
1. SSH知识点回顾
ssh 远程管理服务器(Linux、MAC)
telnet 防火墙、路由器、交换机
ssh 走安全传输协议 root用户 tcp/22
telnet 明文传输协议 普通用户 tcp/23
scp 远程传输
上传
下载
ssh 远程连接服务器 xshell crt putty
sftp 远程传输
用户密码
密钥
ssh-keygen
ssh-copy-id USER/.ssh/authorized_keys
ssh安全
重要的服务器不适用公网IP
端口变更 50%
禁止root直接登录 40%
禁止密码登录 20%
2. HTTP协议
2.1 HTTP版本与连接方式
超文本传输协议HTTP: 是一种按照URL指示,将超文本文档从一台主机(Web服务器)传输到另一台主机(浏览器)的应用层协议,以实现超链接的功能。
再做限速的时候,限制连接的频率好那,还是限制请求的频率好???
限制请求更加的精准,限制连接不一定精准,因为一次连接可以发送多次请求。
短连接的操作步骤是:
建立连接——数据传输——关闭连接…建立连接——数据传输——关闭连接
长连接的操作步骤是:
建立连接——数据传输…(保持连接)…数据传输——关闭连接
http1.0 短连接 一次tcp连接,一次http的请求
http1.1 长连接 仅一次tcp连接,可以发起多次http请求
http2.0 长连接与1.1不同的是,可以并发发送多次请求,发送发送发送,连接连接连接。
URL连接地址
https://www.oldboyedu.com:80/blog/2205.html
https:// 协议 http协议 https协议 ftp协议 默认都是http协议--->服务器端跳转
www 主机部分 A记录 www ---------> 公网IP
oldboyedu 域名
com 顶级域名
com. 根域名
80 默认的http端口 https443
blog/2205.html 服务器上的文件的路径
参数:?user=123&pwd=456
2.2 HTTP的请求与响应
2.2.1 HTTP请求
打开百度、打开京东都是使用的get方法
在京东买东西放入购物车的时候结算的时候使用的是post方法
访问网站时get方法,刷朋友圈是get方法
上传数据是post方法,发朋友圈是post方法
referer会记录上次访问的页面,记录上一次的url
实际作用:
(1)可以按照refer记录上一次的url,这样可以按照这个计费
(2)referer会记录上次访问的页面,记录上一次的url
作用:定位谁在访问我,可以阻止从其他页面访问我的 (/var/log/nginx/access.log)
Request URL: http://10.0.0.7/ #请求的URl地址
Request Method: GET #请求方法
Status Code: 200 OK #状态码
Remote Address: 10.0.0.7:80 #请求的主机的地址和端口
authority: www.xuliangwei.com #认证的域名
:method: GET #请求方法
:path: / #请求的路径
:scheme: https #请求的协议 http https
Accept: text/html #请求的类型
Accept-Encoding: gzip, deflate #压缩
Accept-Language: zh-CN,zh;q=0.9 #语言
Cache-Control: no-cache #缓存
Connection: keep-alive #保持连接 长连接
Host: 10.0.0.7 #请求域名
Pragma: no-cache #没有缓存
User-Agent: Chrome/65.0.3325.181 #用户浏览器
请求的方法:
1. GET 获取,下载
2. POST 提交, 上传
简单一点记忆,面试的时候说:
HTTP请求
请求行: 包含了请求方法、请求资源路径(url)、HTTP协议版本(请求语言、是否长连接 携带UA信息)
2.2.2 HTTP响应
Accept-Ranges: bytes #大小
Connection: Keep-Alive #保持连接 场链接
Content-Length: 2633 #内容长度
Content-Type: text/html; charset=UTF-8 #返回内容的类型,字符集
Date: Thu, 10 Jan 2019 01:52:01 GMT #返回服务器时间 GMT +8小时
ETag: "a49-56b5ce607fe00" #缓存
Keep-Alive: timeout=5, max=98 #长连接的超时时间
Last-Modified: Fri, 04 May 2018 08:13:44 GMT #缓存
Server: Apache/2.4.6 (CentOS) PHP/5.4.16 #使用的web软件版本
HTTP响应:
响应http协议版本 响应状态码 (server服务版本、长度 大小 时间 语言 最后修改时间)
响应空行,才能响应主体,因为头部信息和内容是要分隔开的
请求: 请求域名、端口、协议、路劲、请求的参数、是否要压缩,是否走长连接
响应: 协议、内容、主体信息、状态码(核心)
请求参数会再请求一个空行的东西,先相应空行,再响应内容
2.2.3 HTTP重要参数
referer 记录上一次过来的页面域名(从哪个页面点击进来的)
referer会记录上次访问的页面,记录上一次的url
作用:定位谁在访问我,可以阻止从其他页面访问我的 (/var/log/nginx/access.log)
user-agent 记录客户端的来源设备
http 是一个无状态,并不会记录任何的东西,如果需要记录用户的内容,需要借助到cookie
cookie 会话共享
2.2.4 HTTP重要状态码
给一个域名做跳转,因为域名不存在了,所以给你做跳转跳到另一个域名上面去
302的跳转比较好一点。如果301的话跳转的不想用了,下次用户再访问的话,就访问不到之前的服务器了,很多公司都在用302
有两个代码,一个是做给手机用的(访问一个服务器),一个是做给电脑用的(访问另一个服务器),
但是可以用user-agent来判断,你是使用的什么客户端,来调度不同的服务器上面去
响应的状态码
200 成功
301 永久跳转
302 Moved Temporarily 临时跳转
307 内部跳转
304 Not Modified 走本地缓存
客户端错误
400 客户端错误
401 认证错误(是web服务器提供的认证)
403 如果网站的指定的代码路径没有html文件则报错(权限不足)
404 Not Found 找不到该页面,没有代码的目录则会报错
服务端错误
500 内部错误
502 找不到后端主机
503 服务器过载
504 网关超时(服务器作为网关或代理,但是没有及时从上游服务器收到请求)
500的错误,再web配置服务的手没有连接数据库,有可能数据库连不上
502内部错误–>再租房的时候,找中介,中介找不到房东,这时中介回复 用户返回502找不到
503过载 由于临时的服务器维护或者过载,服务器当前无法处理请求
504超时 中介(负载均衡)打电话给房东,房东不接不回复,这就是请求超市
2.4 HTTP相关术语
pv:页面浏览量(一个请求就是一个PV、一次请求就是一个PV、一条日志就是一个PV)
uv:独立设备(uv能统计出真实的用户,更准确)
ip:独立IP
connect:tcp连接
request:http请求
举个例子:
假设公司有一座大厦,大厦有100人,每个人有一台电脑和一部手机,上网都是通过nat转换出口,每个人每个设备点击网站2次,假设一个页面就一个请求 请问对应的pv,uv,ip分别是多少
pv:100x2x2 400
uv:100x2 200
ip:1
区间统计pv的方式
/var/log/httpd/access_log 里面一条日志相当于就是一行
统计一天的pv量,只要统计出这个/var/log/access_log配置文件中这一天中有多少条的日志,就可以出来了
[root@web01 ~]# awk '/\[17\/Mar\/2021:10:20:22 +0800\]/,/\[17\/Mar\/2021:16:21:41 +0800\]/' /var/log/httpd/access_log|wc -l
216
[root@web01 ~]# grep '17/Mar/2021' /var/log/httpd/access_log |wc -l
74
[root@web01 ~]# grep '17/Mar/2021'/var/log/httpd/access_log
利用cookie的值去算,或者嵌入代码方式去算pv
3. HTTP工作原理
DNS概念
tcp三次握手
tcp四次挥手
http协议版本
1.0
1.1
2.0
http工作原理
用户通过浏览器输入URL发生了什么
浏览器跳转–>浏览器的缓存–>dns域名解析服务–>tcp连接–>http请求–>http响应–>tcp断开
http请求:
请求的方法:GET POST
请求的协议:http://
请求的域名: www.baidu.com
请求的端口: 80
请求的文件: /index.html
请求的参数: (类型、压缩、缓存、长连接、)
请求的空行
http响应
响应协议
响应状态码
响应服务器使用的版本
响应是否缓存
响应空行
响应内容主体
额外记住:返回的状态
200 301 302 307 400 401 403 404 500 502 503 504
HTTP的原理总结
HTTP协议原理总结
1.用输入域名 - > 浏览器跳转 - > 浏览器缓存 - > Hosts文件 - > DNS解析(递归查询|迭代查询)
客户端向服务端发起查询 - > 递归查询
服务端向服务端发起查询 - > 迭代查询
2.由浏览器向服务器发起TCP连接(三次握手)
客户端 -->请求包连接 SYN=1 seq=x 服务端
服务端 -->响应客户端 SYN=1 ACK=1 seq=y ack=x+1 客户端
客户端 -->建立连接 ACK=1 seq=x+1 ack=y+1 服务端
3.客户端发起http请求:
1)请求的方法是什么: GET获取
2)请求的Host主机是: www.oldboyedu.com
3)请求的资源是什么: /index.html
4)请求的端端口是什么: 默认http是80 https是443
5)请求携带的参数是什么: 属性(请求类型、压缩、认证、浏览器信息、等等)
6)请求最后的空行
4.服务端响应的内容是
1)服务端响应使用WEB服务软件
2)服务端响应请求文件类型
3)服务端响应请求的文件是否进行压缩
4)服务端响应请求的主机是否进行长连接
5.客户端向服务端发起TCP断开(四次挥手)
客户端 --> 断开请求 FIN=1 seq=u --> 服务端
服务端 --> 响应断开 ACK=1 seq=v ack=u+1 --> 客户端
服务端 --> 断开连接 FIN=1 ACK=1 seq=w ack=u+1 --> 客户端
客户端 --> 确认断开 ACK=1 seq=u+1 ack=w+1 --> 服务端
用户访问网站集群架构流程
1.客户端发起http请求,请求会先抵达前端的防火墙
2.防火墙识别用户身份,正常的请求通过内部交换机通过tcp连接后端的负载均衡,传递用户的http请求
3.负载接收到请求,会根据请求的内容进行下发任务,通过tcp连接后端的web,转发发用户的http请求
4.web接收到用户的http请求后,会根据用户请求的内容进行解析,解析分为如下:
静态请求:web直接返回给负载均衡->防火墙->用户
动态请求:web向后端的动态程序建立TCP连接,将用户的动态http请求传递至动态程序->由动态程序进行解析
5.动态程序在解析的过程中,如果碰到查询数据库请求,则优先与缓存建立tcp连接,并发起数据查询操作。
6.如果缓存没有对应的数据,动态程序再次向数据库建立tcp连接,并发起查询操作。
7.最后数据由, 数据库->动态程序->缓存->web服务->负载均衡->防火墙->用户。
4. CDN和Cookie
4.1 CDN的理解
帮助理解
- 当用户输入www.oldboy.com的时候,与网站建立连接,展示cdn的静态资源资源的时候,因为资源有链接(www.oldboyedu.com/index.html),cname---->cdnip,然后返回给浏览器,然后浏览器根据cdn的ip去找cdn服务器请求资源,如果请求的静态资源没有,则会通过cdn的服务器去请求源站,然后源站的负载均衡就会向nfs请求资源,然后请求完资源后,缓存在cdn一份,然后在给用户。(如果源站的静态资源更新,则会先向cdn热备份一份,这样可以同步全国的cdn上,否则用户没向用户请求一份静态资源,都要向cdn缓存一份,在发送给用户)
4.2 Cookie的理解
http正常情况下,页面与页面之间没有任何关联的,是一个无状态,请求返回给你就完了,不会记录任何的信息,所以要借助一个cookie来保存一个页面的信息,访问下一个页面的时候,就带着这一个cookie,从而页面也页面产生了关系
5. 小知识
(1)说架构的时候围绕这三个方面去说
1.整个架构的框架 --->告诉别人你干过什么,了解过哪些技术。会哪些技术
2.整个架构访问流程 ---> dns tcp http协议原理
3.整个架构如何管理 ---> 背景-->解决-->新技术带来了什么 "痛点"
(2)pv量
50万PV
1个人产生400PV+150PV+300PV=1000PV
UV: 500人
IP: 面向群体: 无业游民 手机 大学生: 30:1 ADSL拨号 电脑客户端
500人,450公网IP
电商
50万PV
UV: 300PV 1个产品对应100个PV 20个产品----> 3000PV ==== 200个
(4)公网ip
116.63.0.10
6. 自我总结
请求:请求域名、端口、协议、路劲、请求的参数、是否要压缩,是否走长连接
响应:协议、内容、主体信息、状态码(核心)
请求一个域名,使用什么方法,请求什么路径,版本号是多少
响应的时候一定要看它的状态码
SOA松耦合的架构 每一个系统都可以独立访问,当进入www.jd.com的时候会显示一个界面,
点击一类产品的时候,就会跳转到其他的域名,然后在它的三级域名就会改变,每个模块都是独立的,当一个功能坏的时候,不会影响整个模块
查看windows的缓存ipconfig/displaydns本地dns(Ldns)我们电脑上的dns的服务器是192.168.0.1 这个IP不是dns服务器这个是我们网关的ip地址,使用网关去解析,这个网关也不是dns,在路由器上自动获取运营商的dns服务器,通过路由器去解析,自动获取的。
所以本地的dns,一个是运营商提供的,一个是在网卡上自己配置的(比如233.5.5.5、114.114.114.114),至于哪一个快,这个不好说,因为如果使用运营商提供的如果没有,就要请求根域名,迭代查询出域名,返回给用户。但是如果阿里云dns有这个的话,直接就可以返回了。所以需要看情况。不管你是访问哪一个都需要经过运营商。
抓包工具:
yum -y install tcpdump
tcpdump -nni eth0 port 12345
查看端口号
telnet 10.0.0.200 12345
查看端口号
netstat -tlunp
查看进程数
ps -auxf