以递进式的思维理解互联网协议

本篇文章总结自我现有知识,不妥之处请指教。

首先我们要介绍的是常用的互联网五层协议,即:


为什么要分五层呢?或者说去掉链路层,或者去掉网络层可以吗?答案当然是不可以的。因此它的每一层都是为了完成某种特定的功能,都是不可或缺的。上面的协议越靠近下面,越接近硬件,越往上越接近用户,我们平时的上网等操作都只接触到的是应用层,而软件开发人员则向下接触到传输层和网络层的东西,网络硬件维护人员则接触最下面的两层。


首先我们试想为什么大连和东京的两台电脑可以互相通信?当然得通过某种方式建立连接啊,一般的方式有电缆、光缆以及无线电波等方式。而实际这些所谓的“电线”传递的是电位信号,它们不是“0”,就是“1”,跟计算机一样,许许多多的0和1就可以组成千变万化的样子,比如:e:1110, o: 10, l: 0, v: 110,那么0101101110就是“love”了。

上面由一堆“0”“1”电位组成的数据包(love)就叫做以太网“帧”,每一帧包含帧头和数据:


帧头包含着发送给谁,谁发的,以及后面的数据是什么类型等说明该帧,数据就是实际想发送给对方的东西。当然如果想发送的东西太多,一个帧放不下那就要分多个帧进行发送。

另外上面说的帧头包含了发送给谁的信息,那么怎么确定发送者和接受者的身份呢?答案就是我们常说的MAC地址,而MAC地址通常也叫物理地址,为什么叫物理地址呢,因为这个地址实际可以理解为刻在网卡上的,每一个网卡都有一个这个世界上唯一的物理地址,也就是唯一的MAC地址,那么有了这个唯一标识,数据帧就可以从一个MAC地址(电脑)发送到另一个MAC地址(电脑)处。

但是这里有一个问题必须搞清楚,网络不像我们人一样,拿着地址就能自己找到相应的位置,换句话说,数据帧只是包含了要发送到的地址信息,但它不能像追踪导弹一样自己找到“目标”的。所以以太网其实采用了一种“广播”的方式,即向与它有网络连接的所有计算机都发送这个数据帧,然后每台计算机根据帧头上写的MAC地址与自己的比对,是自己就收下数据,不是自己就抛弃。

知道上面的以太网采用广播的方式进行发送数据帧,那么就有一个问题了,广播是广播给与发送者有连接的所有计算机(也就是同一个子网),而现实中我们不可能把整个地球上的所有计算机都连在一个圈子里,况且采用广播的方式本身效率就特别低。因此实际中的互联网其实是多台电脑构成一个子网络,然后所有的这些子网络一起构成我们常说的Internet。


这样的话,我们就清楚了,当一个电脑给另一个电脑发送数据,如果在同一个子网,那就可以直接通过广播+MAC地址发送到目标机,而如果不在同一个子网,则就通过另一种路由转发的方式,也就是通过路由的方式发给目标子网再进行下一步操作。

我们知道MAC地址只是跟网卡绑定的物理地址,那么路由转发又是通过什么地址进行呢?这就引出了网络层的IP协议。IP协议规定ip地址的格式与使用。我们现在常用的ip地址都是IP协议的第四版本,由32个二进制组成,而实际中我们通常分8位为一组并用十进制来表示。ip地址根据开头分下面三种:

  A类IP段  0.0.0.0 到127.255.255.255 
  B类IP段  128.0.0.0 到191.255.255.255 

  C类IP段  192.0.0.0 到223.255.255.255 

而每一个ip地址其实分为了两部分,前一部分为网络号,后一部分为主机号,如何判断一个ip地址网络号跟主机号从哪里开始分割,就是通过与子网掩码与就行,与完后为1的就是网络号,为0的就是主机号。


ip相关的知识这里不详细介绍,我们上面说要判断两台电脑是不是在一个子网就要用到网络层的ip协议,那么ip协议是怎么判定的呢?其实上面已经介绍了,通过子网掩码与ip地址与就能划分出网络号,而这个网络号其实就反映的是同一个子网,也就是在同一个子网下的两台电脑是具有相同的网络号的,只是它们的主机号有点不同罢了。

另外还有一个问题,原来的数据帧现在该如何加上IP进行传输呢?看下面的图:


我们将IP段的整个数据包塞进原来的以太网数据部分,这样就构成了一个嵌套的结构,当然这也是整个互联网传输自顶向下,在自底向上的结构,采用这种方式很明显的好处就是每一层的变动不会影响其上一层和下一层。

接下来还有一个问题就是传输数据包过去怎样通过ip地址找到MAC地址呢?这个问题要看两台电脑是否在同一个子网,如果不在,实际是会将数据包传输到两个子网连接处的“网管”,让网关去处理。而如果在一个子网,就又会采用那种笨办法,给同一个子网内的所有主机都发送一个数据包,数据包上有想寻找的ip地址,每个主机收到后对比上面的ip地址是否和自己的一致,不一致就丢弃这个包,一致就返回自己的MAC地址。这其实就是地址解析协议(ARP协议)的大致意思。

到此,我们已经能够实现两台电脑之间的数据传输了,但是这仅仅只是两台电脑之间,而实际中我们是两台电脑的网页之间,或者QQ之间的通信,这就好比我们找到的地址只是知道了在哪个单元楼,而具体是到哪个门牌号就不知道了。而这里的门牌号就是我们常说的端口,端口就是给电脑上的每个程序编个号,到时候传输到电脑,再根据端口号发送到特定的程序,我们通常进行的socket编程其实就是建立两台电脑端口与端口之间的通信。


上面是加上传输层的数据包结构,分TCP和UDP,这两个东西通俗地说,TCP就相当于打电话,UDP就相当于广播。当然打电话在两个人之间是私密的(可靠的),而广播这种事别人听没听到那就不一定了,但是很明显在效率上后者要比前者更优秀。

至此,整个数据是如何传输了我们已经清楚了,只有一个问题是现在需要思考的,我们传输数据究竟传输的是什么,或者说一台电脑想跟另一台电脑发邮件、传文件,这些东西本质是不同,不可能一股脑直接发过去,对方自己慢慢分析是什么东西吧。所以到了应用层必须还要明白一个道理,丁是丁卯是卯,发丁有丁的格式,发卯有卯的格式。比如email和www的数据格式就不一样,这样加上应用层的数据格式,整个数据包就变成了这样:


所以整个互联网的传输就是按照这五层协议,在高层封装好数据包交给下一层,下一层再装上自己的东西继续交给下一层,到最后物理层后就转换为一堆“0”“1”电位通过网线传递到目标主机,然后目标主机接收到这个数据包后又从最底层往上一层一层拆分每层需要的信息,到最后才能得到想要传递的信息。

经过这么一番折腾,终于明白平时我们给对方发个消息“嗖”一下就到了,但是背后却进行了如此多繁琐的手续。


你站在桥上看风景 看风景的人在楼上看你。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值