计算机网络
Posted Silam Lin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算机网络相关的知识,希望对你有一定的参考价值。
计算机网络
- ----------------HTTP------------------
- GET 和 POST 请求的区别
- 常见HTTP请求方法
- HTTP1.0和HTTP1.1的区别
- HTTP1.1和HTTP2.0的区别
- HTTP与HTTPS的区别
- HTTP的请求报文
- HTTP的响应报文
- 当在浏览器中输入url并按下回车发生了什么
- 常见的HTTP请求头和响应头
- 常见的HTTP状态码
- HTTP状态码304是多好还是少好
- OPTIONS请求方法
- keep-alive
- URL的组成
- ----------------TCP与UDP------------------
- TCP与UDP的区别
- TCP和UDP的应用场景
- TCP三次握手、四次挥手
- TCP的重传机制 ?
- TCP的拥塞控制机制 ?
- TCP的流量控制机制 ?
- TCP的可靠传输机制 ?
- ----------------DNS协议------------------
- DNS协议是什么
- DNS完整的查询过程
- ----------------其它------------------
- 五层协议、OIS七层协议
- websocket?
----------------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基本概念:
- 即超文本传输协议,是互联网应用最广泛的一种网络协议
- 是一个客户端与服务器请求和应答的标准(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三次握手、四次挥手
- 第一次握手:客户端主动打开连接,将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?
以上是关于计算机网络的主要内容,如果未能解决你的问题,请参考以下文章