TCP/IP协议的基本框架:

有一个非常形象的比喻:

网络通信就好比送快递,商品外面的一层层包裹就是各种协议,协议包含了商品信息、收货地址、收件人、联系方式等,然后还需要配送车、配送站、快递员,商品才能最终到达用户手中。

一般情况下,快递是不能直达的,需要先转发到对应的配送站,然后由配送站再进行派件。

配送车就是物理介质,配送站就是网关, 快递员就是路由器,收货地址就是IP地址,联系方式就是MAC地址。

快递员负责把包裹转发到各个配送站,配送站根据收获地址里的省市区,确认是否需要继续转发到其他配送站,当包裹到达了目标配送站以后,配送站再根据联系方式找到收件人进行派件。

在这个比喻中:

发件人需要完成快递的打包任务!用到了应用层的协议(如HTTP、SMTP等)、传输层协议(TCP)、网络层协议(IP):

应用层协议:需要决定快递盒子里面装的是什么(定义传输数据的格式)

传输层协议:需要贴上快递是从这栋楼的哪一个宿舍发出的和目的地的宿舍号(定义源端口号和目标端口号以区别是计算机中的哪一个程序发出的包,发往目标计算机的哪一个程序)

网络层协议:需要贴上发货人的地址和收件人的地址(定义源IP地址和目标IP地址)

接下来就会把快递交到快递公司的手中:

快递公司配送站(网关)拿到快递后首先会判断一下这个目标地址是否就在本社区内(是否在同一个子网内),判断方法是利用IP地址和子网掩码通过按位与运算后就可以得到网络地址,如果两个IP地址在同一个子网内,它们的网络地址必定相同!

如果它们在同一个社区(同一个子网),那就可以直接配送(通过ARP协议找到子网内的目标机器)。

如果不再同一个社区(同一个子网),配送站(网关)将通过快递员(路由器)驾驶快递车(物理层)送到收件人社区的配送站(目标IP所在的子网的网关),由目标IP所在的网关,通过ARP协议找到具体的机器,通过端口号确定具体的程序,通过规定好格式的应用层协议来解析读懂数据!

细节:两个不同社区之间的路程可能经历过多个快递员转手接力运送,而这些快递员拿到快递只关心目标地址的大致地址,并不关心它的门牌号(路由器在转发数据包时用的地址是IP地址,而非MAC地址,到达一个子网后再用MAC地址找具体的机器)

至此TCP/IP协议栈的各层作用就十分清楚了:

应用层:定义数据格式,并按照对应的格式解读数据

传输层:定义端口,确认主机上应用程序的身份,并将数据包交给对应的应用程序。

网络层:定义IP地址,确认主机所在的网络位置(路由协议),并通过IP进行mac寻址(ARP协议),对外网数据包进行路由转发。

链路层:对0和1进行分组,定义数据帧,传输数据。

物理层:传输01构成的比特信号。

然后再把每层模型的职责串联起来,用一句通俗易懂的话讲就是:

当你输入一个网址并按下回车键的时候,首先,应用层协议对该请求包做了格式定义;紧接着传输层协议加上了双方的端口号,确认了双方通信的应用程序;然后网络协议加上了双方的IP地址,确认了双方的网络位置;最后链路层协议加上了双方的MAC地址,确认了双方的物理位置,同时将数据进行分组,形成数据帧,采用广播方式,通过传输介质发送给对方主机。而对于不同网段,该数据包首先会转发给网关路由器,经过多次转发后,最终被发送到目标主机。目标机接收到数据包后,采用对应的协议,对帧数据进行组装,然后再通过一层一层的协议进行解析,最终被应用层的协议解析并交给服务器处理。