分布式系统的基石TCP/IP

TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/互联网络协议)是 Internet 的基本协议,简单地说,由底层的 IP 和 TCP 组成。TCP/IP 的开发工作始于 20 世纪 70 年代,该协议是用于互联网的第一套协议。TCP/IP 结合 DNS、路由协议等一系列相关协议,最终实现了网络之间任意两点间的数据通信问题。我们来看看在访问百度首页时,数据包是如何从计算机传送到百度的服务器上的。

在命令行中运行 ipconfig/all,查看到当前计算机配置的 TCP/IP 参数,可以看到默认网关和 DNS 服务器的信息,如下所示。

img

在浏览器中输入 http://baidu.com,浏览器会发现 URL 的主机部分有一个域名(domain name),就查找我们的本机配置的 DNS 服务器 16.110.135.52,用 UDP 向 DNS 服务器发送 DNS 查询命令,DNS 服务器在获取查询命令后从数据库中查询该域名所对应的主机的 IP 地址。我们可以通过在命令行中运行 nslookup 来完成同样的查询结果。下图解释了目前依然被广泛使用的基于 DNS 的负载均衡机制的原理。

img

当浏览器获知 220.181.111.85 是 baidu.com 的 IP 地址时,就向这个地址的 80 端口发起 TCP 连接,由于 220.181.111.85 这个地址不是计算机所在的局域网,而是广域网的一个地址,所以此时,另外一个重要概念「路由」产生了。互联网是多个相互隔离的小网络无限延伸而组成的一个大网,路由器负责将多个网络连接,并相互交换路由表信息来确定一个 IP 报文要经过哪个路由器的端口发出到另外一个互联的子网。为了防止一个数据包在转发过程中形成死循环,IP 包中的 TTL 的字段每经过路由器转发一次就会减一,当 TTL 为零时被丢弃,认为网络不可达,一般默认最大跳数为 30。在通常情况下,只有网络管理员和路由器知道一个报文应该被转发给哪一个互联的下一个路由器,但在网络产生问题以后,我们需要追踪是哪里出了问题,此时,tracert 就成了排查此问题的重要工具。

tracert 利用 ICMP 来确定一个 IP 报文到达目标地址所经过的路由器节点,程序发出的前 3 个数据包的 TTL 值是 1,之后 3 个是 2,依此类推,便得到一连串数据包路径,路径上的每一个 IP 地址都是一个路由器的 IP。

img

从上图来看,数据包首先被发往网关(本机发现百度的 IP 地址不是本机所在局域网的网络,就将报文发给网关处理),网关之后继续进行转发。但不幸的是遍布网络的很多防火墙、路由器等设备屏蔽了 ICMP 报文,于是我们看到 7 以后的跳数都是未知的。另外,被广泛使用的 Ping 命令也是采用 ICMP 来实现的,因此,Ping 不通主机不代表主机不是存活的,但大多数时候,两者还是等价的,特别是在企业内部的网络中。

通过上面的解释,我们初步明白了 IP 报文的路由问题,接下来著名的 Socket 出场了。Socket 是一个 IP 地址与端口的组合,代表计算机上的一个远程通信接口,本地的一个 Socket 与远程的一个 Socket 建立连接的过程,就是著名的 3 次握手过程,一旦连接建立,数据流就可以穿越网络并进行双向通信了。以上面的例子来说,百度的 Web 服务器有一个进程绑定在 80 端口的 Socket 上,用来接收我们发起的 HTTP 请求并将请求的响应转换为 HTML 文本流返回给浏览器,浏览器则通过解析 HTML 标签,完成可视化的页面展现,最终我们看到百度搜索的主页。但实际上,这个过程还是极为复杂的。

参考:从分布式到微服务

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值