如何评测一个软件工程师的计算机网络知识水平与网络编程技能水平

一、linux的网络协议栈的总结

1、Linux中TCP/IP网络层次结构与实现 
  Linux通过一组相邻的软件层实现了TCP/IP模型,它由BSD Socket层、INET Socket层、传输层、网络层,和链路层构成。应用程序使用系统调用向内核函数传递参数和数据从而进入内核空间,由内核中注册的内核函数对相应的数据结构进行处理。
Linux的TCP/IP层次结构和实现方式如图所示。

如何评测一个软件工程师的计算机网络知识水平与网络编程技能水平_第1张图片

socket层

这层主要处理socket相关的东西,例如其各种结构的初始化等。每个socket在内核中以socket结构体的形式存在,它的结构体定义如下

socket结构体

struct socket
{
    socket_stat state;          //socket的状态
    unsigned long flags;        //socket的标志位
    const struct proto_ops *pos //socket的函数操作表
    struct fasync_struct *fasync_list  //socket的异步唤醒队列
    struct file *file;         //与socket关联的文件指针
    struct sock *sk;          //代表具体协议内容的sock结构指针
    wait_queue_head_t wait    //用于等待队列
    short type;               //socket的类型
}

其中sock结构体封装了与具体协议相关的东西,它的结构体定义稍微有点大,它定义的主要几个模块如下

  1)定义了与inet_timewait_sock共用的结构体sock_common,该结构体主要包含了地址族,连接状态,协议函数表等内容

  2)定义了各种和接收发送队列相关的数据以及队列

  3)用于记录以及提供控制的各种接收发送的数据

 

2、TCP/IP协议栈的一些代码的简单分析

(1)主要数据结构

struct msghdr
struct sk_buf
struct socket
struct sock
struct proto_ops
struct proto

  不言而喻套接字层对应操作的就是socket,那么我们如何创建一个socket呢。接触过网络编程的大概都会知道疮疖一个套接字只需调用函数socket(),其实这个函数内部实现是非常复杂的,它会根据上述函数的参数创建一个socket实例(应该可以理解成对socket结构体的初始化),并创建一个套接字描述符,然后通过指针让这二者建立联系。其中初始化socket时,会根据不同的协议初始化出不同的函数操作表pos(见上面的结构体信息)。如果是TCP为inet_stream_ops,是UDP则为inet_dgram_ops,同时socket还通过调用sock中的相关操作完成从socket到sock层的传递初始化sock时还会初始化3个队列。recvive_queue(接收的数据包sk_buf链表队列),send_queue(需要发送数据包sk_buf的链表队列),back_queue(TCP三次握手成功的数据包队列)。还有将faimly初始化为inet类型,type为stream类型,sock_proto初始化为tcp_prot。

  在一端进行write或send过程时,首先会把write缓冲区中的数据打包成msghdr的数据结构形式,然后调用sock_sendmsg把msghdr的数据发送至inet层(应运层与传输层的中间,提供各种协议的接口),然后msghdr的结构中的数据又被sk_buf结构所封装,此时的数据包就是个完全体了,可以挂在发送队列了 

(2)linux的路由系统

  主要保存了三种与路由相关的数据,第一种是在物理上和本机相连接的主机地址信息表,第二种是保存了在网络访问中判断一个网络地址应该走啥路由的数据表,第三种是最新使用过的查询路由地址的缓存地址数据表。FIB结构中保存了最重要的路由规则,通过其可以找到路由地址方法。系统中路由的手段一般为现在路由缓存中查找,如果能找到直接将对应的项作为路由规则,如果找不到,解根据FIB中的规则换算出来。

数据链路层

  前面提到的net_device硬件表对应于每一个网络接口设备。这个结构中包含了很多可以直接获取网卡信息的函数和变量,以及对网卡操作的函数,此类函数直接指向网卡驱动程序的入口,包括发送和接收帧到缓存区这些工作完成之后,便由netif_rx把缓存区中的帧组成sk_buf的形式挂到系统的系统的接收队列

启动过程

初始化进程主要:start—>kernel—>do_basic_setup—>sock_init—->do_initcalls

do_initcalls初始化的基本流程可以概述如下

(1)协议的初始化

(2)路由的初始化

(3)网络接口设备的初始化

 

3.网络连接

TCP连接通过如下函数

sockfd = socket(AF_INET,SOCK_STREAM,0);

