网络

作者: 蜡笔没了小新_e8c0 | 来源:发表于2019-04-02 00:18 被阅读0次

1.http 响应码 301 和 302 代表的是什么?有什么区别?

301:301代表永久性转移。原先的资源会被永久地移除。
302:302代表暂时性转移。旧地址的资源还在(仍然可以访问)。

302网站劫持

网址A去重定向到网址B,网页显示的内容都是网址B的内容,但是在网址选择时却选择了网址A。

2.forward 和 redirect 的区别?

  • forward的地址栏始终使用的同一个;redirect的地址栏显示的最新的那个URL。
  • forward使用的是同一个请求,可以共享request中的对象;redirect不能共享。
  • forward是服务器行为,客户端发起一个新的http请求来请求资源,服务器通过自己的转发将请求资源返回给客户端,客户端会更新资源,但不会改变URL地址,不过只能在同一个容器内进行转发;redirect是客户端行为,客户端向服务器发起http请求,服务器发送给客户端一个302和新的URL来告诉客户端需要向另一个url发送请求,客户端使用服务器告诉的URL来请求资源。(这里客户端一共发起了两次请求)。

3.说一下 tcp 粘包是怎么产生的?

在服务器和客户端保持连接的时候,客户端向服务器端发送了若干个数据包,由于tcp是采用字节流的形式传送的,在客户端有可能会等待缓冲区中的数据满时才发送,或者服务器端在接收缓冲区中的数据时,一次接收了多个数据包,导致了tcp粘包。

封包和拆包

4.说一下 JSONP 实现原理?

jsonp是一种跨越同源限制实现请求数据的方法。由于浏览器存在同源限制的策略,即只有当协议,域名,端口号都相同的情况下浏览器才会对服务器发起请求。但有个特例:即通过script标签从服务器请求数据不会受到浏览器同源策略的限制,不过只能用Get请求。

<!DOCTYPE html>
<html>
<head>
    <title>JsonP</title>
</head>
<body>
<input type="text"/>
<ul></ul>
<script src="jquery-3.3.1.min.js"></script>
<script type="text/javascript">
    function getData(data) {
        var script = document.querySelector('#jsonp');
        script.parentNode.removeChild(script);
        $('ul').html('');
        for(var i=0;i<data.s.length;i++){
            $('<li>'+data.s[i]+'</li>').appendTo('ul');
        }
    }
    function getList(wd){
        var script = document.createElement('script');
        script.id = 'jsonp';
        script.src = 'https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?cb=getData&wd=' + wd;
        document.body.appendChild(script);
    }
    window.onload = function() {
    $('input').keyup(function(){
        var wd = $(this).val();
        getList(wd);
    })
}


</script>
</body>
</html>

5.tcp 为什么要三次握手,两次不行吗?为什么?

在选择TCP作为传输协议的时候,主要关注两点:一:保证数据的可靠传输;二:提高数据的传输效率。

  • 客户端会先服务端发送一个SYN包,同时会随机生成一个客户端序列号(ISN);
  • 服务端在收到客户端的包后,会向客户端发送一个ACK包,其值就是客户端的序列号加1,同时会携带SYN信号,指出服务端的序列号(随机生成);
  • 客户端收到报文后,将服务端的序列号加1作为ACK的值返回给服务端。

为什么序列号是随机生成的?随机是为了防止建立链接时数据错乱,比如如果固定是从1开始,第一轮链接超时了然后客户端重新发起链接,又从1开始第二轮,这样可能第一轮的包刚好传过来了所以导致数据错乱。为了解决这个问题,初始序号是一个随机的,本质上是随时间变化而变化,每4ms会+1,所以等到下一个重复的序号出现时需要2^32*4/1000/3600约等于4000小时。

三次握手.png

TCP两次握手:客户端向服务器发送SYN,服务器返回对于客户端的确认信号(ACK),但不能保证客户端能够接收到服务器的信息。

