计算机网络笔记

1.http与https的区别

是超文本传输协议,请求-响应协议,基于tcp/ip通信协议传输数据。
HTTPS协议 = HTTP协议 + SSL/TLS协议,在HTTPS数据传输的过程中,需要用SSL/TLS对数据进行加密和解密,需要用HTTP对加密后的数据进行传输,由此可以看出HTTPS是由HTTP和SSL/TLS一起合作完成的。
HTTPS为了兼顾安全与效率,对数据进行对称加密,对称加密所要使用的密钥通过非对称加密传输

ssl过程
1.客户端向服务器发起HTTPS请求
2.服务器将自己的公钥和证书发送给客户端
3.客户端验证证书合法性,产生对称密码,用公钥加密给服务端。
4.服务器用私钥解密对称密码。

tls
在证书的配置上有所差别其他和普通的tcp服务一样。

ca证书可以有效防止中间人攻击,检查数据的来源。

证书怎么验证
1.检查SSL证书是否由浏览器中“受信任的根证书颁发机构”颁发
2.检查部署SSL证书的网站域名是否与证书中一致
3.检查SSL证书中的证书吊销列表,证书是否被颁发机构吊销
4.检查此SSL证书是否过期
5.浏览器会到欺诈网站数据库查询此网站是否被列入黑名单

预加载列表
即使使用了HTST(严格传输安全),对于网站的首次请求依然得使用http来获取SSL证书(这是一个先有鸡还是先有蛋的问题,显然如果直接使用https如果你没有SSL证书无法建立连接),于是这仍然给中间人攻击有机可乘。
于是有了预加载列表的概念,列表内容包含网址及其SSL证书等相关信息,因此用户无需创建http请求即可获取SSL证书,因此对于该网址的所有请求都为https,保证了不受中间人攻击。该列表以硬编码的形式写入到浏览器中,因此即使网站及时更新信息,也会由于浏览器发版等问题导致列表时效性较差。

2.知道哪些前端危险?如何防御

针对web的攻击大致分为两种,一种是攻击者主动访问 web应用传入攻击代码对服务器资源进行攻击,一种是让其他用户触发陷阱携带攻击代码发送到服务端
2.输出值转移不完全导致的
2.1.XSS(Cross Site Scripting)跨站脚本攻击
恶意攻击者利用网站没有对用户提交数据进行转义处理或者过滤不足的缺点,往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。
类型分为反射性型和存储型

反射型:XSS代码出现在URL中,作为输入提交到服务器端,服务端解析后XSS代码随响应内容返回,最后浏览器执行XSS代码。
危害包括:

  1. 获取cookie
  2. 劫持前端逻辑
  3. 盗取页面或网站信息
  4. 欺骗用户

应对方法
可以在请求中加httponly防止脚本读取sessionid。

CSP 本质上就是建立白名单,开发者明确告诉浏览器哪些外部资源可以加载和执行。我们只需要配置规则,如何拦截是由浏览器自己实现的。我们可以通过这种方式来尽量减少 XSS 攻击。

<meta http-equiv="Content-Security-Policy" content="default-src 'self'; ">
//只允许加载本站资源

对输入和URL参数进行过滤
将容易导致XSS攻击的边角字符替换成全角字符

对输出进行编码(转义)

< 转成 &lt;
> 转成 &gt;
& 转成 &amp;
" 转成 &quot;
' 转成 &#39
\ 转成 \\
/ 转成 \/
; 转成 (全角;)

2.2
sql注入,就是修改sql语句
2.3http首部攻击,修改首部。也可以修改http主体。
2.4目录遍历攻击,修改url定位到服务器其他资源

3.3CSRF(Cross Site Request Forgy)跨站请求伪造
攻击者盗用了用户的身份(cookie),在真网站没登出情况下访问假网站,以用户的名义发送恶意请求。可以说,xss是针对脚本的,而csrf是针对接口的,一旦浏览器有目标网站的cookie(登陆态),那么攻击者发送请求时这个cookie会自动填充到请求上,可以随意调用。
csrf并不是直接窃取cookie而是使用用户自己使用已有的cookie

应对方法
服务端的CSRF方式方法很多样,但总的思想都是一致的,就是在客户端页面增加伪随机数。
1.使用安全套接层,对数据进行加密,尤其是sessionid
2.用token进行校验,在服务端不通过token校验就拒绝
详细的例子:因为每个人的token都会变化,由于没办法预测,因此即使用户点击了也无效。产生token的策略可以依赖cookie产生,因为实际上攻击者虽然能使用目标网站的cookie但是没办法知道他的具体值。
3.用axios,拦截请求

3.MITM(Man in the Middle attack)中间人攻击
指请求或响应在传输途中,遭攻击者拦截并篡改。
其过程是攻击者嗅探数据包,然后对它进行修改,比如插入恶意文件。ssl能一定程度上防御中间人攻击,因为传输的数据是经过对称加密的。为了防止中间人拿到公私钥,加入了ca证书,用权威第三方来证明自己的身份。

3.TCP和UDP的区别

