「计算机网络」夺命连环12问
Python涨薪研究所
共 3982字,需浏览 8分钟
·
2021-06-10 00:20
谈一谈你对TCP/IP四层模型,OSI七层模型的理解?
数据链路层,也有称作网络访问层、网络接口层。他包含了OSI模型的物理层和数据链路层,把电脑连接起来。 网络层,也叫做IP层,处理IP数据包的传输、路由,建立主机间的通信。 传输层,就是为两台主机设备提供端到端的通信。 应用层,包含OSI的会话层、表示层和应用层,提供了一些常用的协议规范,比如FTP、SMPT、HTTP等。
说说TCP 3次握手的过程?
client端建立连接,发送一个SYN同步包,发送之后状态变成SYN_SENT server端收到SYN之后,同意建立连接,返回一个ACK响应,同时也会给client发送一个SYN包,发送完成之后状态变为SYN_RCVD client端收到server的ACK之后,状态变为ESTABLISHED,返回ACK给server端。server收到之后状态也变为ESTABLISHED,连接建立完成。
为什么要3次?2次,4次不行吗?
那么四次挥手的过程呢?
client端向server发送FIN包,进入FIN_WAIT_1状态,这代表client端已经没有数据要发送了 server端收到之后,返回一个ACK,进入CLOSE_WAIT等待关闭的状态,因为server端可能还有没有发送完成的数据 等到server端数据都发送完毕之后,server端就向client发送FIN,进入LAST_ACK状态 client收到ACK之后,进入TIME_WAIT的状态,同时回复ACK,server收到之后直接进入CLOSED状态,连接关闭。但是client要等待2MSL(报文最大生存时间)的时间,才会进入CLOSED状态。
为什么要等待2MSL的时间才关闭?
为了保证连接的可靠关闭。如果server没有收到最后一个ACK,那么就会重发FIN。 为了避免端口重用带来的数据混淆。如果client直接进入CLOSED状态,又用相同端口号向server建立一个连接,上一次连接的部分数据在网络中延迟到达server,数据就可能发生混淆了。
TCP怎么保证传输过程的可靠性?
说下浏览器请求一个网址的过程?
首先通过DNS服务器把域名解析成IP地址,通过IP和子网掩码判断是否属于同一个子网 构造应用层请求http报文,传输层添加TCP/UDP头部,网络层添加IP头部,数据链路层添加以太网协议头部 数据经过路由器、交换机转发,最终达到目标服务器,目标服务器同样解析数据,最终拿到http报文,按照对应的程序的逻辑响应回去。
知道HTTPS的工作原理吗?
用户通过浏览器请求https网站,服务器收到请求,选择浏览器支持的加密和hash算法,同时返回数字证书给浏览器,包含颁发机构、网址、公钥、证书有效期等信息。 浏览器对证书的内容进行校验,如果有问题,则会有一个提示警告。否则,就生成一个随机数X,同时使用证书中的公钥进行加密,并且发送给服务器。 服务器收到之后,使用私钥解密,得到随机数X,然后使用X对网页内容进行加密,返回给浏览器 浏览器则使用X和之前约定的加密算法进行解密,得到最终的网页内容
负载均衡有哪些实现方式?
说说BIO/NIO/AIO的区别?
那么你怎么理解同步和阻塞?
发起IO请求 实际的IO读写操作
谈一下你对Reactor模型的理解?
Reactor:负责查询、响应IO事件,当检测到IO事件时,分发给Handlers处理。 Handler:与IO事件绑定,负责IO事件的处理。
好文推荐
灵隐寺招聘:没有KPI,佛系上班……
JetBrains又出编程神器!
面试 Google, 我失败了 | Google 面经分享
一键三连「分享」、「点赞」和「在看」
技术干货与你天天见~
评论