“已失效的连接请求报文段”的产生在这样一种情况下:client发出的第一个连接请求报文并没有丢失。而是在某个网络节点长时间的滞留了,以致延误到连接释放2以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误以为是client再次发出的一个新的连接请求。于是就想client发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就拜拜浪费掉了。采用“三次握手”的办法可以防止上述现象发生。

对于TCP两次握手不能保证数据的可靠传输。

TCP四次握手:就是在三次握手的基础上,客户端在最后一次回送确认信号(ACK)的同时也发送了一个SYN。

TCP四次握手会降低效率,因为三次握手已经可以实现建立可靠连接,多了一次没必要的请求。

6.tcp为什么是四次挥手,而不是三次或五次?

四次挥手
  • 首先客户端向服务器端发送一个FIN数据报文,并指出序列号的值;
  • 服务器收到FIN报文后,返回确认报文ACK,序列号为客户端序列号+1,关闭服务器读通道;
  • 客户端收到ACK报文后,关闭客户端写通道;
  • 服务器处理完数据后,向客户端发送FIN报文,也指出序列号的值;
  • 客户端收到FIN后,返回确认报文ACK,序列号为服务器序列号+1,关闭客户端读通道,并处于TIME_WAIT状态;
  • 服务器收到ACK报文后,关闭服务器写通道。

三次:由于TCP是全双工通信,三次会导致客户端运行时间增加,导致资源浪费。
五次:没必要。

7.TCP和UDP的区别?

  • TCP是面向连接的,是可靠的传输,UCP不需要建立连接,不保证可靠交付;
  • TCP面向字节流传送,UDP依赖报文传送;
  • TCP首部有20字节,UDP只有8字节;
  • TCP的逻辑通信信道是全双工信道,UDP是不可靠信道。

8.TCP如何保证数据传输的可靠性?

  • 校验和
  • 序列号
  • 超时重传

在BSD的Unix以及Windows系统中,超时都以0.5秒为单位进行控制。不过,由于最初的数据包还不知道往返时间,所以其重发超时一般设置为6秒左右。
数据被重发之后若还是收不到确认应答,则进行再次发送。此时,等待确认应答的时间将会以2倍、4倍的指数函数延长。

  • 确认应答
  • 连接管理
  • 流量控制
  • 拥塞控制


    拥塞控制

首先,为了在发送端调节所要发送的数据的量,定义了一个叫作“拥塞窗口”的概念。在慢启动的时候,将这个拥塞窗口的大小设置为1个数据段(1MSS)发送数据,之后每收到一个确认应答(ACK),拥塞窗口的值就加1。
由重复确认应答进行高速重发控制时,慢启动阈值的大小被设置为当时窗口大小的一半。然后将窗口的大小设置为该慢启动阈值+3个数据段的大小。

9.TIME_WAIT状态

TIME_WAIT状态也称为2MSL等待状态。
当某个TCP端点关闭TCP连接时,会在内存中维护一个小的控制块,用来记录最近所关闭连接的IP地址和端口号。
这类信息只会维持一小段时间,通常是所估计的报文段最大生存时间的两倍(称为2MSL,通常为2分钟左右),以确保在这段时间不会创建相同地址和端口号的新连接。

防止在两分钟内创建、关闭并重新创建两个具有相同IP地址和端口号的连接。

10.GET和POST的区别?

  • GET参数通过URL传递,POST放在Request Body中。
  • GET请求会被浏览器主动cache,而POST不会
  • GET请求参数会被完整保留在浏览器历史记录里,而POST的参数不会被保留
  • GET请求中有非ASCII字符,会在请求之间进行转码,POST不用,因为POST在Request Body中,通过MIME,也就可以传输非ASCII字符。
  • GET产生一个TCP数据包;而POST产生两个TCP数据包。对于GET方式的请求,浏览器会把HTTP Header和Data一并发送出去,服务器响应200(返回数据);而对于POST,浏览器先发送Header,服务器响应100 continue,浏览器再发送Data,服务器响应200 ok(返回数据)。
  • Firefox都只发送一次数据包。

