当我们在七层协议最上层,主机A想和其它主机通信, 比如telnet到主机B,各层都为数据打包后再封装上自己能识别的数据标签,现在我们只说四层以下的通信过程。

、当一个高层的数据包到达传输层,由于telnet使用TCP协议,传输层将上层传过来的数据不变再封装TCP的包头以便目标主机可以正确解包,继续向下层(网络层)传递。

、网络层同样不会改变之前的数据包,当然也包括之前封装的任何包头,
首先主机A要对目标主机作判断,他会用自己的IP地址和自己的子网掩码进行与运算结果是172.16.12.,
然后在拿自己的掩码和主机B的IP地址作与运算,假若结果是172.16.12.,这个时候他知道他们在同一网段内,这时他会封装自己的IP及目标的IP地址,同上层传下来的数据一下向下传。
假若是61.152.251.,发现不在同一个网段,注意:这时也是用自己IP和目标IP进行封装,然后向下层传递。
在数据链路层这时就不会封装目的的MAC地址,他也不知道MAC地址是什么,这时他会封装网关的MAC地址,而让网关将数据转发出去。
同时在网关收到数据时候,他会查看目标IP地址,当然不是他自己的IP地址了,所以他知道这个数据包是要由他路由出去的,然后路由器查找自己的路由表,若存在到该网络的路由便按路由表从对应接口发出去,
若路由表中没有到该网络的路由则检查是否存在默认路由,如果没有则丢弃数据包,并向源主机发送网络不可达icmp消息。
若一切正常,路由器会把数据包发给了他的邻居或网络运营商的路由器上去,重复以上动作,在TTL值为0之前将数据传递给某X官方网站,数据传递成功! 、数据链路层其实包括两个子层,一是LLC子层另一个是MAC子层。我们知道在以太网中通信是物理寻址的,在这层中会封装自己的MAC地址及对方的MAC地址。
当然用户是没有通知他MAC地址是多少的,这时主机会查自己的缓存表,看有没有主机B的MAC地址,
如果有就封装,否则他会发一个ARP的地址解析广播包,该包虽然可以向所有处在同一广播域中的主机发送,
但只会传递到不同网络的主机的数据链路层,更确切的说传递到了不同一网络的主机的数据链路层的高层后就被丢弃了。 、接着该数据会从我们的网线等传输介质传出去,主机B当收到数据的时候进行相同的工作但是作相反的操作

OSI互联数据包封装与解封装过程的更多相关文章

  1. IP数据包格式详解(转)

    摘自:http://blog.163.com/hlz_2599/blog/static/1423784742011112195857956/</> TCP/IP协议定义了一个在因特网上传输 ...

  2. TCP/IP数据包结构详解

    一般来说,网络编程我们只需要调用一些封装好的函数或者组件就能完成大部分的工作,但是一些特殊的情况下,就需要深入的理解网络数据包的结构,以及协议分析.如:网络监控,故障排查等…… IP包是不安全的,但是 ...

  3. WebSocket数据包协议详解

    其实我一直想不明白HTML5包装个应用层办议作为Socket通过基础目的是为了什么,其实直接支持Socket tcp相对来说更加简单灵活.既然标准已经制定而浏览器也支持那对于我们开发者来说只能用的分. ...

  4. sk_buff封装和解封装网络数据包的过程详解(转载)

    http://dog250.blog.51cto.com/2466061/1612791 可以说sk_buff结构体是Linux网络协议栈的核心中的核心,几乎所有的操作都是围绕sk_buff这个结构体 ...

  5. 计算机网络参考模型,IP地址及MAC地址查看方法,数据包封装过程

    分层思想 首先,计算机网络参考模型,是基于分层思想而出现的.分层思想,就是将复杂流程分解为几个功能单一的子过程. 优点: 可以让整个流程更加清晰, 让复杂问题简单化, 更容易发现问题,并真对性的解决问 ...

  6. GRE封装解封装过程

    GRE(Generic Routing Encapsulation,通用路由封装)协议是对某些网络层协议(IPX, AppleTalk, IP,etc.)的数据报文进行封装,使这些被封装的数据报文能够 ...

  7. FFmpeg(二) 解封装相关函数理解

    一.解封装基本流程 ①av_register_All()////初始化解封装,注册解析和封装的格式. ②avformat_netword_init()//初始化网络,解析rtsp协议 ③avforma ...

  8. CCNA - Part10 数据包的通信过程

    这篇文章主要是对数据包在同网段和不同网段的转发流程梳理,使用 ping 命令进行实际抓包测试. 网关的概念: 对于像 PC 等终端设备来说,通过交换机可以实现同网段的通信.但如果想要给其他网段发生数据 ...

  9. 用Java代码实现拦截区域网数据包

    起因: 吃饭的时间在想如果区域网内都是通过路由器上网,那如何实现拦截整个区域网的数据包,从而实现某种窥探欲. 思路:      正常是通过电脑网卡预先设置或分配的IP+网关对路由器进行通讯,比如访问百 ...

随机推荐

  1. 内省Introspector(反射操作javaBean)

    一:内省是一种特殊的反射,来更方便的操作javaBean对象,通过内省可以获取到类字节码的描述器, 然后解剖每一个字段,获取每个字段的读写方法,即get/set方法的反射,然后获取或者是封装bean的 ...

  2. python中字符串的几种表达方式(用什么方式表示字符串)

    说明: 今天在学习python的基础的内容,学习在python中如何操作字符串,在此记录下. 主要是python中字符串的几种表达,表示方式. python的几种表达方式 1 使用单引号扩起来字符串 ...

  3. [RN] 04 - React Navigation

    react-navigation和react-router的对比: 支持的平台: react-navigation: react-native react-router: react-native.r ...

  4. SpringBoot------热部署(Springloaded)

    为啥要热部署: 在修改代码的时候,不需要重新启动程序,程序会自动进行编译 注意: 控制器中新增加的方法是不能进行热部署的 方法: 1.在pom.xml文件里面添加下面代码 <project> ...

  5. flexbox常用布局左右固定,中间自适应

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  6. iOS 添加Resource bundle target(静态库中使用图片等资源)

    一.首先将资源文件打包成bundle 新建工程:File -> New -> Project... -> OS X -> Framework & Library -&g ...

  7. MySQL使用DDL语句创建表

    一.使用DDL语句创建表 DDL语言全面数据定义语言(Data Define Language) 主要的DDL动词: CREATE(创建).DROP(删除).ALTER(修改) TRUNCATE(截断 ...

  8. PostgreSQL存储过程(4)-return语句

    1. return语句 有三个命令可以用来从函数中返回数据: RETURN RETURN NEXT RETURN QUERY 2. RETURN命令 语法: RETURN RETURN express ...

  9. linux环境下执行RF测试脚本

    1. 测试执行 测试管理平台需根据用户选中的测试案例,按照相应格式对执行启动命令进行组装和发送,触动案例的自动化测试执行. 命令格式根据测试模式(以项目为单位.以测试集为单位.以案例为单位)具有不同的 ...

  10. Splash images_enabled 属性

    images_enabled属性用于设置加载页面时是否加载图片,如下,禁止之后,返回的页面截图就不会带有任何图片,加载速度也会快很多 function main(splash, args) splas ...