当前位置: 首页 > news >正文

Java网络编程(上)

White graces:个人主页

🙉专栏推荐:Java入门知识🙉

🙉 内容推荐:Java文件IO🙉

🐹今日诗词:来如春梦几多时?去似朝云无觅处🐹


⛳️点赞 ☀️收藏⭐️关注💬卑微小博主🙏

⛳️点赞 ☀️收藏⭐️关注💬卑微小博主🙏


目录

网络编程

前置知识

局域网

广域网

IP地址

端口号

网络协议

协议分层

TCP/IP五层模型

1. 物理层

2. 数据链路层

3. 网络层

4. 传输层

总结

5. 应用层

网络封装

应用层封装

序列化和反序列化

传输层封装

网络层封装

数据链路层封装

物理层

网络分用

美图分享


网络编程

前置知识

局域网

俗称LAN, 将不同的主机设备连接在一起就构成了局域网

广域网

俗称WAN, 通过路由器将多个局域网连接在一起就构成了广域网

IP地址

人类有家庭住址, IP地址就是用来表示主机在网络中的地址

格式: 是一个32位的二进制数通常被分成4部分, a.b.c.d这种形式

如果每一部分用十进制表示, 这种表示方法被称为: 点分十进制

端口号

端口是用来定位主机每个进程的位置. 如果IP地址是你的快递地址,那么端口号就是你的个人信息

网络协议

协议: 网络协议是所有网络设备都遵守的规则, 比如如何建立连接,如果相互识别

如果不遵守这个协议可能会出现驴头不对马嘴的情况:

比如对暗号,我说米西米西,你说滑不拉几,暗号对接成功,说明你是我要找的人

识别不成功就不能正常通信

因此需要一个协议来指定规则

协议分层

如果用一个协议去约束所有主机, 那么这个协议就会非常庞大, 因此要对协议进行拆分

常见的协议模型有两种: OSI七层模型和TCP/IP五层(四层)模型

由于OSI七层模型只存在于实验室的理论中, 所以我们主要学习TCP/IP五层模型

TCP/IP五层模型

TCP/IP五层模型是哪五层呢?

1. 物理层

物理层面上的约定, 比如网口网线等物理设备, 使用统一的规格

2. 数据链路层

数据链路层网络层传输层放在一起解释

数据链路层: 关注两个相邻节点之间的通信

3. 网络层

网络层: 关注的是,通信路径的规划, 路径决定了数据要经过哪些节点, 因此网络层也被称为点到点的传输

4. 传输层

 传输层: 关注的是, 通信双方的起点和终点, 也被称为端到端的传输

举个例子解释上面三层模型, 比如网购

传输层

快递包裹上会写着收件人的地址号码, 也写着发件人的地址号码(用于退快递), 

商家和用户只需要知道双方的地址就可以, 不需要关注快递如何发送, 只关注起点和终点(传输层).

网络层

发送包裹, 快递公司会把路线规划好,比如路线1: 上海->无锡->西安, 路线2: 上海->南京->西安,

路线3: 上海->徐州->西安. 规划好路线快递就会按照既定路线传输. 

数据链路层

路线规划好了, 接下来就是运送快递, 比如上海->苏州->南京->西安这个路线, 上海->苏州采用卡车运送, 苏州->南京轮船运输, 南京->西安火车运输, 关注的是两个节点之间的传输 

总结

细节程度: 

传输层: 只关注通信双方(最不细节)

网络层: 通信路径的规划(细节程度一般)

数据链路层: 相邻节点之间的通信(细节程度最高)

5. 应用层

应用层: 和具体应用程序相关, 关注应用程序如何使用数据

有的人也叫TCP/IP四层, 物理层和数据链路层可以合并

经典面试题: 

路由器工作在网络层

交换机工作在数据链路层

网络封装

应用层封装

这里的封装不是Java语法中的封装了, 这里是根据网络协议对数据进行封装

网络上传输的数据是二进制数据

比如A通过QQ向B发送hello world

这些数据都要通过网络传输, 比如发送人接收人消息内容时间内容,这些数据就需要通过应用层协议组装起来

序列化和反序列化

实际上通过协议封装数据过程更加复杂
qq发送的是一个包含很多属性字段的结构化数据
将结构化的数据转化成二进制数据的过程叫做序列化
将二进制数据转化成结构化数据叫反序列化

