文章插图
- 应用层数据通过协议栈发到网络上时 , 每层协议都要加上一个数据首部(header),称为封装(Encapsulation) 。首部信息中包含了一些类似于首部有多长 , 载荷(payload)有多长 , 上层协议是什么等信息
文章插图
因每一层的传输数据单元不同,所以需要封装报文头部,以此使下一层能够看懂识别 。传输层:传输层有TCP/IP两个协议 , TCP(传输控制协议)和UDP(用户数据报协议) 。TCP协议传输更加稳定可靠,UDP协议传输效率更高 。所以,上层数据到达传输层后需要封装TCP头部或者UDP头部 。网络层:同理,上层数据到达这里需要封装IP头部 。TCP/IP定义了网络互联协议(IP)(英文是Iternet Protocol) 。而IP又由四个支撑协议组成:ARP(地址解析协议),RARP(逆地址解析协议) , ICMP(网际控制报文协议)和IGMP(网际组管理协议) 。数据链路层:同理 , 上层数据到此需要封装MAC头部 。物理层:到达物理层就直接由计算机通过信号接收了 。
- 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的 “上层协议字段” 将数据交给对应的上层协议处理
文章插图
问题:
- 每一协议层的数据包是什么?
- 协议的共性是什么?
- 如何解决将数据包中的报头和有效载荷分离的问题?
【概念+协议的了解+OSI七层模型,TCP/IP五层协议,网络数据传输流程 Linux--网络基础】?2.自定义描述符字段 。报头中添加一个字段,表示报头的长度 。
数据封装的过程:
文章插图
局域网通信局域网内的主机是通过路由器和交换机连接在一起的,局域网内的两台主机通信本质就是两个协议栈之间在进行通信,下面是两台主机通过TCP/IP协议进行文件传输的过程:
文章插图
数据在自身协议栈自顶向下进行封装:
- 数据包交给应用层,应用层添加上对应的应用层协议报头 , 然后把整个数据包向下交付给传输层
- 传输层再添加上对应的传输层协议报头,然后把整个数据包向下交付给网络层
- 网络层再添加上对应的网络层协议报头,然后把整个数据包向下交付给数据链路层
- 数据链路层再添加上对应的数据链路层协议报头,然后把整个数据包通过网络交付给对端数据链路层
- 数据链路层将数据包的报头和有效载荷进行解包分离,然后将有效载荷交付给上层的网络层
- 网络层将数据包的报头和有效载荷进行解包分离,然后将有效载荷交付给上层的传输层
- 传输层将数据包的报头和有效载荷进行解包分离,然后将有效载荷交付给上层的应用层
- 应用层将数据包的报头和有效载荷进行解包分离,将最后的数据进行相关处理然后交付给用户
1.局域网中 , 所有的主机可以直接通信,它们是如何确定数据是发给哪一台主机,目标主机又是如何确认数据是发给自己的?
在数据链路层 , 有一个MAC地址(48位) , 网卡硬件地址或者序列号,是全球唯一的,用来标识主机的唯一性 。每一台主机都要一个MAC地址,且都知道,发送方将数据发出去,这个数据里面包含目标主机的MAC地址信息 , 每个主机都可以收到这一份数据 , 且用自己的MAC地址与数据中的目标主机MAC地址进行比较,如果不同,表明该数据不是发给自己的,就将数据丢掉,相同就表明该数据是发给自己的,就收下 。
2.局域网中,如何将数据发送给所有主机?
主机发送数据是 , 将MAC地址设置为一个广播地址,这样所有的主机都认为这个数据是发给自己的
推荐阅读
- 《我的世界》1.14更新后如何驯服豹猫(我的世界1.16驯服猫成就)
- php注解使用示例
- 1 onps栈移植说明——onps栈的配置及裁剪
- netty系列之: 在netty中使用 tls 协议请求 DNS 服务器
- 使用LabVIEW实现基于pytorch的DeepLabv3图像语义分割
- 我的Spark学习笔记
- 螃蟹断掉的腿,还能重新长出来吗?
- 明日之后热晶实验室奇遇任务的完成方法是什么
- 原神隐藏成就三而竭怎么获取
- 原神勇气戴于心上任务怎么完成