网络概述
概述
互联网时代,网络带给我们:
- 聊天
- 传输/共享资料
- 打游戏
- 共享屏幕
- ...
计算机网络是指将 地理位置不同 的具有独立功能的 多台计算机 及其外部设备,通过通信线路连接起来 ,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。
每一台连接到网络中设备,被称之为 “节点”。
扩展知识:
网络(Internet),它的前身是美国国防部高级研究计划局(ARPA)用于军事目的的通信网络。
20世纪60年代末,正处于冷战时期。当时美国军方为了自己的计算机网络在受到袭击时,即使部分网络被摧毁,其余部分仍能保持通信联系,便由美国国防部的高级研究计划局(ARPA)建设了一个军用网,叫做“阿帕网”(ARPAnet)。
阿帕网于1969年正式启用,当时仅连接了4台计算机,供科学家们进行计算机联网实验用。这就是因特网的前身。到70年代。ARPAnet经过独断发展,又设立了新的研究项目,最终形成“互联网”。研究人员将之简称“Internet”。这个名词就一直沿用到现在。
分类
按照网络覆盖范围进行分类:
- 局域网:覆盖范围相对较小,常见有:家庭局域网、学校局域网、公司局域网..
- 速度、安全...
- 城域网
- 广域网(互联网)
按照是否有线进行分类:
- 无线网
- 有线网
IP
IP:Internet Protocol,在计算机连接到网络之后,会随机分配一个唯一的 “身份证”/"地址"。有了 IP,两台计算机可以通过网络进行通信,一般情况下,IP 都是动态的,还有一些情况下,IP 是静态的(公网 IP)。
IP 地址版本:
- IPv4:由 4 个 8 位的二进制数来表示,如:00001010.00000000.00000000.00000001 ,由于二进制形式表示的 IP 地址非常不便记忆和处理,因此通常会将 IP 地址写成十进制的形式。11111111.11111111.11111111.11111111 255.255.255.255 单个位的范围是:0 ~ 255
- IPv6 IPv6 使用 16 个字节表示 IP 地址,它所拥有的地址容量约是 IPv4 的 8 X 1028 倍。
查看本机 ip 命令:
- Windows系统:在命令行中,输入
ipconfig
测试本机和其他计算机的联通命令:
-
ping命令,在命令行中,输入
ping IP地址/域名
在同一个网络不允许出现两个相同的 “身份证”,如果真的出现了,其中一个必然无法加入到网络。
域名
因为 IP 地址,记忆也比较繁琐,所以一般为了方便记忆一些程序所在计算机的地址,都是会将 IP 和 域名绑定,这样我们通过访问域名就可以获得对方的 IP。
通过 DNS 来解析域名(由网络运营商提供)。
目前,国内,IP 和 域名绑定后,还需要进行备案,否则后续运营商不会给你解析域名。
端口
每个程序在计算机中运行时,都需要占用一个端口。
端口号的取值范围是 0~65535,其中, 0~1023 之间的端口号用于一些知名的网络服务和应用,用户的普通应用程序需要使用 1024 以上的端口号,从而避免端口号被另外一个应用或服务所占用。
常用的端口:
- HTTP协议默认端口:80
- HTTPS协议默认端口:443
- SSH协议默认端口:22
- MySQL数据库默认端口:3306
- Tomcat服务器默认端口:8080
- Nginx服务器默认端口:80
- ....
经常出现 “端口占用” 错误。
在浏览器中,输入了一个域名,然后回车之后,到显示页面,发生了什么?
1 . 你输入了 www.baidu.com ,浏览器会将这个地址补完整:百度一下,你就知道
2 . 浏览器根据域名来查找 IP 地址
- 浏览器缓存
- 系统缓存
- 路由器缓存
- 本地 DNS 设置:hosts文件
- 网络运营商提供的 DNS 服务器
3 . 浏览器结合 IP 地址和端口定位到指定机器的指定程序
4 . 程序处理完请求后,会将结果响应回来
5 . 浏览器接收响应结果,处理并展示
C/S架构和B/S架构
C/S:Client,客户端 / Server,服务器
- QQ、迅雷、抖音 ...
- 需要下载安装才能使用,如果更新还需要重新下载(优化方式:省流更新技术)
- 有效减轻服务器的压力(胖客户端),带来更好的用户体验,受到网络影响较小
- 客户端对于计算机要求较高,画面渲染比较强
- 安全性较高
B/S:Browser,浏览器(客户端) / Server,服务器(1990年左右,诞生)
- 京东、百度、各种小程序 ...
- 不需要下载安装,只需要一个浏览器即可使用,如果更新刷新一下即可
- 服务器压力较大(瘦客户端),受到网络影响较大(优化方式:异步请求技术等)
- 客户端对于计算机要求较低,画面渲染比较差
- 安全性较差
Socket概述
socket技术(套接字编程),底层机制复杂,所以 Java 在 java.net 包下提供了一套 API,用于简化 Socket 编程。
- Socket
- ServerSocket
- DatagramPacket
- DatagramSocket
- InetAddress
- ...
传输协议
为了在网络中不同的计算机之间进行通信而建立的规则,标准或约定的集合。
- TCP协议(Transmission Control Protocol,传输控制协议)
- 面向连接的、可靠的 、基于字节流的传输通信协议
- 文件传输、聊天 ...
- 慢
- 三次握手建立连接、四次挥手断开连接
- UDP协议(User Datagram Protocol,用户数据报协议)
- 无连接的 协议,不可靠 ,在传输数据之前,客户端和服务器并不建立和维护连接
- 视频聊天、远程会议 ...
- 快
基于TCP协议开发网络程序
Socket:用于开发客户端程序
构造方法:
- Socket(String host, int port) 指定服务端程序的主机地址(IP)和端口来构建 Socket 程序
常用方法:
- getOutputStream() : OutputStream 获取输出流,输出数据
- getInputStream() : InputStream 获取输入流,读取数据
- getInetAddress() : InetAddress 获取连接的 IP 地址
- close() : void 关闭资源
ServerSocket:用于开发服务端程序
构造方法:
- ServerSocket(int port) 指定服务端程序的端口
常用方法:
- accept() : Socket 监听客户端请求,将客户端请求封装到 Socket 对象中
- close() : void 关闭资源
基于UDP协议开发网络程序
DatagramPacket:封装数据
构造方法:
- DatagramPacket(byte[] buf, int length, InetAddress address, int port)
- p1:字节数据数组
- p2:字节数据长度
- p3:接收方IP地址
- p4:接收方端口
- DatagramPacket(byte buf[], int length) 接收方数据包
常用方法:
- getData() : byte[] 获取封装的数据
- getLength() : int 获取封装数据的长度
DatagramSocket:传输数据
构造方法:
- DatagramSocket(int port) 指定运行端口
- DatagramSocket() 发送方可用
常用方法:
- send(DatagramPacket p) : void 发送封装好的数据包
- receive(DatagramPacket p) : void 接收数据到数据包
- close() : void 关闭资源
InetAddress:
- getByName(String host) : InetAddress 根据主机地址获取 InetAddress 对象