传输层封装

经过应用层协议封装得到应用层数据包, 接下来就是手动调用系统API(socket)对应用层数据包进行封装, 

得到传输层数据包, 传输层常用UDP协议和TCP协议对应用层数据包封装

这里假设是UDP协议封装

网络层封装

得到传输层数据包后, 系统会自动调用操作系统内核中的API对传输层数据包进行封装

这里常见的协议是IP协议

数据链路层封装

得到IP数据包后, 操作系统内核就会进一步调用数据链路层的API封装

数据链路层的协议一般是以太网

物理层

到数据链路层都没有将数据发送出去, 真正发送数据是数据链路层数据包通过硬件设备将数据转换成光信号/电信号/电磁波发送出去, 发送并不是直接发给接收人中间可能经过了很多的交换坤和路由器

上述数据经过层层添加报头和数据帧的过程就叫做封装

网络分用

分用: 其实就是拆包的过程

接受到物理信号后, 物理层会将数据转换成二进制数据, 然后交给数据链路层处理

数据链路层将帧头帧尾之间的数据交给网络层处理, 网络层将IP数据报的载荷交给传输层,

传输层将传输层数据包的载荷(应用层数据包)交给应用层, 应用层将解析的数据交给对应的应用程序, 应用程序按照规定的协议,(反序列化)解析拿到结构化的数据, 最后将内容显示出来, 这个过程就是分用

物理信号经过交换机和路由器的时候也会进行封装分用

交换机封装分用到数据链路层(交换机工作在数据链路层)

路由器封装分用到网络层(路由器工作在网络层)


美图分享

✨🎆谢谢你的阅读和耐心!祝愿你在编程的道路上取得更多的成功与喜悦!"🎆✨🎄

⭐️点赞收藏加关注,学习知识不迷路⭐️

🎉✔️💪🎉✔️💪🎉✔️💪🎉✔️💪🎉

👍😏⛳️点赞☀️收藏⭐️关注😏👍

👍😏⛳️点赞☀️收藏⭐️关注😏👍

👍😏⛳️点赞☀️收藏⭐️关注😏👍

🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️

相关文章:

  • 【Linux】如何利用linux项目自动化构建工具-make/Makefile以及vim编辑器构建两个小程序:倒计时和进度条
  • go语言基于Gin集成后台管理系统开发定时任务管理cron/v3好用又好看
  • mac 下配置mysql的全局环境变量
  • Spring Cloud Alibaba-09-Seata分布式事务
  • 秋招突击——算法打卡——5/30——复习{最大上升子序列的和、面试算法缺陷补充}——新做:{回文数+补充 自定义Stoi实现、正则表达式匹配}
  • AI科技,赋能企业财务管理
  • ARC学习(2)基本编程模型认识(二)
  • C#多维数组不同读取方式的性能差异
  • 快手发布大模型产品“可图”,超20种创新AI图像玩法限免上线
  • React-useState
  • 经典获奖案例 | 度小满互联网金融开源软件治理解决方案
  • JVM 虚拟机
  • 10. RBAC权限管理从零到一实现(一)
  • 【学习笔记】数据结构(一)
  • spring 优雅替换bean
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • echarts的各种常用效果展示
  • egg(89)--egg之redis的发布和订阅
  • Git的一些常用操作
  • If…else
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • JavaScript函数式编程(一)
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • linux学习笔记
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • 第十八天-企业应用架构模式-基本模式
  • 开源地图数据可视化库——mapnik
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 深度学习在携程攻略社区的应用
  • 深入浅出Node.js
  • 一道面试题引发的“血案”
  • Java数据解析之JSON
  • Spring Batch JSON 支持
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (3)nginx 配置(nginx.conf)
  • (C++20) consteval立即函数
  • (Oracle)SQL优化基础(三):看懂执行计划顺序
  • (zhuan) 一些RL的文献(及笔记)
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (六)激光线扫描-三维重建
  • (算法)N皇后问题
  • (一)utf8mb4_general_ci 和 utf8mb4_unicode_ci 适用排序和比较规则场景
  • (转)Mysql的优化设置
  • (转)ORM
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .NET Micro Framework初体验(二)
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)