其实应该写java并发编程了,但是那个1天还真总结不完,所以先整理一个少点(并不是说内容少,只是相对考点少)的。
图太大,限制5M没法传了。直接以问答的形式说一些经常问到的题把。
1.TCP三次握手及过程?
2.TCP四次挥手过程?
各种标识位:
序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生;给字节编上序号后,就给每一个报文段指派一个序号;序列号seq就是这个报文段中的第一个字节的数据编号。
确认号ack:占4个字节,期待收到对方下一个报文段的第一个数据字节的序号;序列号表示报文段携带数据的第一个字节的编号;而确认号指的是期望接收到下一个字节的编号;因此当前报文段最后一个字节的编号+1即为确认号。
确认ACK:占1位,仅当ACK=1时,确认号字段才有效。ACK=0时,确认号无效
同步SYN:连接建立时用于同步序号。当SYN=1,ACK=0时表示:这是一个连接请求报文段。若同意连接,则在响应报文段中使得SYN=1,ACK=1。因此,SYN=1表示这是一个连接请求,或连接接受报文。SYN这个标志位只有在TCP建产连接时才会被置1,握手完成后SYN标志位被置0。
终止FIN:用来释放一个连接。FIN=1表示:此报文段的发送方的数据已经发送完毕,并要求释放运输连接
PS:ACK、SYN和FIN这些大写的单词表示标志位,其值要么是1,要么是0;ack、seq小写的单词表示序号。
3.为什么要进行三次握手?
第三次握手是为了防止失效的连接请求到达服务器,让服务器错误打开连接。
因为发送的数据可能会发送很久,但是客户端如果超时以后,客户端会还会发出一个请求信号,但是以前滞留的的信号还会到达服务器,如果没有第三次握手那么就会打开2次连接,如果有了第三次客户端会忽略以前滞留的信号。
4.4次挥手的过程中为什么会有TIME_WAIT?
客户端接收到服务器的FIN报文后进入TIME_WAIT状态而不是CLOSED,还需要等待2MSL,理由:
确保最后一个确认报文能够到达。如果server端没收到client端发来的确认报文,那么就会重新发送连接释放请求报文。
为了让本连接持续时间内所产生的所有报文都从网络中消失,使得下一个新的连接不会出现旧的连接请求报文。
5.TCP拥塞控制?
1>.慢启动:启动初始值为1,然后以指数倍的速率增加。
2>.拥塞避免:当拥塞窗口达到慢启动的阈值时,增长速度变慢,线性加一。当发生了超时那么重新进行慢启动,并且设置阈值为当前的一半。
3>.快重传:接收到数据就理解发送确认信号,而不必等到发送数据时捎带。
4>.快恢复:当收到三个连续的确认信号后,那么将窗口大小会变为当前的一半。
6.浏览器输入url请求服务器的过程?
1>.首先对url进行dns解析得到ip地址;dns解析过程首先从浏览器中查找dns缓存,如果没有的话从路由器中去找,如果路由器中也没有,那么就去ISP去查找。
2>.查找到ip地址以后,建立tcp连接
3>.然后向目标地址发送http请求。
7.说一下http协议?
http协议是一个应用层协议,是一个无状态协议,对于事务没有记忆能力,建立在tcp连接之上,还是无连接协议,即每次连接只处理一个请求,当处理完请求,并收到客户端请求以后则断开连接。
8.说一下http2协议?
http2协议修改了数据格式化和客户端和服务端的传输方式。因为http1中一次只能处理一个请求。所以http2协议解决了这个痛点,解决的方式是使用stream区分不同的请求。
采用连接多路复用的技术,将请求或者响应分成N个帧,然后在重组。(听说阿里喜欢问这个协议)
9.说一下https协议?
https协议是一个计算机网络进行安全传输协议,其实是http协议加上SSL协议外衣。利用SSL建立安全信道,加密数据包。HTTPS使用的主要目的是提供对网站服务器的身份认证,同时保护交换数据的隐私与完整性。
10.https协议加密方式?
1>.对称加密:加密和解密都是用相同的密钥。
2>.非对称加密:加密使用公钥,解密使用私钥。
3>:混合加密:使用公开密钥加密方式安全的交换在稍后共享加密要使用的密钥,确保密钥是安全的前提下,使用共享密钥的加密方式进行通信。
11.http中长连接和短连接?
长连接表示tcp传输完以后不关闭连接,短连接表示tcp传输完以后关闭连接。
12.Cookie和Session的区别?
Cookie和session是因为http协议是无状态,为了记录状态出现的。
Cookie存在于客户端,Session存在于服务端。
Cookie中可以设置失效时间。