GET和POST的使用场景?

POST:

  • 请求的结果有连续的副作用,例如,添加新的数据行;
  • 若使用GET方法,则表单上收集上收集的数据有可能让URL过长;
  • 要传送的数据不是采用7为的ASCII编码。

GET:

  • 请求是为了查找资源;
  • 无连续性的副作用;
  • 收集的数据及HTML表单内的输入字段长度的总长不超过1024个字符。

11.OSI模型及其协议

OSI 功能 TCP/IP协议族
应用层 文件传输、电子邮件、文件服务、虚拟终端 TFTP、HTTP、SNMP、FTP、SMTP、DNS、Telnet
表示层 数据格式化、代码转换、数据加密
会话层 解除或建立与别的节点的联系
传输层 提供端对端的接口 TCP、UDP
网络层 为数据包选择路由 IP、ICMP、RIP、OSPF、BGP、IGMP
数据链路层 传输有地址的帧以及错误检测功能 SLIP、CSLIP、PPP、ARP、RARP
物理层 以二进制数据形式在物理媒体上传输数据 ISO2110、IEEE802、IEEE802.2
  • TFTP:简单文件传输协议
  • FTP:文件传输协议
  • SNMP:简单网络管理协议
  • SMTP:简单邮件传输协议
  • RIP:路由信息协议
  • OSPF:内部网关协议
  • BGP:边界网关协议
  • IGMP:网络群组管理协议
  • SLIP:串行线路网际协议
  • CSLIP:压缩的SLIP
  • ARP:地址解析协议
  • RARP:逆地址解析协议

12.应用层有哪些协议说一下,基于udp的有哪些,基于tcp的有哪些

  • 域名系统DNS
  • 文件传输协议FTP
  • 简单邮件传输协议SMTP
  • 超文本传输协议HTTP
  • 简单网络管理协议SNMP
  • 远程登录协议Telnet
  • 网络文件系统NFS
  • 通用文件传输协议TFTP

TCP : Telnet、FTP、SMTP
UDP:NFS、SNMP、DNS、TFTP

13.四次挥手中Time_Wait的作用?

在主动发起close()的一端(客户端)在收到服务端发来的Fin请求包后就进入了Time_Wait的状态。

作用:

  • 确保服务器端能收到ACK报文段。如果在客户端发出ACK报文段后就进入closed状态,这就无法确保服务器端能正常收到ACK报文段,导致服务器不能正常进入closed状态。所以需要客户端进入Time_Wait 2MSL的时间。
  • 使本次连接的所有报文段都在网络中消失,防止在下一次新的连接中出现旧的报文段。

假设在12.106.32.254的1500端口和206.168.112.219的21端口之间有一个TCP连接。我们关闭这个连接,过一段时间后在相同的IP地址和端口之间建立另一个连接。后一个连接称为前一个连接的化身,因为它们的IP地址和端口号都相同。TCP必须防止来自某个连接的老的重复分组在该链接已终止后再现,从而被误解成属于同一连接的某个新的化身。为做到这一点,TCP将不给处于TIME_WAIT状态的连接发起新的化身。既然TIME_WAIT状态的持续时间是2MSL,这就足以让某个方向上的分组最多存活MSL秒即被丢弃,另一个方向上的的应答最多存活MSL秒也被丢弃。

14.TCP连接后,如果一方发生断电,另一方怎么知道?

运用TCP的keepalive机制。当客户端等待超过一定时间后自动给服务端发送一个空的报文。

15.TCP和HTTP的Keep-Alive的区别?

  • HTTP意图在于连接复用,避免了建立或者重新建立连接,同一个连接上串行方式传递请求-响应数据。
  • TCP意图在于保活、心跳检测。

16. HTTP/1.0和HTTP/1.1的区别?

16.1 可拓展性

  • HTTP1.1增加了OPTIONS,PUT, DELETE, TRACE, CONNECT这些Request方法.
    

