网络与编程-第[0]篇


网络与编程-第[0]篇

  网络是什么?网络编程是什么?这两个问题困扰了我很久。作为技术博客的首篇,我将在此篇提纲挈领,围绕“网络与编程”这一主题,阐明自己的思考和见解。通信的专业背景和平时任务的束缚,让我一直干着修信息高速公路的事,却时刻做着自己造跑车的梦,徘徊在计算机、通信、互联网的三岔口,踟蹰不前已久。但从今天开始,我决心在自己痴迷的网络方向投入精力探索和实践,与网络编程来一场说走就走的技术旅行,写技术博客是一个很好的开始,希望能在此与博友们共享、成长。

  网络是什么?抽象的层面,网络=节点+连接,起源于人们将孤立节点互联用于共享信息和资源的需求,节点实现信息的计算和存储,连接实现信息的传输,因此网络本质是信息的承载者,是信息的载体。放在通信的场景下,节点细化为各种设备,连接分为了有线与无线两种方式,具体而言:网络=通信系统=设备+媒介=终端设备+传输设备=手机+无线电+基站=计算机+网线+路由器=智能设备+介质。与此同时,受业务与应用场景的驱动,不同服务类型的网络技术层出不穷:GSM、CDMA、LTE、WIFI、ISDN、Internet等,虽然接触了多种网络技术,但我对它们的理解却停留在概念的层次,不知道怎么具体运用这些技术。宏观的层面,网络,是实现节点连接的手段,具体而言,它实现了机器与机器的连接,进而实现了人与人的连接、人与机器的连接,未来,则向着万物互联的方向演进,多么唯美的画面,可惜依然朦胧,看不清却是不知道能够用来做什么。

  对网络的进一步探索,可以发现构成网络的要素包含:芯片、硬件、软件、协议、接口等,不同层次的开发人员对于网络有不同的实现,芯片层面、驱动层面、系统软件层面都会有网络的元素存在,其中协议则是网络的核心所在,标准化的协议定义了网络互联的规则。对网络模型和协议栈的深入研究,才能对网络有更深的体会,构成网络的节点如今都实现了软硬件一体化,分层次地实现了网络协议栈的各层功能。漏斗型的协议栈,几乎承载了网络的一切,网络,逐渐成为了各节点功能的一部分,在硬件和软件各层次都得到了具体的实现和支持。

  网络编程,是从技术人员角度对“基于网络能做什么”这个问题的回答,通过网络编程,将单机程序转变为网络程序,从而真正实现异地程序间的互连、进程间的互联,这是对网络更近一步的细粒化。网络编程,需要根据协议栈来划分层次,在Internet广泛应用的今天,Web网络编程通常被冠以网络编程的美名,但Http层次的网络编程永远不能代表网络编程的全部,基于TCP/IP协议栈探索网络编程,才能对网络有更进一步的理解。基于此,我所理解的网络编程,是一种实现程序网络互联功能的手段,构建了实体间的连接,实现了进程间的通信,承载了信息的传递。

  综上,初步汇总了我对网络和网络编程的思考,那么如何去进行网络编程实践呢?这将是今后我的博客将重点关注的方面,我希望分享自己的网络编程实践,开启网络编程菜鸟的进化路线,与大家一起共勉。

  围绕“网络与编程”的主题,初步规划了以下方向,以后再逐步扩充:

  网络编程模型:C/S、B/S、P2P

  网络编程系统:Linux

  网络编程协议:TCP/IP协议栈

  网络编程语言:C/C++、Python(聚焦,并不意味着对Java、Net心怀敌意)

  网络编程方向:高性能、分布式

  开源服务器源码:Nginx、Tengine、Memcached

  开源网络库:libevent(目前上手ACE有难度)

  网络编程实践点:Linux服务器程序、LVS负载均衡、TC流量控制

参考链接:

《谈一谈网络编程学习经验》http://blog.csdn.net/solstice/article/details/6527585

《libevent 源码深度剖析》http://blog.csdn.net/sparkliang/article/details/4957667

相关内容