计算机网络

Posted Silam Lin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算机网络相关的知识,希望对你有一定的参考价值。

计算机网络

----------------HTTP------------------

GET 和 POST 请求的区别

  • 参数位置:GET请求的参数通过URL传递;POST请求则放在Request Body中
  • 参数大小:GET请求在URL中的参数有长度限制(浏览器对url长度有所限制);POST请求能发送更多的参数
  • 参数类型:GET请求只能发送ASCII字符;POST请求支持更多的数据类型
  • 安全:GET请求安全性较低,参数直接暴露在URL中
  • 速度:GET请求速度比POST请求快,总耗大约是POST请求的2/3
  • 是否缓存:浏览器一般会对GET请求缓存;一般不会对POST请求缓存
  • 应用场景:GET请求一般用于搜索/排序/过滤,主要是获取资源;POST请求一般是提写入/修改/提交数据

注意,http并没有对GET请求参数的长度做限制,是浏览器本身对URL的长度有所限制,才间接影响到GET请求在URL的参数有长度限制。

常见HTTP请求方法

HTTP1.0有三种请求方式

  • GET :请求指定的页面资源,并返回资源实体
  • POST : 向指定的资源提交数据,进行处理。有可能导致新的资源建立或已有资源的修改
  • HEAD : 类似GET请求,不返回报文主体部分,返回报文头部

HTTP1.1新增五种请求方式

  • OPTIONS : 询问支持的请求方法、请求字段等,用于预检请求
  • PUT : 上传文件,更新数据
  • DELETE : 请求服务器删掉指定的对象
  • TRACE : 回显服务器收到的请求,用于测试或诊断
  • CONNECT

HTTP1.0和HTTP1.1的区别

  • 连接方面:http1.0使用的是非持久连接,每次请求都需要新建连接,完成后则断开连接;http1.1使用的是持久连接,能使多个http请求复用一个TCP连接
  • 资源方面:http1.0存在带宽浪费的情况,不支持传送部分的对象和断点续传,只能传送整个对象;http1.1的请求头提供range,允许请求资源的一部分
  • 缓存方面:http1.0主要是用expires和If-Modified-Since作为缓存判断的标准;http1.1则新增E-tag,If-Unmodified-Since,If-Match,If-None-Match
  • host字段:http1.1新增host字段,指出服务器的域名
  • 请求方法:http1.1新增OPTIONS、PUT、DELETE、TRACE和CONNECT方法

HTTP1.1和HTTP2.0的区别

  • 二进制传输:HTTP2.0是一个二进制协议,避免使用文本,提升健壮性;HTTP1.1的头信息必须是文本(ASCII编码),数据体可以是文本也可以是二进制
  • 多路复用:一个TCP连接中可以有多个流(同时有多个请求),通过帧中的表示判断该帧属于哪个流(哪个请求)。不必按顺序一一发送,从而解决队头阻塞的问题
  • header压缩:HTTP1.1每次请求都会带上一些字段(Cookie、user agent等),造成额外的开销;HTTP2.0,一方面对头部进行压缩,减小头部信息的大小;另外一方面使得客户端和服务器同时维护一张头部信息表,将相关字段存入并以索引号进行访问,故传输时只需要传输字段对应的索引号。
  • 服务器push:HTTP2.0允许服务器未经浏览器请求,主动向客户端推送必要的资源,可以减少一些延迟时间。

HTTP与HTTPS的区别

HTTP、HTTPS

HTTP基本概念:

  • 即超文本传输协议,是互联网应用最广泛的一种网络协议
  • 是一个客户端与服务器请求和应答的标准(TCP)
  • 用于从WWW服务器传输超文本到本地浏览器
  • 使浏览器更加高效

HTTPS基本概念:

  • HTTP的安全版,以安全为目标的HTTP通道
  • 在HTTP下加入SSL/TLS层,SSL/TLS层是HTTPS的安全基础
  • 建立信息安全通道,确保传输安全性和网站的真实性

