计算机网络测试人关于计算机网络的学习和梳理

Posted 黑黑白白君

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算机网络测试人关于计算机网络的学习和梳理相关的知识,希望对你有一定的参考价值。

  • 《计算机网络–自顶向下方法》不愧为经典中的经典,解答了我学习计算机以及网络过程中的许多疑惑。当初刚入门计网的时候,几乎所有教材都是从底层讲起,实在是啃得艰辛,也磨灭了兴趣。遇到这本书,看着看着就泪了,一个是为了里面细致入微且一针见血的描述和解释,另一个是后悔当初怎么不早看这本书(当然好书什么时候开始看都不迟!)。
  • 然后结合最近面试的一些经历,重新看这本书的时候,很多思路更清晰了,故作此笔记进行梳理和总结,也为日后的回顾作基底。

(持续更新中…)


个人觉得自顶向下的顺序讲解计算机网络实在是太对头了,文中一段话说得妙极:“网络应用层是计算机网络存在的理由,如果我们不能构想出任何有用的应用,也就没有任何必要去设计支持它们的网络协议了。”

  • 【内心OS】这就是为什么本人看这本书的时候内心默默开始吐槽以前看过的教材,基本都是从最底层的通信协议讲起,我一个初学者啃起来,实在想不通为什么需要这些类型的通信协议,以及它们的工作机制为什么要这样设计,而这本书从实际应用切入,讲述了这些协议的需求,产生,到经历实际应用后多次调整的细节,私以为更符合本人的口味。

想要学习网络应用的原理和实现,需要了解应用程序所需要的网络服务、客户和服务器、进程和运输层接口

  • 也因此均为面试的重点考察内容

1)网络应用程序

“研发网络应用程序的核心是写出能够运行在不同的端系统(host)通过网络彼此通信的程序。”

1.1 网络应用程序体系架构

应用程序体系架构(application architecture)由应用程序研发者设计,规定了如何在各种端系统上组织应用程序

  • 主流的体系结构有:客户-服务器体系架构和对等(P2P)体系架构。
  • 【内心OS】因此对于应用程序的测试,是需要考虑兼容性以及运行环境对于性能的影响,后续学习到进程就会更清楚不同的端系统对于程序的影响。

注意:应用程序的体系架构明显不同于网络的体系架构

  • 从应用程序研发者的角度看,网络体系架构是固定的,并为应用程序提供了特定的服务集合。
  • 客户-服务器体系架构(client-server):

    有一个总是打开的主机(服务器),服务于许多其他主机(客户)的请求
    • 典型的例子:Web应用程序的Web服务器(一直打开的)服务于浏览器(运行在客户主机上)的请求。
    • 特征:
      • 客户之间不直接通信
      • 服务器具有固定的、周知的IP地址
    • 该架构常见的应用程序:Web、FTP、Telnet、电子邮件。

如果单独的一台服务器主机处理不过来所有客户的请求,则会使用数据中心(data center,配备大量主机)来创建强大的虚拟服务器。

  • 一个数据中心可以有数十万台服务器。
  • 应用者有谷歌、Bing、百度、阿里巴巴、微信等,像谷歌有分布于全世界的30~50个数据中心
  • P2P体系架构:

    应用程序在间断连接的主机对(对等方)之间使用直接通信。
    • 特性:
      • 自扩展性(self-scalability):虽然每个对等方都因为请求文件产生工作负载,但每个对等方通过向其他对等方分发文件来增加系统的服务能力。
    • 许多流量密集型的应用都是P2P体系架构的,如BitTorrent、迅雷、Skype等。
    • 某些应用是C/S和P2P混合的体系结构,比如对于许多即时讯息应用,服务器被用于跟踪用户的IP地址,但用户和用户之间的报文无须通过服务器。


2) 进程,进程通信

“在构建网络程序之前,还需要了解运行在多个host上的程序是如何相互通信的。”

一个进程可以认为是运行在端系统上的一个程序。

  • 当多个进程运行在相同的端系统上时,使用进程间通信机制相互通信,规则由端系统上的操作系统决定。
    • 【内心OS】这也是为什么后台相关的面试题会涉及进程和进程通信。

而在不同端系统上的进程,则通过计算机网络进行通信(报文交互),此时就需要网络体系架构提供服务。

  • 从而引入了套接字(socket)软件接口的概念。

2.1 进程与计算机网络之间的接口

进程通过套接字(socket)软件接口向网络发送和从网络接收报文。

  • 套接字是同一台主机内应用层和运输层之间的接口。
    • 套接字也称为应用程序和网络之间的应用程序编程接口(Application Programming Interface,API)。
  • 应用程序开发者对于运输层的控制仅限于:
    • 选择运输层协议(TCP/UDP)
    • 可能可以设定一些参数,如最大缓存和最大报文长度等等

2.2 可供应用程序使用的运输服务

应用程序服务要求大致可分为:可靠数据传输、吞吐量、定时、安全性。

  • 可靠数据传输:只要进程将数据传递给套接字,则确信该数据能无差错到达接收进程。
  • 吞吐量:可用吞吐量就是发送进程能够向接收进程交付比特的速率。
  • 定时:即要求注入套接字的比特到达接收方套接字不超过规定的时长。
  • 安全性:如运输协议能加密发送进程传输的所有数据,能在接收进程拿到数据前对数据进行解密。
  • 【内心OS】前三者也是性能测试所关注的指标。

2.3 因特网提供的运输服务

  • TCP服务

  • UDP服务

(待续…)



【部分内容参考自】

  • 《计算机网络–自顶向下方法》

以上是关于计算机网络测试人关于计算机网络的学习和梳理的主要内容,如果未能解决你的问题,请参考以下文章

计算机网络测试人关于HTTPS的学习和梳理

计算机网络测试人关于TCP的学习和梳理

计算机网络测试人关于TCP的学习和梳理

计算机网络测试人关于计算机网络的学习和梳理

从CAS算法底层开始的关于计算机数据存储及处理的浅显梳理

统计算法学习梳理