引言

  对于程序猿来讲,似乎越接近底层,就越显得高大上。这也算是程序猿们的共同认知吧,虽然不是所有人。今天LZ就和各位一起探讨一下TCP/IP中最高大上的一层,也就是最底层的链路层。

  这一层LZ了解的还不够深刻,但是LZ还没有做硬件的打算,因此LZ觉得只要能够大致明白其原理即可,有的时候太执着了并不是好事,别忘了执着的同义词中有一个叫钻牛角尖。

链路层是什么

  这个问题其实很好回答,在上一章LZ就提到过,直观的说,链路层就是我们平时接触的网卡和网卡的驱动程序(当然,也可以指其它的网络接口和驱动,比如3G网卡和驱动)。

  接下来回答另外一个问题,链路层是做什么的?

  这个我们可以类比一下,既然链路层可以看作是网卡和网卡驱动程序的总称,那么网卡和网卡驱动程序是做什么的,链路层就是做什么的。这样我们就比较好理解了,要搞清楚链路层是做什么的,只需要搞清楚网卡以及网卡驱动程序是做什么的即可。

  网卡,很显然,它是数据传输过程中,一个主机(也就是我们所谓的PC机)数据的入口与出口,就像是一个城市的火车站一样,你来北京需要经过火车站,离开北京也需要经过火车站(从天上飞过来飞过去的土豪不算)。

  这个入口和出口可不是随便让你制造的,你必须按照一定的协议去制作(比如以太网协议)。大家会发现,我们的网卡插口都是一样的(网线的插头也都是一样一样的),这可不是巧合。网卡网线这都是有形的网卡接口,同样的,对于无线网来讲,尽管它没有让我们看得见摸得着的接口,但道理是一样的,它在制作的时候也要遵循一定的协议(比如wifi)。

  网卡驱动程序就比较好理解了,网卡按照一定的规则传输数据(比如频率多大?一次传多少?等等),相应的,这些规则也需要一个软件来封装和解析,这些工作正是网卡驱动程序完成的。这有点类似于计算机硬件和操作系统的关系,如果没有操作系统,你要那一堆破铜烂铁它能给你干活吗?比如你现在想计算1+1=2,你能直接拍CPU一巴掌,它就给你干了吗?肯定是需要你通过操作系统,把两个1先存到CPU的存储器当中(比如寄存器),然后调用CPU当中的运算器,才能最终把结果计算出来。

  网卡也是一样的,如果没有网卡驱动程序去控制它,你拍它一巴掌它是不会给你传数据的,需要驱动程序把你要传的数据封装一下,然后交给网卡,网卡一看,我靠,这要传的地址不就是隔壁家的凤姐吗,于是网卡才开着电缆把你的求爱信件送给凤姐。

  一般在驱动程序交给网卡的数据中,都带有源物理地址(也就是发送者的网卡物理地址,这玩意有时候会有用,但一般没啥用),目的物理地址(告诉网卡把数据送给谁)以及协议类型(用于对方接收到数据后用同样的协议解析),比如0f:00:11:0d:01:12这种形式的东西,是不是感觉很熟悉呢?它就是网卡的物理地址格式,是48位的二进制数字(也就是6个字节,中间用冒号分割),用ifconfig或者ipconfig命令就能看到你的网卡物理地址。

  

TCP/IP与OSI

  

  记得上一篇博文中,还有猿友留言,说LZ把物理层给丢下了。看来有不少猿友,还是停留在OSI的七层模型中。OSI和TCP/IP究竟是什么关系,接下来就由LZ来为大家简单解释一二。

  OSI共有七层,分别是物理层,数据链路层,网络层,传输层,会话层,表示层和应用层。而在第一章当中,LZ介绍过TCP/IP协议族共有四层,分别是链路层,网络层,传输层和应用层。

  简而言之,它们最大的区别是,OSI只是参考模型,而TCP/IP是目前实际使用的一个协议族,它已经被大部分操作系统所实现。它们的对应关系如下。

  

  可以看到,TCP/IP协议族简化了OSI模型,其实这种现象在实际的开发过程中也很常见,LZ举个简单的例子大家就清楚了。

  相信web项目的开发大部分猿友都不陌生,一般情况下,咱们的分层是Action,Service,Dao这种三层方式,但是在实际开发中,往往不一定按照这个分层去开发。比如有些比较小的项目,会删除Service这一层,由Action直接引用Dao。

  这其实就和OSI与TCP/IP的关系一样,参考模型始终是参考用的,实际当中不一定就得按照这个去实现。

  

