后端技术面试38讲
李智慧
同程艺龙交通首席架构师,前Intel&阿里架构师,《大型网站技术架构》作者
立即订阅
3625 人已学习
课程目录
已更新 15 讲 / 共 38 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 掌握软件开发技术的第一性原理
免费
软件的基础原理 (8讲)
01丨程序运行原理:程序是如何运行又是如何崩溃的?
02丨数据结构原理:Hash表的时间复杂度为什么是O(1)?
03丨Java虚拟机原理:JVM为什么被称为机器(machine)?
04丨网络编程原理:一个字符的互联网之旅
05丨文件系统原理:如何用1分钟遍历一个100TB的文件?
06丨数据库原理:为什么PrepareStatement性能更好更安全?
07丨编程语言原理:面向对象编程是编程的终极形态吗?
答疑丨Java Web程序的运行时环境到底是怎样的?
软件的设计原理 (5讲)
08丨软件设计的方法论:软件为什么要建模?
09丨软件设计实践:如何使用UML完成一个设计文档?
10 | 软件设计的目的:糟糕的程序员比优秀的程序员差在哪里?
11丨软件设计的开闭原则:如何不修改代码却能实现需求变更?
12 | 软件设计的依赖倒置原则:如何不依赖代码却可以复用它的功能?
不定期加餐 (1讲)
加餐 | 软件设计文档示例模板
后端技术面试38讲
登录|注册

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

