• 计算机网络(二)——面试题


    1.HTTP请求有哪几种方式?

    在HTTP请求中,第一行必须是一个请求行(request line),用来说明请求类型、要访问的资源以及使用的HTTP版本。

    紧接着是一个首部(header)小节,用来说明服务器要使用的附加信息。在首部之后是一个空行,再此之后可以添加任意的其他数据[称之为主体(body)]

    8种:

     
    OPTIONS  :返回服务器所支持的请求方法
    GET           :向服务器获取指定资源
    HEAD        :与GET一致,只不过响应体不返回,只返回响应头
    POST        :向服务器提交数据,数据放在请求体里,有可能导致新的资源的建立或原有资源的修改
    PUT           :与POST相似,只是具有幂等特性,一般用于更新(向指定资源位置上上传其最新内容)
    DELETE    :删除服务器指定资源(request-URL所标示的资源)
    TRACE      :回显服务器端收到的请求,用于测试和诊断
    CONNECT : HTTP/1.1协议中能够将连接改为管道方式的代理服务器
     

    GET与POST请求区别:
      本质上两者没有任何区别。他们都是HTTP协议中的请求方法。底层实现都是基于TCP/IP协议。
    (1)GET请求的参数是放在URL里的,POST请求参数是放在请求body里的;
    (2)GET请求的URL传参有长度限制,而POST请求没有长度限制;
    (3)GET请求的参数只能是ASCII码,所以中文需要URL编码,而POST请求传参没有这个限制;
    (4)GET请求提交的数据参数会在地址栏显示,而POST不会。因此POST更安全。
    (5)GET在浏览器退回时是无害的,而POST会再次提交请求。
     
    表单提交中get和post方式的区别:
    (1)get是从服务器上获取数据,post是向服务器传送数据。
    (2)对于表单的提交方式,在服务器端只能用Request.QueryString来获取Get方式提交来的数据,用Post方式提交的数据只能用Request.Form来获取。
    (3)一般来说,尽量避免使用Get方式提交表单,因为有可能会导致安全问题。比如说在登陆表单中用Get方式,用户输入的用户名和密码将在地址栏中暴露无遗。但是在分页程序中,用Get方式就比用Post好。
    在响应中唯一真正的区别在于第一行中用状态信息代替了请求信息。状态行(status line)通过提供一个状态码来说明所请求的资源情况。
    最常用的状态码有:
    ◆200 (OK): 找到了该资源,并且一切正常。
    ◆304 (NOT MODIFIED): 该资源在上次请求之后没有任何修改。这通常用于浏览器的缓存机制。
    ◆401 (UNAUTHORIZED): 客户端无权访问该资源。这通常会使得浏览器要求用户输入用户名和密码,以登录到服务器。
    ◆403 (FORBIDDEN): 客户端未能获得授权。这通常是在401之后输入了不正确的用户名或密码。
    ◆404 (NOT FOUND): 在指定的位置不存在所申请的资源。

    2.TCP和UDP有哪些区别?

    1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
    2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付

    Tcp通过校验和,重传控制,序号标识,滑动窗口、确认应答实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。

    3、UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。

    4.每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信

    5、TCP对系统资源要求较多,UDP对系统资源要求较少。

    3.TCP通过哪些措施来实现可靠的数据传输?

    1、TCP在传输有效数据之前要求通信双方必须先握手,建立通信才可以进行数据传输。                                                (握手建立通信后才可以进行数据传输)
    1、应用数据被分割成TCP认为最适合发送的数据块。这和UDP完全不同,应用程序产生的数据报长度将保持不变。       (将数据截断为合理的长度)
    2、当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。      (超时重发)
    3、当TCP收到发自TCP连接另一端的数据,它将发送一个确认。                                                                                       (对于收到的请求,给出确认响应) 
    4、TCP会根据网络带宽来自动调节发送的速度——滑动窗口技术! 也就是说会根据接收方的接收情况,自动调节每次发送多少个数据包以及每个包里面包含多少个字节                                      

    4.详细描述建立TCP连接的三次握手过程,两次握手行不行?

    TCP三次握手

    1. 客户端–发送带有 SYN 标志的数据包–一次握手–服务端
    2. 服务端–发送带有 SYN/ACK 标志的数据包–二次握手–客户端
    3. 客户端–发送带有带有 ACK 标志的数据包–三次握手–服务端

    两次握手不可以,因为三次握手后双方才能确认自己与对方的发送与接收是正常的

    第一次握手:客户端什么都不能确认;服务器端确认了对方发送正常

    第二次握手:客户端确认了:自己发送、接收正常,对方发送、接收正常;服务器端确认了:自己接收正常,对方发送正常

    第三次握手:客户端确认了:自己发送、接收正常,对方发送、接收正常;服务器端确认了:自己发送、接收正常,对方发送接收正常

    所以三次握手就能确认双发收发功能都正常,缺一不可。

    5.详细描述关闭TCP连接的四次挥手过程,为什么要四次挥手?

    TCP四次挥手

    断开一个 TCP 连接则需要“四次挥手”:

    1. 客户端向服务器端发送一个FIN报文段,提出停止TCP连接的请求
    2. 服务器收到FIN后,向客户端回一个ACK报文段,表示我同意你的关闭请求
    3. 然后服务器端再向客户端发送一个FIN报文段,请求关闭
    4. 客户端收到后,回复一个ACK报文段

      客户端发送FIN报文段时,只是表示自己没有数据要发送了,但这时还可以接受来自服务器端的数据;当服务器端返回ACK报文段时,表示它已经知道客户端没有数据要发送了,但还可以发送数据到客户端;当服务器端也发送了FIN报文段时,这个时候就表示自己也没有数据要发送了;然后客户端收到后发送ACK报文段,表示知道了,彼此这才断开了连接。

    举个例子:A 和 B 打电话,通话即将结束后,A 说“我没啥要说的了”,B回答“我知道了”,但是 B 可能还会有要说的话,A 不能要求 B 跟着自己的节奏结束通话,于是 B 可能又巴拉巴拉说了一通,最后 B 说“我说完了”,A 回答“知道了”,这样通话才算结束。

  • 相关阅读:
    expdp和impdp用法详解
    Shiro-JWT SpringBoot前后端分离权限认证的一种思路
    Maven Helper 插件-解决依赖冲突
    maven打包之resource配置
    sparkstreaming direct方式读取kafka(0.10版本)数据, 并手动维护offset
    java向kafka发送消息
    idea maven整合log4j
    java设计模式: 工厂方法模式
    异地购房使用武汉公几斤商dai转公几斤dai款
    java设计模式: 单例设计模式
  • 原文地址:https://www.cnblogs.com/toria/p/network2.html
Copyright © 2020-2023  润新知