【网络】OSI七层模型,HTTP、Cookie和Session、GET和POST,HTTPS

OSI 七层模型

OSI七层模型是一个协议栈,是为了统一计算机网络标准,方便数据的交换。它自上而下依次为:

  1. 应用层:直接向用户提供服务,完成用户希望在网络上完成的各种工作。应用层是体系结构中的最高层,负责应用程序间的沟通,是用户与应用程序之间的一个接口,操作程序,进而触发更下层的服务。网络编程套接字就在这层。协议:HTTP、HTTPS等
  2. 表示层:对从应用层获取到的数据报文数据进行格式处理、安全处理和压缩处理。
  3. 会话层:对当前主机进程和目标主机进程会话的建立、管理和终止行为。
  4. 传输层:负责两台主机之间的数据传输,保证数据可靠的从源主机发送到目标主机,以及过程中的差错处理,流量控制拥塞控制等。 协议:UDP、TCP
  5. 网络层:负责地址管理和路由选择。 协议: ICMP、IGMP、IP(IPv4、IPv6)
  6. 数据链路层:负责设备之间的数据帧的传送和识别。建立相邻节点的逻辑连接,进行逻辑地址寻址、差错校验等。 协议:ARP等
  7. 物理层:负责光电信号的传递方式,物理层的能力决定了最大传输速率传输距离。
  • 局域网的两台主机是可以直接通信的。
  • 网络通信中,在应用层我们认为两台主机是在直接通信,其实是必须贯穿整个协议栈。发送方必须自顶向下的通过应用层传输层网络层链路层一层一层的封装添加自己层的报头,再通过接收方自底向上的一层一层解包去掉该层报头,最后交付给应用层用户。
  • 报头和有效载荷,报头也是数据,在C语言看来就是一个位图,用来指导当前层进行某种协议决策,就相当于快递上的快递单,告诉快递应该如何派发。
  • 每层协议的报头中都包含两个共性的字段,1、当前报文的有效载荷要交付上层的什么协议。2、明确报头和有效载荷的边界。
  • IP的意义之一就是屏蔽底层网络的差异。
  • 以太网基于碰撞检测。令牌环。
  • IP+端口号=socket套接字,能够标识互联网中的唯一的一个进程。
  • 互联网世界是一个进程间通信的世界。
  • 一个进程可关联多个端口号,但一个端口号不能关联多个进程。
  • UDP:socket、bind、recvfrom、sendto。客户端不用显示bind某个端口号,socket->sendto->recvfrom。服务端需要明确端口号,但是主机IP地址设置成any,socket->bind->recvfrom->sendto。
  • TCP:客户端socket、不用显示bind,connect发起连接、write(sock) 、read(sock)。服务端socket(listen),bind(listen)、listen(listen)、accept(listen)->newsock。
  • 序列化反序列化。

应用层

HTTP

在这里插入图片描述
在这里插入图片描述

  • url:IP+Linux路径,唯一确认一个网络资源。
  • 以行为单位
  • 请求行、请求报头、空行、请求正文
  • 状态行(状态码状态码描述)、响应报头、空行、响应正文
  • 读到空行证明报头读完了,报头中有content_length自描述字段,可以让你把请求正文完整读完。
  • http默认请求web根目录(首页)

HTTP1.0和HTTP1.1的区别**

1、HTTP 1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求。
2、HTTP 1.1则支持持久连接。在同一个tcp的连接中可以传送多个HTTP请求和响应. 多个请求和响应可以重叠,多个请求和响应可以同时进行. 更加多的请求头和响应头。
3、HTTP 1.1的持续连接,也需要增加新的请求头来帮助实现,例如,Connection请求头的值为Keep-Alive时,客户端通知服务器返回本次请求结果后保持连接;Connection请求头的值为close时,客户端通知服务器返回本次请求结果后关闭连接。HTTP 1.1还提供了与身份认证、状态管理和Cache缓存等机制相关的请求头和响应头。
4、100(Continue) Status(节约带宽)。HTTP/1.1加入了一个新的状态码100(Continue)。客户端事先发送一个只带头域的请求,如果服务器因为权限拒绝了请求,就回送响应码401(Unauthorized);如果服务器接收此请求就回送响应码100,客户端就可以继续发送带实体的完整请求了。100 (Continue) 状态代码的使用,允许客户端在发request消息body之前先用request header试探一下server,看server要不要接收request body,再决定要不要发request body。

GET 和 POST 的区别?

1、首先get主要用来获取资源,而post主要是提交数据。
2、get是通过url提交参数的,而post是通过正文提交的,get的参数大小因为是url有限制,一般由编译器决定,而post是在正文中,就没有限制了。
3、get提交是在url是显性提交,提交的参数直接显示在url中,不私密,而post的推送的数据在请求正文相对私密,但也可以抓包获取。
4、get请求会被浏览器主动缓存,而post不会。
5、底层都是TCP协议,get产生1个TCP数据包直接发送请求报头+数据,响应200。而post产生2个数据包,先发送请求报头,服务器响应100后,再发送数据,服务器再响应200,当网速好的时候,两者无差别。

HTTP状态码

1xx:信息性状态码,接收的请求正在处理。
2xx:成功状态码,请求正常处理完毕。
3xx:重定向状态码,需要进行附加操作完成请求,301是永久重定向,302/307是临时重定向。
4xx:客户端错误状态码,服务器无法处理请求。
5xx:服务器错误状态码,服务器处理请求错误。

