OSI七层模型
- 物理层 网线 比特流
- 数据链路层 MAC网卡地址 帧
- 网络层 IP地址 路由方式 包
- 传输层 端到端TCP UDP TCP报文 UDP数据报
- 会话层 不同应用程序间会话
- 表示层 数据格式转换、压缩加密解密等
- 应用层 web应用
好处:隔层之间独立,灵活性好,易于实现维护、能促进标准化工作
一次完整的http请求包括?
- 客户端建立与服务器的连接
- 客户端发送请求,包含请求头、请求行、请求体
- 服务端响应请求
- 客户端的浏览器根据响应做出相应渲染展示给我
- 断开连接
DNS是什么?
- 是一种域名和ip地址互相转换的分布式数据库
- 我们记 www.baidu.com 比较好记, 但是123.741.15.1就很难记
- 解析DNS通常先从浏览器缓存、系统缓存、路由器缓存等解析,缓存里实在没有再用域名服务器解析,并把结果存到系统缓存里
- 使用域名服务器解析,使用UDP协议,因为域名一般不超过512字节而且UDP快!!
DNS服务器的查询分为递归查询(局部dns服务器向根域名服务器一级一级往下查 我帮你找到答案) 迭代查询(你去问这个服务器吧)
http长短连接的区别
HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议。
- 短连接就是每次报文通讯就建立连接,通讯结束就关掉,对于服务器来说好管理,存在的链接都是有用的
- 长连接就是每次传输后不会自动断开,一般会设定一个断开时间,一般在web服务器侧定义
- http1.0默认短连接 1.1后默认长连接
粘包拆包问题
粘包拆包问题在数据链路层、网络层以及传输层都有可能发生。日常的网络应用开发大都在传输层进行,由于UDP有消息保护边界,不会发生粘包拆包问题,因此粘包拆包问题只发生在TCP协议中。
- 粘包发生的原因:发送端Nagle 算法造成可能粘包 客户端收的比来的慢造成粘包
- 拆包发生的原因:客户端接收缓存区太小、一次发送的数据大于报文所能承受的最大值(MSS)
- 解决方案:用标识符分割、设定合理的消息长度(不足补0等)、数据包中增加头部信息维护消息长度
HTTP的请求方法
- get 获取资源
- post 提交表单或上传资源
- put 上传资源以替换某内容
- head 仅获取请求头,比如检查这个资源是什么格式
- delete 删除指定资源
- trace 返回请求信息,用于诊断
- options 列出所有支持的方法
- patch 部分更新资源,put的补充
- connect 通过代理服务器建立连接
get获取数据,暴露在url上,以?分割url和数据,以&分割参数,最大2k且不安全,而且一次TCP全部发送出去,会被主动缓存
post修改或上传数据,存在于html的body里,安全,理论上无长度限制,两次TCP先发请求头响应100再发数据,默认不会被缓存
get 是幂等的(对同一url的多次请求得到的回复都是一样的)因为他不会改变资源,而post不是幂等的,所以不能用get增删改查
- get写法可以自定义,不一定非要? &分割,只要服务器能识别就行,长度也不是http协议限制的,一般是服务器或浏览器限制
TCP与HTTP对应关系
- 一个tcp连接可以建立多个http
- http/1.1 不能在一个tcp上同时运行多个http请求(有个pipelining技术但是淘汰了)
- http/2 以上支持一个tcp同时发送多个http请求(multiplexing技术)
- 可能有的浏览器不支持http/2以上的协议,那就只能同时建立多个tcp连接实现并行传输了,chrome最大支持六个tcp连接
DNS负载均衡策略
一个域名可以对应多个ip地址
-
在很多用户同时访问一个ip地址时,服务器会不堪重负,dns服务器就通过一些策略把域名解析为不同的ip地址,这个可能以不同地理位置展示不同内容....
-
策略有:轮循,权重轮循,响应时间均衡策略等
SSL的工作流程
总结一句话就是:使用非对称加密传递密钥,使用这个密钥对通讯信息对称加密
- 客户端建立ssl连接请求
- 服务端把数字证书(包含公钥A)发送给客户端验证
- 客户端验证通过
- 客户端使用这个公钥A加密另一个对话
- 服务端使用公钥A对应的私钥C(非对称加密)解密B
- 双方来往的消息都使用B加密解密
cookie
客户端通过浏览器向服务器请求时,会附带的一小段数据!!一般是上次通讯过程中服务器发送到浏览器并存储在本地的!!!
- 用途:客户端状态管理(刷新后保持登录状态、购物车添加),个性化配置(用户自定义主题等)、跟踪用户行为(浏览历史等)
- 分为临时性和持久性
session
客户端与服务器建立连接后服务器会生成一个会话(session ID),这个ID发送给客户端存储在浏览器,只要通过这个浏览器访问服务器就会携带这个id,服务器根据id检索会话内容,实现类似于cookie的功能,但他是存在服务器端的而且关闭浏览器/超时清空
-
事实上,大多数浏览器都是在cookie中存储session ID的,如果禁用了页面cookie,就会在url中以参数sid=xxx传输
-
区别:cookie只有ASCII字符串(session是object)可以存储,而且一般只有4k,还不安全,但不能都用session,服务器顶不住啊
SQL注入攻击
-
在http请求中注入恶意sql查询语句,比如注入一个 password : ‘ or ‘1’=’1 ,服务器接收到这个请求,解析到这个参数,就会把参数构建到数据库中,而这个语句永远为真,所以就实现了破译密码。。。。
-
防范措施:服务器和应用程序间加防火墙、用户输入验证和过滤、控制数据库权限、参数化传值(用%s传,而不是直接解析语句)
ARP与RARP
- ARP用于将ip地址解析为MAC网卡地址,因为一串ip地址上哪知道你的设备在哪?只有知道了硬件唯一标识才可以!!!
- RARP是逆向ARP,设备开机后没有自己的ip地址,要向RARP服务器发送自己的MAC地址,服务器才会给你分配一个ip地址!!!
常见的端口号
0--1023比较知名
- http 80 https 443
- ftp控制 20 ftp数据 21
DDos攻击
恶意控制大量网络设备,对某服务器发送大量请求导致占用网络资源。使得系统瘫痪
- 负载均衡、分布式系统,保证崩了一台还有其他的可以用
- DDos服务商,通过过滤异常流量预防攻击
MTU和MSS
- MTU是最大传输单元 ,硬件规定,如以太网是1500字节,不包含以太网帧头帧尾
