网络

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

        301 redirect: 301 代表永久性转移(Permanently Moved)

        302 redirect: 302 代表暂时性转移(Temporarily Moved )

        http状态码301和302详解及区别

80.forward 和 redirect 的区别?

forward(转发)与redirect(重定向)的区别

81.简述 tcp 和 udp的区别?

TCP的优点:

  可靠,稳定 TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源。 TCP的缺点: 慢,效率低,占用系统资源高,易被攻击 TCP在传递数据之前,要先建连接,这会消耗时间,而且在数据传递时,确认机制、重传机制、拥塞控制机制等都会消耗大量的时间,而且要在每台设备上维护所有的传输连接,事实上,每个连接都会占用系统的CPU、内存等硬件资源。 而且,因为TCP有确认机制、三次握手机制,这些也导致TCP容易被人利用,实现DOS、DDOS、CC等攻击。

UDP的优点:

  快,比TCP稍安全 UDP没有TCP的握手、确认、窗口、重传、拥塞控制等机制,UDP是一个无状态的传输协议,所以它在传递数据时非常快。没有TCP的这些机制,UDP较TCP被攻击者利用的漏洞就要少一些。但UDP也是无法避免攻击的,比如:UDP Flood攻击…… UDP的缺点: 不可靠,不稳定 因为UDP没有TCP那些可靠的机制,在数据传递时,如果网络质量不好,就会很容易丢包。 基于上面的优缺点,那么: 什么时候应该使用TCP: 当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。 在日常生活中,常见使用TCP协议的应用如下: 浏览器,用的HTTP FlashFXP,用的FTP Outlook,用的POP、SMTP Putty,用的Telnet、SSH QQ文件传输 ………… 什么时候应该使用UDP: 当对网络通讯质量要求不高的时候,要求网络通讯速度能尽量的快,这时就可以使用UDP。 比如,日常生活中,常见使用UDP协议的应用如下: QQ语音 QQ视频 TFTP ……

TCP与UDP区别总结:

 1.  TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接

2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付
3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的
UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
5、TCP首部开销20字节;UDP的首部开销小,只有8个字节

 6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道

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

      不管三次握手,还是四次握手,这是保证信息来回两个链路可达(也就是信息能从A到B,也能从B到A)的最低要求。

  举个打电话的例子:

  A : 你好我是A,你听得到我在说话吗

  B : 听到了,我是B,你听到我在说话吗

  A : 嗯,听到了

  建立连接,开始聊天!

为什么TCP协议终止链接要四次?

1、当主机A确认发送完数据且知道B已经接受完了,想要关闭发送数据口(当然确认信号还是可以发),就会发FIN给主机B。

2、主机B收到A发送的FIN,表示收到了,就会发送ACK回复。

3、但这是B可能还在发送数据,没有想要关闭数据口的意思,所以FIN与ACK不是同时发送的,而是等到B数据发送完了,才会发送FIN给主机A。

4、A收到B发来的FIN,知道B的数据也发送完了,回复ACK, A等待2MSL以后,没有收到B传来的任何消息,知道B已经收到自己的ACK了,A就关闭链接,B也关闭链接了。

 

A为什么等待2MSL,从TIME_WAIT到CLOSE?

   在Client发送出最后的ACK回复,但该ACK可能丢失。Server如果没有收到ACK,将不断重复发送FIN片段。所以Client不能立即关闭,它必须确认Server接收到了该ACK。Client会在发送出ACK之后进入到TIME_WAIT状态。Client会设置一个计时器,等待2MSL的时间。如果在该时间内再次收到FIN,那么Client会重发ACK并再次等待2MSL。所谓的2MSL是两倍的MSL(Maximum Segment Lifetime)。MSL指一个片段在网络中最大的存活时间,2MSL就是一个发送和一个回复所需的最大时间。如果直到2MSL,Client都没有再次收到FIN,那么Client推断ACK已经被成功接收,则结束TCP连接。

 

这个网上转载的例子不错:

三次握手:
  A:“喂,你听得到吗?”A->SYN_SEND

  B:“我听得到呀,你听得到我吗?”应答与请求同时发出 B->SYN_RCVD | A->ESTABLISHED

  A:“我能听到你,今天balabala……”B->ESTABLISHED

