计算机网络:HTTP篇

计网http部分总结:

网络模型:下到上:物数网传会表应:
1、物理层通过物理设备把电脑连起来传输比特流
2、数据链路层把比特流封装成帧,通过mac地址在局域网内传输
3、网络层通过ip地址远程定位实现不同网络的主机间的通信
4、传输层实现端到端通信
5、会话层负责连接的建立与断开
6、表示层负责数据格式转换
7、应用层与用户交互;
四层模型:网络接口层-网络层(ip,arp,icmp)-传输层(tcp,udp)-应用层(http,dns)。
基于tcp的应用层协议:http80,https443, FTP20,SMTP25文件传输协议,SSH安全外壳协议22;
基于UDP的应用层协议:DNS53
键入网址到网页显示,期间发生了什么:1.DNS域名解析得到ip地址(解析过程)。2.建立tcp连接。3.应用层生成http请求报文(请求格式),经各层封装,发送到目标主机。服务端层层解析,处理请求发回响应。4.浏览器收到响应解析后显示页面。
DNS:域名和ip相互映射的数据库。我们输入域名(容易记)它解析得到ip,是应用层协议,使用UDP传输(因为快)。具体过程:先查浏览器缓存,若没有,查本地DNS服务器缓存,本地也没有,就会开始递归查询:本地DNS服务器先向根DNS服务器查,根dns返回一个顶级域名服务器的ip,再向顶级域名服务器查询,返回次级域名服务器ip,一直递归,知道本地dns获得目标ip,存储到本地dns缓存,然后返回给浏览器。起始就是只指路不带路。
负载均衡:把用户的请求均衡分配到不同服务器。DNS负载均衡策略:为一个主机名配置多个ip, 回复响应时提供不同的ip,把请求引导到不同的机器上实现负载均衡,可以根据每台机器的负载量,用户到机器的地理位置等。还有一些负载均衡方式:http重定向、反向代理nginx、轮询、一致性哈希。
客户端一直请求不到怎么办:
1、看网络有无问题,访问其他网站
2、看DNS解析可对
3、看三次握手是否成功,防火墙(有没有禁止tcp/icmp)
4、看响应状态码:如400客户端请求错误,403禁止访问权限不够,404没找到资源、 500服务器错误。
5、wireshark和tcpdump抓包调试
http请求报文主要有哪些字段:请求行,请求头,请求体
举例:
POST url(资源地址) http/1.1 请求行
Host:服务器ip端口
Connection:keep-alive长连接
Content-Length 请求体的长度
空行
name=tom 请求体
例子:

GET / HTTP/1.1 \r\n Host: 192.168.88.8:10000\r\n Connection:
keep-alive\r\n Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0
(Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/117.0.0.0 Safari/537.36 Edg/117.0.2045.60 Accept:
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate Accept-Language:
zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
空行
请求体

响应报文:主要是响应行不一样:HTTP/1.1 200 OK

常见状态码:1xx:正在处理中,2xx:成处理功;3xx:重定向;4xx:客户端错误;5xx:服务端错误
常见的:101切换请求协议,200请求成功,301永久重定向会缓存(请求的页面永久移动了),302临时重定向不缓存(暂时无法访问);400客户端请求的语法错误,403服务端禁止访问,并不是客户端请求错误。404找不到资源。500服务端错误
GET和POST:都是请求方法,
1.get是从服务器获取资源,如打开网页,浏览器就把get请求给服务器。Post是对指定资源做处理,通常用于向服务器提交数据;
2.GET请求会放在URL后面,所以它的长度受限于浏览器对URL长度的限制,POST请求放在http报文请求体里,无长度限制。
3、GET是幂等的,POST不是幂等的。幂等就是相同请求返回的响应应该是一样的,所以不能用GET做更新操作,因为它是幂等的,若网络出错他会重试导致多次更新,
4、其他方法:DELETE:删除服务器资源;HEAD:请求页面头部。
举例:
GET: 客户端向服务器请求一个页面
POST: 客户端向服务器提交用户注册信息
PUT:客户端更新用户信息
DELETE:客户端请求删除用户。
http是无状态的:http无记忆能力,每个请求都是独立的,如访问某个页面输密码,下次我还要输。可以通过cookie来记录状态信息。
http协议:超文本传输协议,基于tcp,采用请求应答的模式。
http/1.0:默认是短连接。性能很差。
http/1.1优缺点:1.默认长连接,一个tcp发送多个请求响应,避免频繁建立连接(1.0是短连接),设置方法:在请求头的connection字段位keepalive(保活机制),达到重传次数或超时时间就会断开连接。2.窃听(明文传输)、篡改(无法保证报文完整性)、冒充(不严重通信双方的身份)。3.严重的队头阻塞,若前面的请求没有被处理,后面的请求都会阻塞(不是发不出去,可理解为是一个队列,处理完了就出队了)
https:https = http + tls,在应用层和传输层间加了tls协议,为了解决窃听、冒充、篡改,采用加密、校验、身份证书。
1、原理:若使用对称加密:加密解密使用同一把钥匙,那就必须先要把钥匙发过去才行,若钥匙被截取呢?所以要用非对称加密:加密解密用不同的钥匙。即客户端用服务器公开的公钥加密后续用于通信的钥匙,那这个信息只有服务器能解密(只有它有私钥)。服务器解密拿到密钥后双方就用这把密钥进行对称加密通信。即整体来说是混合加密。
2、现在无法被窃取了,还得保证内容完整性:发送方对内容进行哈希得到一个哈希值即数字签名,把哈希值和内容一起发送过去。接收方解密后也对内容哈希,若哈希值一样,则内容没有被修改。
3、现在数据完整性也保证了,还有一个问题:刚开始使用非对称加密时,服务器是需要把公钥发给客户端的,若这里被截取了,替换成第三方的公钥,那不完蛋了。所以要验证通信双方的身份:tls采用数字证书的方式:数字证书是CA机构颁发的,类似身份证,无法冒充修改,我们把公钥、数字签名、数据全放到数字证书里发过去。
Tls四次握手过程
1、客户端发送tls版本号+加密套件+第1个随机数
2、服务端收到后确认加密套件,把数字证书发过去,里面有公钥、数字签名、第2个随机数
3、客户端收到后用服务器公钥加密第三个随机数发送过去
4、服务器收到后私钥解密,回一个确认。
至此双方都有三个随机数,三合一生成会话密钥。
http/2:基于https,他把http/1.1做了一些优化。
1、头部压缩:若同时发出多个相同头部的请求,就会消除重复头部;
2、采用二进制即帧传数据,增加传输速度,http/1.1采用文本格式传输;
3、并发传输:引入流概念,一个请求对应一个流,每个流有一个streamID, 把所有的请求全拆分成帧,添加streamID(标识他是属于哪个流的即哪个请求的),所有的帧并发发送,过去再根据streamID组装。它解决了发送方的队头阻塞,但到了接收方,只有一个窗口,他得一条请求一条请求的处理,一旦丢包,所有请求都停等待重传,所以http/2会有接收方阻塞,其实是tcp造成的。
4、服务器可以主动推送资源给客户端,1.1就只是请求-响应。

http/3.0:采用QUIC作为传输层协议,QUIC是基于UDP实现的。
优点:
1、建立连接更快:他把握手+加密放一起了,一个RTT就建立连接
2、为每个请求都分配一个流,各流之间互不影响,解决http/2的接收方阻塞问题。但若单个流内部出现丢包,还是会重传,保证可靠性。
3、拥塞控制:我们知道拥塞控制中最重要的参数就是RTT,他决定重传时间、网络拥堵情况。而TCP计算RTT不准确:因为TCP重传的包序列号与原包一样,回的ACK也一样,无法判断ACK对应的原始包还是重传包,计算RTT时要么大要么小。
QUIC规定序列号只能单增,这样计算RTT就精准。
4、QUIC比TCP更耗资源,所以2者各有长处。

cookie和session:用来记录用户状态信息的2个机制。
1、Cookie:首次访问服务器时,服务器会发送一个cookie到客户端本地保存,后续再访问带上cookie服务器就认得。
2、Session:是会话。首次访问时服务端会创建一个session, 给客户端发送sessionID,后续访问通过sessionid。
3、2者由于存储位置不同,安全性session更安全。
cookie:适合存储少量、不敏感的数据,如用户名密码(记住我)。
session:适合存储更多的、敏感数据,如购物车信息,就用session在服务端维护一个会话状态,安全且可存储数据量大。
4、sessionID一般都是放在cookie里的。

各种攻击:CSRF攻击:跨域请求伪造,挟持用户在已登录的界面上执行恶意操作。举例:用户登录银行,没退出,浏览器保存了身份认证信息,黑客伪造一个转账请求,放在帖子里,用户浏览帖子,就会把转账请求连同身份信息发给银行,导致转账。要添加校验token
DOS攻击:拒绝服务,如网络宽带攻击;
DDOS:分布式拒绝服务:不同ip的攻击者一起攻击,如syn攻击。
XSS攻击:跨站脚本攻击,攻击者向网页里插入恶意代码,用户浏览时就会执行恶意代码。对输入过滤。
SQL注入:攻击者在http请求中注入恶意sql代码,服务器构建sql命令时恶意sql被一起构造执行。对输入过滤。

websocket
我们知道TCP是全双工的,但HTTP/1.1是半双工的,即全双工的TCP被HTTP/1.1用成了半双工。所以需要一种新的应用层协议发挥TCP的全双工特性,即websocket。
1、websocket支持全双工,双方可以主动互发消息的。
2、数据格式是帧,并且做了粘包处理,数据的头部开销也比HTTP/1.1小,更快。
3、使用单一的TCP连接,没有建立多个连接的开销。
由于它的这些特点,使得它非常适合低延迟、实时通信的场景,如聊天室、游戏。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值