1.tcp面向连接(如打电话要先拨号连接);udp是无连接的,即发送数据之前不需要连接
2.tcp提供可靠的服务。也就是说通过tcp传送的数据,无差错,无丢失,不重复,且按序到达;udp尽最大努力交付,不保证交付是否成功
3.tcp面下字节流,实际上tcp把数据看成是一连串无结构的字节流;udp是面向报文的,udp没有拥塞控制,因此网络出现拥塞不会使源主机的 发送速率降低(对实时应用很有用,比如视频会议)
4.每一条tcp连接只能是点到点的;udp支持一对一,一对多,多对一,多对多的交互通信
5.tcp首部开销20字节;udp首部开销小,只有8字节
//6.tcp通信信道是全双工的可靠信道;udp则是不可靠

为什么说tcp是面向字节流的?发送的形式是字节,跟应用层写下来的报文长度没有任何关系,所以说是流。
字节流的缺点1.不处理的话会拆开中文三字节编码形成乱码。

TCP和UDP的应用

1.http、文件传输
2.语音视频、dns查询

4.三次握手和四次挥手

syn就是序列号
ack就是确认号
1.三次握手
主要作用就是为了确认双方的接收能力和发送能力是否正常指定自己的初始化序列号为后面的可靠性传送做准备。实质上其实就是1.连接服务器指定端口,建立TCP连接,2.并同步连接双方的序列号和确认号,3.交换TCP窗口大小信息

  • 刚开始客户端处于 Closed 的状态,服务端处于 Listen 状态。
  • 第一次握手:客户端给服务端发一个 SYN 报文。此时客户端处于 SYN_SEND 状态。报文段不能携带数据,但要消耗掉一个序号。
    这样服务端就能得出结论:客户端的发送能力、服务端的接收能力是正常的。
  • 第二次握手:服务器收到客户端的 SYN 报文之后,会以自己的 SYN 报文作为应答。同时发送ACK ,表示自己已经收到了客户端的 SYN, 服务端处于SYN_REVD状态,此时服务器会把此种状态下请求连接放在一个队列里,这个队列叫半连接队列。
    这样客户端就能得出结论:双方的发送接收能力都正常。不过此时服务器并不能确认客户端的接收能力是否正常。
  • 第三次握手:客户端收到 SYN 报文之后,会发送一个 ACK 报文,表示已经收到了服务端的 SYN 报文,此时客户端处于 ESTABLISHED 状态。(可以携带数据)服务器收到 ACK 报文之后,也处于 ESTABLISHED 状态,此时,双方已建立起了连接。
    这样服务端就能得出结论:双方的发送接收能力都正常。第三次握手的目的1.是为了防止客户端忽略服务端的请求不继续发送请求导致连接闲置浪费资源。2.是为了防止已经失效的连接请求报文突然又传送到了服务器,从而产生错误。
  • SYN攻击就是Client在短时间内伪造大量不存在的IP地址,并向Server不断地发送SYN包,Server则回复确认包,并等待Client确认,由于源地址不存在,因此Server需要不断重发直至超时,这些伪造的SYN包将长时间占用未连接队列,导致正常的SYN请求因为队列满而被丢弃,从而引起网络拥塞甚至系统瘫痪。

2.四次挥手
TCP 的连接的拆除需要发送四个包,因此称为四次挥手(Four-way handshake),客户端或服务器均可主动发起挥手动作。刚开始双方都处于 ESTABLISHED 状态,

  • 第一次挥手:主动方发送一个 FIN 报文并停止再发送数据,进入 FIN_WAIT1 状态。
  • 第二次挥手:被动方发送ack,处于 CLOSE_WAIT 状态即半关闭
    状态。主动方收到确认后,**进入FIN_WAIT2(终止等待2)**状态
  • 第三次挥手:被动方发送FIN报文,进入LAST_CHECK状态。
  • 第四次挥手:主动方发送 ACK 报文作为应答,此时主动方处于 TIME_WAIT 状态。需要等待2MSL 确保服务端收到自己的 ACK 报文之后才会进入 CLOSED状态,被动方收到 ACK 报文之后,就处于关闭连接了,处于 CLOSED 状态。
  • 挥手为什么要四次
    当服务端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文
    msl是报文最大生存时间,等待2msl是为了接受迟到的报文

3.2MSL等待状态
TIME_WAIT状态也成为2MSL等待状态。服务端在TIME_WAIT状态停留的时间为2倍的MSL(报文最大生存周期),为客户端提供再次发送的机会。

5.计算机网络模型

在这里插入图片描述

  • 物理层:将各个物理设备连接起来,规定了网络电气特性,负责传送0和1的信号
  • 链路层:确定了物理层数据分组方式,以帧为单位,每一帧包含了Head(18字节)和Data,Head中包含MAC地址等信息,在子网中以广播的形式确定接收方,若不在同一子网,则为接收端网关的MAC地址
  • 网络层:建立主机到主机的通信使用IP地址,以路由方式确定接收设备所在子网,以IP数据包为单位,包含Head(20-60字节)和Data,Head包含了源IP、目的IP等信息,IP数据包最大为1500字节,多出将被分组发送
  • 传输层:建立端口到端口的通信,使用TCP或者UDP传输数据,数据包也包含Head和Data,Head中包含了标志位,源端口、目的端口等信息
  • 应用层:规定应用程序的数据格式,应用层收到传输层的数据,根据格式使用不同的应用程序进行解读

