zoukankan      html  css  js  c++  java
  • 网络

    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 跨域原理详解

  • 相关阅读:
    <<软技能,代码之外的生存技能>>读书笔记
    Pma模块详解,对用户登录linux等进行限制,密码修改限制等
    numpy pandas matplotlib
    numpy安装包scipy
    linux python 安装 nose lapack atlas numpy scipy
    kafka搭建
    实例化Bean的方法(基于xml配置)-http://blog.csdn.net/shymi1991/article/details/48153293
    转-Vue.js2.0从入门到放弃---入门实例(一)
    form表单传递对象数组
    使用ajax提交form表单,包括ajax文件上传 转http://www.cnblogs.com/zhuxiaojie/p/4783939.html
  • 原文地址:https://www.cnblogs.com/zousong/p/10513329.html
Copyright © 2011-2022 走看看