前端所涉及到的网络知识

0 两个小知识点

  <meta>提供了有关页面的元信息,比如针对搜索引擎和更新频率的描述和关键词。

  Linux top 是Linux 下常用的性能分析工具,能实时显示系统中各个进程的资源占用情况,用途是看哪些进程最耗CPU资源,占用的内存最多。

  top   -P 按%CPU使用率排行,根据CPU使用百分比的的大小进行排序

         -T  切换显示进程和CPU状态信息

    -M  按进程占CPU小大进行排序

1. Http 请求报文

  第一部分请求行:请求方法| 空格 | url | 空格| 协议版本| 空格| 换行符

  第二部分请求头:头部字段名 | :| 值| 回车符| 换行符|

          ······

          头部字段名 | :| 值| 回车符| 换行符|

          回车符|换行符

  第三部分请求数据:|                                                    |

  由http 的报文字段不难理解 CRLF 攻击,即 回车符,换行符攻击。因为http 报文中包含大量的回车符,换行符,当向 该报文中注入 回车符,换行符时非常容易就改变了http的报文结构,导致无法解析。

  1.1 Get & Post

  GET的语义是请求获取指定的资源。GET方法是安全、幂等、可缓存的(除非有 Cache-ControlHeader的约束),GET方法的报文主体没有任何语义。

  POST的语义是根据请求负荷(报文主体)对指定的资源做出处理,具体的处理方式视资源类型而不同。POST不安全,不幂等,(大部分实现)不可缓存。

  幂等是指同一个请求方法执行多次和仅执行一次的效果完全相同。

GET后退按钮/刷新无害,POST数据会被重新提交(浏览器应该告知用户数据会被重新提交)。
GET书签可收藏,POST为书签不可收藏。
GET能被缓存,POST不能缓存 。
GET编码类型application/x-www-form-url,POST编码类型encodedapplication/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码。
GET历史参数保留在浏览器历史中。POST参数不会保存在浏览器历史中。
GET对数据长度有限制,当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。POST无限制。
GET只允许 ASCII 字符。POST没有限制。也允许二进制数据。
与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分。在发送密码或其他敏感信息时绝不要使用 GET !POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。
GET的数据在 URL 中对所有人都是可见的。POST的数据不会显示在 URL 中。

   1.2  请求头

   请求头通知服务器有关客户端请求的信息,由键:值对组成。

  User-Agent:产生请求的浏览器

  Host:请求主机名

  Accept:客户端可识别的内容类型

  Connection:Keep-alive 维持连接

  Referer:请求的URL从哪里获得。

  1.3 请求数据

  Post方法会携带请求数据。

2.Http 响应报文

  http 响应报文由 状态行  消息报头  响应正文 三部分组成

  2.1 状态行

   Http-version  Status-Code  Reason-Phrase  CRLF

  即http 协议版本 ,响应状态码,状态码文本描述,回车换行

  2.1.1 响应状态码

  常见的有:

  200 OK :请求成功

  400  Bad Request :客户端请求有语法错误

  401  Unauthorized :请求未经授权,这个状态码和www-Authenticate报头域一起使用

  403  Forbidden:服务器收到请求,但拒绝提供服务

  500  Internal Error : 服务器发生了不可预期的错误

  503  Server Unavailable :服务器当前不能处理客户端的请求,一段时间可能恢复正常。

3 网络协议

   应用层   ------    文件传输,电子邮件 包括: HTTP(s)  TFTP  FTP  SMTP DNS

   表示层   ------    数据格式化,加密

   会话层   ------    建立会话,解除会话

   传输层   --------  提供端到端接口,TCP,UDP

   网络层  --------   为数据包选择路由,包括 :IP  ICMP  BGP  IGMP

   数据链路层 ------  传输有地址的帧以及错误检测功能

   物理层 -----  以二进制的形式在物理媒体上传输数据

   数据从应用层传下来会在每一层都加上头部信息,进行封装,然后再发送到数据接收端。

  3.1 TCP  &  UDP

  TCP 是一个面向连接的可靠的,基于字节流传输控制协议。UDP是一种简单的面向数据报的传输层协议。

  TCP协议能为应用程序提供可靠的通信连接,使一台计算机发出的字节流无差错地发往网络上的其他计算机,对可靠性要求高的数据通信系统往往使用TCP协议传输数据。

  UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去
  TCP 通过三次握手建立连接,四次分手释放连接保证了通信的可靠性,并且会对传输后的字节流排序,提供了流量控制和拥塞控制等机制来保证可靠性和有序性。但是TCP的传输效率比UDP低,并且报文头部开销大于UDP。
  TCP 偏向点对点的全双工通信,而UDP 可以使用组播 实现一对多,多对多的通信。典型的QQ则是用的UDP传输协议。
·  3.2 三次握手&四次分手
    
   三次握手的目的是同步连接双方的序列号和确认号并交换TCP窗口大小信息。
   第一次握手:客户端向服务器端发送 SYN=1,序列号为 Seq = x 的请求报文。
   第二次握手:服务器端收到请求报文后,发送SYN=1,序列号Seq = y,确认号 Ack = x+1 的应答报文;
   第三次握手:客户端收到该应答报文后,进入连接建立状态,证明了服务器端是可通信的,然后发送一个确认报文 Ack = y+1;服务器端收到该报文,说明客户端响应了我的连接,随即也进入连接建立状态。
   四次分手的目的保证可靠性。
   第一次分手:FIN =1 ,seq = x+2 , ack = y+1,
   第二次分手:ack = x=3 ,说明客户端明白了服务器端同意分手,
   第三次分手:FIN = 1, seq = y+1 , 服务器端也提出分手
   第四次分手:Ack = y+2 ,客户端也同意服务器端提出的分手。服务端收到后也明确了客户端的意思。此时分手完全建立。
 
          3.2 DNS(Domain Name System)
 
    网络通信一般是基于 TCP/IP 的,IP 协议是根据 IP 地址进行网络通信的。而我们要访问某个服务器一般是通过输入网址(网址包含语义,便于人们记忆),而要实现与网址对应的IP的服务器进行同信,则需要将网址转化为对应的IP地址,DNS 就是负责该项工作的服务器。
    DNS域名解析同时占有 TCP 和UDP 这两个传输层协议的53端口,那么它是如何在不同的情况下选择不同的协议呢?
         DNS域名解析的服务器是一个集群,有主NDS服务器和辅助DNS服务器,当辅助DNS服务器向主请求读取该区域的DNS数据信息时,使用TCP协议,因为此时的通信数据量较大,而TCP能保证大量数据传输的正确性。而UDP数据传输是基于数据报的,并且限定了数据报的最大长度为512字节,所以UDP不适合大量数据的传输,而TCP则是基于字节流的数据传输协议,对数据的小大没有限制,并且能保证大量数据传输的正确性,顾在此种情形下选择 TCP协议。而当单个主机和本地DNS服务器之间的通信则通过UDP协议,因为此种情形下,数据量不会超过 512字节,并且UDP的传输效率要远高于TCP的传输效率。
         3.2.1 DNS 的解析过程
          
 
参考:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
原文地址:https://www.cnblogs.com/wust-hy/p/7485923.html