JavaEE----初识网络(web)

网络基础

🚩局域网/广域网

局域网: 就是将 两台,或者几台主机连接在一起。这样就构成了一个局域网。例如:

在这里插入图片描述
当然在日常使用中,这种组网方式是非常少见的(非常废网线,非常废网口)
一般组件局域网中,都会使用一些转发设备:交换机,路由器~

交换机在这里插入图片描述
借助交换机,就组成了一个局域网~~交换机上面的网口之间都是对等的(都是一样的口)效果就是把插在上面的设备给组建成一个局域网,这个局域网内部的主机之间就可以互相进行访问。(交换机是把若干个设备给组建到一个局域网中 )

路由器
在这里插入图片描述
可以视为A是B的局域网中的一个设备~~这个是我们日常中最常见的情况,路由器这里其实有两类端口,WAN口和LAN口,其中插在LAN口上的设备,在一个局域网里通过WAN口连接到另外一个局域网,路由器则是连接了两个局域网(LAN口是一个,WAN又连接了一个)

上述讨论的区别,局限于“传统”的交换机和路由器
实际中,真实的交换机和路由器,之间的界限,已经越来越模糊了。

广域网其实和局域网之间没有明确界限
认为比较大的局域网,就可以称为广域网
全世界最大的广域网叫做internet(因特网)

🚩IP地址和端口号

IP地址:描述了网络上的一个主机的位置(类似于快递收货地址)
IP地址本质上是一个32位的整数~~但是由于32位的整数,不方便人来读和记忆,所以采用了“点分十进制”,按照每个字节来分割成四个部分。
在这里插入图片描述
例如:3306就是MySQL的默认端口号,服务器程序在启动的时候,就需要绑定上一个端口号,以遍客户端程序来访问。

🚩协议(非常重要!!!)

想要进行有效的通讯,前提就是能够明确通信协议~~ 本质上就是约定,发出来的数据是啥样的格式,接收方按照对应的格式来进行解析。网络通信的时候,本质上,传输的是光信号和电信号,通过光信号的频率(高频率/低频率)电信号的高平(高电平/低电平)来表示0或1.

关于协议分层

网络通信这个过程,其实很复杂,里面有很多很多的细节~
如果就只是通过一个协议,来约定所有的细节,这个协议就会非常庞大,复杂
更好的办法,就是把一个大的复杂的协议,拆分成多个小的,简单的协议,每个协议负责一部分的工作。
这样的好处:
1)每层协议不需要理解其他层协议的细节(更好的做到了封装)
2)把对应层的协议替换成其他协议(更好的解耦合)

在我们平时能看到的教科书中,大多数讲的一般都是OSI七层网络模型,
在这里插入图片描述

当然,这种模型只存在于教科书中~~
真实的情况是OSI的简化版本,TCP/IP五层(四层)网络模型。
一台主机,其实就对应了物理层到应用层(把五层都给实现了)
一台路由器,主要就是物理层到网络层(主要是实现了物理层,数据链路层,网络层)
一台交换机,主要就是物理层到数据链路层(主要实现了物理层,数据链路层)
ps:这里说的路由器和交换机都是传统意义上的。

物理层:

网络通信中的硬件设备~~
网线/网卡,针对硬件设备的约定,就是物理层协议所负责的范畴~,需要保证所有的主机和网络设备之间都是互相匹配的。

数据链路层:

负责完成相邻的两个设备之间的通信~~【局部】

网络层:

负责点到点之间的通信,网络中的任意节点,到任意节点之间的通信~~(不一定是相邻的,更多指的是不相邻的)
网络层就负责在这两个点之间,规划出一条合适的路线~
实际中的网络环境结构非常复杂,两个点之间的路线不只一条,就需要规划出一条最合适的路线【高德地图已经转百度地图为您导航)

传输层:

负责端到端之间的通信(起点和终点),特点是只关注结果,不关注过程(不关注数据是走那条路)
例如:
我买了一个快递,我就需要填写自己的收件人地址和收件人姓名,商家就需要根据这个地址把快递发给我~~
我和商家,都只关注结果,不关注过程~~
而快递公司,要关注中间的过程。

应用层:

和应用程序密切相关的,你传输的这个数据,是干啥用的~~~,不同的应用程序就有不同的用途

小结

例如:
我最近买了一个显示器准备外接笔记本
商家:站在传输层~考虑这个东西能不能发到我手上,签收。
快递公司:站在网络层规划路线。
快递小哥:站在数据链路层,骑着小电动把货拉到集散中心,
电动车/集装箱卡车/公路,站在物理层,提高传输的基础

上面的例子中他们都是只考虑包裹是如果传输的,并不考虑这个包裹里面是啥,更不关心包裹里面的东西是干啥用的。
但是我,作为买显示器的人,就是抱着一定的用途/目的,来买的~~(这个是程序猿最最需要打交道的事情)

🚩 网络分层中的一组重要概念~封装和分用(重点)

接下来我们看看不同的分层协议之间是如何互相配合的~~
例如:使用QQ给一个同学发生消息
用户A在键盘上,输入了一个“hello”,按下发送键~

应用层(QQ应用程序)

根据用户输入的内容,把数据构造成一个应用层的协议报文~

