网络程序设计知识总结
网络相关工具
在网络相关的命令工具调研中我选取了
nslookup
作为案例。详细可以参考我的博客
nslookup作用
nslookup,全称是name server lookup,也就是域名查询。nslookup是一个用于查询Internet域名信息或者诊断DNS服务器问题的工具。
nslookup可以指定查询的类型,能够查询到DNS记录的生存时间,并且还能够在命令中使用参数指定使用哪个DNS服务器进行解释。
在已经安装了TCP/IP协议的电脑上均可以使用这个命令。
总结起来,nslookup命令主要用于查询DNS的记录,查看域名解析是否正常,在网络故障的时候用来诊断网络问题。
nslookup的应用场景
一般来说,我们在一台主机上配置好DNS服务器,添加了相应的记录之后,只要IP地址保持不变,一般情况下我们就不再需要去维护DNS的数据文件了。
不过在确认域名解释正常之前我们最好是测试一下所有的配置是否正常。许多人会简单地使用ping命令检查一下就算了。不过Ping指令只是一个检查网络连通情况的命令,虽然在输入的参数是域名的情况下会通过DNS进行查询,但是它只能查询A类型和CNAME类型的记录,而且只会告诉你域名是否存在,其他的信息一概欠奉。
所以如果你需要对DNS的故障进行排错就必须熟练另一个更强大的工具nslookup。
nslookup命令的使用
分为以下三个部分展开:
- 直接查询
- 查询其他类型的记录
- 查询更具体的信息
网络编程
通过
socket
编程和java
提供的网络接口API与Linux Socket API之间的关系,我们了解了网络编程的相关知识。详情
Socket原理
Socket实质上提供了进程通信的端点。进程通信之前,双方首先必须各自创建一个端点,否则是没有办法建立联系并相互通信的。正如打电话之前,双方必须各自拥有一台电话机一样。
套接字之间的连接过程可以分为三个步骤:
服务器监听
,客户端请求
,连接确认
。
服务器监听
:建立服务器端套接字,并处于等待连接的状态,不定位具体的客户端套接字,而是实时监控网络状态。客户端请求
:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。
为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。连接确认
:是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,
一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。
下图为基于TCP协议
Socket的通信模型。
服务器端流程
- 创建ServerSocket对象,绑定监听端口。
- 通过accept()方法监听客户端请求。
- 连接建立后,在接收进程中通过输入流读取客户端发送的请求信息。
- 在服务器发送进程中通过输出流向客户端发送响应信息。
- 关闭相应的资源和Socket。
客户端流程
- 创建Socket对象,指明需要连接的服务器的地址和端口号。
- 连接建立后,通过输出流向服务器发送请求信息。
- 通过输入流获取服务器响应的信息。
- 关闭相应资源。
调用栈分析
- 创建ServerSocket
- socket绑定
- socket监听
- socket accept
MenuOS构建与系统调用追踪分析
关于这一部分的内容比较多,详细的追踪过程和分析可以参考我的博客
构建调试Linux内核网络代码的环境MenuOS系统
socket与系统调用分析
测试命令
break __sys_socket
break __sys_bind
break __sys_listen
break __sys_connect
break __sys_accept4
break __sys_recvmsg
break __sys_sendmsg
break __sys_recvfrom
break __sys_sendto
break __sys_shutdown
追踪结果
TCP协议与源代码分析和理解
TCP源代码结构分析
TCP三次握手源代码分析
计算机网络知识水平与网络编程水平的测评试题
选择题
(百度文库,2018)1、下面哪一个的说法是正确的( B )
A、TCP是可靠的数据传输协议,而UDP是不可靠的,所以TCP总是优于UDP
B、点对点不需要ARP协议,以太网需要ARP协议
C、IP实体不仅要接收和发送IP数据报,还需要维护路由表
D、在任何情况下,TCP实体总是立即发送应用程序的输出数据
解析:
A中显然是错的,UDP在即时通讯、以及正确率要求不高的场合比TCP要更加经济和快捷;
C中前半句是正确的,而维护路由表不归IP实体管;
D中,当应用程序的数据较少时,为了提高效率,TCP实体会缓存数据到一定数量再发送。
因此,就本题而言,B中点对点是直连、一般不经过路由器的路由和转发,故不需要ARP协议,本题选B。
(408真题,2012)2、对地址转换协议(ARP)描述正确的是( B )
A、ARP封装在IP数据报的数据部分
B、ARP是采用广播方式发送的
C、ARP是用于IP地址到域名的转换
D、发送ARP包需要知道对方的MAC地址
解析:
通过ARP原理:
在任何时候,一台主机有IP数据报文发送给另一台主机,它都要知道接收方的逻辑(IP)地址。但是IP地址必须封装成帧才能通过物理网络。这就意味着发送方必须有接收方的物理(MAC)地址,因此需要完成逻辑地址到物理地址的映射。而ARP协议可以接收来自IP协议的逻辑地址,将其映射为相应的物理地址,然后把物理地址递交给数据链路层。
我们可以了解到,ARP协议是用于IP地址与MAC地址之间的转换,故C错误;而A中封装再IP数据报的数据部分显然是IP的上层TCP或是UDP的报文,故A错误;D中发送ARP请求报文时封装到帧中填入的MAC为全1,即使用广播方式发送给局域网内的所有主机,故D错误,B正确。
(百度文库,2018)3、对于基带CSMA/CD而言,为了确保发送站点在传输时能检测到可能存在的冲突,数据帧的传输时延至少要等于信号传播时延的( B )
A、1倍
B、2倍
C、3倍
D、4倍
解析:
在局域网的分析中,常把总线上的单程端到端传播时延记为τ。
发送数据的站希望尽早知道是否发生了碰撞。那么,A发送数据后,最迟要经过多长时间才能知道自己发送的数据和其他站发送的数据有没有发生碰撞?
从图中不难看出,这个时间最多是两倍的总线端到端的传播时延2τ,或总线的端到端往返传播时延。
由于局域网上任意两个站之间的传播时延有长有短,因此局域网必须按最坏情况设计,即取总线两端的两个站之间的传播时延(这两个站之间的距离最大)为端到端传播时延。
故本题选B。
(408真题,2016)4、下列关于CSMA/CD协议的叙述中,错误的是( B )
A、边发送数据帧,边检测是否发生冲突
B、适用于无线网络,以实现无线链路共享
C、需要根据网络跨距和数据传输速率限定最小帧长
D、当信号传播延迟趋近0时,信道利用率趋近100%。
解析:
CSMA/CD(多点接入载波监听/冲突检测),其基本要点:
- 多点接入说明是总线型网络,计算机以多点接入的方式连接在一根总线上,协议的实质是“载波监听”和“碰撞检测”。
- 载波监听就是利用电子技术检测总线上有没有其他计算机也在发送。载波监听实际上就是检测信道。在发送前,每个站不停地检测信道,是为了获得发送权;在发送中检测信道,是为了及时发现有没有其他站的发送和本站发送的碰撞,这就是碰撞检测。总之,载波监听是全程都在进行的。
- 碰撞检测就是边发送边监听。就是网卡边发送数据边检测新岛上的信号电压的变化情况,以便判断自己在发送数据的时候其他站是否也在发送数据。当几个站同时在总线上发送数据时,总线上的信号电压变化幅度将会增大(互相叠加),当网卡检测到的信号电压超过一定的门限值时,说明总线上至少有两个站同时在发送数据,表明产生了碰撞(冲突),所以也称为冲突检测。这时,由于接收的信号已经识别不出来,所以任何一个正在发送的站就会立即停止发送数据,然后等待一段随机事件以后再次发送。
因此,选项中A、C和D显然符合CSMA/CD的特点,而对于B选项,CSMA/CD适用的场景主要是以太网,在无线局域网中最常适用的是CSMA/CA协议,故选B。
(牛客网,2015)5、局域网体系结构中( B )被划分成MAC和LLC两个子层。
A、物理层
B、数据链路层
C、网络层
D、运输层
解析:
MAC子层的主要功能包括数据帧的封装/卸装,帧的寻址和识别,帧的接收与发送,链路的管理,帧的差错控制等。MAC子层的存在屏蔽了不同物理链路种类的差异性;
LLC子层负责向其上层提供服务;LLC 是在高级数据链路控制(HDLC:High-Level Data-Link Control)的基础上发展起来的,并使用了 HDLC 规范子集。
因此,以上两个子层均与数据链路层相关,本题选B。
(牛客网,2017)6、如果本地域名服务器无缓存,当采用递归方法解析另一网络某主机域名时,用户主机、本地域名服务器发送的域名请求消息数分别为( A )
A、一条、一条
B、一条、多条
C、多条、一条
D、多条、多条
解析:
在实际中,客户机向本地域名服务器查询是递归查询,本地域名服务器向其他域名服务器是迭代查询,但是这里题目要求就是递归查询。所以不要错选成B。
递归查询是:客户机发送一条查询请求到本地域名服务器,发现缓存中没有主机名和IP地址对的信息,那么本地域名服务器就往上继续查询,发送一个查询报文,如果在某一级域名服务器找到了主机名和IP地址对信息,就直接返回。
如果找不到,那么这个域名服务器又会作为客户机去请求上一级域名服务器,直至根域名服务器,根名称服务器收到DNS请求后,把所查询得到的所请求的DNS域名中发送给顶级域名服务器,让顶级域名服务器去往下级域名服务器请求查找,如果找到了就原路返回。
某域名服务器-->...->顶级域名服务器-->根域名服务器-->下一级域名服务器-->...-->本地域名服务器-->客户机。
所以在递归查询中,主机发送的请求为1次,本地域名服务器发送的请求也为1次。
因此,本题选择A。
7、在OSI参考模型中,自下而上第一个提供端到端服务的层次是( B )
A、数据链路层
B、传输层
C、会话层
D、应用层
解析:
OSI七层参考模型为:
题目要求是自下而上,因此本题选B。
填空题
(百度文库,2018)1、将主机名转换成 IP 地址,要使用: A 协议,将 IP 地址转换成 MAC 地址,要使用: B 协议
答案: A:DNS;B:ARP
解析:
- 域名系统(服务)协议(DNS)是一种分布式网络目录服务,主要用于域名与 IP 地址的相互转换,以及控制因特网的电子邮件的发送。
- 地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。地址解析协议是建立在网络中各个主机互相信任的基础上的,局域网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。ARP命令可用于查询本机ARP缓存中IP地址和MAC地址的对应关系、添加或删除静态对应关系等。
(牛客网,2017)**2、在OSI参考模型的物理层、数据链路层、网络层传送的数据单位分别为:A,B,C **
答案:A:比特; B:帧; C:分组
解析:
- 物理层是OSI参考模型的最低层,它利用传输介质为数据链路层提供物理连接。它主要关心的是通过物理链路从一个节点向另一个节点传送比特流
- 数据链路层是为网络层提供服务的,解决两个相邻结点之间的通信问题,传送的协议数据单元称为数据帧
- 网络层是为传输层提供服务的,传送的协议数据单元称为数据包或分组。
(原创)3、在TCP中,连接的建立采用:A 的方法,连接的断开采用:B 的方法。
答案: A:三次握手; B:四次挥手
解析:
三次握手:
第一次握手:建立连接时,客户端发送syn包(syn=x)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
四次挥手:
- 1)客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。
- 2)服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。
- 3)客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。
- 4)服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
- 5)客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。
- 6)服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。
判断题
(原创) 1、检查网络连通性的应用程序是TRACERT。( F )
解析:
Ping属于一个通信协议,是TCP/IP协议的一部分。利用“ping”命令可以检查网络是否连通,可以很好地帮助我们分析和判定网络故障。应用格式:
Ping IP地址
。而TRACERT(跟踪路由)是路由跟踪实用程序,用于确定 IP数据包访问目标所采取的路径。Tracert 命令使用用 IP 生存时间 (TTL) 字段和 ICMP 错误消息来确定从一个主机到网络上其他主机的路由。
故本题选择错误。
(牛客网,2018)2、一座大楼内的一个计算机网络系统,属于 WAN。( F )
解析:
局域网(LAN):一般限定在较小的区域内(小于10km的范围),通常采用有线的方法连接起来。
城域网(MAN):规模局限在一座城市的范围内。
广域网(WAN):网络跨越国界、洲界,甚至遍及全球范围。
个人区域网(PAN):一般指家庭一台或多台电脑所使用的网络。
无线局域网(WLAN):是指通过无线设备建立的,给支持无线通信的设备使用的,比如无线网卡,或手机上的WIFI。
一座大楼不可能超过10km范围,所以是LAN。
(牛客网,2016)3、 IP 协议提供的是服务类型是无连接的虚电路服务。( F )
解析:
IP由IP协议控制传输的协议单元称为IP数据报。IP协议屏蔽下层各种物理网络的差异,向上层(主要是TCP层或UDP层)提供统一的IP数据报。作为一种互联网协议,运行于网络层,屏蔽各个物理网络的细节和差异,为其高层用户提供如下3种服务:
- 不可靠的数据投递服务。数据报的投递没有任何品质保证,数据报可能被正确投递,也可能被丢弃;
- 面向无连接的传输服务。这种方式不管数据报的传输经过哪些结点,甚至可以不管数据报起始和终止的计算机。数据报的传输可能经过不同的传输路径,而且这些数据报在传输过程中有可能丢失,也有可能正确传输到目的结点;
- 尽最大努力投递服务。IP不会随意丢包,除非系统的资源耗尽、接收出现错误、或者网路出现故障的情况下,才不得不丢弃报文。
故本题应该为无连接的数据报服务,而并非是虚电路服务。
(原创)4、负责电子邮件传输的应用层协议是SMTP ( T )
解析:
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议。
因此,本题正确。
简答题
(牛客网,2018)1、比较分析网络互连设备中的网桥(Bridge)和路由器(Router)的异同点?
- 网桥工作在数据链路层,仅能连接两个同类网络,用于实现网络间帧的转发;
- 路由器工作在网络层,可连接三个或三个以上同类网络,用于实现多个网络间分组的路由选择及转发功能。
- 相同点:两者都是网间互连设备
- 不同点:工作层次不同,连接网络数目不同,传送单位不同。
解析:
网桥和路由器的工作层次不同,
但同样都是网络间互联的设备。
因此,答案中只要层次、网络互连等方面,言之有理的都算正确。
(原创)2、简述OSI七层参考模型的功能。
- 应用层:OSI参考模型中最靠近用户的一层,是为计算机用户提供应用接口,也为用户直接提供各种网络服务。我们常见应用层的网络服务协议有:HTTP,HTTPS,FTP,POP3、SMTP等。
- 表示层:表示层提供各种用于应用层数据的编码和转换功能,确保一个系统的应用层发送的数据能被另一个系统的应用层识别。数据压缩和加密也是表示层可提供的转换功能之一。
- 会话层:会话层就是负责建立、管理和终止表示层实体之间的通信会话。该层的通信由不同设备中的应用程序之间的服务请求和响应组成。
- 传输层:传输层建立了主机端到端的链接,传输层的作用是为上层协议提供端到端的可靠和透明的数据传输服务,包括处理差错控制和流量控制等问题。
- 网络层: 本层通过IP寻址来建立两个节点之间的连接,为源端的运输层送来的分组,选择合适的路由和交换节点,正确无误地按照地址传送给目的端的运输层。就是通常说的IP层。这一层就是我们经常说的IP协议层。IP协议是Internet的基础。
- 数据链路层:将比特组合成字节,再将字节组合成帧,使用链路层地址 (以太网使用MAC地址)来访问介质,并进行差错检测。
- 物理层:实际最终信号的传输是通过物理层实现的。通过物理介质传输比特流。规定了电平、速度和电缆针脚。
解析:
出题的意图在于掌握网络的基础知识。
对于每一层的叙述只要切合题意,言之有理的都算正确。