1. 面试官:告诉我当我打开浏览器并输入“google.com”时,在幕后发生的过程。
我:首先创建一个由{SRC-IP,SRC-PORT,DEST-IP,DEST-PORT,PROTOCOL}标识的套接字。 SRC-PORT编号是浏览器给出的随机数字。通常建立TCP/IP连接协议(三次握手建立)。现在客户端(我的浏览器)和服务器(Google)都准备好处理请求。(建立TCP连接)。
2. 面试官:等等,名称解析是何时发生的?
我:是的,我很抱歉。甚至在创建套接字之前,DNS名称解析就已经发生了。首先进行DNS名称解析以获取Google的IP地址。
3. 面试官:DNS名称解析会创建套接字吗?
我:嗯,我其实不知道。但我知道DNS名称解析是无连接的。也就是说,它不是TCP,而是UDP。只发生单个请求-响应周期。(因此需要为DNS名称解析创建一个新套接字)。
4. 面试官:google.com对其他客户端的请求也是开放的。那么,与Google建立连接会阻塞其他用户吗?
我:我不确定Google如何处理这个问题。但在典型的套接字通信中,阻塞到最小程度。
面试官: 你认为这个问题该如何处理?
我: 我猜这个进程会分叉出一个新的线程,并创建一个套接字来处理我的请求。从现在开始,我的与谷歌通信的套接字终点是这个子套接字。
面试官: 如果是这样,那么这个子套接字的端口号是否不同于父套接字的端口号?
我: 父套接字在80上监听来自客户端的新请求。子套接字必须在不同的端口号上监听。
面试官: 由于您的目标端口号已更改,您的TCP连接是如何维护的(即发送到Google数据包的src-port号码)?
我: 作为客户端看到的目标端口始终是80。当响应被发送回来时,也是来自端口80。我猜测操作系统/父进程在发送响应之前会将源端口设置回80。
面试官: 您与Google的套接字连接有多长时间?
我: 如果我在一段时间内没有发出任何请求,主线程将关闭其子套接字,我之后的任何请求都将像新客户端一样处理。
面试官: 不,Google不会为您保留专用的子套接字。它处理您的请求并立即丢弃/回收套接字。
面试官: 虽然Google可能有许多服务器来处理请求,但是每个服务器只能打开一个在端口80处的父套接字。访问Google网页的客户端数量必须大于他们拥有的服务器数量。这通常是如何处理的?
我: 我不确定这是如何处理的。我认为唯一的方法是为每个收到的请求生成一个线程。
面试官: 您认为Google处理此问题的方式与任何银行网站有所不同吗?
我: 在TCP-IP套接字层面上,应该是相似的。在请求层面上,稍微有些不同,因为需要维护会话以保持银行网站之间请求的状态。
如果有人可以解释每个要点,这对于网络初学者将非常有帮助。