主要有四点区别:

  • https协议需要CA证书,费用高。
  • 链接方式不同,端口不同:http协议端口为80,https端口为443。
  • http超文本传输协议,是明文传输,数据未加密;htps是具有安全性的SSL加密传输协议,更加安全。
  • http的连接简单,是无状态连接;https是SSL+HTTP协议构建的,可进行加密传输、完整性校验和身份认证的网络协议。

HTTP的请求报文

组成:

  • 请求行(请求方法字段 URL字段 HTTP协议版本字段),使用空格分隔
  • 请求头部 :每一行是一对字段与其值,Host:xxxx
  • 空行 (表示请求头部到此为止)
  • 请求数据 (若是GET则为空;若是POST,则如user=admin&psw=177777)

HTTP的响应报文

组成:

  • 响应行 (HTTP协议版本 状态码 状态码描述)
  • 响应头
  • 空行
  • 响应体

当在浏览器中输入url并按下回车发生了什么

  • 解析URL:浏览器首先会对URL进行解析,分析所需要使用的传输协议和请求资源的路径。若输入的URL中的协议或主机名不合法,浏览器则将输入的内容交给搜索引擎;若没有问题,浏览器将检查URL中是否出现非法字符,有的话则对其转义。
  • 判断缓存:浏览器会依次检查请求的资源是否有在缓存当中(强缓存 & 协商缓存),若命中缓存则直接使用缓存,否则向浏览器重新发起请求。
  • DNS解析:靠域名服务器系统将URL解析为主机能够识别的IP地址
  • 获取MAC地址
  • TCP三次握手
  • 发起HTTP请求
  • 返回数据: 服务器端会返回一个html文件作为响应
  • 页面渲染 :浏览器解析html文件,构建DOM Tree,解析CSS文件,构建CSSOM Rule Tree;构建Rendering Tree;布局;绘制
  • TCP四次挥手

常见的HTTP请求头和响应头

常见的请求头:

  • Accept:浏览器能够处理的内容类型
  • Accept-Charset:浏览器能够显示的字符集
  • Accept-Encoding:浏览器能够处理的编码方式
  • Accept-Language:浏览器当前设置的语言
  • Cookie:页面设置的cookie
  • Connection:浏览器与服务器之间的连接类型
  • Cache-Control:是否用缓存
  • Host:发出请求页面所在的域
  • Referer:发出请求页面的URL
  • User-Agent:用户代理字符串
  • If-None-Match
  • If-Modified-Since

常见响应头:

  • Access-Control-Allow-Origin
  • E-tag
  • Last-Modified
  • Expires
  • Cache-Control

常见的HTTP状态码

1 ** 服务器接收到请求,需要操作者继续执行操作 (不重要)

  • 100 —— Continue 客户端继续其请求
  • 101 —— Switching Protocols 切换协议,服务器根据客户端请求而切换协议。

2 ** 操作成功并被处理 (200 201 202 204 205 206)

  • 200 —— OK 已成功
  • 201 —— Created 已创建。成功请求并创建了新的资源。
  • 202 —— Accepted 已接收。请求被接收,但未完成处理。
  • 203 —— Non-Authoritative Information 未授权信息。即请求成功,但返回的meta信息不在原始服务器,是一个副本。
  • 204 —— No Content 无内容。请求成功,处理成功后并无内容返回。
  • 205 —— Reset Content 重置内容。服务器处理成功,用户终端应重置文档视图(可根据205清除表单域)。
  • 206 —— Partial Content 部分内容。该状态码表示客户端进行了范围请求,而服务器端执行了这部分的 GET 请求。响应报文中包含由 Content-Range 指定范围的实体内容。

