打一个小广告,作者本人开发的一个集合优质编程教程与视频的网站(包含大量慕课网体系课与实战课),感兴趣的同学可以看一下,青苹网 www.qingp.net
当你看到这篇文章时,你的电脑就向segment的服务器发送了很多http请求,然后页面显示在你的电脑上。这些http到底是如何从一台电脑到另一台电脑(服务器)的,它们是怎么进行通信的?这就涉及到的互联网的通信协议。
我们时常听到http协议,http又是通过tcp传输,这两个就是其中的两层协议。互联网协议大体可以分为五层协议,如上图。
最底层的协议就是“物理层”,设备与设备之间的物理连接,这既可以是有线(光纤、光缆)也可以是无线,这也是互联网通信的基石。我们看到的任何文字、图片、视频,本质上就是通过这些物理层线路不断传输0与1这样的电信号。
一长串连续不断的0与1这样的电信号,无法准确别表达意思,这就诞生了第二层协议“链接层”。链接层也可以叫“以太网协议”,它把0和1这样的电信号进行分组,多少个算一组,每一组表达什么意思。
这里有个核心问题,虽然有了物理线路,也有了一组一组各种组合的电信号,它们到底又是如何从一台电脑到另一台电脑的?
电脑往外发送信号,和从外面接收信号,都是通过网卡进行的。每个网卡都有自己的一个MAC地址(相当于身份识别码),每台电脑网卡的MAC地址身份都是全世界唯一的,这是在工厂制造的时候就弄好的。
当几台电脑处在同一个网络内部(局域网),比方有A、B、C、D四台电脑,A电脑要往C电脑传递信息,A电脑并不会把信息“直接送达”给C,而是“广播”的方式,就是广而告之。
A电脑网卡发出的电信号,同一组网络里的B、C、D电脑的网卡都会收到这些电信号,但是A电脑网卡发送信号的时候,在信号里标注了接收方的网卡MAC地址,比方标注了C电脑的网卡MAC地址为接收方,那么B和D接收了电信号后发现接收方不是自己就不会进行任何处理,只有C会发现接收方是自己才会处理这些收到的电信号。
或许你会有疑惑,为什么A的信号不直达C呢?这关键在于,难道苹果制造的100万台电脑里,就把其中一台电脑明确规定好,信息就必须只能发送到戴尔制造的1000万台电脑里其中一台吗?实际上,现代的很多电子设备的通信都是采用这样的”广播“形式,诸如GPS卫星也一样,GPS卫星是不会知道你的手机的,它会往覆盖的整个空域发送电磁波信号,每个手机都会接受到这样的电磁波信号,只是有的手机有权处理和解析信号,有的手机无权处理而已。
通过MAC地址的通信就是这第二层的链接层”以太网“协议,它主要用于在同一网络内把信号从A电脑送到到C电脑。这一层也只能对在处在同一网络里的电脑通信,处在不同网络的电脑要完成通信,就需要第三层参与,即网络层,IP协议。这就是我们熟知的IP地址,如从北京的将数据发送到上海,这需要借助ip地址帮助。
ip协议的信号中定义了远方目标设备的IP地址,但要注意的是,电信号也不会直接就从北京”飞到“上海。你的电脑是处在一组网络中,每一组网络都有一个交换机的角色,各个不同网络组的交换机又处在一个更上层的一组网络里,更上层的网络又有更上层的网络组。城市也有城市的各种交换机,这些交换机又会处在一组网络里。这些网络都在通过”广播“的方式,一层层广播信号。每个网络组都有自己的ip地址,你的电信号里定义了目标方的ip地址,有的网络组发现ip地址不是自己,接收到了广播过来的数据也是选择不处理。通过这一张巨大的网,一层层的互相广播信号,你的信号才最后到达了上海。
实际上到此,地球上任何两台电脑都可以建立连接了。后面的协议层主要针对计算机里的各种应用程序了。
电脑上会开很多应用程序,电脑会接收到很多数据,这需要知道将接收到的数据分发给哪个应用程序(进程)。不同的应用程序(进程)会监听系统不同的端口号,这就产生了传输层,TCP协议和UDP协议都属于传输层。传输层协议是嵌在ip协议里,ip协议帮助找到了目标电脑,网卡终于接收到了信息,但网卡还要分发信息。ip协议中嵌入的传输层协议数据就规定了端口号,信息到达了目标电脑的网卡后,网卡会通过里面的传输层协议的端口号把信息分发的电脑的各种进程。
TCP协议和UDP协议都属于传输层协议,二者的区别主要在于,UDP协议的数据无法知道对方是否收到,而TCP协议中的每一个数据包都要求得到确认,如果一个数据丢失得不到确认,发出方都会重发。
建立在tcp传输层之上的http协议就是属于应用层。数据可以通过传输层到达一个具体的应用程序(进程),但是一个应用程序会有各种各样的功能,如浏览器这样一个应用程序,既可浏览网页,也可以写邮件,也下载文件,也可以看电影。这些各种各样的功能,它们就都需要有自己专门的数据格式。如网页主要就是http协议格式、文件传输就是ftp协议格式,电子邮件就是smpt协议格式。应用层协议,就是帮助应用程序(进程)解析出各种功能需要的格式化数据。
自此,这五层协议帮助我们实现了互联网的各种通信和功能。这五层协议的数据,一层层嵌在一起组成一个个数据包,一起发送,一起接收,每个数据包里的这五层协议数据,它们都有各自的使命。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。