QQ的代码中就会根据程序猿所设计的应用层协议来构造出一个应用层的数据报文~
在这里插入图片描述
在这里插入图片描述

传输层(操作系统内核)

根据刚才从应用层传过来的数据,基于当前使用的传输层协议,来构造出一个传输层的协议报文

这里是引用
可以简单的把这个构造TCP报文的过程视为是一个字符串拼接(这里拼的是二进制数据)
TCP的数据报=TCP报头+数据载荷(Payload,也就是一个完整的应用层数据)
TCP的报头中有很多信息~~其中最重要的,就是“源端口”和“目的端口”,类似于发件人电话和收件人电话。

接下来就会把这个传输层的数据报。交给网络层~~

网络层(操作系统内核)

拿到了完整的传输层数据报,就会再根据当前使用的网络层协议(例如IP),再次进行封装~~,把TCP数据报构造成IP数据报

在这里插入图片描述
IP数据报=IP协议报头+载荷(完整的TCP/UDP的数据报)
这个报头中也有很多重要的信息,其中最重要的就是源IP和目的IP相当于发件人的地址和收件人的地址~~

紧接着,当前的网络层协议,就会把这个IP数据报,交给数据链路层~~

数据链路层(驱动程序)

在刚才的IP数据报的基础上,根据当前使用的数据链路层的协议,给构造成一个数据链路层的数据报
典型的数据链路层的协议,叫做“以太网”,就会构造成一个“以太网数据帧“

在这里插入图片描述
以太网数据帧=帧头+IP数据报+帧尾
IP协议里面写的地址,是起点和终点
以太网数据帧,帧头里写的是地址,是接下来一个相邻节点的地址
随着数据往下一个设备转发,帧头中的地址,一直在时刻发生改变

数据链路层又会把这个数据交给物理层~~

物理层(硬件设备)

做的工作,就是根据刚才的以太网数据帧(其实就是一组0 1),把这里的0 1变成高电平,通过网线传输出去 或者把这里的0
1变成高频/低频的电磁波,通过光纤/无线的方式传播出去。
到了这一步,此时数据就已经离开了当前主机,前往了下一个设备
下一个设备,可能是路由器/交换机/其他设备~~

就这样一个QQ消息就成功的从你的电脑中偷偷跑出去了~

🚩 那么他又是如何进入别人的电脑呢?别人是如何收到你的消息的?

物理层(硬件设备,网卡)

主机B的网卡感知到了一组高低电平~~然后就会把这些电平翻译成0 1的一串数据,然后这一串0 1就是一个完整的以太网数据帧
物理层就会把这个数据交给了数据链路层~

数据链路层(驱动)

在这里插入图片描述
数据链路层负责对这个数据进行解析,去掉帧头和帧尾,取出里面的IP数据报,然后交给网络协议层

网络层(操作系统)

在这里插入图片描述
网络层协议(IP协议)又会对这个数据进行解析,去掉IP协议报头,取出里面的TCP数据报
再交给传输层~~

传输层(操作系统内核)

在这里插入图片描述
传输层协议(TCP协议)又会对这个数据进行解析,去掉TCP报头,取掉里面的TCP数据报,交给应用层

应用层(应用程序,QQ)

在这里插入图片描述
应用层就会调用socket API从内核中读取到这个应用层数据报~~,再按照应用层协议进行解析
根据解析结果给显示到窗口中~

🚩 这个整体的流程非常重要!!!

咱们上面讨论的只是起点和终点的情况,A和B中间还有很多路由器和交换机呢~~
例如:刚刚用A设备上的QQ给B设备发消息
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
无论网络多么复杂,这里整体的传输过程都是类似的,只是在不停的重复封装和分用的过程~~

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaEE-图书管理系统通常需要包含以下数据库表: 1. 用户表(user):包括用户ID、用户名、密码、邮箱等字段。 2. 图书表(book):包括图书ID、图书名称、作者、出版社、ISBN号等字段。 3. 借阅记录表(borrow_record):包括借阅记录ID、用户ID、图书ID、借阅时间、归还时间等字段。 4. 管理员表(admin):包括管理员ID、管理员名称、密码等字段。 以下是JavaEE-图书管理系统数据库代码示例: ```sql -- 用户表 CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(50) NOT NULL, `password` varchar(50) NOT NULL, `email` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 图书表 CREATE TABLE `book` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, `author` varchar(50) NOT NULL, `publisher` varchar(50) NOT NULL, `isbn` varchar(20) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 借阅记录表 CREATE TABLE `borrow_record` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, `book_id` int(11) NOT NULL, `borrow_time` datetime NOT NULL, `return_time` datetime DEFAULT NULL, PRIMARY KEY (`id`), KEY `fk_user_id_idx` (`user_id`), KEY `fk_book_id_idx` (`book_id`), CONSTRAINT `fk_book_id` FOREIGN KEY (`book_id`) REFERENCES `book` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `fk_user_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 管理员表 CREATE TABLE `admin` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(50) NOT NULL, `password` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ``` -- 相关问题--: 1. 如何创建数据库表? 2. 如何在JavaEE中连接数据库? 3. 数据库中的什么是外键?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值