李智慧 2019-11-25
我们开发的面向普通用户的应用程序,目前看来几乎都是互联网应用程序,也就是说,用户操作的应用程序,不管是浏览器还是移动 App,核心请求都会通过互联网发送到后端的数据中心进行处理。这个数据中心可能是像微信这样的自己建设的、在多个地区部署的大规模机房,也可能是阿里云这样的云服务商提供的一个虚拟主机。
但是不管这个数据中心的大小,应用程序都需要在运行期和数据中心交互。比如我们在淘宝的搜索框随便输入一个字符“a”,就会屏幕上看到一大堆商品。那么我们的手机是如何通过互联网完成这一操作的?这个字符如何穿越遥远的空间,从手机发送到淘宝的数据中心,在淘宝计算得到相关的结果,然后将结果再返回到我们的手机上,从而完成自己的互联网之旅呢?
虽然我们在编程的时候,很少要自己直接开发网络通信代码,服务器由 Tomcat 这样的 WEB 容器管理网络通信,服务间网络通信通过 Dubbo 这样的分布式服务框架完成网络通信。但是由于我们现在开发的应用主要是互联网应用,它们构建在网络通信基础上,网络通信的问题可能会出现在系统运行的任何时刻。了解网络通信原理,了解互联网应用如何跨越庞大的网络构建起来,对我们开发一个互联网应用系统很有帮助,对我们解决系统运行过程中各种因为网络通信而出现的各种问题更有帮助。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《后端技术面试38讲》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(19)

  • Zend
    还有IP隧道模式,负载均衡服务器把收到的数据包,封装一个新的IP头标记,发给应用服务器,应用服务器收到数据包后,还原数据包,直接返回客户端,无需经过负载均衡服务器,缓解负载均衡服务器压力;
    NAT模式:是把客户端发来的数据包的IP头的目的地址,在负载均衡器上换成其中一台应用服务器的IP地址,并发至此应用服务器来处理,应用服务器处理完成后把数据交给经过负载均衡器,负载均衡器再把数据包的原IP地址改为自己的IP,将目的地址改为客户端IP地址,无论是进来的流量,还是出去的流量,都必须经过负载均衡器。
    2019-11-25
    8
  • realwuxing
    李老师,想问下 Linux 内核支持的链路层负载均衡,web服务器与负载均衡服务器的IP地址都是一样的,这样不会有影响吗?在同一个局域网内,IP为什么也可以相同,谢谢!
    2019-11-26
    3
    4
  • 观弈道人
    李老师,想问下,负载均衡服务器想做到高可用,该怎么处理?谢谢
    2019-11-25
    5
    4
  • a、
    DNS的负载均衡,应用层的nginx、apache,传输层的F5.
    2019-11-25
    3
  • Paul Shan
    网络系统像蛋糕一样多层协议,反映了如何将一个复杂系统拆解成一个一个独立的子系统分而治之。
    HTTP协议解决的是有明确目的的通信,例如Get就是从服务端获取某些资源,Put是往服务器修改数据,Post是往服务器添加数据。
    TCP 协议解决的是二进制意义上的稳定通信,通过握手协议建立连接,收发双方都不断的重复读和写操作。
    IP协议解决的是一个地址通信,IP是主机的地址,类似于一户人家的门牌号码。IP协议不是一个稳定的协议,发出就不管了。IP地址不太好记,所以用DNS来解析,就像我们熟人之间,说某某人的家就好了,不用再说具体门牌。
    数据链路层,解决的是物理连接。每个网卡都有一个地址,这个地址像经纬度坐标,不像IP层的ip那样容易修改。
    物理层,解决的是物理信号到二进制信号的转化。
    2019-12-05
    1
  • 老男孩
    坚持学习打卡。老师说的使用linux内核的方式负载均衡,我还是第一次听,涨姿势了。一般都是像array,f5这种硬件负载均衡器,还有nginx也可以做负载均衡,但一般用nginx做反向代理的,比如后端服务端口8080,但前端访问是80,nginx的端口。负载均衡器的也可以部署多台,服务器之间不断发送心跳包,监测对方是否宕机。这样能保证负责均衡器不出现单点问题。
    2019-11-26
    1
  • 探索无止境
    老师您好,客户端在发送请求的时候,是如何知道服务器的mac地址的?这个有点想不明白

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

    准确答案参考下面其他同学的评论~

    2019-11-25
    6
    1
  • 你的美
    老师就是以POST方法提交这一段,在淘宝服务器收到信息后,检验确保正确后,将头部信息删除。
    这个头部信息只是删除链路层协议头对吗?返回时直接到用户的手机IP上?
    2019-12-13
  • 灰灰
    打卡
    2019-12-12
  • 陈小龙 Cheney
    手机App和浏览器到服务器的请求是HTTP, 而服务器集群之间的RPC一般是采用TCP协议.
    RPC的函数可能长这样子: do_rpc(int host, string remote_func, map param) 也就是传入服务器编号, 远程调用的函数名, 调用参数.
    一般调用参数param会被转化成json, 然后利用编程语言TCP库的接口send_package发出去.
    所以本质上RPC还是TCP发包和收报, 处理和回应请求的一种方式.
    2019-12-11
  • A🔱栋杰✨
    现在Android 10的MAC地址是动态的,这种情况下服务端回来的数据如何保证能送到新的MAC地址?
    2019-11-28
  • yangfei
    李老师,你好,我曾经面试的时候,被问到,HTTP,HTTPS,TCP,UDP,WEBSORCKET这几个东西区别。我不知道怎么回答,老师能帮我解释下吗?
    2019-11-28
  • 一步
    链路层负载均衡,负载均衡服务器和应用服务器的虚拟IP一致,就可以在应用层服务器直接返回给app,老师这个技术可以讲解一下的,第一次听说虚拟IP一致的概念
    2019-11-26
  • y欧尼酱
    Nginx反向代理
    2019-11-26
  • 无形
    lvs负载均衡, nginx反向代理
    2019-11-25
  • 炎发灼眼
    老师你好,以前一直以为SOCKET也是一种协议,但是看你文中没有提及SOCKET是属于哪一层的,个人认为,应该也是属于应用层的一种,请老师解答下

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

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

    作者回复: 负载均衡也可以有很多台。

    那谁来为负载均衡服务器做负载均衡?

    我们在模块3继续交流。

    2019-11-25
    1
  • 俊杰
    曾经接触过的,七层负载均衡用Nginx,硬件层面的负载均衡用F5
    2019-11-25
  • _funyoo_
    个人拙见:
    文中采用的应该是 【IP负载均衡】。在底层更改mac地址来实现请求的负载均衡。

    与这个比较像的,就是经常看到的【反向代理负载均衡】,反向代理是服务器的代理,这里的作用旨在根据某些算法转发请求至集群中的某一服务器,达到负载均衡的目的。但代理服务器也是服务器,他的性能也会影响整体的性能。

    还有另外一个,就是【重定向负载均衡】,但要求客户端请求两次才能完成任务,一次是获取“我应该访问哪个服务器”,再根据返回的ip,访问对应服务器。我觉得这样性能较差,而且存在安全隐患,我真正的业务服务器直接暴露出来真的好吗?


    个人拙见,欢迎补充指正🤝
    2019-11-25
收起评论
19
返回
顶部