面试题之计算机网络
OSI七层模型每一层干了什么:
-
- 物理层(二进制位=>光电信号):实际上就是布线、光纤、网卡和其它用来把两台网络通信设备连接在一起的东西,物理层是将二进制位转换为光电信号传输
- 数据链路层(数据帧==>二进制位):如果是讨论mac地址,交换机,网卡,驱动程序就是属于数据链路层,这一层主要是在通信实体间建立数据链路联接,传输的基本单位为“帧”(将网络层传输过来的数据封装成帧,具体可见:什么是数据帧),并为网络层提供差错控制和流量控制服务。
- 网络层(数据包==>数据帧):讨论ip,路由等就是网络层的问题,网络层主要为数据在节点之间传输创建逻辑链路,通过路由选择算法为分组选择最佳路径,从而实现拥塞控制、网络互联等功能。也就是负责地址解析和路由
- 传输层:tcp,udp所在的层,主要负责端到端的通信,数据形式也是数据包,是高低层衔接的接口层
- 会话层:主要功能是负责维护两个节点之间的传输联接,确保点到点传输不中断,以及管理数据交换等功能;不参与具体的传输,它提供包括访问验证和会话管理在内的建立和维护应用之间通信的机制。如服务器验证用户登录便是由会话层完成的。数据形式是报文
- 表示层:表示层的主要功能是处理在两个通信系统中交换信息的表示方式,主要包括数据格式变化、数据加密与解密、数据压缩与解压等。
- 应用层:OSI模型中的最高层,是直接面向用户的一层,用户的通信内容要由应用进程解决,这就要求应用层采用不同的应用协议来解决不同类型的应用要求,并且保证这些不同类型的应用所采用的低层通信协议是一致的。
- 应用层、表示层和会话层可以视为应用层(高层),而剩余层则可视为数据流动层(底层)
- 更多参考:OSI参考模型;OSI参考模型二
浏览器输入url到返回结果,这中间发生了什么
三次握手
-
- 首先客户端向服务端发送一个带有 SYN 标志,以及随机生成的序号 100(0 字节)的报文
- 服务端收到报文后返回一个报文(SYN200(0 字节),ACk1001(字节+1))给客户端
- 客户端再次发送带有 ACk 标志 201(字节+)序号的报文给服务端
四次挥手
-
-
客户端发送带有 fin 标识的报文给服务端,请求通信关闭
-
服务端收到信息后,回复 ACK 答应关闭客户端通信(连接)请求
-
服务端发送带有 fin 标识的报文给客户端,也请求关闭通信
- 客户端回应 ack 给服务端,答应关闭服务端的通信(连接)请求
-
为什么不能两次握手或者四次握手?
为什么是四次挥手,不是三次挥手?
-
- 因为挥手的确认收到断开连接和断开连接报文分两次发,为什么分两次,因为确认收到断开连接后,客户端还可以收数据,服务端数据还有可能没有发完,所以确认收到断开和断开报文不能一起发
四次挥手中第三次挥手,客户端为什么要等待2msl?
-
-
第一,保证客户端发送的最后一个ACK报文能够到达服务器,因为这个ACK报文可能丢失,站在服务器的角度看来,我已经发送了FIN+ACK报文请求断开了,客户端还没有给我回应,应该是我发送的请求断开报文它没有收到,于是服务器又会重新发送一次,而客户端就能在这个2MSL时间段内收到这个重传的报文,接着给出回应报文,并且会重启2MSL计时器。
第二,防止类似与“三次握手”中提到了的“已经失效的连接请求报文段”出现在本连接中。客户端发送完最后一个确认报文后,在这个2MSL时间中,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失。这样新的连接中不会出现旧连接的请求报文。
- 为什么是2msl而不是msl:最后一个ack要在msl才能确认失效。而重传的包也要保证msl才能确认失效,确认收不到
-
http1.1和http2的区别
-
- HTTP1.1基于文本解析,而HTTP2基于二进制解析,
- HTTP1.1采用长连接,若干个请求排队串行化单线程处理,后面的请求等待前面请求的返回才能获得执行机会;而HTTP2采用多路复用,即连接共享,多个请求每个请求分配一个id,可以在同一连接并行
protof
-
- protocol buffers 是一种语言无关、平台无关、可扩展的序列化结构数据的方法,它可用于(数据)通信协议、数据存储等。protof是一种数据传输格式,比如json,xml,传输效率更高,适用于即时通讯系统,更多可见