网络
OSI七层网络模型
TCP三次握手过程,为什么需要三次?
首先Client向Server发送请求报文段,同时同步自己的SYN(x),Client进入SYN_SENT状态。
Server接收到Client的请求报文段,返回CLient自己的seq(y)及ack(x+1),Server进入SYN_REVD状态。
CLinet收到Server的SYN+ACK包,向服务器发送一个序列号seq(x+1),确认号为ack(y+1),此包发送完毕,Client和Server进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
TCP四次挥手的过程
为什么TCP建立连接需要三次握手,而断开连接需要四次挥手?
因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,”你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。
TIME_WAIT的意义,为什么等于2MSL?
MSL是最长报文段寿命,设置的目的是:
保证A发送的最后一个ACK能够到达B,防止已失效的报文段出现在本连接中
socket中的close是一次就关闭的吗?半关闭状态是怎么产生的?
不是,当A发送给B控制FIN的时候,A到B这个方向的连接就关闭了,这个时候处于半关闭的状态,但是B到A这个方向的连接并没有关闭,因为B要等到将数据全部发送完毕之后才会发送FIN给A。
重点掌握慢开始、拥塞避免、快重传、快恢复。
TCP流量控制,采用滑动窗口会用什么问题?
流量控制是为了让发送方的发送速率不要太快,要让接收方来得及接收。
Nagle算法:①当发送方首都对第一个数据字符的确认后,再把发送缓存中的所有数据组装成一个报文段发送出去,同时继续对随后到到达的数据进行缓存。②当到达的数据已达到发送窗口大小的一半或已达到报文段的长度的时候就立即发送一个报文段。
-
糊涂窗口综合征:就是由于发送端和接收端上的处理不一致,导致网络上产生很多的小包,结果报文段包含了一个大大的头部,携带数据很少。数据传输效率低。处理方法是等待窗口大小满足一定的条件之后(能够接收一个最大报文,或者缓冲区的一半),再来发送窗口通告,这样就不会产生小报文
-
拥塞控制和流量控制的区别?
- 拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不会过载
- 流量控制往往是点对点通信量的控制,是一个端到端的问题,流量控制要做的是抑制发送端发送数据的速率,以便接收端来得及接收。
http1.1提供永久性连接,即1.0使用非持久连接
http1.1增加host头
http1.1还提供了身份认证,状态管理和cache缓存机制等相关的请求头和响应头。
http和https的区别?由http升级到https需要哪些操作?
HTTP 指的是超文本传输协议,https 指的是超文本传输安全协议。HTTPS 就是将 HTTP 中的传输内容进行了加密,然后通过可靠的连接,传输到对方的机器上。加密的协议是 TLS,其前身是 SSL。
http中浏览器一个URL的流程,这个过程中浏览器做些什么,URL包括哪三个部分?
浏览器向DNS服务器查找输入URL对应的IP地址。
DNS服务器返回网站的IP地址。
浏览器根据IP地址与目标web服务器在80端口上建立TCP连接
浏览器获取请求页面的html代码。
浏览器在显示窗口内渲染HTML。
窗口关闭时,浏览器终止与服务器的连接。
URL包括:①协议(或称为服务方式);②存有该资源的主机IP地址(有时也包括端口号);③主机资源的具体地址,如目录和文件名等。
==一个机器能使用的端口号上限是多少?为什么?可以改变吗?如果想要用的端口超过这个限制怎么办?==
端口号最多是65535个,端口号2个字节,16位,所以最大表示65535.不能改变
对称加密和非对称加密
对称加密(也叫私钥加密)指加密和解密使用相同密钥的加密算法。有时又叫传统密码算法,就是加密密钥能够从解密密钥中推算出来,同时解密密钥也可以从加密密钥中推算出来。
非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
数字证书的了解(高频)
客户端为什么信任第三方证书?
RSA加密算法,MD5原理
单条记录高并发访问的优化
介绍一下ping的过程,分别用到了那些协议?
ping用来测试两台主机之间的连通性。ICMP协议
正常情况:如果Socket Client 发送的数据包,在Socket Server端也是一个一个完整接收的,那个就不会出现粘包和分包情况,数据正常读取。
粘包情况:Socket Client发送的数据包,在客户端发送和服务器接收的情况下都有可能发送,因为客户端发送的数据都是发送的一个缓冲buffer,然后由缓冲buffer最后刷到数据链路层的,那么就有可能把数据包2的一部分数据结合数据包1的全部被一起发送出去了,这样在服务器端就有可能出现这样的情况,导致读取的数据包包含了数据包2的一部分数据,这就产生粘包,当然也有可能把数据包1和数据包2全部读取出来。
分包情况:意思就是把数据包2或者数据包1都有可能被分开一部分发送出去,接着发另外的部分,在服务器端有可能一次读取操作只读到一个完整数据包的一部分。
在数据包发送的情况下,有可能后面的数据包分开成2个或者多个,但是最前面的部分包,黏住在前面的一个完整或者部分包的后面,也就是粘包和分包同时产生了。
==一个IP配置多个域名,靠什么识别?==
主机头
路由器的工作原理和作用,交换机的工作原理和作用
对路由协议的了解与介绍。内部网关协议IGP包括RIP,OSPF和外网网关协议EGP和BGP
路由协议使用的算法
服务器攻击(DDos攻击
Linux网络tcp连接大量CLOSE_WAIT和TIME_WAIT状态的出现和解决方法
关于CLOSE_WAIT和TIME_WAIT状态,服务器端都有可能出现。
TIME_WAIT出现应该是短连接较多,需要通过修改内核参数解决。
CLOSE_WAIT状态则是服务器程序可能有问题,服务器需要主动close,以及epoll多路复用模型中使用linger调整关闭等待时间
ESTABLISHED 表示正在通信,TIME_WAIT 表示主动关闭,CLOSE_WAIT 表示被动关闭。
因为Linux分配给一个用户的文件句柄是有限的(可以参考:http://blog.csdn.net/shootyou/article/details/6579139),而TIME_WAIT和CLOSE_WAIT两种状态如果一直被保持,那么意味着对应数目的通道就一直被占着,而且是“占着茅坑不使劲”,一旦达到句柄数上限,新的请求就无法被处理了
服务器保持了大量TIME_WAIT状态
TIME_WAIT是主动关闭连接的一方保持的状态,对于爬虫服务器来说他本身就是“客户端”,在完成一个爬取任务之后,他就会发起主动关闭连接,从而进入TIME_WAIT的状态,然后在保持这个状态2MSL(max segment lifetime)时间之后,彻底关闭回收资源。
服务器保持了大量CLOSE_WAIT状态
出现大量close_wait的现象,主要原因是某种情况下对方关闭了socket链接,但是我方忙与读或者写,没有关闭连接。
那解决这个问题的基本思路就是: socket通信时保证对端socket未关闭且正常,一定要判断read、write等接口的返回值,根据错误状态及时close
1、cookie数据存放在客户的浏览器上,session数据放在服务器上.
简单的说,当你登录一个网站的时候,如果web服务器端使用的是session,那么所有的数据都保存在服务器上面,
客户端每次请求服务器的时候会发送 当前会话的session_id,服务器根据当前session_id判断相应的用户数据标志,以确定用户是否登录,或具有某种权限。
由于数据是存储在服务器 上面,所以你不能伪造,但是如果你能够获取某个登录用户的session_id,用特殊的浏览器伪造该用户的请求也是能够成功的。
session_id是服务器和客户端链接时候随机分配的,一般来说是不会有重复,但如果有大量的并发请求,也不是没有重复的可能性。
Session是由应用服务器维持的一个服务器端的存储空间,用户在连接服务器时,会由服务器生成一个唯一的SessionID,用该SessionID 为标识符来存取服务器端的Session存储空间。而SessionID这一数据则是保存到客户端,用Cookie保存的,用户提交页面时,会将这一 SessionID提交到服务器端,来存取Session数据。这一过程,是不用开发人员干预的。所以一旦客户端禁用Cookie,那么Session也会失效。
浙公网安备 33010602011771号