概念+协议的了解+OSI七层模型,TCP/IP五层协议,网络数据传输流程 Linux--网络基础( 五 )


  • 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的 “上层协议字段” 将数据交给对应的上层协议处理

概念+协议的了解+OSI七层模型,TCP/IP五层协议,网络数据传输流程 Linux--网络基础

文章插图
问题:
  • 每一协议层的数据包是什么?
?数据包=报头+有效载荷
  • 协议的共性是什么?
?1.如何将数据包中的报头和有效载荷分离的问题,这个过程叫做解包 。?2.自底向上,要确认自己的有效载荷交付给上层的那个协议,这个过程叫做分用 。
  • 如何解决将数据包中的报头和有效载荷分离的问题?
? 1.定长报头 。报头的长度是确定的,这样就可以实现二者分离 。
?2.自定义描述符字段 。报头中添加一个字段,表示报头的长度 。
数据封装的过程:
概念+协议的了解+OSI七层模型,TCP/IP五层协议,网络数据传输流程 Linux--网络基础

文章插图
局域网通信局域网内的主机是通过路由器和交换机连接在一起的,局域网内的两台主机通信本质就是两个协议栈之间在进行通信,下面是两台主机通过TCP/IP协议进行文件传输的过程:
概念+协议的了解+OSI七层模型,TCP/IP五层协议,网络数据传输流程 Linux--网络基础

文章插图
数据在自身协议栈自顶向下进行封装:
  • 数据包交给应用层,应用层添加上对应的应用层协议报头,然后把整个数据包向下交付给传输层
  • 传输层再添加上对应的传输层协议报头,然后把整个数据包向下交付给网络层
  • 网络层再添加上对应的网络层协议报头,然后把整个数据包向下交付给数据链路层
  • 数据链路层再添加上对应的数据链路层协议报头,然后把整个数据包通过网络交付给对端数据链路层
数据在对端协议栈自底向上进行分用:
  • 数据链路层将数据包的报头和有效载荷进行解包分离,然后将有效载荷交付给上层的网络层
  • 网络层将数据包的报头和有效载荷进行解包分离,然后将有效载荷交付给上层的传输层
  • 传输层将数据包的报头和有效载荷进行解包分离,然后将有效载荷交付给上层的应用层
  • 应用层将数据包的报头和有效载荷进行解包分离,将最后的数据进行相关处理然后交付给用户
思考下面几个问题:
1.局域网中,所有的主机可以直接通信,它们是如何确定数据是发给哪一台主机,目标主机又是如何确认数据是发给自己的?
在数据链路层,有一个MAC地址(48位),网卡硬件地址或者序列号,是全球唯一的,用来标识主机的唯一性 。每一台主机都要一个MAC地址,且都知道,发送方将数据发出去,这个数据里面包含目标主机的MAC地址信息,每个主机都可以收到这一份数据,且用自己的MAC地址与数据中的目标主机MAC地址进行比较,如果不同,表明该数据不是发给自己的,就将数据丢掉,相同就表明该数据是发给自己的,就收下 。
2.局域网中,如何将数据发送给所有主机?
主机发送数据是,将MAC地址设置为一个广播地址,这样所有的主机都认为这个数据是发给自己的
3.局域网通信原理
局域网中,有多台主机直接通信,有可能会发生数据碰撞,这样就会影响其它主机间的通信,所以一个局域网可以看作是一个碰撞域 。碰撞后的数据就是垃圾数据量,局域网中的所有主机都可以收到发出去的数据,包括发数据的主机本身也是如此,该主机会将收到的数据和此前发出去的数据进行对比,如果不同,代表此前发出去的数据发生了碰撞,这就是碰撞检测数据发生碰撞后,发送方不会立即将数据进行重写发送,而是等一段数据,在重新发生,这就是碰撞避免算法,也是碰撞避免的一种机制所以说,局域网的数据通信时在一个碰撞域中不断地碰撞,然后进行碰撞检测,碰撞避免 。局域网通信的本质就是基于碰撞域、碰撞检测和碰见避免实现通信,局域网内主机越多,碰撞几率越多,交换机在局域网中的作用就是划分碰撞域,解决碰撞问题,降低碰撞几率

经验总结扩展阅读