网络编程(一):网络编程和网络io的基本概念

文章目录

使用微信的时候,发送文字,发送视频,发送语音,与网络io有什么关系?抖音的视频资源,如何到达你的APP?github的代码为何可以下载到本地?手机为什么可以操作家里的空调?这些场景的实现都依靠网络编程。

这里推荐一篇讲网络io的文章:3.一文读懂网络 IO 模型_网络io-优快云博客

0voice · GitHub

一、网络编程是什么?

1.定义

网络编程 是指通过计算机程序与网络进行交互、进行数据传输和通信的技术。它使得不同设备(如计算机、手机、服务器等)能够通过网络互相通信,实现信息交换、资源共享和远程控制等功能。网络编程通常包括在程序中创建网络连接、发送和接收数据、处理网络协议等操作,涉及的技术和协议非常广泛,例如 TCP/IP协议UDP协议HTTP协议 等。

2.为什么网络编程可以使两台计算机互相传输数据?

计算机之间想实现数据传输,首先需要物理连接,如今大部分计算机都已连接到庞大的互联网,因此不用担心这点。在此基础上,只需考虑如何编写数据传输软件。而编写软件就是依靠网络编程。

3.如何进行网络编程?

操作系统提供了名为"套接字(socket)"的部件。套接字是网络数据传输用的软件设备,即便对网络数据传输原理不太熟悉,我们也能通过套接字完成数据传输。因此,网络编程又被称为套接字编程。

4.网络编程的基本要素

  • 套接字(Socket): 套接字是网络编程中的基础,它提供了一种接口,让程序能够进行网络通信。程序通过套接字建立连接,发送和接收数据。常见的有:

    • TCP套接字(面向连接,可靠传输)
    • UDP套接字(无连接,不保证可靠性)
  • IP地址和端口

    • 每个设备在网络中都有一个唯一的IP地址,程序通过这个地址进行通信。
    • 每个网络服务或应用程序通常会绑定到一个端口号(例如,HTTP通常使用80端口,HTTPS使用443端口)。
  • 协议

    • TCP/IP协议:用于大多数网络通信,提供可靠的连接导向通信。
    • UDP协议:用于要求低延迟、不关心数据可靠性的应用场景。
    • HTTP/HTTPS协议:用于Web应用,基于TCP协议,HTTP用于网页数据传输,HTTPS是其加密版。
  • 客户端和服务器

    • 客户端:发起请求的计算机或程序。
    • 服务器:响应客户端请求,提供服务的计算机或程序。

5.网络编程的流程

  • 创建套接字:客户端和服务器首先创建套接字,这是进行通信的基础。
  • 建立连接:客户端通过套接字连接到服务器,服务器监听端口并等待客户端连接。
  • 数据传输:客户端和服务器通过套接字发送和接收数据。
  • 关闭连接:通信完成后,客户端和服务器关闭连接。

6.网络编程的应用场景

  • Web开发

    • 网站的前端和后端都涉及网络编程,前端通过HTTP协议向服务器发送请求,后端响应并返回数据(如HTML页面或API数据)。
  • 即时通讯

    • 即时通讯软件(如微信、QQ等)使用网络编程实现实时消息的发送和接收,通常使用套接字进行通信。
  • 文件传输

    • FTP(文件传输协议)和HTTP协议都涉及网络编程,用于实现文件上传和下载。
  • 远程控制

    • SSH(安全外壳协议)和RDP(远程桌面协议)允许用户通过网络远程控制其他计算机,涉及网络编程实现数据交互。
  • 在线游戏

    • 网络游戏需要频繁的网络编程操作,以确保多个玩家之间的数据实时同步和交互。
  • 流媒体传输

    • 音频、视频的实时流媒体传输,如Netflix、YouTube等,需要基于网络编程技术来实现数据的流式传输。

二、网络io是什么?

1.定义

网络I/O(Input/Output)是指在计算机系统中,程序通过网络接口与其他计算机或设备进行数据交换的过程。它是计算机系统中输入和输出操作的一部分,特别是在涉及网络通信的场景下,数据的发送和接收都属于网络I/O操作。

  • 输入(Input):程序从网络接收数据的过程。例如,客户端从服务器接收请求响应,或者从远程数据库中查询数据。

  • 输出(Output):程序通过网络发送数据的过程。例如,客户端向服务器发送请求,或者应用程序向其他设备发送数据。

在计算机系统中,I/O操作涉及与外部设备(如磁盘、网络接口)进行的数据交换。网络IO需要向网卡读写数据。

三、网络io的种类

1.阻塞I/O(Blocking I/O)

  • 在阻塞I/O模式下,当程序发起网络操作(如读取数据),如果数据未准备好,程序将被阻塞,直到数据可以读取或写入为止。这意味着程序会停止执行,直到I/O操作完成。
  • 适用场景:简单的应用程序或低并发场景。
  • 缺点:若使用单线程处理网络 IO,程序将同一时间只能服务于一个网络请求。因此,在使用阻塞 IO 时,一般会配置多线程来使用,最常见的模型是阻塞 IO+多线程,每个连接由一个单独的线程进行处理。但在 linux 中,一个程序可以开辟的线程是有限的,而且开辟线程的开销也是比较大的。

2.非阻塞I/O(Non-blocking I/O)

  • 在非阻塞I/O模式下,程序发起的网络操作会立即返回,而不管数据是否准备好。如果数据不可用,程序会收到一个错误或返回状态,告知它可以稍后再尝试。这种方式使得程序可以同时处理其他任务,避免被I/O操作阻塞。NIO 主要解决了“一个线程同时处理多个连接”的问题。
  • 适用场景:需要处理多个网络连接的高并发系统。
  • 缺点:太多无效的系统调用,导致“用户态”和“内核态”频繁切换的系统资源浪费。

3.多路复用IO(IO multiplexing)

在阻塞IO的情况下,如果需要处理成千上万个网络IO,那么有两种方式:

  1. 多线程
  2. 使用循环去遍历多个IO

这两种方式都很低效。而非阻塞IO虽然更高效,但仍有频繁且无效的系统调用的缺点 IO 多路复用正是为解决这个问题而产生的。

多路复用指的是什么呢?

  • 多路指的是多条连接
  • 复用指的是使用一条通道(比如 select 系统调用)管理多条连接

linux 操作系统支持三种 IO 多路复用的操作,分别是 select、poll、epoll ,它们都满足 IO 复用模型的基本架构,之后的系列文章会详细介绍。

总结

本文介绍了网络编程和网络io的基本概念,为后面介绍实现io多路复用的select/poll/epoll,以及reactor的原理与实现,服务器百万级并发的实现,http服务器的实现提供了基础

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值