从《计算机网络》到网络编程
科班的同学大多学过计算机网络,而非科班的同学也多多少少听说过一些
计算机网络体系十分繁杂且精妙,这三四十年来计算机网络技术不断进步,但是核心是TCP/IP、UDP协议
从计算机到计算机网络
我们说一个计算机中的进程可以处理一定的任务
当他想与另一个进程进行通信时,就需要IPC的各种方式
但无论是管道、共享内存都是利用内存作为中转
如果想让另一台计算机的进程也能与这个计算机的进程进行通信呢
聪明的你肯定想到,把内存连起来呗,让他们都能访问到就行
诶,恭喜你,发明了计算机网络
所谓的计算机网络其实就是若干台计算机进程之间进行通信的一个过程
但是这里就有了很多问题
- 当时的计算机系统各异,Linux、MacOS、Windows,怎么样让他们也能进行通信,甚至同一个操作系统搭载在不同型号的计算机上都有可能不同
- 如果传输过程中出错了怎么办,要重传吗,还是将就着用
- 如果计算机之间怎么认得彼此,要知道计算机网络中可不止两台计算机,找到计算机了之后又要怎么找到你想找的进程呢
- 怎样让我在合肥的计算机访问到在北京的服务器
- 为什么无线网跟有线网都能进行通信呢
怪不得说计算机网络复杂呢,这些问题解决起来可是一点都不轻松
解决问题
大家其实都遇到了同样的问题,那么最好的解决方式就是开大会,定标准
这个标准我们就称之为协议,学过计算机网络的同学都懂,那些协议名字看起来就脑袋瓜疼
除此之外,我们在组织数据,处理任务的时候,从来都是将大问题化成小问题,解决了小问题再将各个模块拼起来,就成了如今庞大的知识体系
如果有过项目开发经验,会更有切身的体会
计算机网络也是如此,OSI标准将从下向上设计了七层网络模型,他设计的非常非常好,但是在实践中四层模型就能很好的解决问题,也称之为TCP/IP四层模型,在我们学习的过程中将物理层和数据链路层分开,变成五层模型
TCP和UDP是传输层协议,IP是网络层协议,TCP和IP都单独拿出来命名整个计算机网络协议,可想而知这两个协议簇对于计算机网络的重要性
我们这里简单介绍一下五层协议,并且说明一下这五层协议是如何解决那些个问题的
- 物理层:规定了广电信号的传递方式,用什么线,以前用电缆,现在用双绞线,远距离会用光纤什么的,wifi的电磁波频率也算,主要是规定了传输距离、传输速率等等,集线器工作在物理层,稍后我们会讲这些网络设备有什么用
- 数据链路层:这一层规定了设备之间数据的传送和识别,主要是让计算机分得清楚,什么样的01信号算这个数据包(数据帧)的开始,什么样的01信号算这个数据帧的结束,冲突检测(又冲突就自动重发),数据纠错,还有以太网、令牌环网、无线LAN的标准,交换机工作在数据链路层
- 网络层:网络层主要负责地址管理和路由选择,数据走在大街上,他需要一个可以问路的人(路由器),才能知道自己下一步是直走还是左转,为了描述目的地,就需要一个地址,也就是ip地址,路由器工作在网络层
- 传输层:主要负责主机之间的数据传输,如果传输出错了怎么办,是重传(TCP),还是放弃(UDP)
- 应用层:负责应用程序之间的沟通,电子邮件传输协议SMTP,文件传输协议FTP,网络远程访问协议Telnet,还有耳熟能详的HTTP协议
下面是网络设备的介绍
- 集线器:其实就是延长版的网线,解决了网线不够长的问题,三台计算机如何连接的问题,总不能用剥线钳吧
- 交换机:交换机就稍微带点脑子了,他可以解决计算机互联时数据冲突的问题,一条线不能既往左发数据又往右发数据,就像一条路不能既有向左开的车又有向右开的车一样,数据也会发生碰撞,而交换机就能屏蔽两个接口的碰撞,把他们分为两个碰撞域,而上面的集线器就没有这个功能了,因为他的本质就是网线
- 路由器:路由器就像是热心大叔一样,你想去哪里他都知道,你只管问,他不仅能让你不撞车,还能告诉你怎么走,让你不绕弯子,也就是路由器可以划分广播域,让你知道往这条路走一定是对的,而上面的交换机和集线器就没有这个功能,因为他们也不认识路
网络与计算机系统
除了上面说的搭积木原理,其实这些层次也对应着操作系统的层次
因为是计算机先生出来的,才有的计算机网络
如果计算机网络违背了计算机系统的设计原则,那还有什么用
仔细看其实就可以发现,网络和计算机的对应关系
物理层对应着计算机的硬件,各种接口、设备
数据链路层对应着驱动,网卡驱动、显卡驱动
传输层和网络层对应着操作系统,他们处理了来自各个设备的信息,让上层用户看起来并没有什么区别
应用层对应着各种库,shell,应用软件
计算机网络的传输流程
网络的每一层都有着自己的协议方案,因此也有着自己专门的标识(报头)
当应用层的两个进程想要通信时,实际上的数据是自己的电脑从应用层到传输层到网络层到链路层,层层套上自己的包头,让别人认识自己,让对方认识自己
通过以太网或者无线网传输
当对方收到之后,从下到上一层一层剥开,才能拿到最终的想要的报文数据
但是如果每一层对应着看,他们似乎都是和对面的同一层进行交流
在数据传输的过程中,可能经历了数个路由器,这是一个艰难的旅程
IP地址与MAC地址
IP地址有两个版本,IPv4和IPv6,是网络层协议的内容
6是4的升级版,但是还是以4为基础的,毕竟现在6还是推广阶段,4仍然在使用
一般我们常用的还是4,使用点分十进制来表示,例如,192.168.0.1、127.0.0.1等等,每一个数字是32位,取值从0到255
MAC地址也算物理地址
用来标识数据链路层的地址,一般来说,一个设备就有一个甚至多个MAC,长度是48位一共6字节,一般来说MAC地址是全球唯一的
从下一篇开始我们就着手实践,将从前学习的内容全部串联起来,C++、Linux系统编程、进程间通信