Sockets 谷歌为它收到的每个请求打开多少个套接字?

Sockets 谷歌为它收到的每个请求打开多少个套接字?,sockets,networking,tcp,request,port,Sockets,Networking,Tcp,Request,Port,以下是我最近在一家知名网络软件公司的面试经历。有人问我关于连接TCP层和web请求的问题,这让我很困惑。我真的很想知道专家对答案的看法。这不仅仅是关于面试,还涉及对网络工作原理的基本理解(或者应用层和传输层的串扰,如果有的话) 采访者:告诉我当你在幕后工作时发生的过程 我打开一个浏览器,在其中键入google.com Me:发生的第一件事是创建一个套接字 由{SRC-IP,SRC-PORT,DEST-IP,DEST-PORT,PROTOCOL}标识。这个 SRC-PORTnumber是浏览器给定

以下是我最近在一家知名网络软件公司的面试经历。有人问我关于连接TCP层和web请求的问题,这让我很困惑。我真的很想知道专家对答案的看法。这不仅仅是关于面试,还涉及对网络工作原理的基本理解(或者应用层和传输层的串扰,如果有的话)


  • 采访者:告诉我当你在幕后工作时发生的过程 我打开一个浏览器,在其中键入
    google.com

    Me:发生的第一件事是创建一个套接字 由
    {SRC-IP,SRC-PORT,DEST-IP,DEST-PORT,PROTOCOL}
    标识。这个
    SRC-PORT
    number是浏览器给定的随机数。通常是TCP/IP协议 连接协议(建立三方握手)。现在 客户端(我的浏览器)和服务器(谷歌)都已准备好处理 请求。(TCP连接已建立)

  • 记者:等等,什么时候会有名字解析

    我:是的,对不起。它应该在创建套接字之前发生。 DNS名称解析首先要获得Google的IP地址 到达

  • 采访者:是否为DNS名称解析创建了套接字

    我:嗯,我其实不知道。但我所知道的DNS名称解析是 无连接。也就是说,它不是TCP而是UDP。只有一个 请求-响应周期发生。(因此,为DNS创建了一个新套接字 名称解析)

  • 采访者:
    google.com
    对来自其他网站的其他请求开放 客户。建立与谷歌的联系也是如此 其他用户

    我:我不知道谷歌是如何处理的。但是在一个典型的插座中 通信,它是阻塞到最小程度

  • 记者:你认为这件事怎么办

    Me:我猜这个过程会分叉一个新线程,并创建一个套接字来处理我的 要求从现在起,我的套接字端点与 Google就是这个子套接字

  • 采访者:如果是这样的话,这个孩子插座的端口号是多少 和父母的不同

    Me:父套接字在80岁时侦听来自的新请求 客户。孩子必须在另一个端口号上侦听

  • 采访者:自从你的目标端口号改变后,你的TCP连接是如何保持的。(这是谷歌数据包上发送的src端口号)

    Me:我作为客户机看到的dest端口总是80。什么时候 一个响应被发回,它也来自端口80。我猜操作系统/服务器 父进程将源端口设置回80,然后再发回 邮局

  • 面试官:你的插座连接建立了多长时间 谷歌

    我:如果我在一段时间内没有提出任何要求,那么 主线程关闭其子套接字以及来自的任何后续请求 我会像是一个新客户

    记者:不,谷歌不会为你的孩子保留一个专用的插座 你。它处理您的请求并正确丢弃/回收套接字 走开

  • 采访者:虽然谷歌可能有很多服务器要提供服务 请求时,每个服务器只能在端口80打开一个父套接字。访问谷歌网页的客户端数量必须大于它们拥有的服务器数量。这通常是如何处理的

    我:我不确定这是怎么处理的。我知道唯一的办法 工作是为接收到的每个请求生成一个线程

  • 记者:你认为谷歌处理这件事的方式与谷歌不同吗 有银行网站吗

    Me:在TCP-IP套接字级别,应该是 类似的。在请求级别,由于会话 维护以保持银行网站请求之间的状态

  • 如果有人能解释每一点,这将是非常有帮助的许多初学者在网络

    谷歌为它收到的每个请求打开多少个套接字

    这个问题实际上没有出现在面试中,但它在你的标题中,所以我会回答它。谷歌根本没有打开任何套接字。你的浏览器可以做到这一点。谷歌接受新套接字形式的连接,但我不会将其描述为“打开”连接


    记者:告诉我当我打开一个浏览器并在其中键入google.com时,幕后发生的过程

    Me:首先创建一个套接字,由{SRC-IP,SRC-PORT,DEST-IP,DEST-PORT,PROTOCOL}标识

    否。连接由元组标识。套接字是连接的端点

    SRC端口号是浏览器给定的随机数

    不,由操作系统决定

    通常采用TCP/IP连接协议(建立三方握手)。现在客户端(我的浏览器)和服务器(谷歌)都准备好处理请求了。(TCP连接已建立)

    记者:等等,什么时候会有名字解析

    我:是的,对不起。它应该在创建套接字之前发生。DNS名称解析首先要获得google的IP地址

    采访者:是否为DNS名称解析创建了套接字

    我:嗯,我真的不知道。但我所知道的DNS名称解析是一个连接较少的解析。这不是TCP,而是UDP。只有一个请求-响应周期发生。(为DNS名称解析创建了一个新套接字)

    任何合理实现的浏览器都会将整个任务委托给操作系统的套接字库,其内部功能取决于操作系统。在转到DNS服务器之前,它可能会查看内存中的缓存、文件、数据库、LDAP服务器等一些内容,而DNS服务器可以通过TCP或UDP来完成。这不是一个好问题

    采访者:google.com对其他客户的其他请求是开放的。你和顾建立联系也是如此