计算机网络 & 网络编程 期末总结与测评题
第一部分:网络编程部分的相关知识
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
答案:C
分析:ICMP报文包含在IP数据报内。
7.【408】某网络拓扑如下图所示,路由器R1只有到达子网192.168.1.0/24的路由。为使R1可以将IP分组正确地路由到图中所有子网,则在R1中需要增加一条路由(目的网络,子网掩码,下一跳)是()
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 的路由为:
计算机网络 & 网络编程 期末总结与测评题的更多相关文章
- python部分 + 数据库 + 网络编程
PS:附上我的博客地址,答案中略的部分我的博客都有,直接原标题搜索即可.https://www.cnblogs.com/Roc-Atlantis/ 第一部分 Python基础篇(80题) 为什么学习P ...
- -1-7 java 网络编程基本知识点 计算机网络 TCP/IP协议栈 通信必备 tcp udp
计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来, 在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统. 网络编程 ...
- 20155332 补交课后测试——ch11网络编程
20155332 补交课后测试--ch11网络编程 这章的课后测试忘了提交,我课后补做了这章的测试题目,并将知识点和自己的错题汇总如下: 本章知识点总结 11.1 客户端-- 服务器模型 每个网络应用 ...
- python学习之【16】网络编程
主题 客户端/服务器架构 套接字:通信终点 套接字地址 面向连接与无连接套接字 Python中的网络编程 SOCKET模块 套接字对象方法 TCP/IP客户端和服务器 UDP/IP客户端和服务器 So ...
- 软件开发架构,网络编程简介,OSI七层协议,TCP和UDP协议
软件开发架构 什么是软件开发架构 1.软件架构是一个系统的草图. 2.软件架构描述的对象是直接构成系统的抽象组件. 3.各个组件之间的连接则明确和相对细致地描述组件之间的通讯. 4.在实现阶段,这些抽 ...
- Java - 网络编程
Java的网络编程学习,关于计算机基础的学习参考:计算机网络基础学习 - sqh. 参考:
- Windows 网络编程
网络编程 API ,失败返回 -,错误代码 WSASYSNOTREADY 表示基础网络子系统没有准备好网络通行,WSAVERNOTSUPPORTED 表示 Socket 版本不支持,WSAEINPRO ...
- Python-socket网络编程
一.计算机网络 多台独立的计算机用网络通信设备连接起来的网络.实现资源共享和数据传递.比如,我们之前的学过的知识可以将D盘的一个文件传到C盘,但如果你想从你的电脑传一个文件到我的电脑上目前是做不到的; ...
- 20145205 《Java程序设计》实验报告五:Java网络编程及安全
20145205 <Java程序设计>实验报告五:Java网络编程及安全 实验要求 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.客户端中输入明文,利用DES算法加密,D ...
随机推荐
- 性能数据的准备-Jmeter
性能测试的一般流程: 收集性能需求——>编写性能脚本——>执行性能测试——>分析测试报告——>系统性能调优 在收集性能需求后,我们会思考: 负载测试时并发时需要多少数据?例:登 ...
- 高斯消去法解线性方程组(MPI)
用一上午的时间,用MPI编写了高斯消去法解线性方程组.这次只是针对单线程负责一个线程方程的求解,对于超大规模的方程组,需要按行分块,后面会在这个基础上进行修改.总结一下这次遇到的问题: (1)MPI_ ...
- BigInteger&BigDecimal类
BigInteger类 当需要处理超过 long 数值范围的大整数时,java.math 包中的 BigInteger 类提供任意精度的整数运算. 构造方式 //构造方法,将BigInteger的十进 ...
- dfs - 走过的标记取消
在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C. ...
- ubuntu系统搭建(jdk1.8+mysql5.7.28+Hadoop2.7.7+hive3.1.2)
一不小心电脑没电关机之后虚拟机就挂了,然后下定决心重新搭一个虚拟机. 以下是几天安装过程的记录以及一些小提示,包括在ubuntu中安装jdk1.8+mysql5.7.28+Hadoop2.7.7+hi ...
- 2018南京现场赛K 随机输出
题目链接:http://codeforces.com/gym/101981/attachments n和m太小,空地联通无环,总步数太大,直接随机输出5w个方向 #include<iostrea ...
- stars-one原创工具——蓝奏云批量下载工具
一款可以批量下载蓝奏云分享的文件夹下的所有文件 基于HtmlUnit和okhttp开源库,所以打包后的jar包文件有点大 蓝奏云下载地址 github地址 需求 之前找电子书资源的时候,网友分享的蓝奏 ...
- Qt Installer Framework翻译(3-0)
终端用户使用流程 离线安装和在线安装对终端用户来说是相似的.安装程序将你的应用程序和维护工具一起打包,该工具由包管理器,更新程序和卸载程序组成.用户可以使用维护工具来添加,更新和删除组件.维护工具连接 ...
- C++符合类型:指针和引用
1. 引用(左值引用) 引用为对象起了另外一个名字,引用类型引用另外一种类型. int ival = 1024; int &refval = ival; //refval指向ival(是iva ...
- python 安装虚拟环境virtualenv
1.sudo apt install virtualenv 安装失败 2.sudo apt-get update 更新失败 提示: E: 仓库 “http://mirrors.aliyun.com/u ...