• 计算机网络 & 网络编程 期末总结与测评题


      

    第一部分:网络编程部分的相关知识

    Socket套接字定义:

    套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口的组合。

      • Socket的英文原义是“孔”或“插座”。在网络编程中,网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个Socket。

      • Socket套接字是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。
        它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。

      • Socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口。 

    Socket 调用流程:

     

    socket():创建套接字。

    bind():指定本地地址。一个套接字用socket()创建后,它其实还没有与任何特定的本地或目的地址相关联。在很多情况下,应用程序并不关心它们使用的本地地址,这时就可以不用调用bind指定本地的地址,而由协议软件为它们选择一个。但是,在某个知名端口(Well-known Port)上操作的服务器进程必须要对系统指定本地端口。所以一旦创建了一个套接字,服务器就必须使用bind()系统调用为套接字建立一个本地地址。

    connect():将套接字连接到目的地址。初始创建的套接字并未与任何外地目的地址关联。客户机可以调用connect()为套接字绑定一个永久的目的地址,将它置于已连接状态。对数据流方式的套接字,必须在传输数据前,调用connect()构造一个与目的地的TCP连接,并在不能构造连接时返回一个差错代码。如果是数据报方式,则不是必须在传输数据前调用connect。如果调用了connect(),也并不像数据流方式那样发送请求建连的报文,而是只在本地存储目的地址,以后该socket上发送的所有数据都送往这个地址,程序员就可以免去为每一次发送数据都指定目的地址的麻烦。

    listen():设置等待连接状态。对于一个服务器的程序,当申请到套接字,并调用bind()与本地地址绑定后,就应该等待某个客户机的程序来要求连接。listen()就是把一个套接字设置为这种状态的函数。

    accept():接受连接请求。服务器进程使用系统调用socket,bind和listen创建一个套接字,将它绑定到知名的端口,并指定连接请求的队列长度。然后,服务器调用accept进入等待状态,直到到达一个连接请求。

    send()/recv()和sendto()/recvfrom():发送和接收数据 。在数据流方式中,一个连接建立以后,或者在数据报方式下,调用了connect()进行了套接字与目的地址的绑定后,就可以调用send()和reev()函数进行数据传输。

    closesocket():关闭套接字。

     TCP 三次握手四次断开的工作原理图:

      • 第一次握手:A客户进程向B发出连接请求报文段,(首部的同步位SYN=1,初始序号seq=x),(SYN=1的报文段不能携带数据)但要消耗掉一个序号,此时TCP客户进程进入SYN-SENT(同步已发送)状态。
      • 第二次握手:B收到连接请求报文段后,如同意建立连接,则向A发送确认,在确认报文段中(SYN=1,ACK=1,确认号ack=x+1,初始序号seq=y),TCP服务器进程进入SYN-RCVD(同步收到)状态;
      • 第三次握手:TCP客户进程收到B的确认后,要向B给出确认报文段(ACK=1,确认号ack=y+1,序号seq=x+1)(初始为seq=x,第二个报文段所以要+1),ACK报文段可以携带数据,不携带数据则不消耗序号。TCP连接已经建立,A进入ESTABLISHED(已建立连接)。
        当B收到A的确认后,也进入ESTABLISHED状态。

     

    套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。 

    服务器监听:建立服务器端套接字,并处于等待连接的状态,不定位具体的客户端套接字,而是实时监控网络状态。 

    客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。 为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。 

    连接确认:是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端, 一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。  上图为基于TCP协议Socket的通信模型。

    TCP数据包格式:

    内核中断简介

      

    gdb常用指令:

    break——设置断点,缩写为b;

    delete——删除断点,缩写c;

    step——单步跟踪,进入调用函数,s;

    next——单步跟踪,不进入调用函数,n;

    continue——恢复执行,c;

    run——启动调试,r;

     

    第二部分:《计算机网络》相关基础知识回顾

    我去复习408《计算机网络》 做了一些笔记:

    第三部分:测评试题【包括:计算机网络+网络编程】

    1.选择题

    1.【原创】gdb常用指令中,以下哪个指令用于设置断点的?( )

    A.run

    B.break

    C.continue

    D.delete 

    答案:B 

    分析:gdb指令中,run是运行,break是设置断点,continue是继续运行,delete是删除断点。

     

    2.【原创】在Socket API中,以下哪个函数是用于设置等待连接状态的?( )

    A.socket

    B.send

    C.listen

    D.accept

    答案:C 

    分析:在Socket API中,socket创建套接字,send发送数据,listen设置等待连接状态,accept接收连接请求。

     

    3.【408】若将网络21.3.0.0/16划分为128个规模相同的子网,则每个子网可分配的最大IP地址个数为( )

    A.254

    B.256

    C.510

    D.512

    答案:C 

    分析:首先2^16/128=512, 由于全0本机,全1广播,所以除去两个,512-2=520,得到最大IP地址个数为520个。

     

    4.【原创】7层OSI参考模型的第6层完成的主要功能是( )

    A.差错控制

    B.拥塞控制

    C.流量控制

    D.数据表示转换

    答案:D 

    分析:自下而上第6层是表示层,完成的任务是数据表示转换,具体有:标准编码、加密、压缩等。

     

    5.【408】下列关于CSMA/CD协议的叙述中,错误的是( )

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

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

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

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

    答案:B

    分析:CSMA/CA适用于无线网络,以实现无线链路共享;CSMA/CD协议适用于有线局域网。

      

    6.【408】在TCP/IP体系结构中,直接为ICMP提供服务的协议是( ) 

    A.PPP               B.IP             C.UDP             D.TCP

    答案:B

    分析:ICMP报文包含在IP数据报内。

     

    7.【408】某网络拓扑如下图所示,路由器R1只有到达子网192.168.1.0/24的路由。为使R1可以将IP分组正确地路由到图中所有子网,则在R1中需要增加一条路由(目的网络,子网掩码,下一跳)是()

    image-20200109222045076

    A.192.168.2.0 255.255.255.128 192.168.1.1
    B.192.168.2.0 255.255.255.0 192.168.1.1
    C.192.168.2.0 255.255.255.128 192.168.1.2
    D.192.168.2.0 255.255.255.0 192.168.1.2

    答案:D

    分析:由图可知,为使R1可以将IP分组正确地路由到图中所有子网,需要聚合三个网络的路由。则在R1中需要增加一条路由目的网络:192.168.2.0 ;子网掩码:255.255.255.0;下一跳:192.168.1.2。

    2.综合分析题

    1.【百度文库】简述TCP/IP协议中三次握手的过程及涵义,并画出示意图:

    答:第一次握手:A客户进程向B发出连接请求报文段,(首部的同步位SYN=1,初始序号seq=x),(SYN=1的报文段不能携带数据)但要消耗掉一个序号,此时TCP客户进程进入SYN-SENT(同步已发送)状态。

           第二次握手:B收到连接请求报文段后,如同意建立连接,则向A发送确认,在确认报文段中(SYN=1,ACK=1,确认号ack=x+1,初始序号seq=y),TCP服务器进程进入SYN-RCVD(同步收到)状态;

           第三次握手:TCP客户进程收到B的确认后,要向B给出确认报文段(ACK=1,确认号ack=y+1,序号seq=x+1)(初始为seq=x,第二个报文段所以要+1),ACK报文段可以携带数据,不携带数据则不消耗序号。TCP连接已经建立,A进入ESTABLISHED(已建立连接)。 当B收到A的确认后,也进入ESTABLISHED状态。

    2.【408】假设Internet的两个自治系统构成的网络如图所示,自治系统AS1由路由器R1连接两个子网构成;自治系统AS2由路由器R2、R3互联并连接3个子网构成。各子网地址、R2的接口名、R1与R3的部分接口地址如图所示。

    请回答下列问题。
    (1)假设路由表结构如下表所示。请利用路由聚合技术,给出R2的路由表,要求包括到达图中所有子网的路由,且路由表中的路由项尽可能少。

    (2)若R2收到一个目的地址为194.17.20.200的IP分组,R2会通过哪个接口转发该分组?

    (3)R1与R2之间利用哪个路由协议交换路由信息?该路由协议的报文被封装到哪个协议的分组中进行传输?

    解析:(1)在AS1中,子网153.14.5.0/25和子网153.14.5.128/25可以聚合为子网153.14.5.0/24;
    在AS2中,子网194.17.20.0/25和子网194.17.21.0/24可以聚合为子网194.17.20.0/23,但缺少194.17.20.128/25;子网194.17.20.128/25单独连接到R2的接口E0。
      于是可以得到R2的路由表如下:

    (2)该IP地址与路由表中194.17.20.0/23和194.17.20.128/25两个路由表项均匹配,根据最长匹配原则,R2将通过E0接口转发该IP分组。考查CIDR的最长前缀匹配。

    (3)R1与R2之间利用BGP4(或BGP)交换路由信息;
    BGP4的报文被封装到TCP协议段中进行传输。考查外部网关协议——边界网关协议BGP4。

    3.【408】某网络拓扑如下图所示,路由器 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。

     

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

    ⑵ 请给出 R1 的路由表,使其明确包括到局域网 1 的路由、局域网 2的路由、域名服务器的主机路由和互联网的路由。
    ⑶ 请采用路由聚合技术,给出 R2 到局域网 1和局域网 2的路由。

     解析:

    ⑴ CIDR 中的子网号可以全 0 或全 1,但主机号不能全 0 或全 1。因此若将 IP 地址空间 202.118.1.0/24 划分为 2 个子网,且每个局域网需分配的 IP 地址个数不少于 120 个,子网号至少要占用一位。由 2 6 -2<120<2 7 -2 可知,主机号至少要占用 7 位。由于源 IP 地址空间的网络前缀为 24 位,因此 主机号位数+子网号位数=8 。
    综上可得主机号位数为 7,子网号位数为 1。
    因此子网的划分结果为:子网 1:202.118.1.0/25,子网 2:202.118.1.128/25。
    地址分配方案:子网 1 分配给局域网 1,子网 2 分配给局域网 2,或子网 1 分配给局域网 2,子网 2 分配给局域网 1。
    ⑵ 由于局域网 1 和局域网 2 分别与路由器 R1 的 E1、E2 接口直接相连,因此在 R1 的路由表中,目的网络为局域网 1 的转发路径是直接通过接口 E1 转发,目的网络为局域网 2 的转发路径是直接通过接口 E1 转发。由于局域网 1、2 的网络前缀均为 25 位,因此它们的子网掩码均为 255.255.255.128。根据题意,R1 专门为域名服务器设定了一个特定的路由表项,因此该路由表项中的子网掩码应为255.255.255.255。对应的下一跳转发地址是 202.118.2.2,转发接口是 L0。根据题意,到互联网的路由实质上相当于一个默认路由,默认路由一般写作 0/0,即目的地址为 0.0.0.0,子网掩码为 0.0.0.0。对应的下一跳转发地址是 202.118.2.2,转发接口是 L0。
    综上可得到路由器 R1 的路由表为:

      ⑶ 局域网 1 和局域网 2 的地址可以聚合为 202.118.1.0/24,而对于路由器 R2 来说,通往局域网 1 和 2 的转发路径都是从 L0 接口转发,因此采用路由聚合技术后,路由器 R2 到局域网 1 和局域网 2 的路由为:

     

  • 相关阅读:
    scla-基础-函数-元组(0)
    scala-基础-映射(1)
    Scala-基础-数组(1)
    Scala-基础-函数(2)
    Scala-基础-函数(1)
    Scala-基础-流程控制语句
    Scala-基础-运算符
    机器猫工作笔记(持续更新中...)
    收集的URL
    苹果审核指南(中文)
  • 原文地址:https://www.cnblogs.com/qyf2199/p/12172497.html
Copyright © 2020-2023  润新知