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

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 的路由为:

计算机网络 & 网络编程 期末总结与测评题的更多相关文章

  1. python部分 + 数据库 + 网络编程

    PS:附上我的博客地址,答案中略的部分我的博客都有,直接原标题搜索即可.https://www.cnblogs.com/Roc-Atlantis/ 第一部分 Python基础篇(80题) 为什么学习P ...

  2. -1-7 java 网络编程基本知识点 计算机网络 TCP/IP协议栈 通信必备 tcp udp

    计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来, 在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统. 网络编程 ...

  3. 20155332 补交课后测试——ch11网络编程

    20155332 补交课后测试--ch11网络编程 这章的课后测试忘了提交,我课后补做了这章的测试题目,并将知识点和自己的错题汇总如下: 本章知识点总结 11.1 客户端-- 服务器模型 每个网络应用 ...

  4. python学习之【16】网络编程

    主题 客户端/服务器架构 套接字:通信终点 套接字地址 面向连接与无连接套接字 Python中的网络编程 SOCKET模块 套接字对象方法 TCP/IP客户端和服务器 UDP/IP客户端和服务器 So ...

  5. 软件开发架构,网络编程简介,OSI七层协议,TCP和UDP协议

    软件开发架构 什么是软件开发架构 1.软件架构是一个系统的草图. 2.软件架构描述的对象是直接构成系统的抽象组件. 3.各个组件之间的连接则明确和相对细致地描述组件之间的通讯. 4.在实现阶段,这些抽 ...

  6. Java - 网络编程

    Java的网络编程学习,关于计算机基础的学习参考:计算机网络基础学习 - sqh.     参考:  

  7. Windows 网络编程

    网络编程 API ,失败返回 -,错误代码 WSASYSNOTREADY 表示基础网络子系统没有准备好网络通行,WSAVERNOTSUPPORTED 表示 Socket 版本不支持,WSAEINPRO ...

  8. Python-socket网络编程

    一.计算机网络 多台独立的计算机用网络通信设备连接起来的网络.实现资源共享和数据传递.比如,我们之前的学过的知识可以将D盘的一个文件传到C盘,但如果你想从你的电脑传一个文件到我的电脑上目前是做不到的; ...

  9. 20145205 《Java程序设计》实验报告五:Java网络编程及安全

    20145205 <Java程序设计>实验报告五:Java网络编程及安全 实验要求 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.客户端中输入明文,利用DES算法加密,D ...

随机推荐

  1. Redhat6 RPM 软件管理常用命令汇总

    软件的安装时操作系统管理的基础,与Windows不同,Linux的软件管理有很多种方式,Redhat的最常用的是RPM方式,安装集成在光盘中的RPM包.这种方式比Windows平台的软件管理更加便捷( ...

  2. DevExpress 控件用法笔记(VB)

    1.ChartControl 显示条形图 ChartControl1.Titles.Clear() ChartControl1.Series.Clear() Dim db As DataTable S ...

  3. js复制变量值

    来源:JavaScript高级程序设计(第3版)69页. 例如 : var a=1;   var b = a  ;      这里就是把a的值复制给变量  b   了. 但是 复制的变量值  分为  ...

  4. NOIP提高组2018试题解析 Day1 T1 铺设道路 P5019

    题目描述 春春是一名道路工程师,负责铺设一条长度为 nn 的道路. 铺设道路的主要工作是填平下陷的地表.整段道路可以看作是 nn 块首尾相连的区域,一开始,第 ii 块区域下陷的深度为 d_idi​  ...

  5. 幽灵java进程引起的: FATAL ERROR in native method

    FATAL ERROR in native method: JDWP No transports initialized, jvmtiError=AGENT_ERROR_TRANSPORT_INIT( ...

  6. @RequestParam,@PathVariable,@RequestBody

    @RequestParam 和 @PathVariable 注解是用于从request中接收请求的,两个都可以接收参数,关键点不同的是@RequestParam 是从request里面拿取值,而 @P ...

  7. 【新书推荐】《ASP.NET Core微服务实战:在云环境中开发、测试和部署跨平台服务》 带你走近微服务开发

    <ASP.NET Core 微服务实战>译者序:https://blog.jijiechen.com/post/aspnetcore-microservices-preface-by-tr ...

  8. C++中的四个智能指针

    只能指针的行为类似常规指针,重要的区别是它负责自动释放所指向的对象.智能指针定义在memory头文件中. 1. auto_ptr(C++11已经舍弃) 由new expression获得的对象,在au ...

  9. [bzoj2115] [洛谷P4151] [Wc2011] Xor

    Description Input 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si,Ti ,Di,表示 Si 与Ti之间存在 一条权值为 ...

  10. NOI4.6 最小新整数——切山游戏

    描述 给定一个十进制正整数n(0 < n < 1000000000),每个数位上数字均不为0.n的位数为m. 现在从m位中删除k位(0<k < m),求生成的新整数最小为多少? ...