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

Posted SA19225155

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何评测一个软件工程师的计算机网络知识水平与网络编程技能水平?相关的知识,希望对你有一定的参考价值。

基础理论知识提要:

 

链路层

整个数据帧由首部、数据和尾部三部分组成,首部固定为14个字节,包含了目标MAC地址、源MAC地址和类型;数据最短为46个字节,最长为1500个字节,如果需要传输的数据很长,就必须分割成多个帧进行发送;尾部固定为4个字节,表示数据帧校验序列,用于确定数据包在传输过程中是否损坏。因此,以太网协议通过对电信号进行分组并形成数据帧,然后通过物理介质把数据帧发送给接收方。那么以太网如何来识接收方的身份呢?

以太网规协议定,接入网络的设备都必须安装网络适配器,即网卡, 数据包必须是从一块网卡传送到另一块网卡。而网卡地址就是数据包的发送地址和接收地址,也就是帧首部所包含的MAC地址,MAC地址是每块网卡的身份标识,就如同我们身份证上的身份证号码,具有全球唯一性。MAC地址采用十六进制标识,共6个字节, 前三个字节是厂商编号,后三个字节是网卡流水号,例如 4C-0F-6E-12-D2-19

有了MAC地址以后,以太网采用广播形式,把数据包发给该子网内所有主机,子网内每台主机在接收到这个包以后,都会读取首部里的目标MAC地址,然后和自己的MAC地址进行对比,如果相同就做下一步处理,如果不同,就丢弃这个包。

所以链路层的主要工作就是对电信号进行分组并形成具有特定意义的数据帧,然后以广播的形式通过物理介质发送给接收方。

网络层

对于上面的过程,有几个细节问题值得我们思考:

  • 发送者如何知道接收者的MAC地址?
  • 发送者如何知道接收者和自己同属一个子网?
  • 如果接收者和自己不在同一个子网,数据包如何发给对方?

为了解决这些问题,网络层引入了三个协议,分别是IP协议、ARP协议、路由协议。

###【1】IP协议

通过前面的介绍我们知道,MAC地址只与厂商有关,与所处的网络无关,所以无法通过MAC地址来判断两台主机是否属于同一个子网。

因此,网络层引入了IP协议,制定了一套新地址,使得我们能够区分两台主机是否同属一个网络,这套地址就是网络地址,也就是所谓的IP地址。

IP地址目前有两个版本,分别是IPv4和IPv6,IPv4是一个32位的地址,常采用4个十进制数字表示。IP协议将这个32位的地址分为两部分,前面部分代表网络地址,后面部分表示该主机在局域网中的地址。由于各类地址的分法不尽相同,以C类地址192.168.24.1为例,其中前24位就是网络地址,后8位就是主机地址。因此, 如果两个IP地址在同一个子网内,则网络地址一定相同。为了判断IP地址中的网络地址,IP协议还引入了子网掩码, IP地址和子网掩码通过按位与运算后就可以得到网络地址。

由于发送者和接收者的IP地址是已知的(应用层的协议会传入), 因此我们只要通过子网掩码对两个IP地址进行AND运算后就能够判断双方是否在同一个子网了。

###【2】ARP协议

即地址解析协议,是根据IP地址获取MAC地址的一个网络层协议。其工作原理如下:

ARP首先会发起一个请求数据包,数据包的首部包含了目标主机的IP地址,然后这个数据包会在链路层进行再次包装,生成以太网数据包,最终由以太网广播给子网内的所有主机,每一台主机都会接收到这个数据包,并取出标头里的IP地址,然后和自己的IP地址进行比较,如果相同就返回自己的MAC地址,如果不同就丢弃该数据包。ARP接收返回消息,以此确定目标机的MAC地址;与此同时,ARP还会将返回的MAC地址与对应的IP地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。cmd输入 arp -a 就可以查询本机缓存的ARP数据。

###【3】路由协议

通过ARP协议的工作原理可以发现,ARP的MAC寻址还是局限在同一个子网中,因此网络层引入了路由协议,首先通过IP协议来判断两台主机是否在同一个子网中,如果在同一个子网,就通过ARP协议查询对应的MAC地址,然后以广播的形式向该子网内的主机发送数据包;如果不在同一个子网,以太网会将该数据包转发给本子网的网关进行路由。网关是互联网上子网与子网之间的桥梁,所以网关会进行多次转发,最终将该数据包转发到目标IP所在的子网中,然后再通过ARP获取目标机MAC,最终也是通过广播形式将数据包发送给接收方。

而完成这个路由协议的物理设备就是路由器,在错综复杂的网络世界里,路由器扮演者交通枢纽的角色,它会根据信道情况,选择并设定路由,以最佳路径来转发数据包。

###【4】IP数据包

在网络层被包装的数据包就叫IP数据包,IPv4数据包的结构如下图所示:

tcp_ip_lay_ip_header

