zoukankan      html  css  js  c++  java
  • 网络笔试面试

    一、Http和https的区别:

       http是http协议运行在TCP之上。所有传输内容为明文,客户端和服务器端都无法验证对方的身份。

       https是http协议运行在SSL(安全套接层)/TLS(传输层安全)之上,SSL/TLS运行在TCP之上。所有传输的内容都经过加密,加密采用对称加密,但对称加密的秘钥用服务器方的证书进行非对称加密。此外客户端可以验证服务器端身份,如果配置了客户端验证,服务器方也可以验证客户端的身份。

       https协议需要到ca申请证书,一般免费的证书很少,需要交费。

       http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议

       http和https使用的是完全不同的连接方式用的端口也不同,前者为80端口,后者为443

       http的链接很简单,是无状态的

       https协议是由ssl+http协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

    二、tcp如何保证可靠传输

        1、数据包校验  2、超时重传机制  3、应答机制   4、对失序数据包重排序  5、tcp还能提供流量控制

    三、tcp三次握手原理

       第一次握手:主机A发送位码为syn=1(同步信号),随机产生seqnumber=1234567(序列号)的数据包到服务器,主机B由SYN=1知道,A要求建立联机。

       第二次握手:主机B收到请求后要确认联机信息,向A发送acknumber(应答码)=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包

       第三次握手:主机A收到后检查acknumber是否正确,即第一次发送的seqnumber+1,以及位码ack是否为1,若正确,主机A会在发送acknumber=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。

        三次握手后,主机A与主机B开始传输数据。

      (疑问:如果第三次握手中主机A传回的acknumber恰好等于主机C第一次握手传给主机B的seqnumber的话怎么办?)

    四、tcp四次分手原理

      由于tcp链接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成他的数据发送任务后就能发送一个FIN来终止这个方向的链接。收到一个FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

      1、客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送(报文段4)。

      2、服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5)。

      3、服务器B关闭与客户端A的连接,发送一个FIN给客户端A(报文段6).

      4、客户端A发回ACK报文确认,并将确认序号设置为收到序号加1(报文段7).

    五、为什么TCP采用四次挥手关闭连接,而建立连接是三次握手?

      这是因为服务器端的LISTEN状态下的SOCKET当收到SYN报文的建立连接请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有数据都发送给对方了,所以你可以未必马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以他这里ACK报文和FIN报文多数情况下都是分开发送的。

    六、为什么tcp连接要三次握手两次不可以么?为什么?

      为了防止已失效的链接请求报文段突然又传送到了服务端,因而产生错误。

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

    七、如果客户端不断地发送请求连接会怎样?

      服务器端会为每个请求创建一个链接,然后向client端发送创建链接时的回复,然后进行等待客户端发送第三次握手数据包,这样会白白浪费资源。

    八、DDos攻击

      简单的说就是向服务器发送链接请求,首先进行

      第一步:客户端向服务器端发送链接请求数据包(1)

      第二步:服务器向客户端回复链接请求数据包(2),然后服务器等待客户端发送tcp/ip链接的第三部数据包(3)

      第三步:如果客户端不向服务器端发送最后一个数据包(3),则服务器需等待30s到2min才能将此链接进行关闭。当大量的请求只进行到第二步,而不进行第三步,服务器又大量的资源等待第三个数据包。则造成DDos攻击。

    九、DDos预防(没有根治的方法,除非不用TCP/IP链接)

      1、确保服务器的系统文件是最新版本,并及时更新系统补丁

       2、关闭不必要的服务

       3、限制同时打开SYN的半连接数目,缩短SYN半连接的time out时间

       4、正确设置防火墙,启用防DDos的属性

       5、禁止对主机的非开放服务的访问

       6、限制特定IP地址的访问  

       7、严格限制对外开放的服务器的向外访问

       8、运行端口映射程序和端口扫描程序,要认真检查特权端口和非特权端口

       9、认真检查网络设备和主机/服务器系统日志,只要日志出现漏洞或是时间变更,那这台机器就可能找到了攻击。

       10、限制在防火墙外与网络文件共享。这样会给黑客截取系统文件的机会,主机信息暴露给黑客,给对方入侵机会

    十、GET和POST的区别

      从语义上说:GET从服务器获取信息;POST提交表单到服务器

      GET:   

      1、GET被强制服务器支持

      2、浏览器对URL的长度有限制,所以GET请求不能代替POST请求发送大量数据

      3、GET请求发送数据更小

      4、GET请求是不安全的

      5、GET请求是幂等的

      6、书签可收藏

      POST:

      1、POST请求不能被缓存

      2、POST请求相对GET请求是安全的

      3、书签不可收藏

      在以下条件下,请使用POST请求:

      1、无法使用缓存文件(更新服务器上的文件或服务器)

      2、向服务器发送大量数据(POST没有数据量限制)

      3、发送包含未知字符的用户输入时,POST比GET更稳定也更可靠。

      4、post比get安全性更高

    十一、TCP和UDP的区别?

        区别:

        1、UDP是无连接的,即发送数据之前不需要建立连接

        2、UDP使用尽最大的努力交付,即不保证可靠交付,同时也不使用拥塞控制。

        3、UDP是面向报文的。UDP没有拥塞控制,很适合多媒体通信要求。

        4、UDP支持一对一、一对多、多对一和多对多的交互控制

        5、UDP的首部开销小,只有8个字节

        6、TCP是面向连接的运输层协议

        7、每一个TCP连接只能有两个端点,每一条TCP连接只能是点对点的(一对一的)

        8、TCP提供可靠交付的服务

        9、TCP提供全双工通信

        10、TCP是面向字节流

        11、首部最低20个字节。

        

    十二、滑动窗口协议基本原理

        滑动窗口协议的基本原理就是在任意时刻,发送方都维持一个连续的允许发送的帧的序号,称为发送窗口;同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口。发送窗口和接收窗口的序号的上下界不一定要一样,甚至大小也可以不同。不同的滑动窗口协议窗口大小一般不同。发送方窗口内的序列号代表了那些已经被发送,但是还没有被确认的帧,或者是那些可以被发送的帧。

    十三、TCP的拥塞处理

      1、慢启动

      2、拥塞避免

      3、拥塞发生

      4、快速恢复

    十四、从输入网址到获得页面的过程

      首先根据输入的网址根据DNS协议查询DNS,获取域名对应的IP地址

      浏览器搜索自身的DNS缓存

      搜索操作系统的DNS缓存

      读取本地的HOST文件

      发起一个DNS的系统调用

        宽带运营服务器查看本身缓存

        运营商服务器发送一个迭代DNS解析请求

        然后利用获得的IP地址,利用tcp协议进行HTTP三次握手

     TCP/IP连接建立起来后,浏览器就可以向服务器发送HTTP请求

     服务器接收到这个请求后,根据路径参数,经过后端的一些处理生成HTML页面代码返回浏览器

      浏览器拿到完整的HTML页面代码开始解析和渲染,如果遇到引用的外部JS,CSS,图片的静态资源,他们同样也是一个个的HTTP请求,都要经过上面的步骤

      浏览器根据拿到的资源对页面进行渲染,最终把一个完整的页面呈现给用户

      

  • 相关阅读:
    restful
    spark深入:配置文件与日志
    Spark多种运行模式
    Spark 序列化问题
    [转]关于PreparedStatement.addBatch()方法
    scala helloworld
    java IO操作:FileInputStream,FileOutputStream,FileReader,FileWriter实例
    replace与replaceAll的区别
    String,StringBuffer与StringBuilder
    hive 空值、NULL判断
  • 原文地址:https://www.cnblogs.com/television/p/8331074.html
Copyright © 2011-2022 走看看