网络编程相关概念归纳整理(一)源码介绍

网络编程相关概念

最近在看Tomcat源码,里面涉及到网络编程模型,所以总结了这篇文章的知识点。

互联网

网络由许多节点(计算机)和连接这些节点的链接组成,代表许多对象及其互连。

网络功能

网络的主要功能是共享资源。共享资源包括软件资源、硬件资源以及存储在公共数据库中的各种数据资源。在线用户可以共享这些资源的一部分或全部,使网络中的资源可以相互交流、分工协作,从而大大提高系统资源的利用率。

分布在不同地区的计算机系统可以通过网络及时、高速地传输各种信息、交换数据、发送电子邮件,拉近了人与人之间的联系。

在网络中,由于计算机之间相互协作、相互备份的关系,以及网络中使用一些备份设备和一些负载调度、数据容错等技术,当网络的某一部分发生故障时,其他部分的网络部件可以自动接管他们的任务。因此,与单机系统相比,计算机网络具有更高的可靠性。

在网络中,一个比较大的问题或任务也可以分解为若干个子问题或任务,分发给网络中的不同计算机进行处理和计算。这种分布式处理能力在一些重大课题的研发中非常有效。

在当今的信息社会中,个人、办公室、图书馆、企业和学校无时无刻不在生成和处理大量信息。这些信息可以是文字、数字、图像、声音甚至是视频,可以通过网络进行收集、处理和传输。因此,综合信息服务将成为网络的基本服务功能。

网络四元素的网络分类

1、按拓扑分类:总线、环、星形、网状2、按信息交换分类:电路交换、分组交换、分组交换3、按覆盖范围分类:局域网LAN、广域网局域网广域网

局域网:局域网(local area network)常被称为“局域网”,简称LAN。局域网是结构复杂度最低的计算机网络。局域网只是通过同一位置的网络连接在一起的一组计算机。局域网,通常紧密相连,是当今使用最广泛的网络类型。

广域网:广域网(wide area network)又称外网、公网。它是连接局域网或城域网不同区域的计算机的远程网络。

TCP和IP的定义

TCP/IP协议(Transfer Control Protocol/Internet Protocol)全称为传输控制/Internet协议,也称为网络通信协议,它包括数百种功能各异的协议,而TCP协议和IP协议是保证数据完整传输的两种协议. 基本的重要协议。通常说 TCP/IP 是 Internet 协议套件,而不仅仅是 TCP 和 IP。TCP/IP协议的基本传输单元是数据包(Datagram)。TCP协议负责将数据分成若干个数据包,并为每个数据包添加一个头;IP协议将接收端的主机地址添加到每个数据包头中,以便数据找到它要去的地方。如果在传输过程中出现数据丢失或数据失真,TCP 协议会自动要求重新传输和重新打包数据。简而言之,IP协议保证数据的传输,TCP协议保证数据传输的质量。

TCP和IP协议结构

TCP/IP协议数据的传输基于TCP/IP协议的四层结构:应用层(应用层、表示层、会话层)、传输层、网络层、网络接口层(数据链路层、物理层)应用编程接口和套接字,数据在传输过程中,数据每经过一层就加一个头,数据在接收端被同层协议使用。在接收端,每经过一层就去掉使用的header,以保证数据的传输。格式完全相同。下面是4层的示意图(包括7层OSI):

![]()

####每一层的作用——物理层:传输原始比特流,传输电子信号。- 数据链路层:构建数据,处理流量控制,指定拓扑并提供硬件寻址。- 网络层:通过寻址在两个节点之间建立连接。- 传输层:数据传递 – 会话层:在两个节点之间建立连接 – 表示层:格式化数据,为应用程序提供通用接口 – 应用层:直接向应用程序提供服务

IP地址

Internet 依靠 TCP/IP 协议在全球范围内实现不同硬件结构、不同操作系统、不同网络系统的互联互通。在 Internet 上,每个节点都依靠 IP 地址来区分和相互通信。IP 地址是一个 32 位二进制数地址,由 4 个 8 位字段组成,每个字段用点分隔,用于标识 TCP/IP 主机。

IO

Linux系统中有一句话:一切都是文件,文件是流的概念。在信息交换的过程中,对这些流的数据的发送和接收操作就是一个IO操作。

不管是套接字、管道、终端,对于 Linux,一切都是文件,一切都是流。在信息交换的过程中,我们都向这些流发送和接收数据,称为I/O操作(输入和输出),从流中读取数据,系统调用读取,写入数据,系统调用写入。值得一提的是,电脑里有这么多流,你怎么知道要操作哪个流呢?这里是文件描述符的概念,通常称为fd,一个fd是一个整数,所以对这个整数的操作就是对这个文件(流)的操作。我们创建一个socket,并通过系统调用返回一个文件描述符,那么socket上剩余的操作就会转化为这个描述符上的操作。

同步

所谓同步,就是每件事情都要有响应才能进行下一件事情,也就是说必须一件一件的去做。如下所示:

异步

所谓异步是指客户端在发送事件后可以做其他事情,并且可以继续发送其他请求。服务端处理完毕后,可以通过回调通知客户端处理结果。如下所示:

堵塞

所谓阻塞,是指线程一直处于等待状态应用编程接口和套接字,直到请求处理完毕,直到线程处理完成才返回结果。

非阻塞

所谓非阻塞,就是在请求处理之前直接返回结果。在响应之前无需等待线程处理完成。

IO模型同步阻塞IO模型

默认情况下所有套接字都被阻塞,它等待直到一个数据包到达并被复制到应用程序的进程缓冲区或发生异常才被返回,否则它被阻塞。模型如下:

原理:用户线程通过系统调用read发起IO读操作,从用户空间转移到内核空间。内核一直等到数据包到达,然后将接收到的数据复制到用户空间完成读操作。

同步非阻塞IO模型

非阻塞IO通过进程重复调用IO函数(多次系统调用,并立即返回),知道等待成功通知。如下所示:

原理:由于socket是非阻塞方法,所以用户线程发起IO请求时立即返回。但是没有读取数据,需要用户线程不断发起IO请求,直到数据到达,然后才真正读取到数据,继续执行。

同步IO复用模型

IO复用模型可以通过系统调用select、poll、epoll来实现。此时,进程会在这些系统调用上进行竞争,而不是阻塞在真正的IO操作上,直到有一个ready事件,这些系统调用会返回哪些socket可以读写,然后才能处理数据包. 复制到应用进程缓冲区的IO复用模型是基于内核提供的解复用函数select。使用select函数可以避免同步非阻塞IO模型中的轮询和等待问题。如下所示:

原理:添加需要IO操作的socket进行select,然后阻塞等待select系统调用的返回。当数据到达时,socket 被激活,select 函数返回。用户线程正式发起读请求,读取数据并继续执行。

异步 IO 模型

用户进程告诉内核开始一个操作,内核执行该操作。操作完成后,向用户进程发送通知,通知用户进程操作完成。如下所示

在异步IO模型中,当用户线程收到通知时,数据已经被内核读取并放入用户线程指定的缓冲区中。IO完成后,内核通知用户线程直接使用。

概括

以上相关概念是作者认为我们在学习网络编程时应该了解的一些概念。以后我们学习内容的时候,都是以这些为基础的。

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论