浅谈TCP:IP

互联网TCP/IP五层模型(从低到高):物理层、链接层、网络层、传输层和应用层

假设计算机1的应用进程AP1要传送数据给计算机2的应用进程AP2,要经过如图所示的步骤,AP1先把数据交给第5层应用层,第5层加上必要的控制信息H5就变成了下一层的数据单元,依次类推至第一层,通过比特流来传输给计算机2,然后计算机2再从第一层开始,每一层获取对应的信息,再把控制信息剥去,将剩余的数据单元上交给更高的一层,依次往上最终至第五层将AP1的信息交给AP2。

用一个简单的例子比喻上述过程。有一封信从最高层向下传,每经过一层就包上一个新的信封,写上必要的、交由下一层处理的地址信息。包有多个信封的信件传送到目的站后,从第一层开始,每层拆开一个信封后(即按协议进行处理后)就把信封中的信交给它的上一层。传到最高层后,取出发信人所发的信息交给收信人。

纵向看,互联网模型一层套一层,横向看,任何两个同样的层次之间,也好像如同图中的水平虚线所示的那样,将数据通过水平虚线直接传递给对方。这就是所谓的对等层之间的通信,各层协议,实际上就是各个对等层之间传递数据时的各项规定。整个互联网的实现运用到了很多协议,这些协议的总称就叫互联网协议

物理层

物理层就是把两台电脑通过光缆、电缆、双绞线、无线电波等方式连起来,传输0或1。

链接层

单纯的0或1没有意义,要把他们组合成电脑看得懂的方式,就要遵守以太网协议。“链接层”的功能就是它在“物理层”的上方,确定了0和1的分组方式。

以太网协议

协议由(标头)head部分和(数据)Data部分组成,标头部分标明数据的一些说明,包括收发方,数据类型等等;数据部分则是数据包的具体内容。

Mac地址

收发方的地址用各自的网卡(Mac)地址表示,每台电脑都有一个独一无二的Mac地址,就像序列号一样,出厂时就确定了。像我电脑的Mac地址就是:

我们能够看到自己的Mac地址,现在假设我们也知道对方的Mac地址,这样我们就可以进行通信了,通信方式是以广播的形式展开,发出方发出一个包,在同一个网络里的所有计算机都能接到,他们把接收方的Mac地址和自己的对比,一样就接收做进一步处理,不一样就丢弃。

网络层

现在联网的电脑这么多,一想便知不可能每台电脑传输数据都是用广播的方式,那网路上不塞车才怪呢。这就得把网络分成N多子网络,在每个子网络里进行广播传输,跨网络就通过路由的方式(还没学,等学了再写)。

那怎么知道对方和自己是不是在同一个子网络呢,这就又要引入一套新的地址机制——网路地址,也就是网址。

IP协议

规定网络地址的协议,叫做IP协议。它所定义的地址,就被称为IP地址

IP地址是每台电脑在网络中的地址,就像门牌号,他是当地政府(管理员)给你安上的。IP地址有动态IP地址和静态IP地址两种形式,动态IP地址是管理员给分配的,你一下线,这个IP地址就可能就是别人的了,再上线分到的可能又是另一个IP地址。这好比你一退租,这个地址就是新房客的了,你再找一个地方住肯定是有另一个地址了。静态IP地址就是固定的门牌号,别人不能用,那会出现占着茅肯不拉屎的情况,所以不推荐使用静态IP地址。

IP地址长啥样呢?下图的IPv4就是我的IP地址,v4就是第四版的意思。

v4版IP协议规定网络地址由32个二进制位组成。习惯上,我们用分成四段的十进制数表示IP地址,从0.0.0.0一直到255.255.255.255。

IP协议还规定,IP地址分成两部分,前一部分代表网络,后一部分代表主机,那这个前后是怎么划分的呢,这就要用到子网掩码了,子网掩码和IP地址对应,二进制下111111代表网络,000000代表主机,换成十进制就是255代表网络,0代表主机,所以我的IP地址中192.168.199代表我的网络部分,188代表我的主机部分。有了IP地址和子网掩码,就可以判断两台计算机在不在同一个子网路了。我的电脑和192.168.199.134在同一个子网络,和192.168.167.134不在同一个子网络。

以上两点就是IP协议的规定的内容。

IP数据包嵌套在以太网数据包的data部分,现在,以太网数据包就成了下图的样子。

传输层

有了MAC地址和IP地址,我们已经可以在互联网上任意两台主机上建立通信。计算机A和计算机B间的通信,以及现在流行的物联网,给各种家电都连入网络中,用手机就可以控制家电的开关,都是依靠网络层建立通信为基础的。

接下来的问题是,你的主机上运行的进程这么多,比如你一边浏览网页,一边用QQ聊天,当一个数据包从网络上发来的时候,你怎么知道,它是表示网页的内容,还是表示在线聊天的内容?

这就要用到端口,端口是0到65535之间的一个整数,不管是浏览网页还是在线聊天,应用程序会随机选用一个端口,然后与服务器的相应端口联系。
传输层是“端口到端口的通信”,是面向通信部分的最高层,同时也是用户功能中的最低层。

UDP协议

现在,必须在IP数据包中加入端口信息,这就需要新的协议。最简单的实现叫做UDP协议,它的格式几乎就是在数据前面,加上端口号。

"标头"部分主要定义了发出端口和接收端口,"数据"部分就是具体的内容。然后,把整个UDP数据包放入IP数据包的"数据"部分,而前面说过,IP数据包又是放在以太网数据包之中的,所以整个以太网数据包现在变成了下面这样:

TCP协议

UDP协议的可靠性差,在传输数据前不需要建立连接,远地主机的运输层在收到UDP报文后,不需要给出任何确认。
TCP协议可以理解成有确认机制的UDP协议,它能够确保数据不会遗失。它的缺点是过程复杂、实现困难、消耗较多的资源。

IP地址和端口号构成套接字(socket)。如131.6.23.13为IP地址,1500为端口号,因此套接字为131.6.23.13,1500

应用层

应用程序收到"传输层"的数据,接下来就要进行解读。

没有应用层,就不能解读"传输层"传来的数据。

应用层协议有很多,比如HTTP、FTP、TELNET等,应用层是TCP/IP五层模型中最高的一层,直接面对用户。它的数据就放在TCP数据包的"数据"部分。因此,现在的以太网的数据包就变成下面这样。

(感谢阮哥

Comments
Write a Comment