四次挥手:
  A:“喂,我不说了。”A->FIN_WAIT1

  B:“我知道了。等下,上一句还没说完。Balabala…..”B->CLOSE_WAIT | A->FIN_WAIT2

  B:”好了,说完了,我也不说了。”B->LAST_ACK

  A:”我知道了。”A->TIME_WAIT | B->CLOSED

  A等待2MSL,保证B收到了消息,否则重说一次”我知道了”,A->CLOSED

链接:https://zhuanlan.zhihu.com/p/21940234

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

  在socket网络程序中,TCP和UDP分别是面向连接和非面向连接的。因此TCP的socket编程,收发两端(客户端和服务器端)都要有成对的socket,因此,发送端为了将多个发往接收端的包,更有效的发到对方,使用了优化方法(Nagle算法),将多次间隔较小、数据量小的数据,合并成一个大的数据块,然后进行封包。这样,接收端,就难于分辨出来了,必须提供科学的拆包机制。

  对于UDP,不会使用块的合并优化算法,这样,实际上目前认为,是由于UDP支持的是一对多的模式,所以接收端的skbuff(套接字缓冲区)采用了链式结构来记录每一个到达的UDP包,在每个UDP包中就有了消息头(消息来源地址,端口等信息),这样,对于接收端来说,就容易进行区分处理了。所以UDP不会出现粘包问题。

84.OSI 的七层模型都有哪些?

物理层:设备之间比特流的传输,物理接口,电气特性等等。常见的设备有网线,网卡等等。数据单位是比特

数据链路层:成帧,用Mac地址访问媒介,错误检测与修正。数据单位是帧

网络层:提供逻辑地址(IP地址)、选路(选择传输路线)。数据单位是报文

传输层:确定传输的可靠性以及每种协议的端口号,传输前的错误检测,流控。数据单位是TPDU

会话层:对应用会话的管理,同步。确定网络数据是否要经过远程会话 。数据单位是SPDU

表示层:数据的表现形式,特定功能的实现,比如加密压缩等。数据单位是PPDU

应用层:用户接口,无限接近用户。数据单位是APDU

其中应用层、表示层和会话层是为用户提供服务的。传输层、网络层、数据链路层和物理层是为传输数据提供服务的。

情景比喻:
  发送数据:要给北京的一个妹子写一封信(应用层),写完后要对这封信进行封装,放在信封里(表示层),因为要自己拿去邮局,要选择一条去邮局的路线,需要远程会话,这样才能将信寄出去(会话层),邮局的人就会确定这是一封邮件,要发到对方地址的邮局去(传输层),在信封上面要写明收件人的姓名,地址也就是北京,还有发件人的姓名以及地址,邮局的工作人员就会根据地址进行选择传输路线(网络层),将这封信封装在一个对方的收件地址,确认要传输过去(数据链路层),等信封到达目的城市后就会放入对应的邮局里(物理层)。

  接收数据:当北京地区的邮局收到邮件(物理层),然后会安排相关的工作人员核对信封的地址(数据链路层),然后根据这些数据确定派送的路线,确认好收件人的地址以及姓名(网络层),送到目的地后工作人员确认要交给收件人的信封是正确的(传输层),由于邮局到收件人地址是有有距离的,所以需要远程派送(会话层),收件人收到信封后,首先拆除信封,取出里面的信纸(表示层),然后阅读信的内容(应用层)

85.get 和 post 请求有哪些区别?

  • GET在浏览器回退时是无害的,而POST会再次提交请求。

  • GET产生的URL地址可以被Bookmark,而POST不可以。

  • GET请求会被浏览器主动cache,而POST不会,除非手动设置。

  • GET请求只能进行url编码,而POST支持多种编码方式。

  • GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。

  • GET请求在URL中传送的参数是有长度限制的,而POST么有。

  • 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。

  • GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。

  • GET参数通过URL传递,POST放在Request body中。

GET和POST两种基本请求方法的区别

86.如何实现跨域?

jsonp

关于跨域,以及跨域的几种方式

87.说一下 JSONP 实现原理?

JSONP的最基本的原理是:动态添加一个<script>标签,而script标签的src属性是没有跨域的限制的

jsonp 跨域原理详解

posted on 2019-03-11 21:29  UbuntuWorld  阅读(160)  评论(0编辑  收藏  举报

导航