TCP/IP网络编程系列博客简介(TCP/IP网络编程)【linux】(zzo)

网络编程(网络IPC)

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

本机进程间通信

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

网络通信

网络通信也被称为网络IPC,直译就是网络进程间通信,简称网络通信。
说白了就是跨机进程间的通信。
图解说明:
网络通信

在网络通信没有出现之前,那个时候只有“本机进程间通信”,直到后来人们发现两台不同计算机的进程间也有通信的需求,此时才发明了网络通信,以实现“跨机进程间通信”。

所以可以简单的认为,网络通信其实就是“本机进程间通信”向“跨机进程间通信”扩展后的产物,只是这个扩展并不是那么容易的,为了实现跨机通信最起码:
(1)通信协议的实现
(2)各种通信设备的支持(网卡、路由器、光纤、电缆、基站等等)

不过对于这篇网络编程系列博客来说,我们重点关心的不是通信协议和中间的通信设备,这些东西都是别人早已实现好:
1、通信设备
(1)网卡:你的计算机肯定有
(2)路由器:没有路由器怎么上网,个人的路由器一般都自己买的
(3)光纤、电缆、基站等:由电信、移动、联通等网络运行商提供,我们无需操作。
2、通信协议
协议很早以前就已经被定义好了,至于协议栈的代码实现,Linux等系统也早已实现好,只要使相应的网络API调用即可。
多数情况下协议栈代码属于OS的一部分,但是如果裸机需要网络通信时,裸机没有运行OS,此时只能运行独立的协议栈代码。

对于这篇网络编程系列博客来说,主要说明系统提供的网络编程API,从而实现网络通信。
图解说明:

本博客主要说明网络编程接口

网络编程API 与 系统API

我们在博客中说到的虽然叫网络编程API,不过由于网络的协议栈代码属于Linux OS的一部分,所以网络编程的API其实也是Linux所提供的系统API之一,只不过是专门被用于网络通信,所以我们单独的称为网络编程接口(API),但是读者自己要知道,与其他linux平台各种的API在本质上并没有什么差别,其实都是系统提供的系统API。

这篇网络编程系列的API虽然也是系统API,与其他系统API并无本质区别,但是毕竟是用于网络通信的,因此也不是一点基础知识都不要的。

如果想要掌握这篇网络编程系列博客内容的话,读者必须具备一定的网络基础知识,如果没有的,读者在阅读这篇网络编程系列博客的时候,可能会有一定难度,因为我们所说明的内容一定会涉及到这些网络知识。

所写的网络编程系列博客是“网络编程”,所以重点是讲如何使用这些API来编写网络通信的程序,不过为了更好的说明网络编程博客,我们也会对计算机网络里面的一些重要知识进行回顾。需要详细阅读计算机网络知识博客的读者可以转到计算机网络分类专栏。

所写网络编程系列博客的意义
便于读者理解其它系统的网络API以及库提供的网络API
如果你未来想深入理解网络的话,如果没有网络编程这些知识作为基础,很难深入理解

便于理解其它系统的网络API以及库提供的网络API

网络编程的接口有两种

第一种:系统API

库API,通过封装系统API实现

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

C程序实现网络通信

(a)直接调用系统提供网络API,比如直接调用Linux或者windows的系统API。
(b)直接调用C库的网络API,不过这里说的C库并不是标准C库(因为标准C库并不提供网络编程的接口),而是一些特定c库,这些c库会提供网络编程接口。

Linuxc程序想要通信的话,既可以调用C库提供的网络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。

本系列博客有助于理解其它形式的网络API

不管是window、Linux等系统提供网络API,还是各种库通过封装OS的网络API从而提供的库API,其实用法几乎一样,因此了解本博客Linux的网络API,非常有助于读者接触和掌握其它形式的网络API。

实际上你去学习windows的网络API时你会发现,它与Linux网络API几乎是差不多的,函数名称、功能、参数几乎没有什么区别。

有利于深入学习和理解网络原理

如果只是站在应用编程的角度的话,计算机网络的分类专栏和网络编程系列博客的内容就够用了,但是如果你职业规划是想往网络方向深入发展的话,仅这些内容是不够的,但是想要深入理解网络原理,又不能一蹴而就,需要一定基础。而计算机网络分离专栏和网络编程系列博客其实就是深入学习网络原理的基础。

TCP/IP网络编程系列博客知识结构

  1. 回顾计算机网络分类专栏的部分内容
  2. 网络通信协议 与 网络编程接口
  3. 如何使用TCP/IP实现网络通信
  4. TCP通信
  5. UDP通信
  6. 域套接字
  7. 广播
  8. 带外数据
  9. 服务器如何实现多客户
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章