IP数据包由首部和数据两部分组成,首部长度为20个字节,主要包含了目标IP地址和源IP地址,目标IP地址是网关路由的线索和依据;数据部分的最大长度为65515字节,理论上一个IP数据包的总长度可以达到65535个字节,而以太网数据包的最大长度是1500个字符,如果超过这个大小,就需要对IP数据包进行分割,分成多帧发送。

所以,网络层的主要工作是定义网络地址,区分网段,子网内MAC寻址,对于不同子网的数据包进行路由。

传输层

链路层定义了主机的身份,即MAC地址, 而网络层定义了IP地址,明确了主机所在的网段,有了这两个地址,数据包就从可以从一个主机发送到另一台主机。但实际上数据包是从一个主机的某个应用程序发出,然后由对方主机的应用程序接收。而每台电脑都有可能同时运行着很多个应用程序,所以当数据包被发送到主机上以后,是无法确定哪个应用程序要接收这个包。

因此传输层引入了UDP协议来解决这个问题,为了给每个应用程序标识身份,UDP协议定义了端口,同一个主机上的每个应用程序都需要指定唯一的端口号,并且规定网络中传输的数据包必须加上端口信息。 这样,当数据包到达主机以后,就可以根据端口号找到对应的应用程序了。UDP定义的数据包就叫做UDP数据包,结构如下所示:

tcp_ip_lay_transport_header

UDP数据包由首部和数据两部分组成,首部长度为8个字节,主要包括源端口和目标端口;数据最大为65527个字节,整个数据包的长度最大可达到65535个字节。

UDP协议比较简单,实现容易,但它没有确认机制, 数据包一旦发出,无法知道对方是否收到,因此可靠性较差,为了解决这个问题,提高网络可靠性,TCP协议就诞生了,TCP即传输控制协议,是一种面向连接的、可靠的、基于字节流的通信协议。简单来说TCP就是有确认机制的UDP协议,每发出一个数据包都要求确认,如果有一个数据包丢失,就收不到确认,发送方就必须重发这个数据包。

为了保证传输的可靠性,TCP协议在UDP基础之上建立了三次对话的确认机制,也就是说,在正式收发数据前,必须和对方建立可靠的连接。由于建立过程较为复杂,我们在这里做一个形象的描述:

  • 主机A:我想发数据给你,可以么?
  • 主机B:可以,你什么时候发?
  • 主机A:我马上发,你接着!

经过三次对话之后,主机A才会向主机B发送正式数据,而UDP是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发过去了。所以TCP能够保证数据包在传输过程中不被丢失,但美好的事物必然是要付出代价的,相比UDP,TCP实现过程复杂,消耗连接资源多,传输速度慢。

TCP数据包和UDP一样,都是由首部和数据两部分组成,唯一不同的是,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割。

总结一下,传输层的主要工作是定义端口,标识应用程序身份,实现端口到端口的通信,TCP协议可以保证数据传输的可靠性

应用层

理论上讲,有了以上三层协议的支持,数据已经可以从一个主机上的应用程序传输到另一台主机的应用程序了,但此时传过来的数据是字节流,不能很好的被程序识别,操作性差,因此,应用层定义了各种各样的协议来规范数据格式,常见的有http,ftp,smtp等,http是一种比较常用的应用层协议,主要用于B/S架构之间的数据通信,其报文格式如下:

在请求Header中,分别定义了请求数据格式Accept 和 响应数据格式Content-Type,有了这个规范以后,当对方接收到请求以后就知道该用什么格式来解析,然后对请求进行处理,最后按照请求方要求的格式将数据返回,请求端接收到响应后,就按照规定的格式进行解读。

所以应用层的主要工作就是定义数据格式并按照对应的格式解读数据

引用:http://dxyoo7.github.io/2017/07/21/u-should-know-protocol-of-tcp-ip/

全流程

首先我们梳理一下每层模型的职责:

  • 链路层:对0和1进行分组,定义数据帧,确认主机的物理地址,传输数据;
  • 网络层:定义IP地址,确认主机所在的网络位置,并通过IP进行MAC寻址,对外网数据包进行路由转发;
  • 传输层:定义端口,确认主机上应用程序的身份,并将数据包交给对应的应用程序;
  • 应用层:定义数据格式,并按照对应的格式解读数据。

然后再把每层模型的职责串联起来,用一句通俗易懂的话讲就是:

当你输入一个网址并按下回车键的时候,首先,应用层协议对该请求包做了格式定义;紧接着传输层协议加上了双方的端口号,确认了双方通信的应用程序;然后网络协议加上了双方的IP地址,确认了双方的网络位置;最后链路层协议加上了双方的MAC地址,确认了双方的物理位置,同时将数据进行分组,形成数据帧,采用广播方式,通过传输介质发送给对方主机。而对于不同网段,该数据包首先会转发给网关路由器,经过多次转发后,最终被发送到目标主机。目标机接收到数据包后,采用对应的协议,对帧数据进行组装,然后再通过一层一层的协议进行解析,最终被应用层的协议解析并交给服务器处理。

 

试题演练:

选择题:

