对线面试官 - TCP 经典面试题
面试官:如果不在一个子网应该如何传播?
派大星:可以通过路由器/网关。网关就是路由器的一种,运作在网络层。通过交换机走以太网协议进行一个传输数据包。如图:
派大星:交换机主要用来在一个子网/局域网内进行广播。路由器的作用是把不同的子网连接起来。疑问点来了:不同子网的设备通过路由器/网关只知道同一子网的 IP 地址,不知道对应 IP 地址的 MAC 地址啊; 其实这里还有重要的一点是每台机器都有自己的 ARP cache,这个 ARP 就是用来在一个局域网内让各个设备都知道自己每个设备的 IP 地址和 Mac 地址的对应关系。这样一广播大家都知道了。
面试官:用浏览器请求一个链接的时候,经历了哪些过程(DNS 解析过程)面试官心里分析:
主要考察的是网络基本功,看看有没有掌握基本的网络通信知识。这个问题相对比较经典。
派大星:假设我们现在有如下配置:
IP 地址:192.168.10.110 子网掩码:255.255.255.0 网关地址:192.168.10.1DNS 地址:8.8.8.8
派大星:当我们在浏览器中数据 www.baidu.com 并回车的时候:1
如果在本地的 hosts 文件没有能够找到对应的 ip 地址;会通过 DNS 服务器将 www.baidu.com 解析一个 IP 地址(172.168.10.110)并返回,返回之后本机电脑会判断返回的 IP 地址与当前 IP 地址是不是一个子网的(通过将两个 IP 地址的二进制与子网掩码的二进制进行与运算,并判断前面的 3 部分二进制是否一样),得出的结果指定不在一个子网下。
因为两个 IP 地址不在一个子网内,所以此时只能将数据包先通过以太网协议广播到网关上去,通过网关再发送出去。
2
浏览器会请求这个地址,先是按照应用层的 http 协议封装一个应用层的数据包,数据包里放了 http 请求报文。3
接着会走到传输层,假设这层设置的是 TCP 协议,此时会把应用层的数据包封装到 TCP 数据包中去,并携带 TCP 头,TCP 头中包含收发端口号信息。4
接下来会走到网络层,这层是 IP 协议,此时会把 TCP 头和 TCP 数据包放到 IP 数据包里面去,并携带 IP 头(包含本机 192.168.10.110 和目标机器的 IP 地址 172.168.10.110)。5
下一步走到数据链路层(以太网协议),并将数据打包成以太网数据包,并携带以太网标头(包含发送者网卡 Mac 地址、接收者网卡 Mac 地址-> 对应的是网关 192.168.10.1 的 Mac 地址)
注意:以太网的数据包是有大小限制的,最大只能是 1500 字节。如果一个数据包过大则会进行切分并标记好顺序。
最后会将切割好的以太网数据包发送到网关上去(192.168.10.1),网关可能会发送到别的网关上去,经过 N 次这样的转发会转发到目标服务器上
目标服务器接收到切割好的以太网数据包后,会根据 IP 头的序号将切割分裂的数据包进行拼接并还原出一个完整的数据包,接着一层一层的进行提取知道提取到 http 请求报文,http 请求会直接到应用的 Tomcat 上去,然后就是 Spring MVC,MyBatis 这样一个常规的处理流程。
如有问题,欢迎加微信交流:w714771310,备注- 技术交流 。或关注微信公众号【码上遇见你】。
版权声明: 本文为 InfoQ 作者【派大星】的原创文章。
原文链接:【http://xie.infoq.cn/article/39480d02575ce9158e7558095】。
本文遵守【CC BY-NC-ND】协议,转载请保留原文出处及本版权声明。
评论