16.2 带宽优化

  • HTTP/1.1中在请求消息中引入了range头域,允许只请求资源的某个部分。在响应信息中Content-Range头域中声明了返回的这部分对象的偏移值和长度。如果服务器相应地返回了对象所请求范围的内容,则响应码为206,他可以防止Cache将响应误以为是完整的一个对象。
  • HTTP/1.1加入了一个新的状态码100。客户端事先发送一个只带头域的请求,如果服务器因为权限拒绝了请求,就回送响应码401;如果服务器接收此请求就回送响应码100,客户端就可以继续发送带实体的完整请求了。

16.3 长连接

  • HTTP/1.1支持长连接和请求的流水线处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。
  • HTTP/1.1还允许客户端不用等待上一次请求结果返回,就可以发出下一个请求,当服务器端必须按照接收客户端请求的先后顺序依次回送响应结果,以保证客户端能够区分除每次请求的响应内容,这样也显著地减少了整个下载过程所需要的时间。

16.4 Host域

  • HTTP/1.0中认为每台服务器都绑定一个唯一的IP的地址,因此,请求消息中URL并没有传递主机名。(一台物理服务器上可以存在多个虚拟地址,并且共享一个IP地址)
  • HTTP/1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域回报告400 Bad Request错误。

16.5 缓存

  • HTTP/1.1增加了Cache-Control头域,支持一个可扩展的指令子集,例如max-age指令支持相对时间戳,private和no-store指令禁止对象被缓存,no-transform阻止Proxy进行任何改变响应的行为。
  • Cache使用关键字索引在磁盘中缓存的对象,在HTTP/1.0中使用资源的URL作为关键字。但可能存在不同的资源基于同一个URL的情况,要区别它们还需要客户端提供更多的信息,如Accept-Language和Accept-Charset头域。为了支持这种内容协商机制(content negotiation mechanism),HTTP/1.1在响应消息中引入了Vary头域,该头域列出了请求消息中需要包含哪些头域用于内容协商。

17.http状态码

  • 1xx:指示信息,如100 contine。
  • 2xx:表示请求成功,如200 OK,202 Accept告诉客户端请求正在被执行,但还没有处理完。
  • 3xx:重定向,如301 永久性转移,302 暂时性转移。
  • 4xx:客户端异常,如400 Bad Request,401 Unauthorized,403 Forbidden/禁止,404 Not Found。
  • 5xx:服务器异常,如502 Bad Gateway,503 Service Unavailable,504 Gateway Timeout,505 Http Version Not Supported。

18.HTTP请求报文

HTTP报文是面向文本的,报文中的每一个字段都是一些ASCII码串。
一个HTTP请求报文由请求行、请求头部、空行和请求数据4个部分组成。

18.1 请求行

请求行由请求方法字段、URL字段和HTTP协议版本3个字段组成,它们用空格风格。例如 GET /index.html HTTP/1.1

请求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。

18.2 请求头部

请求头部由关键字/键值对组成,每行一对,关键字和值用“:”分隔。
例如:

  • User-Agent:产生请求的浏览器类型。
  • Accept:客户端可识别的内容类型列表。
  • Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟机。

18.3 空行

通知服务器以下不再有请求头。

18.4 请求数据

请求数据不在GET方法中使用,而是在POST方法中使用。POST方法适用于需要客户填写表单的场合。与请求数据相关的最常使用的请求头是Content-Type和Content-Length。

19. HTTP响应报文

HTTP响应也由三个部分组成,分别是:状态行、消息报头、响应正文。

20. 如果已经建立了连接,但是客户端突然出现了故障了怎么办?

TCP设有一个保活计时器。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置2小时,若2小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。

21.从输入URL到页面加载发生了什么?

  1. DNS解析
  2. TCP连接
  3. 发送HTTP请求
  4. 服务器处理请求并返回HTTP报文(301重定向)
  5. 浏览器解析渲染页面
  6. 连接结束

21.1 DNS解析

DNS解析是将域名解析到一个IP地址的过程。

