揭秘网络通信编程(1)——概述
在这个时代,便捷的互联网大大降低了我们获取信息的成本,也深刻地改变了我们的生活方式。每天,有数以亿计的人使用浏览器访问着上百万个网站,使用上百款聊天软件进行着即时通信。那么,在你使用上网和聊天时,有没有想过,你的浏览器是如何与服务器“交流”,得到你想要的网页?你的QQ又是如何跨越几千公里,把消息发到好友的QQ之上的?为了解答这些,我打算从最简单的分析入手,带领大家一步步揭开网络通信的神秘面纱。
一 程序如何通过网络通信?
为了让大家更好地理解通信的实质,我们可以先回想一下我们打电话的场景: 当你想要打电话联系家人时,你会拿出手机,打开通信录,找到某某的电话号码……停!回想到此为止,没错,不要惊讶,我们已经找到对了通信的关键问题——如何通过唯一标识表示通信的双方,因为只有通信的双方都能通过唯一的标识寻找到,我们才能确定我们的消息发给的是对方而不是别人,通信才有意义。与打电话的情景类似,计算机程序也要通过彼此之间唯一的标识进行通信。显然,这项工作在同一台机器上是很容易实现的,因为每个进程程序有系统分配的PID作为唯一标识,但对于在网络中的不同两台机器上程序,又如何唯一标识对方呢?
大名鼎鼎的TCP/IP协议族就是用来解决这个问题的。在TCP/IP协议中,网络层的“IP地址”可以唯一标识网络中的主机,而传输层的“协议+端口”可以唯一标识主机中的应用程序(进程)。借由这样一套规则,今天网络上所有机器运行的所有程序,就都可以通过主机的IP+端口号来唯一标识了。而这种基于TCP/IP协议族的通信编程,今天应用最广泛的就是我下面要着重介绍的socket编程了。
二 socket的起源?
Socket一词英文原意是“孔”或者“插座”,国内的程序员习惯把它译作“套接字”。
最早的socket概念,源自于1970年。当时的互联网还在组建中,全世界都还没有互联网的概念,但是当年的先驱们在当时就已经在思考与网络相关的通信编程的问题了,socket的概念也就此提出:”命名空间的元素都可称为套接字接口。一个套接字接口构成一个连接的一端,而一个连接可完全由一对套接字接口规定。”(The elements of the name space are called sockets. A socket forms one end of a connection, and a connection is fully specified by a pair of sockets)详情请见文献第12页:http://datatracker.ietf.org/doc/rfc33/
不过,公认的socket通信诞生的标志,还是在UNIX系统上的实现。我们知道,UNIX的设计哲学之一就是“一切皆文件”,无论文件,设备,还是通信端口——即我们今天在讨论的socket,都被抽象为文件,一切都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。Socket其实就是这一模式的体现,UNIX的工程师把复杂的底层硬件通信与通信协议全部封装,抽象为socket接口,也就是一个文件,通过对这个假想中的文件的读写,我们就实现了机器之间的通信,这就是socket通信的基本思想。
三 “一切皆socket!”
之后的几十年间,socket的通信思想随着互联网进一步发展着,并被各种编程语言设计者接受与沿用——不信你可以去看一看,无论是java、C++、python、C#还是最新的Swift,今天几乎所有的语言,通信模块命名一律为socket——没错,今天几乎所有的程序都在使用socket通信!
所以,说今天的网络通信“一切皆socket”一点不为过。借由socket,网络通信编程变得相似,开发者之间的交流也变得容易,不同编程语言编写的程序之间的通信也变得更加方便。
下一篇博客,我将以java与python两门语言为例,向大家进一步讲解socket通信原理以及展示一下使用不同语言的程序实现的socket通信。
相关推荐
wpf 揭秘 一共两部分,请下载: wpf 揭秘 wpf揭秘——part1.rar wpf 揭秘 wpf揭秘——part2.rar 然后解压。
淘宝揭秘之数据魔方——(完结篇).docx淘宝揭秘之数据魔方——(完结篇).docx淘宝揭秘之数据魔方——(完结篇).docx淘宝揭秘之数据魔方——(完结篇).docx淘宝揭秘之数据魔方——(完结篇).docx淘宝揭秘之数据魔方——...
wpf 揭秘 一共两部分,请下载: wpf 揭秘 wpf揭秘——part1.rar wpf 揭秘 wpf揭秘——part2.rar 然后解压。
大揭秘——网络营销
Windows 8高级编程——使用C#和XAML开发应用.rar
揭秘kotlin编程原理。揭秘kotlin编程原理。揭秘kotlin编程原理。揭秘kotlin编程原理。
"课题 "第三课 互联网揭秘——了解互联网 " "课型 "新授课 "班级 "八年级 "时间 "9.15 " "教 "能说出互联网中蝉蛹的设备及基本功能 " "学 "能根据实际情况选择上网设备和方式 " "目 " " "标 " " "重点 "上网设备的...
揭秘 Kotlin 编程原理
主要内容包括P2P概述、P2P网络拓扑结构、P2P网络搜索技术、P2P关键技术及应用、P2P网络中的nat穿透技术、基于P2P的bittorrent(后文简称bt)技术、基于P2P的emule文件共享技术、基于P2P的skype即时通信技术、基于P2P的...
Shellcoder编程揭秘 Shellcoder编程揭秘
[安全技术大系] Shellcoder编程揭秘2-1
硬盘内部如此精彩——硬盘构造再揭秘.pdf硬盘内部如此精彩——硬盘构造再揭秘.pdf硬盘内部如此精彩——硬盘构造再揭秘.pdf硬盘内部如此精彩——硬盘构造再揭秘.pdf硬盘内部如此精彩——硬盘构造再揭秘.pdf硬盘内部...
世界500强面试题 25年面试官首次揭秘——世界500强面试题(精彩选载)
他是《黑客反汇编揭秘》、《代码优化:有效使用内存》和《CD破解揭秘:防止未经许可的CD拷贝的保护技术》等书籍,以及大量涉及破解、反汇编和代码优化文章的作者。他解决了许多与安全和系统编程有关的问题,包括...
资源名称:软件估算——“黑匣子”揭内容简介:在《软件估算——“黑匣子”揭秘》一书中,著名的软件开发书籍的作者Steve McConnell揭开了围绕在软件估算周围的层层迷雾。作者在深入浅出地介绍了与软件估算有关的...
C++黑客编程揭秘与防范 光盘
《Windows黑客技术揭秘与攻防2:Visual Basic篇》分为II章,分别介绍VB入门基础、VB基础控件编程、病毒的启动和原理分析、高级控件在黑客编程中的运用、揭秘黑客对系统的操作伎俩与防御、QQ黑客编程、安全工具的编写...
VB之精彩编程参阅资料-未公开API函数揭秘——通用对话框
《c++黑客编程揭秘与防范》主要内容为:第1章了解黑客编程,主要讲解了vc(visual c++的缩写)和windwos下安全编程方面的基础知识。第2章从剖析简单的木马说起,讲解有关的网络编程和协议知识。第3章windows应用编程...
Visual.Cpp黑客编程揭秘与防范.part1