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


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

文章插图
  • 应用层数据通过协议栈发到网络上时 , 每层协议都要加上一个数据首部(header),称为封装(Encapsulation) 。首部信息中包含了一些类似于首部有多长 , 载荷(payload)有多长 , 上层协议是什么等信息

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

文章插图
因每一层的传输数据单元不同,所以需要封装报文头部,以此使下一层能够看懂识别 。传输层:传输层有TCP/IP两个协议 , TCP(传输控制协议)和UDP(用户数据报协议) 。TCP协议传输更加稳定可靠,UDP协议传输效率更高 。所以,上层数据到达传输层后需要封装TCP头部或者UDP头部 。网络层:同理,上层数据到达这里需要封装IP头部 。TCP/IP定义了网络互联协议(IP)(英文是Iternet Protocol) 。而IP又由四个支撑协议组成:ARP(地址解析协议),RARP(逆地址解析协议) , ICMP(网际控制报文协议)和IGMP(网际组管理协议) 。数据链路层:同理 , 上层数据到此需要封装MAC头部 。物理层:到达物理层就直接由计算机通过信号接收了 。
  • 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的 “上层协议字段” 将数据交给对应的上层协议处理

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

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

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

文章插图
数据在自身协议栈自顶向下进行封装:
  • 数据包交给应用层,应用层添加上对应的应用层协议报头 , 然后把整个数据包向下交付给传输层
  • 传输层再添加上对应的传输层协议报头,然后把整个数据包向下交付给网络层
  • 网络层再添加上对应的网络层协议报头,然后把整个数据包向下交付给数据链路层
  • 数据链路层再添加上对应的数据链路层协议报头,然后把整个数据包通过网络交付给对端数据链路层
数据在对端协议栈自底向上进行分用:
  • 数据链路层将数据包的报头和有效载荷进行解包分离,然后将有效载荷交付给上层的网络层
  • 网络层将数据包的报头和有效载荷进行解包分离,然后将有效载荷交付给上层的传输层
  • 传输层将数据包的报头和有效载荷进行解包分离,然后将有效载荷交付给上层的应用层
  • 应用层将数据包的报头和有效载荷进行解包分离,将最后的数据进行相关处理然后交付给用户
思考下面几个问题:
1.局域网中 , 所有的主机可以直接通信,它们是如何确定数据是发给哪一台主机,目标主机又是如何确认数据是发给自己的?
在数据链路层 , 有一个MAC地址(48位) , 网卡硬件地址或者序列号,是全球唯一的,用来标识主机的唯一性 。每一台主机都要一个MAC地址,且都知道,发送方将数据发出去,这个数据里面包含目标主机的MAC地址信息 , 每个主机都可以收到这一份数据 , 且用自己的MAC地址与数据中的目标主机MAC地址进行比较,如果不同,表明该数据不是发给自己的,就将数据丢掉,相同就表明该数据是发给自己的,就收下 。
2.局域网中,如何将数据发送给所有主机?
主机发送数据是 , 将MAC地址设置为一个广播地址,这样所有的主机都认为这个数据是发给自己的

推荐阅读