3 ** 重定向。需要进一步操作才能完成请求。 (301 302 303 304)

  • 300 —— Multiple Choices 多种选择。请求的资源有多个位置供用户终端选择。
  • 301 —— Moved Permanently 永久移动。请求的资源已被移到新的URL,返回信息包含新URL。浏览器会自动定向到新URL。之后的请求应用新URL代替。
  • 302 —— Found 临时移动
  • 303 —— See other 查看其它地址
  • 304 —— Not Modified 未修改。不返回新的内容,可通过缓存访问。

4 ** 客户端错误

  • 400 —— Bad Request 语法错误
  • 401 —— Unauthorized 需要用户的身份认证
  • 403 —— Forbidden 该状态码表明请求资源的访问被服务器拒绝了,服务器端没有必要给出详细理由
  • 404 —— Not Found 根据请求服务器找不到相关资源。
  • 405 —— Method Not Allowed 客户端请求中的方法被禁止。
  • 408 —— Request Time-out 服务端等待时间过长,请求超时。

5 ** 服务器错误

  • 500 —— Internal Server Error:服务器内部错误。
  • 502 —— Bad Gateway:作为网关或代理工作的服务器执行请求时,从远端服务器接收到无效响应。
  • 504 —— Gateway Time-out:充当网关或代理服务器,未能及时从远端请求。

HTTP状态码304是多好还是少好

304 Not Modified 的出现并不是错误,而是对浏览器资源缓存的说明:请求的资源可以直接调用缓存,不必再次请求,有如下好处:

  • 减少了多余的请求,减少了多余的网络传输数据
  • 减轻了服务器端的压力
  • 提高浏览器页面的加载速度,提升用户体验

但是过多的304状态码出现:

  • 有可能是页面更新周期长,或者不更新
  • 搜索引擎蜘蛛会更青睐内容频繁更新的网站:如果出现过多304状态码,无疑会降低自身的权重,搜索引擎会减少对该网站的抓取次数。

OPTIONS请求方法

  • OPTIONS是HTTP1.1新增的请求方法
  • 可以在CORS跨域请求的非简单请求中作为预检请求,带着三个关键字段,去询问服务器
  • Origin当前域名是否在许可范围内
  • Access-Control-Request-Methods 可以使用的HTTP方法
  • Access-Control-Request-Headers 列出额外的头部字段

keep-alive

基本概念:

  • 早期HTTP1.0默认使用的是非持久连接,也就是说:每次发起请求都会新建一个连接,使用完后则断开。
  • 而HTTP1.1默认使用的是持久连接,使得多个HTTP请求可以复用一个TCP连接
  • 在HTTP1.0当中,若想使得TCP连接持久有效,避免频繁新建或断开连接,需要手动配置Connection:keep-alive
  • 在HTTP1.1当作,它默认使用的是持久连接,不需要手动配置Connection:keep-alive
  • 若需要关闭,则在头部设置Connection:close

由于keep-alive的特点是可以使得多个HTTP请求复用一个TCP连接,故它有以下好处:

  • 避免频繁新建、销毁TCP连接,则减轻了对CPU的占用
  • 后续请求不必再花时间通过握手建立TCP连接,减少了后续请求的时间开销
  • TCP连接少,可以有效降低拥塞的可能性

URL的组成

http://www.example.com:80/news/index.asp?boardID=5&ID=24618&page=1#name

一个URL从前往后,应由以下部分组成:

  • 协议部分 http://
  • 域名部分 www.example.com
  • 端口部分(非必须) :80
  • 虚拟目录部分 (非必须)域名后的第一个/到最后一个/
  • 文件名部分 (非必须)
  • 参数部分
  • 锚部分

----------------TCP与UDP------------------

TCP与UDP的区别

TCP与UDP有以下五点区别

  • TCP是面向连接的;UDP是无连接的
  • TCP是面向字节流;UDP是面向报文的
  • TCP提供可靠服务:无差错、不丢失、不重复,按序到达;UDP尽最大可能交付,不保证可靠服务
  • TCP只能支持一对一;UDP能支持一对一、一对多
  • TCP首部较大,有20字节;UDP只有8字节

TCP和UDP的应用场景

