后端技术面试 38 讲
李智慧
同程艺龙交通首席架构师,前 Intel& 阿里架构师,《大型网站技术架构》作者
37373 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 46 讲
不定期加餐 (1讲)
后端技术面试 38 讲
15
15
1.0x
00:00/00:00
登录|注册

04丨网络编程原理:一个字符的互联网之旅

负载均衡实现方案
负载均衡服务器
数据链路层协议
网络层协议
传输层协议
响应头
请求头
静态资源和动态数据处理
内容分发网络
域名解析
IP地址
LB(负载均衡)
TCP
HTTP
CDN
DNS
网络编程原理

该思维导图由 AI 生成,仅供参考

我们开发的面向普通用户的应用程序,目前看来几乎都是互联网应用程序,也就是说,用户操作的应用程序,不管是浏览器还是移动 App,核心请求都会通过互联网发送到后端的数据中心进行处理。这个数据中心可能是像微信这样的自己建设的、在多个地区部署的大规模机房,也可能是阿里云这样的云服务商提供的一个虚拟主机。
但是不管这个数据中心的大小,应用程序都需要在运行期和数据中心交互。比如我们在淘宝的搜索框随便输入一个字符“a”,就会在屏幕上看到一大堆商品。那么我们的手机是如何通过互联网完成这一操作的?这个字符如何穿越遥远的空间,从手机发送到淘宝的数据中心,在淘宝计算得到相关的结果,然后将结果再返回到我们的手机上,从而完成自己的互联网之旅呢?
虽然我们在编程的时候,很少要自己直接开发网络通信代码,服务器由 Tomcat 这样的 WEB 容器管理网络通信,服务间网络通信通过 Dubbo 这样的分布式服务框架完成网络通信。但是由于我们现在开发的应用主要是互联网应用,它们构建在网络通信基础上,网络通信的问题可能会出现在系统运行的任何时刻。了解网络通信原理,了解互联网应用如何跨越庞大的网络构建起来,对我们开发一个互联网应用系统很有帮助,对我们解决系统运行过程中各种因为网络通信而出现的各种问题更有帮助。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入介绍了网络编程原理中的重要概念和技术,包括DNS解析、CDN的作用、HTTP协议、TCP/IP协议栈等。文章详细解释了TCP协议的建立过程和数据传输细节,以及负载均衡服务器在处理搜索请求时的工作原理。通过对网络通信的各个环节进行解析,读者可以快速了解互联网应用程序是如何通过网络通信完成数据交互的,以及在这个过程中涉及到的重要技术和协议。此外,文章还提出了负载均衡实现方案的思考题,引发读者对于负载均衡技术的进一步思考和讨论。整体而言,本文内容丰富,涵盖了网络编程的多个方面,适合对网络通信感兴趣的读者阅读学习。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《后端技术面试 38 讲》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(34)

  • 最新
  • 精选
  • 探索无止境
    老师您好,客户端在发送请求的时候,是如何知道服务器的mac地址的?这个有点想不明白

    作者回复: 具体这块我没看过,但是应该有很多地方可以在正式通信前就可以得到服务器的mac地址,比如在TCP握手的时候,ACK应答包的链路层数据帧里包含mac地址。 准确答案参考下面其他同学的评论~

    2019-11-25
    12
    4
  • Rock
    401是未授权啊Unauthorized 500是Internal Server Error 这么明显的错误 多误导人啊

    作者回复: 参考维基百科:https://zh.wikipedia.org/wiki/HTTP%E7%8A%B6%E6%80%81%E7%A0%81 401 Unauthorized是未认证的意思;403 Forbidden是未授权的意思。 500 服务器内部错误可以理解为原因,请求未完成可以认为是结果,文中表述重点放在结果上。

    2021-04-07
    1
  • Snooker
    1.(链路层)客户端如何获悉服务端的mac地址?是在客户端和服务端tcp三次握手的时候获取吗? 2.(网络层)如果请求链路多次转发,会涉及到多个ip,网络层中服务端的ip会被覆盖吗?

    作者回复: 1是的 2IP帧中包含IP路由清单,不覆盖源IP目标IP

    2020-06-12
    2
  • 炎发灼眼
    老师你好,以前一直以为SOCKET也是一种协议,但是看你文中没有提及SOCKET是属于哪一层的,个人认为,应该也是属于应用层的一种,请老师解答下

    作者回复: Socket是操作系统提供的网络编程API,封装了TCP,UDP等协议的调用。如果要分层,应该分到传输层。

    2019-11-25
    2
  • peter
    应用服务器数量众多,但负载均衡服务器只有一台,那负载均衡服务器能处理过来吗?

    作者回复: 负载均衡也可以有很多台。 那谁来为负载均衡服务器做负载均衡? 我们在模块3继续交流。

    2019-11-25
    4
  • Zend
    还有IP隧道模式,负载均衡服务器把收到的数据包,封装一个新的IP头标记,发给应用服务器,应用服务器收到数据包后,还原数据包,直接返回客户端,无需经过负载均衡服务器,缓解负载均衡服务器压力; NAT模式:是把客户端发来的数据包的IP头的目的地址,在负载均衡器上换成其中一台应用服务器的IP地址,并发至此应用服务器来处理,应用服务器处理完成后把数据交给经过负载均衡器,负载均衡器再把数据包的原IP地址改为自己的IP,将目的地址改为客户端IP地址,无论是进来的流量,还是出去的流量,都必须经过负载均衡器。
    2019-11-25
    2
    39
  • 分清云淡
    居然留言有这么多人不知道 Linux 内核负载均衡(也就是 LVS),LVS是第一个国产合并到Linux Kernel的功能 。批评一下作者不直接说LVS,让很多人误解了。 https://plantegg.github.io/2019/06/20/%E5%B0%B1%E6%98%AF%E8%A6%81%E4%BD%A0%E6%87%82%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1--lvs%E5%92%8C%E8%BD%AC%E5%8F%91%E6%A8%A1%E5%BC%8F/
    2019-12-25
    1
    23
  • Paul Shan
    网络系统像蛋糕一样多层协议,反映了如何将一个复杂系统拆解成一个一个独立的子系统分而治之。 HTTP协议解决的是有明确目的的通信,例如Get就是从服务端获取某些资源,Put是往服务器修改数据,Post是往服务器添加数据。 TCP 协议解决的是二进制意义上的稳定通信,通过握手协议建立连接,收发双方都不断的重复读和写操作。 IP协议解决的是一个地址通信,IP是主机的地址,类似于一户人家的门牌号码。IP协议不是一个稳定的协议,发出就不管了。IP地址不太好记,所以用DNS来解析,就像我们熟人之间,说某某人的家就好了,不用再说具体门牌。 数据链路层,解决的是物理连接。每个网卡都有一个地址,这个地址像经纬度坐标,不像IP层的ip那样容易修改。 物理层,解决的是物理信号到二进制信号的转化。
    2019-12-05
    1
    20
  • escray
    一篇文章概述网络编程原理。 我感觉即使不是互联网应用,单位内部局域网上的应用其实也符合“互联网之旅”中的描述(局域网内可能不需要 CDN,但是 DNS 还是可以有的)。 应用层(OSI 顶部的应用层、表示层、会话层)的 HTTP 协议,传输层的 TCP 协议,网络层的 IP 协议,数据链路层的 ARP 协议……能把这几个协议将清楚,那么一个网络包的旅程也就基本清楚了。 关于负载均衡,推荐隔壁专栏《从零开始学架构》中的《20 | 高性能负载均衡:分类及架构》和《21 | 高性能负载均衡:算法》。 对于思考题,其实负载均衡大概有三类,DNS、软件和硬件。 DNS 负载均衡一般由域名商提供,主要是按照访问的 IP 地址来决定访问不同地理位置的机房,相对简单、成本低,但是定制化功能较差和分配策略较少。 软件负载均衡比较常用,主要有 Nginx 和 LVS,7 层的 Nginx 大概是 5 万/秒,4 层的 LVS 是十万级。优点是简单、便宜、灵活,缺点是性能不如硬件负载均衡,也没有安全防护功能。 硬件负载均衡(F5 和 A10)除了贵,基本没有别的缺点,功能强大、性能高、稳定,还有安全防护功能。 比较典型的负载均衡架构是由 DNS 支撑地理级别的负载均衡,然后由 F5 支持集群级别的负载均衡,最后由 Nginx 或者 LVS 来实现机器级别的负载均衡。
    2020-09-22
    14
  • a、
    DNS的负载均衡,应用层的nginx、apache,传输层的F5.
    2019-11-25
    13
收起评论
显示
设置
留言
34
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部