1.下列关于CSMA/CD协议的叙述中,错误的是()。(2015年408真题)

  A.边发送数据,边检测是否发生冲突

  B.适用于无线网络,以实现无线链路共享

  C.需要根据网络跨距和数据传输速率限定最小帧长

  D.当信号传播延迟趋近0时,信道利用率趋近100%

答案:B,考察数据链路层的CSMA/CD协议

2.下列关于CSMA/CD协议的叙述中,错误的是()。(2015年408真题)

  A.边发送数据,边检测是否发生冲突

  B.适用于无线网络,以实现无线链路共享

  C.需要根据网络跨距和数据传输速率限定最小帧长

  D.当信号传播延迟趋近0时,信道利用率趋近100%

答案:B,考察数据链路层的CSMA/CD协议

3.关于TCP/IP的IP层协议描述不正确的是( ) 【网课“计算机网络”测试题】
A、是点到点的协议 B、不能保证IP报文的可靠传送
C、是无连接的数据报传输机制 D、每一个IP数据包都需要对方应答
答案:A,IP协议为面向无连接

4.在TCP/IP体系结构中,直接为ICMP提供服务的协议是( ) 【2012考研真题】
A.PPP B.IP C.UDP D.TCP
答案:C, ICMP报文包含在IP数据报内。

大题:

1.(2016年考研408)

 

图中的H3访问Web服务器S时, S为新建的TCP连接分配了20 KB(K=1 024)的接收缓存,最大段长MSS=1 KB,平均往返时间RTT=200 ms。H3建立连接时的初始序号 为100,且持续以MSS大小的段向S发送数据,拥塞窗口初始阈值为32 KB;S对收到的每个段进 行确认,并通告新的接收窗口。假定TCP连接建立完成后,S端的TCP接收缓存仅有数据存入而 无数据取出。请回答下列问题。 

(1)在TCP连接建立过程中,H3收到的S发送过来的第二次握手TCP段的SYN和ACK标志位 的值分别是多少?确认序号是多少?   

(2)H3收到的第8个确认段所通告的接收窗口是多少?此时H3的拥塞窗口变为多少?H3的发 送窗口变为多少?   

(3)当H3的发送窗口等于0时,下一个待发送的数据段序号是多少?H3从发送第1个数据段到 发送窗口等于0时刻为止,平均数据传输速率是多少(忽略段的传输延时)?   

(4)若H3与S之间通信已经结束,在t时刻H3请求断开该连接,则从t时刻起,S释放该连接的 最短时间是多少?

答案:

(1)第二次握手TCP段的SYN=1,ACK=1;确认序号是101。

(2)H3收到的第8个确认段所通告的接收窗口是12 KB;此时H3的拥塞窗口变为9 KB; H3的发送窗口变为9 KB。

(3)当H3的发送窗口等于0时,下一个待发送段的序号是20 K+101=20×1024+101=20581;H3从发送第1个段到发送窗口等于0时刻为止,平均数据传输速率是20 KB/(5×200 ms)=20 KB/s=20.48 kbps。

(4)从t时刻起,S释放该连接的最短时间是:1.5×200 ms=300 ms。

2.(2015考研408)

某网络拓扑如题47图所示,其中路由器内网接口、DHCP服务器、WWW服务器与主机1均采用静 态IP地址配置,相关地址信息见图中标注;主机2~主机N通过DHCP服务器动态获取IP地址等配置信息。 

  请回答下列问题。 

(1)DHCP服务器可为主机2~主机N动态分配IP地址的最大范围是什么?主机2使用DHCP协议获取IP地址的 过程中,发送的封装DHCP Discover报文的IP分组的源IP地址和目的IP地址分别是什么? 

(2)若主机2的ARP表为空,则该主机访问Internet时,发出的第一个以太网帧的目的M&C地址是什么?封装 主机2发往Internet的IP分组的以太网帧的目的MAC地址是什么?   

(3)若主机1的子网掩码和默认网关分别配置为255.255.255.0和111.123.15.2,则该主机是否能访问WWW服 务器?是否能访问Internet?请说明理由。

答案:

(1)DHCP服务器可为主机2~主机N动态分配IP地址的最大范围是:111.123.15.5~111.123.15.254;主机2
发送的封装DHCPDiscover报文的IP分组的源IP地址和目的IP地址分别是0.0.0.0和255.255.255.255。

(2)主机2发出的第一个以太网帧的目的MAC地址是ff-ff-ff-ff-ff-ff;封装主机2发往Internet的IP分组的以太 网帧的目的MAC地址是00-al-al-al-al-al。

(3)主机1能访问WWW服务器,但不能访问Internet。由于主机1的子网掩码配置正确而默认网关IP地址被 错误地配置为111.123.15.2(正确IP地址是111.123.15.1),所以主机1可以访问在同一个子网内的WWW服务器, 但当主机1访问Internet时,生机1发出的IP分组会被路由到错误的默认网关(111.123.15.2),从而无法到达目的主 机。

以上是关于如何评测一个软件工程师的计算机网络知识水平与网络编程技能水平?的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

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

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

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