网络编程——基础知识

本机进程间通信 与 网络通信

本机进程间通信

实现本机内部的进程间的通信,通信时需要使用专门IPC机制,比如信号、管道(无名、有名)、system V IPC,(消息队列、共享内存、进程信号量)。这些参考前面文章

网络通信

网络通信也被称为网络IPC,直译就是网络进程间通信,简称网络通信,说白了就是跨机进程间的通信。在网络通信没有出现之前,那个时候只有“本机进程间通信”,直到后来人们发现两台不同计算机的进程间也有通信的需求,此时才发明了网络通信,以实现“跨机进程间通信”。所以可以简单的认为,网络通信其实就是“本机进程间通信”向“跨机进程间通信”扩展后的产物,只是这个扩展并不是那么容易的,为了实现跨机通信最起码:

①通信协议的实现

协议很早以前就已经被定义好了,至于协议栈的代码实现,Linux等系统也早已实现好,只要使相应的网络API调用即可。多数情况下协议栈代码属于OS的一部分,但是如果裸机需要网络通信时,裸机没有运行OS,此时只能运行独立的协议栈代码。

②各种通信设备的支持

网卡:笔记本、台式机里面都有

路由器:各种家用路由器,企业路由器

光纤、电缆、基站等:由电信、移动、联通等网络运行商提供

网络编程API 与 系统API

网络的协议栈代码属于Linux OS的一部分,所以网络编程的API其实也是Linux所提供的系统API之一,只不过是专门被用于网络通信,所以我们单独的称为网络编程接口(API),与之前文章里面将IPC时候的API没有什么区别,都是系统提供的系统API。

网络编程的接口

第一种:系统API

第二种:库API,通过封装系统API实现

当然库在封装系统提供的网络API时,往往可能还会进一步简化,就是把系统API很多步骤的函数,封装为一个函数,调用库接口往往更简洁,不过总体上你会发现其实实现方式都是一样的。

典型语言实现网络通信

C程序实现网络通信

(a)直接调用系统提供网络API

比如直接调用Linux或者windows的系统API。

(b)直接调用C库的网络API

不过这里说的C库并不是标准C库(因为标准C库并不提供网络编程的接口),而是一些特定c库,这些c库会提供网络编程接口。

Linux嵌入式c程序想要通信的话,既可以调用C库提供的网络API,也可以直接Linux系统的网络API,不过在嵌入式开发里面,为了节省计算机的资源,往往会尽量避免运行额外的库,所以此时会直接调用Linux的网络API来实现。

C++、java等程序实现网络通信

基本都是直接调用它们的库接口来实现的,特别是java程序,java程序里面不能直接写C接口,所以必须使用java自己网络编程库接口。

不过C++还好,因为c++兼容c,所以c++程序有三种选择

(a)使用c++自己“类库”提供的网络API

(b)使用某c库提供的网络API

(c)直接使用Linux OS提供的网络API

c++程序一般使用的都是“类库”的网络API。

TCP/IP协议栈

层次结构图

猜你喜欢

转载自www.cnblogs.com/kelamoyujuzhen/p/9457212.html