javaee网络原理初始_封装分用
大家好,我是bug郭,一名双非科班的在校大学生。对C/JAVA、数据结构、Linux及MySql、算法等领域感兴趣,喜欢将所学知识写成博客记录下来。 希望该文章对你有所帮助!如果有错误请大佬们指正!共同学习交流
作者简介:
- CSDN java领域新星创作者blog.csdn.net/bug…
- 掘金LV3用户 juejin.cn/user/bug…
- 阿里云社区专家博主,星级博主,developer.aliyun.com/bug…
- 华为云云享专家 bbs.huaweicloud.com/bug…
网络分层模型
OSI
七层网络模型
我们一般将应用层,表示层,会话层这三层用应用层代替!
也就是简化了7层模型!
OSI
七层网络简化版本为TCP/IP
五层(四层) 网络模型!
我们程序员有时候又将物理层和数据链路层分为一层,因为偏硬件!所以也能说是四层网络模型!
可以看到我们普通程序员只要学会应用层的协议就可以进行日常开发了!
传输层和网络层 由编写操作系统的人员实现!
而数据链路层和物理层由编写驱动的人员实现就好了!
TCP/IP
五层(四层)网络模型
我们来了解一下具体每层的作用!
从细节到宏观! 底层开始!
- 物理层
网络通信中的硬件设备!
网线/网卡,针对硬件设备的约定,物理层协议负责的范畴,需要保证所有主机和网络设备之间都是匹配的!
- 数据链路层
负责完成相邻设备之间网络通信(局部)
- 网络层
点到点之间的网络通信(全局),大部分是不相邻,
网络层负责规划好这两点之间合适的线路,因为设备之间不止一条线路!
- 传输层
负责端到端之间的通信,起点和终点,只是关注结果数据是否能到达,不关注过程(宏观)
- 应用层
和应用程序密切相关,你传输的这个数据是干啥用的,不同的应用程序有不同的用途!
我来类比我们生活中的网购,便于理解上面五层网络协议!
首先应用层就是买家和卖家,买家需要知道买的这个物品有什么用途,才会去购买,卖家也需要他卖的商品的用途,才可以卖出去!
传输层就好比,是商家要确认该商品是否能送到你的手上,选择合适的快递公司,就是快递是否能到达你的位置,不然卖个毛线!
网络层就好比快递公司,拿到商品好,需要规划合适的线路!然后包裹就到了快递小哥手上!
数据链路层这就好比快递小哥送包裹,点到点之间有不同的小哥负责!
物理层硬件设备就好比,公路,传输通道!提供传输基础,能顺利到达买家手上!
我们对应到相应的设备
主机
对应了物理层到应用层,包括了这五层传输协议,把这五层都实现了!
路由器
主要是物理层到网络层(主要实现了,物理层,数据链路层,网络层)
交换机
主要是物理层到数据链路层(主要实现了物理层,数据链路层)
封装和分用
封装和分用是网络分层中的一组重要概念!
这里的封装并不是像java
中的封装一样,指的是不同的网络分层协议之间是如何相互配合的!
我们暂且理解为封装就是包快递,分用就是拆快递!
封装
例如我们的微信程序,A
给B
发送了一条信息,内容是hello
!那么A
主机是如何进行传输到达B
的主机上的呢?
应用层(微信应用程序)
根据A
输出的内容,就会将数据构造成一个应用层的协议报文(我们知道协议就是约定,协议报文就是遵守这个约定的一组数据)!
然后微信就会通过微信的内部代码,根据应用层协议,将协议报文封装成应用层数据报文
我们这里需要知道,我们的应用层协议是由程序员编写的不同的应用程序有不同的应用层协议,我们是无法得知里面中的协议内容的,不像其他层(数据链路层,传输层,网络层)已经由操作系统,驱动,硬件编写好了!
应用层进行封装后,调用操作系统提供的API
(socket api
),将数据报文传送给了传输层(操作系统内核)
传输层(操作系统内核)
数据到了传输层,根据传输层协议(TCP/UDP
),将数据报文构造成了一个传输层协议报文!
我们的传输层协议有很多种(TCP,UDP
…)我们这里以TCP
协议举例!
TCP
报头信息:
源端口,目的端口端口号(商家和买家的联系电话)
这里的TCP
报头+数据载荷, 可以看成是字符串连接,就是将,这里的连接是二级制的连接!然后传输层将TCP
协议报文,交给了网络层!
网络层(操作系统内核)
网络层拿到数据后,根据网络层协议(IP
),将传输层协议数据,进一步进行封装,加上了一个IP
报文,构造成了一个IP
数据包!
IP
报头信息:
源IP
和目的IP
主机A
和主机B
的IP
地址(商家和买家的地址)
网络层进行封装后将数据交给了数据链路层(驱动程序)!
数据链路层(驱动程序)
数据链路层拿到IP
协议报文后,根据数据链路层,将数据进一步封装,构造一个数据链路层的数据报,典型的数据链路层协议是以太网
,就会构造成一个"以太网数据帧"!
帧头信息:
两个相邻设备的地址信息.
我们知道IP
报头包含的是起始位置和终点位置的地址,而以太网数据帧头包含的是相邻连个节点的地址,根据传输,该地址信息一直在变化!
帧尾信息:
数据校验和,校验传输的数据是否正确,我们后面在进行介绍!
经过数据链路层进行封装后,将数据传输给了物理层(硬件设备)
物理层(硬件设备)
然后数据就离开了主机A
!到了下一个设备,可能是路由器或者/交换机 在到达B
主机前要经过一系列的设备,这里我们就不进行研究,我们直接看到达B
主机后的操作!
分用
我们的分用,就是封装的逆过程,将刚刚拿到的包裹,进行拆过程!
物理层(硬件设备)
我们的B
主机网卡感知到了一组高低电平,就会将电平翻译成0/1二进制,这一串二进制,就是以太网数据帧,然后间以太网数据帧,交给了数据链路层!
数据链路层(驱动程序)
数据链路层,拿到以太网数据帧后,对数据进行解析,去掉帧头和帧尾!取出IP
数据报交给了网络层!
网络层(操作系统内核)
网络层,拿到IP
协议报文后,对数据进行了解析,去掉了IP
报头,取下TCP
报文,交给了传输层
传输层(操作系统内核)
传输层拿到数据后,对数据进行解析,去掉TCP
报头,取下应用层数据!交给应用层处理
应用层(微信应用程序)
应用层拿到数据,调用操作系统中的socket api
读取到操作系统内核中的数据报,解析数据,显示在B
对话框中!
还有中间的很多连接设备,要进行封装,分用!
中间可能有很多的设备,但是无论多复杂,都是对数据进行不停的封装和分用直至传输成功!
- 点赞
- 收藏
- 关注作者
评论(0)