Java初级面试题-计算机网络篇

TCP三次握手

三次握手

  1. 首先服务器处理监听状态,等待连接请求。
  2. 客户端向服务器发送请求报文,SYN=1,seq=x。
  3. 服务器收到连接请求报文,如果同意连接,会向客户端发送确认报文SYN=1,ACK=1,ack=x+1,seq=y。
  4. 客户端收到服务器的确认报文之后,还要发送确认报文ACK=1,ack=y+1,seq=x+1。
  5. 服务器收到确认报文,连接建立。
为什么需要三次握手?

如果网络阻塞,客户端发送的连接请求会需要很长时间才能到达服务器。客户端等待一个超时重传时间后,就会重新发起连接请求。但是迟到的连接请求最后还是会到达服务器,如果不进行三次握手,服务器会打开两个连接。如果有三次握手,客户端则会忽略服务器对于迟到连接请求的确认。

TCP四次挥手

四次挥手

  1. 客户端发送连接释放报文,FIN=1,seq=u。
  2. 服务器收到之后发送确认ACK=1,seq=v,ack=u+1,此时服务器进入CLOSE-WAIT状态,服务器可以向客户端发送数据但是客户端不能向服务器发送数据。
  3. 当服务器发送完传送的数据之后,服务器会发送连接释放报文FIN=1,ACK=1,seq=w,ack=u+1。
  4. 客户端收到后发送确认ACK=1,seq=u+1,ack=w+1,客户端进入TIME-WAIT状态,等待2MSL(最大报文存活时间)后释放连接。
  5. 服务器收到客户端的确认后释放连接。
为什么需要四次挥手?

CLOSE-WAIT:为了让服务器发送完还未传送完毕的数据。

TIME-WAIT:

​ a.确保最后一个确认报文能够达到。如果服务器没收到客户端发送来的确认报文,就会重新发送连接释放请求报文,客户端等待一段时间就是为了处理这种情况的发生。

​ b.等待一段时间是为了让本次连接内产生的所有报文在网络中消失,使得下一个新的连接不会出现旧的连接请求报文。

Cookie与Session

HTTP是超文本传输协议,无状态。

Cookie

Cookie是客户端保持状态的解决方案。从定义上来讲,Cookie就是服务器发送给客户端的特殊信息,而这些信息以文本的形式存放在客户端,然后客户端每次请求的时候都会带上这些特殊信息。

Session

Session是通过服务器来保持状态,在创建Session的同时,服务器会为该Session生成唯一的SessionId,SessionId创建之后,就可以调用Session相关的方法往Session增加内容了。并且这些内容只会存放在服务器中,发送到客户端的只有SessionId。当客户端再次发送请求的时候会将SessionId带上,服务器收到请求之后,根据SessionId找到对应的Session,从而再次使用。如果请求中没有SessionId,服务器会生成一个新的SessionId。

Session的存放方式有两种:

​ a.通过URL存取,URL会带上一个jSessionId=XXXX。

​ b.通过Cookie存取(tomcat默认如此)。

在大型互联网系统中,单独使用Cookie或者Session都是不可行的(通过分布式Session可解决)。

Cookie的不足:

​ a.随着访问量和Cookie的增多,它占用的带宽会很大。

​ b.Cookie因为存放在客户端中,可以被修改,不安全。

Session的不足:

​ a.不容易在多台服务器中共享。

​ b.Session太多非常消耗服务器性能。

HTTP中GET与POST的比较

作用:GET主要用于获取资源;POST主要用于传输实体主体。

参数:GET是出现在URL中,POST存储在实体主体中。

安全:安全的HTTP方法是不会改变服务器状态的,也就是只可读。GET方法是安全的,而POST不是,因为POST的目的是传输实体主体,这其中的数据通常会改变服务器中的数据。

XMLHttpRequest:是一个API,它为客户端提供与服务器之间传输数据的功能,在Ajax应用程序中,XMLHttpRequest对象负责将用户信息以异步通信的方式发送到服务器,并接收到服务器返回的响应信息和数据。

​ a.在使用XMLHttpRequest的POST的方法时,浏览器会先发送Header在发送Data。但并不是所有浏览器都这么做,火狐浏览器就是一个例外。

​ b.XMLHttpRequest的GET方法是Header和Data一起发送。

参考

猜你喜欢

转载自blog.csdn.net/wantaceveryday/article/details/84843035