http与tcp面试题4

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/strivenoend/article/details/84766719

-4.DNS使用的协议(既使用TCP也使用UDP)yes!

      1)、首先了解一下TCP与UDP传送字节的长度限制:
               
UDP报文的最大长度为512字节,而TCP则允许报文长度超过512字节。当DNS查询超过512字节时,协议的TC标志出现删除标志,这时则使用TCP发送。通常传统的UDP报文一般不会大于512字节。
       2)、
区域传送时使用TCP(夫域名服务向主域名服务器请求数据时),主要有一下两点考虑:
               由于dns是一个分布式系统设计,因此会存在主从服务器之间的数据传送。

辅域名服务器会定时(一般3小时)向主域名服务器进行查询以便了解数据是否有变动。如有变动,则会执行一次区域传送,进行数据同步。区域传送将使用TCP而不是UDP,因为数据同步传送的数据量比一个请求和应答的数据量要多得多。
TCP是一种可靠的连接,保证了数据的准确性。
       3)、
域名解析时使用UDP协议
           
   客户端向DNS服务器查询域名,一般返回的内容都不超过512字节,用UDP传输即可。不用经过TCP三次握手,这样DNS服务器负载更低,响应更快。虽然从理论上说,客户端也可以指定向DNS服务器查询的时候使用TCP,但事实上,很多DNS服务器进行配置的时候,仅支持UDP查询包。
 

-3.Session和cookie的区别。

  • 1)存储位置不同
  • Cookie保存在客户端,未设置存储时间的Cookie,关闭浏览器会话Cookie就会被删除;设置了存储时间的Cookie保存在用户设备的磁盘中知道过期,同时Cookie在客户端所以可以伪造,不是十分安全,敏感数据不易保存。
  • Session保存在服务器端,存储在IIS的进程开辟的内存中,而Session过多会消耗服务器资源,所以尽量少使用Session。
  • (2)Session与Cookie的耦合
  • Session是服务器用来跟踪用户的一种手段,每个Session都有一个唯一标识:session ID。当服务端生成一个Session时就会向客户端发送一个Cookie保存到客户端,这个Cookie保存的是Session的SessionId这样才能保证客户端发起请求后,用户能够与服务器端成千上万的Session进行匹配,同时也保证了不同页面之间传值的正确性.
  • (3)存储数据类型不同:
  • Session能够存储任意的JAVA对象,Cookie只能存储String类型的对象。

-2.HTTP的长连接是什么意思。

长连接相对于短链接来讲。http1.0默认短链接,http1.1默认长连接,短长是指一次tcp连接建立和断开的时长。

  长连接是指客户端与服务端建立连接后,不会因完成了一次请求后,它们之间的连接主动关闭。而短链接是指,客户端和服务端建立连接后,完成一次http请求呢和http响应,他们之间的tcp连接主动关闭。

后续的读写操作会继续使用这个链接。 如果一个连接两小时内都没有任何动作,服务器会向客户端发送一个探测报文段、根据客户端主机相应探测4个客户端状态,

①、客户端正常时,且服务器可达。此时客户端TCP响应正常,服务器将定时器复位。

②、客户端已经崩溃,并且关闭或正在重启,客户端不能响应TCP,服务器将无法收到客户端对探测器的响应。服务器总共发送10个这样的探测,每间隔75秒。如服务器没有收到任何响应,他就认为客户端已经关闭并终止连接。

③、客户端崩溃,但已重启。服务器将对其保持探测响应,这个响应是一个复位,使得服务器终止这个连接。

④、 客户机正常运行,但是服务器不可达。这种与②类。
      
 由上可以看出,长连接可以省去较多的TCP建立和关闭操作,减少浪费,节约时间。对于频繁请求资源的客户端适合使用长连接。在长连接的应用场景下,client端一般不会主动关闭连接,当client与server之间的连接一直不关闭,随着客户端连接越来越多,server会保持过多连接。这时候server端需要采取一些策略,如关闭一些长时间没有请求发生的连接,这样可以避免一些恶意连接导致server端服务受损;如果条件允许则可以限制每个客户端的最大长连接数,这样可以完全避免恶意的客户端拖垮整体后端服务,例如:数据库的连接用长连接。