链路层存在的意义

  人生在世,要活的有意义才算没白活一场。小的时候,LZ活着的意义是希望有一台小霸王游戏机,后来LZ活着的意义是希望有一台可以玩传奇的PC机,再后来LZ活着的意义是希望有一个37度的女娃娃。

  咳咳...跑题了。言归正传,TCP/IP中的每一层都应该有它存在的意义。说到这,不禁会让人产生一个疑问,就是链路层存在的意义是什么?

  很简单,LZ还是用一个例子来说明。Java中有Jdbc,是一个标准的Java数据库操作API。LZ想请问各位猿友,这套API的意义是什么?

  它的意义就在于,让数据库差异导致的一些细节变化对开发人员透明。透明这个词实在是太贴切了,透明的意义就在于“你不知道也不需要知道”。套用这句话,就是Jdbc让开发人员不知道也不需要知道数据库当中的一些操作细节,只需要按照API的操作说明去调用就可以了。这样带来的好处就是,降低了开发人员的学习成本,也增加了程序的扩展性和健壮性。因为你不再需要分别去了解mysql的数据库连接细节,或者oracle的数据库连接细节,你只需要知道DriverManager.getConnection()可以给你一个数据库连接就行了。

  我们再回到刚才的话题,链路层存在的意义与Jdbc特别相似,它让物理传输的细节对上层是透明的。套用刚才那句话,也就是说,上层(比如网络层,传输层等等)不知道也不需要知道数据在物理上是如何传输的。比如数据究竟是用双绞线传输的还是用同轴电缆,到底是有线的网络接口还是无线的网络接口传输,这些细节统统不需要链路层的上层去操心。

  这样做的好处就在于,链路层给上层提供了一层封装,就像Jdbc给开发人员提供的一层封装一样。只要是基于Jdbc开发的程序,数据库厂商只要都提供Jdbc的实现,开发人员就可以轻易的把数据库切换。同样的,只要是基于链路层的协议,网络层包括更高层也可以轻易的切换链路层实现。比如一会使用有线,一会使用无线,这对于处于网络层的IP实现,或者是传输层的TCP实现来讲,是不需要有任何变化的。当然了,对于处于应用层的Http实现更不需要有任何变化,这就像你开发的web程序,难道把有线网变成无线网就需要改代码吗,当然是不需要的!

  所以,现在很清楚了,链路层存在的意义,用简单的一句话概括,就是它让上层可以不需要考虑数据物理传输的细节,更加专注于自己该做的事。这种思想多么像MVC分层设计的初衷,MVC的初衷不就是为了让每一层可以专注于做自己的事吗,比如控制层就只专注于业务逻辑,视图层就只专注于界面展示,模型层就只专注于应用程序与数据库的交互。

  

文章花絮

  很多时候,我们总是纠结着自己的纠结,但在现实当中,往往很多事情是没有标准答案的。以前,学习数学的LZ习惯性的认为,任何事不是对就是错,没有模棱两可的区域。

  在社会中磨砺的时间久了,就会意识到,很多时候,没有对错,只有结果。从这个角度来看,只要你朝着好的结果去努力,那么你就是对的,哪怕在某种意义上你是错的。因为只要结果是好的,你最终会被认为是对的。

  成功者不要在意过程,失败者不要在意结果。LZ只想说,你懂的。

  