connect(sockfd,&adress,sizeof(address))

在此函数的调用过程中主要发生了如下事情

(1)sys_socket系统调用,它又调用socket_creat()来创建一个满足socket函数参数的socket结构,而sock_creat()又会根据协议的不同调用不同的函数,对inet来说,它会调用inet_create函数,然后它还会调用其他的一系列的函数

(2)在系统初始化工作完成之后便会进行connect的工作,connect将一个和sockect关联的套接字描述符与一个远程的机器相关联,并调用各个协议自己对应的connect连接函数。TCP为inet_stream_connect

(3)inet_stream_connect会得到一个sk结构,这个sk结构描述了套接字的一些属性以及状态,对于TCP来说然后调用tcp_v4_connect函数

(4)tcp_v4_connect()又调用其他函数用于寻找合适的路由

 

4.连接的关闭

(1)关闭连接时由close调用sock_close函数

(2)sock_close()调用sock_release()来释放一些空间

(3)inet_release调用socket对应的协议的关闭函数,最后释放sk

 

参考:https://blog.csdn.net/Shreck66/article/details/47428533

 

二、计算机网络知识水平与编程能力测试题

简答题(计算机网络课后题)

1、列举并简述两种TCP/IP协议族下常见的网络攻击形式,并简述对应的防范策略。

  SYN洪泛攻击:攻击者发送许多数据包,但不向服务器发送“ACK”。因此,连接半开,吞下服务器资源。由于阻止服务攻击,合法用户尝试连接到服务器但被拒绝。——缩短超时时间,增加过滤网关保护等;ARP洪泛攻击:受害计算机持续地向局域网内所有的计算机及网络通信设备发送大量的ARP欺骗数据包,如果不及时处理,便会造成网络通道阻塞、网络设备的承载过重、网络的通讯质量不佳等情况——在网络中架设DHCP服务器,绑定网关与客户端IP+MAC;安装防火墙等。

 

2、TCP提供的服务主要有哪些?TCP的“可靠传输”指的是什么?

  简单来说,TCP提供的服务主要有:面向连接服务,字节流接口,流量控制,拥塞控制,保证可靠性,包括无丢失,不重复,按序交付

 

分析题(计算机统考真题)

3、某公司网络拓扑图如下图所示,路由器R1通过接口E1、E2分别连接局域网1、局域网2,通过接口L0连接路由器R2,并通过路由器R2连接域名服务器与互联网。R1的L0接口的IP地址是202.118.2.1;R2的L0接口的IP地址是202.118.2.2,L1接口的IP地址是130.11.120.1,E0接口的IP地址是202.118.3.1;域名服务器的IP地址是202.118.3.2。

如何评测一个软件工程师的计算机网络知识水平与网络编程技能水平_第2张图片

R1和R2的路由表结构为:

目的网络IP地址

子网掩码

下一跳IP地址

接口

(1)将IP地址空间202.118.1.0/24划分为两个子网,分配给局域网1、局域网2,每个局域网分配的地址数不少于120个,请给出子网划分结果。说明理由或给出必要的计算过程。

(2)请给出R1的路由表,使其明确包括到局域网1的路由、局域网2的路由、域名服务器的主机路由和互联网的路由。

(3)请采用路由聚合技术,给出R2到局域网1和局域网2的路由。

答案及知识点解析:考察网络层

(1)无类IP地址的核心是采用不定长的网络号和主机号,并通过相应的子网掩码来表示(即网络号部分为1,主机号部分为0)。本题中网络地址位数是24,由于IP地址是32位,因此其主机号部分就是8位。因此,子网掩码就是11111111 11111111 11111111 00000000,即255.255.255.0。 根据无类IP地址的规则,每个网段中有两个地址是不分配的:主机号全0表示网络地址,主机号全1表示广播地址。因此8位主机号所能表示的主机数就是2的8次方—2,即254台。该网络要划分为两个子网,每个子网要120台主机,因此主机位数X应该满足下面三个条件:  X<8,因为是在主机号位长为8位的网络进行划分,所以X一定要小于8位。  2的X次方>120,因为根据题意需要容纳120台主机。  X是整数。 解上述方程,得到X=7.子网掩码就是11111111 11111111 11111111 10000000,即255.255.255.128。所以划分的两个网段是:202.118.1.0/25与202.118.1.128/25。