Session和cookie会话管理会话保持

我们发现网站是有记忆的。
cookie是浏览器中的一个文件,该文件保存了用户的私密信息,http协议中,当该网站有cookie,在发起请求时,都会自动携带cookie信息,比如我们登录一个网站后,等下再登录不用再输入账号密码了,这就是因为你的请求中携带了cookie信息,这里面有你的账号和密码。如果别人盗取cookie文件就很危险。单纯使用cookie不安全。
session,核心思路:将用户的私密信息保存在服务端,而不是客户端的浏览器中。客户端登录网页请求服务器,服务端会形成一个session文件,该文件存储在服务端的磁盘中用具有唯一性的id标识,之后构建http响应,响应中会set-cookie:它的内容就是服务器保存用户私密信息文件的id,session_id=xxx;之后再请求服务器都会自动携带cookie内容为当前用户的session_id,后续服务端就认识客户端了,是一种会话保持的功能。
别人再偷走cookie,你里面仅仅是一个id,真正的内容在服务端存着,就比较安全,虽然cookie还会被偷走,以我的身份访问,但是此时就可以用一些防御手段,异地检测等。
cookie+session可以提高用户访问网站的体验。

Cookie属性

1、Name/Value:设置Cookie的名称及相对应的值,对于认证Cookie,Value值包括Web服务器所提供的访问令牌
2、Expires属性:设置Cookie的生存期。有两种存储类型的Cookie:会话性与持久性。Expires属性缺省时,为会话性Cookie,仅保存在客户端内存中,并在用户关闭浏览器时失效;持久性Cookie会保存在用户的硬盘中,直至生存期到或用户直接在网页中单击“注销”等按钮结束会话时才会失效
3、Path属性:定义了Web站点上可以访问该Cookie的目录
4、Domain属性:指定了可以访问该 Cookie 的 Web 站点或域。Cookie 机制并未遵循严格的同源策略,允许一个子域可以设置或获取其父域的 Cookie。当需要实现单点登录方案时,Cookie 的上述特性非常有用,然而也增加了 Cookie受攻击的危险,比如攻击者可以借此发动会话定置攻击。因而,浏览器禁止在Domain属性中设置.org、.com 等通用顶级域名、以及在国家及地区顶级域下注册的二级域名,以减小攻击发生的范围
5、Secure属性:指定是否使用HTTPS安全协议发送Cookie。使用HTTPS安全协议,可以保护Cookie在浏览器和Web服务器间的传输过程中不被窃取和篡改。该方法也可用于Web站点的身份鉴别,即在HTTPS的连接建立阶段,浏览器会检查Web网站的SSL证书的有效性。但是基于兼容性的原因(比如有些网站使用自签署的证书)在检测到SSL证书无效时,浏览器并不会立即终止用户的连接请求,而是显示安全风险信息,用户仍可以选择继续访问该站点。由于许多用户缺乏安全意识,因而仍可能连接到Pharming攻击所伪造的网站
6、HTTPOnly 属性 :用于防止客户端脚本通过document.cookie属性访问Cookie,有助于保护Cookie不被跨站脚本攻击窃取或篡改。但是,HTTPOnly的应用仍存在局限性,一些浏览器可以阻止客户端脚本对Cookie的读操作,但允许写操作;此外大多数浏览器仍允许通过XMLHTTP对象读取HTTP响应中的Set-Cookie头。

HTTPS

https=http+TLS/SSL数据的加密解密层。对http请求报头和有效载荷进行加密。
1、对称加密,密钥只有一个,用x加密,用x解密。比如你将要发的数据和密钥x异或一下得到的数据就是加密的,发送过去,再将加密数据与x异或进行解密。
2、非对称加密,有一对密钥,公钥+私钥。用公钥加密就用私钥解密,用私钥加密就用公钥解密。
通过hash散列把数据内容变成固定长度唯一的字符序列->称为数据摘要or数据指纹,再通过加密算法->形成数字签名,通信时将文本内容和数字签名一起发送。怎么检验是否数据被篡改,就拿文本内容同样hash算法成数据指纹,将数字签名解密成数据指纹,进行对比。
实际采用:非对称+对称方案。
密钥协商阶段采用非对称加密,数据通信阶段采用对称加密。客户端有一个对称加密的密钥下、服务端有非对称的一对密钥,客户端向服务端发送请求说我们商量一下密钥的事,服务端将公钥给客户端,客户端拿着公钥对自己的对称密钥x加密后发给服务端,因为只有服务端有非对称的私钥可以解密,然后服务端用私钥解密拿到客户端对称密钥,之后的数据通信都用对称密钥就可以了。
如果有中间抓包本质问题是:client无法判断发来的密钥协商报文是否从合法服务器发来的。CA机构。
服务器拿着自己的公司信息,域名和公钥向CA机构申请证书,CA机构将服务器的所有信息进行hash散列后用私钥进行加密形成数字签名,此时证书就可以颁发给合法的服务器了。你中间人是可以用CA公钥解密,去修改服务器的私钥,但是你再hash后无法用CA私钥加密了。如果你中间人也去申请证书,但是你证书的域名不是服务器的域名,人家客户端就不会相信你的。


⭐感谢阅读,我们下期再见
如有错 欢迎提出一起交流

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周周汪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值