TCP应用场景

  • 效率相对较低,但对准确性要求相对较高的场景。
  • 因为在传输中需要对数据进行确认、重发、排序等操作
  • 使用场景如:文件传输、邮件发送、远程登录

UDP应用场景

  • 效率相对较高,对准确性要求相对较低的场景。
  • 数据传输中,需要的是速度快,偶尔出现断续、差错并不是什么太大问题
  • 使用场景如:聊天、视频、语音通话等通信应用

TCP三次握手、四次挥手

TCP三次握手、四次挥手

  • 第一次握手:客户端主动打开连接,将SYN置为1,ACK置为0,并随机产生序列号值seq为x。客户端发送数据包(SYN=1,ACK=0,seq=x)给服务端,表示请求连接,随后进入SYN-SENT状态
  • 第二次握手:服务器端接收到数据包后,得知客户端请求连接。若同意本次连接,则将SYN置为1,ACK置为1,ack置为x+1,并随机产生序列号值seq为y,将此数据包(SYN=1,ACK=1,ack=x+1,seq=y)发送回给客户端,随后进入SYN-RCVD状态
  • 第三次握手:客户端收到数据包后,检查ACK是否为1,ack是否为x+1。若是的话,发送数据包(ACK=1,ack=y+1)给服务端;服务端再检查ACK是否为1,ack是否为y+1。若正确则建立好TCP连接通道,进入Established状态

三次握手的必要性:

  • 其实TCP三次握手完成两个重要的功能:保证双方做好发送数据的准备工作;协商好初始序列号
  • 如果没有三次握手,仅凭两次握手便建立起连接,是有可能发生死锁的。
  • 举例,考虑A和B之间的通信:1.若B向A发送一个连接请求分组,A收到后向B发送确认应答分组。2.在A的角度来看,已经完成了两次握手,可以开始发送数据了。3.但如果A的确认应答分组丢失,导致B并没有收到此次数据包,不清楚A是否做好了发送数据的准备工作,也不清楚如何协商初始序列号,甚至怀疑A是否收到连接请求分组。4.B会认为连接未建立成功,只等待请求应答分组,而忽略A发送来任何数据。

TCP的重传机制 ?

TCP的拥塞控制机制 ?

TCP的流量控制机制 ?

TCP的可靠传输机制 ?

----------------DNS协议------------------

DNS协议是什么

  • DNS,Domain Name System,即域名系统。它可以将域名转换为主机能够识别的IP地址
  • 域名服务器系统也是根据域名的层次来安排的,每一个域名服务器只对域名体系的一部分进行管辖。
  • 共有三种不同类型的域名服务器:本地域名服务器、根域名服务器、授权域名服务器

DNS完整的查询过程

  • 首先在浏览器缓存中查找是否有域名对应的IP地址:若有则直接返回,否则进一步查询
  • 将请求发送给本地域名服务器,在本地域名服务器缓存中查找:若有则直接返回,否则进一步查询
  • 本地域名服务器向根域名服务器发送请求,根域名服务器返回所查询域的顶级域名服务器的IP地址列表
  • 本地域名服务器向顶级域名服务器发送请求,接受请求的服务器查询自己的缓存:若有则直接返回,没有就返回权威域名服务器的地址
  • 本地域名服务器向权威域名服务器发送请求,权威域名服务器返回对应的IP地址
  • 本地域名服务器将结果保存到本地郁闷服务器缓存
  • 本地域名服务器将结果返回给浏览器

注意:向本地域名服务器发送的请求属于是递归查询;而本地域名服务器向根域名服务器、顶级域名服务器和权威域名服务器发起的请求是迭代查询。

----------------其它------------------

五层协议、OIS七层协议

websocket?

以上是关于计算机网络的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中计算文本文件中的文本行数时出错

文本查重算法SimHash

Qt:打印原始文本

访问报告#Error 文本消息

Qt 文本浏览器不实时显示

爬虫需要什么HTTP代理