面经笔记本(计网&&web篇)
基础篇
TCP三次握手四次挥手?
(参考:https://www.cnblogs.com/bj-mr-li/p/11106390.html)
三次握手:
第一次握手:建立连接时,客户端发送SYN包(syn=x),SIN置为1,发送到服务器,等待服务器确认;
第二次握手:服务器收到SYN包,确认客户的SYN后,ACK置为1,ack=x+1,表示确认收到消息,同时自己也发送一个SYN包(syn=k),等待客户端确认;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,TCP连接成功,完成三次握手。
四次挥手:
第一次挥手:客户端A发送一个FIN+SYN(syn=x),用来关闭客户A到服务器B的数据传送。
第二次挥手:服务器B收到这个FIN,它发回一个ACK(ack=x+1)。
第三次挥手:服务器B关闭与客户端A的连接,发送一个FIN+SYN(syn=y)给客户端A。
第四次挥手:客户端A发回ACK报文确认,并将确认并发回一个ACK(ack=x+1)。
为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?
三次握手中,第二次从服务器到客户端的握手,是可以在发送确认报文的同时发送请求报文的。但是四次挥手中,第二次和第三次挥手不能同时发送,因为服务器接收到客户端的结束请求时可能还没做好准备,中间需要一段时间完成未完成的数据传输之后才能发送结束请求。
第三次没有收到ACK包会怎样?
由于Server没有收到ACK确认,因此会重发之前的SYN+ACK(默认重发五次,之后自动关闭连接)
如果已经建立了连接,但客户端出现了故障怎么办?
服务器每收到一次客户端的请求后都会重新复位一个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。
cookie与session?
cookie是服务器在本地机器上存储的小段文本,并随每一个请求发送至同一服务器,cookie是保存在客户端的。
cookie分为会话cookie和持久cookie
会话cookie:不设置过期时间,只要关闭浏览器窗口cookie就消失了。会话cookie不保存在硬盘上,保存在内存里。
持久cookie:设置过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie依然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在不同的浏览器进程间共享。
利用持久Cookie自动登录:当用户在某个网站注册后,就会收到一个惟一用户ID的cookie。客户后来重新连接时,这个用户ID会自动返回,服务器对它进行检查,确定它是否为注册用户且选择了自动登录,从而使用户无需给出明确的用户名和密码,就可以访问服务器上的资源。
Session定义
Session是在服务器端保存用户数据。浏览器第一次发送请求时,服务器自动生成了Session ID来唯一标识这个并返回给浏览器。浏览器第二次发送请求会将前一次服务器返回的Session ID放在请求中一并发送到服务器上,服务器从请求中提取出Session ID,并和保存的所有Session ID进行对比,找到这个用户的信息。一般这个Session ID会有个时间限制,默认30分钟超时后毁掉这次Session ID。
总的来说Cookie 在客户端(浏览器、易伪造、不安全),Session 在服务器端(会消耗服务器资源)
HTTP与HTTPS有什么区别?
HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。
HTTPS和HTTP的区别主要如下:
1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。