一、软件工程师应具备的计算机网络编程能力和知识
通常情况下,一个好的软件工程师需要具备以下几个方面的知识结构:
第一:操作系统知识。操作系统知识是软件工程师必须具备的重要内容,Web开发领域可能会使用到Windows系列操作系统,大数据和物联网方向要使用到Linux系列操作系统,掌握操作系统的体系结构是进行软件研发的重要基础。主要内容包括资源管理、任务调度、并发管理、权限管理、网络管理等内容。
第二:编程语言和算法。编程语言是软件工程师必备的技能,不同方向的开发需要使用到不同的编程语言,比如Web开发可能会使用PHP、Python、Java等语言,而大数据可能会使用Java、R、Scala等语言,而物联网开发可能会使用到C、C++等编程语言。通常来说,软件工程师往往需要掌握多门编程语言,以应对不同的开发环境。算法是软件工程师的重点知识结构,因为软件研发说到底就是个数学问题,所以算法的掌握情况往往能够决定软件工程师的成长高度。当然,对于应用级软件工程师来说,也有可能不会接触到更多的算法。
第三:领域知识。不同开发领域需要掌握不同的知识结构,比如大数据软件工程师往往需要掌握Hadoop、Spark平台的使用,而Web开发工程师往往还需要掌握前后端开发技术,包括一系列Web开发框架的使用等等。
第四:其他。除了一些涉及计算机的专业技能以外,还包括语言沟通交流能力和团队合作,以及学习能力、个人总结能力等。
二、网络协议栈简要总结—Socket
套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。应用层的各种网络应用程序基本上都是通过 Linux Socket 编程接口来和内核空间的网络协议栈通信的。Linux Socket 是从 BSD Socket 发展而来的,它是 Linux 操作系统的重要组成部分之一,它是网络应用程序的基础。从层次上来说,它位于应用层,是操作系统为应用程序员提供的 API,通过它,应用程序可以访问传输层协议。
网络应用调用Socket API socket (int family, int type, int protocol) 创建一个 socket,该调用最终会调用 Linux system call socket() ,并最终调用 Linux Kernel 的 sock_create() 方法。该方法返回被创建好了的那个 socket 的 file descriptor。对于每一个 userspace 网络应用创建的 socket,在内核中都有一个对应的 struct socket和 struct sock。其中,struct sock 有三个队列(queue),分别是 rx , tx 和 err,在 sock 结构被初始化的时候,这些缓冲队列也被初始化完成;在收据收发过程中,每个 queue 中保存要发送或者接受的每个 packet 对应的 Linux 网络栈 sk_buffer 数据结构的实例 skb。
对于 TCP socket 来说,应用调用 connect()API ,使得客户端和服务器端通过该 socket 建立一个虚拟连接。在此过程中,TCP 协议栈通过三次握手会建立 TCP 连接。默认地,该 API 会等到 TCP 握手完成连接建立后才返回。在建立连接的过程中的一个重要步骤是,确定双方使用的 Maxium Segemet Size (MSS)。因为 UDP 是面向无连接的协议,因此它是不需要该步骤的。应用调用 Linux Socket 的 send 或者 write API 来发出一个 message 给接收端。sock_sendmsg 被调用,它使用 socket descriptor 获取 sock struct,创建 message header 和 socket control message_sock_sendmsg 被调用,根据 socket 的协议类型,调用相应协议的发送函数。
三、计算机网络知识技能水平的测评试题
1、OSI 参考模型中,自下而上第一个提供端到端服务的层次是()
A. 数据链路层 B. 传输层 C. 会话层 D. 应用层
解析:传输层提供应用进程间的逻辑通信(通过端口号),即端到端的通信。而数据链路层负责相邻结点之间的通信,这个结点包括了交换机和路由器等数据通信设备,这些设备不能称为端系统。网络层负责主机到主机的逻辑通信。因此选B,考察端到端概念和对OSI参考模型的掌握。
2、若连接R2和R3链路的频率带宽为8 kHz,信噪比为30 dB,该链路实际数据传输速率约为理论最大数据传输速率的50%,则该链路的实际数据传输速率约是
A.8 kbps B.20 kbps C.40 kbps D.80 kbps
解析:香农定理给出了带宽受限且有高斯白噪声干扰的信道的极限数据传输速率,香农定理定义为:信道的极限数据传输速率=Wlog2(1+S/N),单位bps。其中,S/N为信噪比,即信号的平均功率和噪声的平均功率之比,信噪比=10*log10(S/N),单位dB,当S/N=1000时,信噪比为30dB,则该链路的实际数据传输速率约为50%*Wlog2(1+S/N)=50%*8k*log2(1+1000)=40kbps。即选择C。
3、在实现基于TCP的网络应用程序时,服务器端正确的处理流程是( )
A.socket() -> bind() -> listen() -> connect() -> read()/write() -> close()
B.socket() -> bind() -> listen() -> read()/write() -> close()
C.socket() -> bind() -> listen() -> accept() -> read()/write() -> close()
D.socket() -> connect() -> read()/write() -> close()
解析:可参考上诉对于Socket的总结,选择C。
4、 以太网交换机进行转发决策时使用的 PDU 地址是 ()
解析:最少情况下:当本机DNS高速缓存中存有该域名的DNS信息时,则不需要查询任何域名服务器,这样最少发出0次DNS查询。最多情况下:因为均采用迭代查询的方式,在最坏的情况下,需要依次迭代地向本地域名服务器、根域名服务器(.com)、顶级域名服务器(xyz.com)、权限域名服务器(abc.xyz.com)发出DNS查询请求,因此最多发出4次DNS查询。因此选择C。
6、TCP协议能够提供_____的、面向连接的、全双工的数据流传输服务。
解析:可靠的。TCP协议是一种可靠的、面向连接的协议。
7、路由器可以包含个特殊的路由。 如果没有发现到达某特定网络或特定主机的路由,那么它在转发数据包时使用的路由称为______路由。
解析:默认。路由表可以包含到某一网络的路由和到某一特定的主机路由外,还包含一个特殊的路由——默认路由, 当路由器没有到某一特定网络或特定主机的路由,在使用默认路由的情况下,路由选择例程就可以将数据报发送到这个默认路由上。
8、在因特网中,远程登录系统采用的工作模式为___模式。
解析: 客户机/服务器或C/S。Telnet 采用客户机/服务器模式。
9、网络管理的目标是最大限度地增加网络的可用时间,提高网络设备的利用率,改善网络性能、服务质量和_____
解析:安全性。网络管理的目标是最大限度地增加网络的可用时间,提高网络设备的利用率,改善网络性能、服务质量和安全性,简化多厂商混合网络环境下的管理和控制网络运行的成本,并提供网络的长期规划。
10、综合题
某网络拓扑如下图所示,其中R为路由器,主机H1~H4的IP地址配置以及R的各接口IP地址
配置如图中所示。现有若干台以太网交换机(无VLAN功能)和路由器两类网络互连设备可供选择。
请回答下列问题:
(1) 设备1、设备2和设备3分别应选择什么类型网络设备?
(2) 设备1、设备2和设备3中,哪几个设备的接口需要配置IP地址?并为对应的接口配置正确的IP地
址。
(3) 为确保主机H1~H4能够访问Internet,R需要提供什么服务?
(4) 若主机H3发送一个目的地址为192.168.1.127的IP数据报,网络中哪几个主机会接收该数据报?
答案解析:
(1)设备1:路由器 设备2:以太网交换机 设备3:以太网交换机
(2)设备1的接口需要配置ip地址;设备1的IF1,IF2,IF3接口的ip地址分别是
192.168.1.254 192.168.1.1 192.168.1.65
(3)R需要提供NAT服务
(4)主机H4会接收该数据报