TCP/IP中最高大上的链路层简介(二)的更多相关文章

  1. tcp/ip详解 卷1 -- 链路层

    以太网 以太网指数字设备公司,英特尔公司,Xeror公司在 1982年联合公布的一个标准, 是当前 TCP/IP 采用的主要局域网技术. 以太网采用 CSMA/CD 的媒体接入方法, 即 带冲突检测的 ...

  2. TCP/IP协议族之链路层(二)

    TCP/IP学习记录,如有错误请指正,谢谢!!! TCP/IP协议族之链路层(二) 链路层是最底层协议,主要有三个目的: 1. 为IP模块发送和接收IP数据报 2. 为ARP模块发送ARP请求和接收A ...

  3. TCP/IP中链路层的附加数据(Trailer数据)和作用

    1.TCP/IP中链路层的附加数据是什么 在用wireshark打开报文时,链路层显示的Trailer数据就是附加数据,如图 2.如何产生 1.例如以太网自动对小于64字节大小的报文进行填充(未实验) ...

  4. TCP/IP中你不得不知的十大秘密

    这段时间 有一点心很浮躁,不过希望自己马上要矫正过来.好好学习编程!这段时间我想好好地研究一下TCP/IP协议和网络传输这块!加油 一.TCP/IP模型 TCP/IP协议模型(Transmission ...

  5. TCP/IP详解与OSI七层模型

    TCP/IP协议 包含了一系列构成互联网基础的网络协议,是Internet的核心协议.基于TCP/IP的参考模型将协议分成四个层次,它们分别是链路层.网络层.传输层和应用层.下图表示TCP/IP模型与 ...

  6. TCP/IP四层模型和OSI七层模型

    TCP/IP四层模型 TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇.TCP/IP协议簇分为四层,IP位于协议簇的第二层(对应OSI的第三层),TCP位于协议簇的第三层(对 ...

  7. TCP/IP四层模型和OSI七层模型的概念

    转:http://blog.csdn.net/superjunjin/article/details/7841099/ TCP/IP四层模型 TCP/IP是一组协议的代名词,它还包括许多协议,组成了T ...

  8. TCP/IP四层模型和OSI七层模型(模型分层的作用是什么)

    TCP/IP四层模型和OSI七层模型的概念(模型分层的作用是什么) 一.总结 一句话总结: 减轻问题的复杂程度,一旦网络发生故障,可迅速定位故障所处层次,便于查找和纠错: 在各层分别定义标准接口,使具 ...

  9. TCP/IP协议原理与应用笔记11:TCP/IP中地址与层次关系

    1. 网络中常用的地址: 2. TCP/IP中地址与层次关系 :

随机推荐

  1. 【SQL篇章--基于MySQL5.7--创建用户】

    SQL:   创建用户:>=MySQL5.7.6 查看用户: mysql> select user,host,authentication_string from mysql.user; ...

  2. perl操作sybase

    设置环境变量 export PERL5LIB=:/redhat/perl/lib64/perl5 安装DBI tar -xzvf DBI-1.631.tar.gz cd DBI-1.631 perl ...

  3. 入门 ARM 汇编(二)—— 寻址方式

    忧愁他整天拉着我的心,像一个琴师操练他的琴:悲哀像是海礁间的飞涛:看他那汹涌,听他那呼号!—— 徐志摩·四行诗一首 ilocker:关注 Android 安全(新手) QQ: 2597294287 立 ...

  4. 9、FTP封杀用户、限制传输速率、限制访问目录、为匿名用户提供下载资源

    一.封杀某些用户访问FTP服务器 例如  封杀 yanji [root@localhost root]#   vi   /etc/vsftpd.ftpusers     (用户控制配置文件,主要用于限 ...

  5. stanford coursera 机器学习编程作业 exercise4--使用BP算法训练神经网络以识别阿拉伯数字(0-9)

    在这篇文章中,会实现一个BP(backpropagation)算法,并将之应用到手写的阿拉伯数字(0-9)的自动识别上. 训练数据集(training set)如下:一共有5000个训练实例(trai ...

  6. 前端这条路怎么走,作为一名后端er,说说我的见解

    近期都游荡在各大群里看大家的讨论,经常看到关于程序员生涯的一些讨论,颇有感触,最近的国庆的确过得有些堕落,都没怎么更新,仔细相信还是应该分享点经验给大家的!想必大家都经历过面试,这是进入一家公司的必要 ...

  7. NOIP2012pj文化之旅[floyd]

    描述 有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一种文化超过一次,即如果他学习了某种文化,则他就不能到达其他有这种文化的国家.不同的国家可能有相同的文化.不同文化的国家 ...

  8. python中if __name__ == "__main__":用法解析

    __name__: __name__作为模块的内置属性,简单点说呢,就是.py文件的调用方式. __main__: 如果__name__等于"__main__"就表示是直接执行. ...

  9. C++在字符串前加一个L作用:

    在字符串前加一个L作用:    如 L"我的字符串" 表示将ANSI字符串转换成unicode的字符串,就是每个字符占用两个字节.    strlen("asd" ...

  10. Maven学习(九)插件介绍

    我们都知道Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成,例如编译源代码是由maven-compiler-plugin完成的.进一步说,每个任务对应了 ...