**查找顺序:浏览器缓存 --> 操作系统缓存 --> 本地host文件 --> 路由器缓存 --> ISP DNS缓存 --> 顶级DNS服务器/根DNS服务器

ISP DNS缓存:互联网服务提供商(中国电信)也会提供DNS服务,在本地查找不到的情况下,就会向ISP进行查询。

22. 为什么DNS解析用UDP?

一次UDP服务器交换可以只使用两个报文:一个查询报文,一个响应报文。一次TCP交换则至少包含9个报文:三次握手、一个查询报文、一个响应报文、四次挥手。

23. HTTPS

24. HTTPS怎么保证证书不会被伪造?

25. HTTP和HTTPS的区别?

  • HTTP是超文本传输协议,信息是明文传输;HTTPS采用SSL加密传输,更具安全性。
  • HTTP使用80端口,HTTPS使用443端口。

26. HTTP1.0 HTTP1.1 HTTP2

26.1 HTTP1.0与HTTP1.1的区别?

  • 缓存处理:在HTTP1.0中主要使用header里的if-Modified-Since,Expires来作为缓存判断的标准,HTTP1.1引入了Entity tag,If-Match等缓存头来控制缓存策略。
  • 带宽优化:HTTP1.1在请求头引入了range头域,允许只请求资源的某个部分,返回206 Partial Content。
  • 错误通知的管理:HTTP1.1 新增了24个错误状态响应码,如409 Conflict表示请求的资源与资源的当前状态冲突,410 Gone 表示服务器上的某个资源被永久性的删除。
  • Host头处理:在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名。但现在一台物理服务器上可以存在多个虚拟主机,并且共享一个IP地址。HTTP1.1请求消息和响应消息都支持Host头域,如果没有会报告一个400 Bad Request。
  • 长连接:keep-alive,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。

26.2 HTTP1 和 HTTP2的区别?

  • 二进制格式:HTTP1解析是基于文本,而HTTP2解析采用二进制格式。
  • 多路复用:每一个request都是用作连接共享机制。一个request对应一个id,这样一个连接可以有多个request,每个request可以随机的混杂在一起,接收方可以根据request的id将request再归属到各自不同的服务端请求里面。
  • Header压缩:HTTP2使用encoder来减少需要传输的header的大小,通讯双方各自cache一份header fields表,即避免了重复header的传输,又减少了需要传输的大小。

相关文章

  • 网络!网络!

    ...

  • 网络,网络

    敲击键盘,滴滴答答,行云流水,我和你在无形的世界中产生了存在着的联系。落日,似乎看不到,看到的,只是手中的那块屏幕...

  • 网络?网络!

    网络是一片浩瀚的海,在网络初建之时,如一片处女地,在上面初生了各种各样文化的苗,虽星星点点却也清新。或许是审...

  • 网络—网络婴儿

    在餐馆你可能看到,专注的母亲盯着手机,而在她臂弯里的儿童却不知所措;在家里,母亲在厨房里忙碌,而婴儿在拨弄着平板自...

  • 网络啊网络

    下午,天突降大雨。 其时我正打开电脑在听音乐,声音戛然而止,我以为是网络卡住了,就照样一边忙碌着一边等待音乐声再次...

  • 网络-网络层

    网络层 网络层数据包(IP数据包,Packet)由首部、数据2部分组成数据:很多时候是由传输层传递下来的数据段(S...

  • 测试网络

    测试网络测试网络测试网络测试网络测试网络测试网络

  • 网络 和网络笔记

    ifconfig -a 查看物理网卡硬件地址 比如 ether 00:0c:29:ab:6e:72 更改M...

  • 【网络】集群网络排错

    前几天实验室网络抽风,卡的要死要死的,做实验也做的要死要死的(跟十几台小集群在一个屋里通宵,这种酸爽简直终身难忘)...

  • Android网络——网络状态

    1. 判断网络是否可用 2. 判断网络类型

网友评论

      本文标题:网络

      本文链接:https://www.haomeiwen.com/subject/vaavbqtx.html