-1.简述HTTP请求的报文格式。

客户端与服务端通信时传输的内容我们称之为报文。

  客户端发送给服务器的称为”请求报文“,服务器发送给客户端的称为”响应报文“。


 

0.HTTP有哪些method。

 ★ GET:获取资源。
      ★ POST:表单提交。
      ★ HEAD:获取报头信息,HEAD 方法与 GET 方法类似,但http响应中没有数据主体的返回。
      ★ PUT 与PATCH:更新资源,PUT 对后台来说 PUT 方法的参数是一个完整的资源对象,它包含了对象的所有字段,PATCH 对后台来说 PATCH 方法的参数只包含我们需要修改的资源对象的字段。
      ★ DELETE:删除资源。
      ★ OPTIONS:获取目标资源所支持的通信选项,使用 OPTIONS 方法对服务器发起请求,以检测服务器支持哪些 HTTP 方法。

1.如何理解HTTP协议的无状态性。

       HTTP协议是无状态的,指的是HTTP协议对于事务处理没有记忆功能,服务器不知道客户端是什么状态。相当于,打开一个服务器上的网页与上一次打开这个服务器上的网页之间没有任何联系。HTTP是一个无状态的面向连接的协议,无状态不代表HTTP不能保持TCP连接,更不代表HTTP使用的是UDP协议(无连接)。

2.简述Http请求get和post的区别以及数据包格式。

    ▶ GET请求可被缓存,POST请求不能被缓存。
    ▶ GET请求被保留着浏览器历史记录中,POST请求不会被保留。
    ▶ GET请求能被收藏至书签中,POST请求不能被收藏至书签。
    ▶ GET请求不应在处理敏感数据时使用,POST可以用户处理敏感数据。
    ▶ GET请求有长度限制,POST请求没有长度限制。
    ▶POST不限制提交的数据类型,所以POST可以提交文件到服务器。

本质原因:get的数据放在http请求头中,post请求放在http请求的数据体中
--------------------- 

3、TIME_WAIT和CLOSE_WAIT的区别

      CLOSE_WAIT:等待关闭,是被动关闭连接形成的,也就是第二次挥手时产生的状态。也就是当对方close一个SOCKET后发送FIN报文给自己,系统会回应一个ACK报文给对方,此时进入CLOSE_WAIT状态。接着,我们需要考虑的事情是查看是否还有数据发送给对方,如果没有就可以close这个链接,发送FIN给对方,也既关闭连接。所以在CLOSE_WAIT状态时,需要查看自己是否需要关闭连接。

      TIME_WAIT:是主动关闭连接方形成的,表示收到了对方的FIN报文,并发送ACK报文,等待2MSL(Maximum Segment Lifetime:报文最大生存时间)约4分钟时间后进入CLOSE状态。主要是防止最后一个ACK丢失,由于TIME_WAIT等待时间较长,因此server端尽量减少关闭。

4、为什么需要TIME_WAIT状态?

     假设最终的ACK丢失,服务器将重新发送FIN,客户端必须维护TCP状态信息以便可以重发最终的ACK,否则发送RST,结果Server认为发生错误。TCP实现必须可靠的终止两端的连接(双工关闭),Client必须进入TIME_WAIT状态,因为最总的ACK可能发送失败。

5、为什么TIME_WAIT状态要保持2MSL这么长时间?

     如果TIME_WAIT状态保持时间不足2MSL,第一个连接可以正常关闭,但如果有相同的第二个连接出现,第一个连接的重复报文到达,就会干扰第二个连接。TCP必须防止某个连接的重复报文在连接终止后出现,所以让TIME_WAIT状态等待时间大于2MSL,连接响应方向上的TCP报文要么完全响应完毕,要么被丢弃。建立二次连接时,就不会混淆。
 

猜你喜欢

转载自blog.csdn.net/strivenoend/article/details/84766719