1、进程间通信的方式
1)管道:用于具有亲缘关系的父子进程间或兄弟进程之间的通信
2)共享内存:使得多个进程可以访问同一块内存空间,不同进程可以及时看到对方进程中对共享内存中数据的更新
3)信号:用来通知接受进程某个事件已经发生
4)信号量:是一个计数器
5)socket:用于客户端和服务器端的进程通信
6)消息队列
2、在浏览器中敲入网址后,到网页显示,中间发生了什么过程
1)浏览器的第一步工作是解析URL,从而生成发送给Web服务器的请求信息。
2)DNS域名解析
3)TCP连接
4)HTPP请求
5)服务器响应请求,返回响应报文
6)浏览器根据返回内容渲染页面
3、三次握手以及为什么需要三次握手
三次握手
为什么需要三次?
- 阻止重复历史连接的初始化(主要原因)
- 同步双方的初始序列号
- 避免资源浪费
不使用两次握手和四次握手的原因
- 两次握手:无法防止历史连接的建立,会造成双方资源的浪费,也无法可靠的同步双方序列号;
- 四次握手:三次握手就已经理论上建立可靠的连接了,所以不需要使用更多的通信次数。
4、四次挥手以及为什么需要四次挥手
四次挥手
为什么需要四次挥手
回顾下四次挥手双方发
FIN
包的过程,就能理解为什么需要四次了
- 关闭连接时,客户端向服务端发送
FIN
时,仅仅表示客户端不再发送数据了但是还能接收数据。 - 服务器端收到客户端的
FIN
报文时,先回一个ACK
应答报文,而服务端可能还有数据需要处理和发送,等服务端不再发送数据时,才会发送FIN
报文给客户端来表示同意现在关闭连接。 - 从上面过程可知,服务端通常需要等待完成数据的发送和处理,所以服务端的
ACK
和FIN
一般都会分开发送,从而比三次握手导致多了一次。
为什么TIME_WAIT等待的时间是2MSL
MSL,Maximum Segment Lifetime英文的缩写,报文最大生存时间,它是任何报文在网络上存在的最长时间,超过这个时间将被丢弃。
- 保证客户端发送的最后一个
ACK
报文能够到达服务器,因为这个ACK
报文可能会丢失。 - 如果被动关闭方没有收到断开连接的最后的
ACK
报文,就会触发超时重发Fin
报文,另一方接收到FIN
后,会重发ACK
给被动关闭方,一来一去正好 2 个 MSL。
5、经典排序算法的比较
经典排序算法比较