网络层:ARP协议(获取MAC地址)
传输层:TCP/UDP协议
TCP重传:对超时未收到ACK的客户端进行重传,超过重传上限后将其从半连接队列中删除
应用层:DNS、HTTP

6.http1.0 1.1 2.0

1.1的进步

  • keep-alive,长连接
  • 节省带宽,先发送头部,返回100(已经收到请求头部,等待收到主体)才继续发送,401(未经授权)则不再发送,用这种方法节省带宽。
    2.0的进步
  • 多路复用,可以进行请求并发。原理是在HTTP1.1的协议中,我们传输的request和response都是基本于文本的,这样就会引发一个问题:所有的数据必须按顺序传输。而2.0中基于流,因此不再要求按序传输而是传输完后对所有的数据包进行拼接,这样的话,并发量就提升了。
  • 首部压缩,减小首部大小

7.tcp保证数据完整

1.首部校验
2.报文确认

8.websocket本质

WebSocket 协议本质上是一个基于 TCP 的协议。

为了建立一个 WebSocket 连接,客户端浏览器首先要向服务器发起一个 HTTP 请求,这个请求和通常的 HTTP 请求不同,包含了一些附加头信息,其中附加头信息"Upgrade: WebSocket"表明这是一个申请协议升级的 HTTP 请求,服务器端解析这些附加的头信息然后产生应答信息返回给客户端,客户端和服务器端的 WebSocket 连接就建立起来了,双方就可以通过这个连接通道自由的传递信息,并且这个连接会持续存在直到客户端或者服务器端的某一方主动的关闭连接。

Websocket优点:
1.使用更少的连接
2.服务端主动推送客户端
3.协议头轻量级

在websocket之前的高效通信技术是comet长轮询:
1.客户端定时或者无响应时发送数据

9.常见请求头

  • Accept:指定客户端能够接收的内容类型。
  • Accept-Charset:浏览器可以接受的字符编码集。
  • Accept-Encoding:指定浏览器可以支持的web服务器返回内容压缩编码类型。
  • Accept-Language:浏览器可接受的语言。
  • Accept-Ranges:可以请求网页实体的一个或者多个子范围字段。
  • AuthorizationHTTP:授权的授权证书。
  • Cache-Control:指定请求和响应遵循的缓存机制。
  • Connection:表示是否需要持久连接。(HTTP 1.1默认进行持久连接)
  • CookieHTTP:请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器。
  • Content-Length:请求的内容长度。
  • Content-Type:请求的与实体对应的MIME信息。
    包括实体类型、字符编码
  • Date:请求发送的日期和时间。
  • Expect:请求的特定的服务器行为。
  • From:发出请求的用户的Email。
  • Host:指定请求的服务器的域名和端口号。
  • If-Match:只有请求内容与实体相匹配才有效。
  • If-Modified-Since:如果请求的部分在指定时间之后被修改则请求成功,未被修改则返回304代码。
  • If-None-Match:如果内容未改变返回304代码,参数为服务器先前发送的Etag,与服务器回应的Etag比较判断是否改变。
  • If-Range:如果实体未改变,服务器发送客户端丢失的部分,否则发送整个实体。
  • If-Unmodified-Since:只在实体在指定时间之后未被修改才请求成功。
  • Max-Forwards:限制信息通过代理和网关传送的时间。
  • Pragma:用来包含实现特定的指令。
  • Proxy-Authorization:连接到代理的授权证书。
  • Range:只请求实体的一部分,指定范围。
  • Referer:先前网页的地址,当前请求网页紧随其后,即来路。
  • TE:客户端愿意接受的传输编码,并通知服务器接受接受尾加头信息。
  • Upgrade:向服务器指定某种传输协议以便服务器进行转换(如果支持。
  • User-AgentUser-Agent:的内容包含发出请求的用户信息。
  • Via:通知中间网关或代理服务器地址,通信协议。
  • Warning:关于消息实体的警告信息

10.流量控制与拥塞控制

1.流量控制
流量控制往往指的是点对点通信量的控制,是个端到端的问题。流量控制所要做的就是控制发送端发送数据的速率,以便使接收端来得及接受。
解决方法:滑动窗口
2.拥塞控制
所谓拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。
解决方法:

  • 慢开始、拥塞避免。慢开始就是指数增长窗口,拥塞避免就是线性增长。
  • 快重传和快恢复。快重传在某些情况下更早的重传丢失的报文段(如果当发送端接收到三个重复的确认ACK时,则断定分组丢失,立即重传丢失的报文段,而不必等待重传计时器超时)。快恢复就是考虑到如果网络出现拥塞的话就不会收到好几个重复的确认,所以发送方现在认为网络可能没有出现拥塞。所以此时不执行慢开始算法,而是将cwnd设置为ssthresh减半后的大小,然后执行拥塞避免算法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值