(2)填写R1的路由表

 填写到局域网1的路由。局域网1的网络地址和掩码在问题(1)已经求出来了,为202.118.1.0/25。则R1路由表应填入的网络地址为202.118.1.0,掩码为255.255.255.128。由于局域网1是直接连接到路由器R1的E1口上的,因此,下一跳地址填写直接路由(Direct)。接口填写E1.  填写到局域网2的路由表1。局域网2的网络地址和掩码在问题(1)中已经求出来了,为202.118.1.128/25。则R1路由表应该填入的网络地址为202.118.1.128,掩码为255.255.255.128.由于局域网2是直接连接到路由器R1的E2口上的,因此,下一跳地址填写直接路由。接口填写E2。 填写到域名服务器的路由。由于域名服务器的IP地址为202.118.3.2,而该地址为主机地址,因此掩码为255.255.255.255。同时,路由器R1要到DNS服务器,就需要通过路由器R2的接口L0才能到达,因此下一跳地址填写L0的IP地址(202.118.2.2)。 填写互联网路由。本题实质是编写默认路由。默认路由是一种特殊的静态路由,指的是当路由表中与包的目的地址之间没有匹配的表项时路由器能够做出的选择。如果没有默认路由器,那么目的地址在路由表中没有匹配表项的包将被丢弃。默认路由在某些时候非常有效,当存在末梢网络时,默认路由会大大简化路由器的配置,减轻管理员的工作负担,提高网络性能。默认路由叫做“0/0”路由,因为路由的IP地址0.0.0.0,而子网掩码也是0.0.0.0。同时路由器R1连接的网络需要通过路由器R2的L0口才能到达互联网络,因此下一跳地址填写L0的IP为202.118.2.2。 综上,填写的路由表如下: R1路由表

目的网络IP地址

子网掩码

下一跳IP地址

接口

202.118.1.0

255.255.255.128

Direct

E1

202.118.1.128

255.255.255.128

Direct

E2

202.118.3.2

255.255.255.255

202.118.2.2

L0

0.0.0.0

0.0.0.0

202.118.2.2

L0

(3)填写R2到局域网1和局域网2的路由表2。局域网1和局域网2的地址可以聚合为202.118.1.0/24,而R2去往局域网1和局域网2都是同一条路径。因此,路由表里面只需要填写到202.118.1.0/24网络的路由即可,如下表所示

R2路由表

目的网络IP地址

子网掩码

下一跳IP地址

接口

202.118.1.0

255.255.255.0

202.118.2.1

L0

 

 

选择题

4、在OSI参考模型的物理层、数据链路层、网络层传送的数据单位分别为 (A) 

A、比特、帧、分组      B、比特、分组、帧  

C、帧、分组、比特      D、分组、比特、帧

5、ARP 协议的功能是__A___ 。 (2012考研试题)

A.根据 IP 地址查询 MAC 地址 

B.根据 MAC 地址查询 IP 地址

C.根据域名查询 IP 地址 

D.根据 IP 地址查询域名

解析:A

考查 ARP 协议的功能。

在实际网络的数据链路层上传送数据时,最终必须使用硬件地址,ARP 协议是将网络层的 IP 地址解析为数据链路层的 MAC 地址。

6、(2011年统考)TCP/IP参考模型的网络层提供的是(A)。

A. 无连接不可靠的数据报服务  B. 无连接可靠的数据报服务

C. 有连接不可靠的虚电路服务  D. 有连接可靠的虚电路服务

解析:A。TCP/IP的网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。此外考察IP首部,如果是面向连接的,则应有用于建立连接的字段,但是没有;如果提供可靠的服务,则至少应有序号和校验和两个字段,但是IP分组头中也没有(IP首部中只是首部校验和)。因此网络层提供的无连接不可靠的数据服务。有连接可靠的服务由传输层的TCP提供。

7、下列选项中,不属于网络体系结构所描述的内容是__C____。

A.网络的层次
B.每一层使用的协议
C.协议的内部实现细节
D.每一层必须完成的功能
解析:考查计算机网络体系结构的基本概念。
我们把计算机网络的各层及其协议的集合称为体系结构。因此 A、B、D 正确,而体系结构是抽象的,它不包括各层协议及功能的具体实现细节
 

你可能感兴趣的:(如何评测一个软件工程师的计算机网络知识水平与网络编程技能水平)