一、前言
本系列文章旨在温习核算机网络中心常识,进一步夯实根底,为以后 参与物联网、音视频、直播、即时通讯等范畴的项目做一定的常识储藏。
文章列表:
- 01-核算机网络中心常识|核算机网络通识【核算机网络性能指标、网络协议分层的几种办法、OSI七层模型概念通识】
- 02-核算机网络中心常识|【树立调试环境、新建Java项目、核算机通讯根底、核算机衔接办法、集线器/网桥/交换机/路由器】
- 03-核算机网络中心常识|【MAC地址、IP地址的组成、IP地址的分类、CIDR、子网掩码、超网】
- 04-核算机网络中心常识|【 静态路由、动态路由、数据包的传输、ISP、服务器机房、网络分类、家用无线路由器、公网IP、
- 05-核算机网络中心常识|物理层/数据链路层【模仿信号&&数字信号、数据链路层】
- 06-核算机网络中心常识|网络层【IP数据包Packet、网络协议、Checksum、源IP地址和方针IP地址、ping】
- 07-核算机网络协议中心常识|【传输层-UDP】
- 08-核算机网络协议中心常识|【传输层-TCP之牢靠传输】
- 09-核算机网络中心常识|传输层TCP2【流量操控原理、拥塞操控:slow start、congestion avoidance、快速重传、快速康复】
- 10-核算机网络协议中心常识|【传输层-TCP衔接】
- 11-核算机网络协议中心常识|【 应用层】
- 12-核算机网络中心常识|【Cookie、Session(概念、生命周期、有效期、浏览器的要求等)、跨域(概念、 同源战略、跨域处理方
- 13-核算机网络协议中心常识|【 代理/CDN/网络安全】
- 14-核算机网络协议中心常识|【(非)对称加密/数字签名/证书】
- 15-核算机网络协议中心常识|【HTTPS】
- 16-核算机网络中心常识|HTTPS协议【HTTP2、HTTP3】
本文假定你具有
HTML+CSS+JS+Java
根底(知道根本语法及怎么运用即可)。
二、树立调试环境
要想真实了解网络之间数据怎么传输?协议的约束条件?就需求一套能够发起网络恳求和处理恳求的环境。
1. 客户端
运用浏览器即可(会根本的HTML+CSS+JS即可)。
2. 服务端
以Java为例。
2.1 必装东西
- JDK:www.oracle.com/java/techno…
- Tomcat:tomcat.apache.org/
- Intellij IDEA Ultimate:www.jetbrains.com/idea/downlo…
运转Tomcat
Windows:
/tomcat-package/bin/startup.bat
Mac或Linux:
/tomcat-package/bin/startup.sh
2.2 Java的跨渠道原理
JVM(Java Virtual Machine):Java虚拟机。
Java跨渠道:一次编译,处处运转。
- 编译生成和渠道无关的字节码文件(
class
文件) - 由对应渠道的JVM解析字节码为机器指令(010101)
- 假如代码有语法过错,将编译失利,并不会生成字节码文件(失利后不会运转JVM程序,终究导致Java程序运转失利)
2.3 C/C++的跨渠道原理
C/C++的跨渠道:运用渠道相关的编译器生成对应渠道的可执行文件。
扩展:C++的是C Plus Plus的简写。
2.4 客户端和服务器交互
客户端发送网络恳求给服务器,服务器运用Tomcat软件监听客户端发送的恳求(含端口号),然后执行对应的Java代码把成果返给客户端。而字节码文件需求JVM运转环境才干正常运转(Tomcat自身也是Java编写的)。
3. 网络抓包东西
浏览器(Chrome、Firefox)、Fiddler、Wireshark、Charles
4. 模仿网络东西
用来模仿网络环境(交换机、路由器之间的切换)。
Xshell(只有Windows版别)、Packet Tracer(注册地址)、GNS3
三、新建Java项目并布置
咱们自己树立一个简略的登录页面和服务,以此了解客户端和服务端之间的数据交互流程。
提示:途径、类名、资源名尽量不要呈现中文或者特殊字符。
1. 服务端(Java)
- 新建空项目
- 工程命名(工程名其实便是工程根目录文件夹称号)
- 新建模块(一个工程是由多个模块组成的)
- 在刚刚创立的模块src下新建一个java类(src是寄存模块代码的)
- 运转
上面的装备只是单机运转,并没有任何客户端交互,咱们能够树立一个JavaWeb服务器让HTML页面和服务器进行交互。
2. JavaWeb
- 增加Web结构支持,完成后会在模块中呈现一个web文件夹
- 新建一个测试网页
要想经过浏览器直接拜访网页,需求发动Tomcat并把项目布置到上面。
3. 发动tomcat
尽管能够直接在外面发动tomcat,但不是很方便。咱们能够把tomcat集成到IDEA中,跟从项目发动和布置非常便捷。
- 编辑装备
- 增加tomcat服务
- 装备tomcat
- 运转(运用debug)
4. 拜访资源
- 运转成功后IDEA会自动打开网址
http://localhost:8080/hello/
,hello
便是方才上面装备的途径,默认拜访index.htm/index.html/index.jsp
其中一个。
也能够指定要拜访的完好资源名。例如拜访test.html
:
- 假如web文件夹有变更,变更后不需求重启服务,只需求重新布置即可。
主张到装备文件中修该按钮默认事情为布置:
5. 登录
简略的登录界面:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录</title>
</head>
<body>
<form action="/hello">
<div>用户名<input name="username"></div>
<div>暗码<input name="password"></div>
<button type="submit">登录</button>
</form>
</body>
</html>
信息提交给服务器后,服务器怎么处理呢?需求运用servlet
,而tomcat有对应的库:jsp-api
和servlet-api
,把这两个库加入到项目中即可。
action后边直接拼接途径,便是依据项目地点服务器找对应资源。
6. servlet装备
由于现已在IDEA中集成了tomcat,只需求把tomcat的库增加到项目依靠。
6.1. 创立恳求类
package com.idbeny.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/*
* 处理登录恳求
* 1.承继HttpServlet(处理HTTP恳求)
* 2.运用WebServlet(处理的恳求途径)
*/
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
/**
* @param HttpServletRequest req 恳求:用来获取客户端发送的数据
* @param HttpServletResponse resp 呼应:用来给客户端返回数据
*/
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 1.获取客户端发送的数据(恳求参数)
String username = req.getParameter("username");
String password = req.getParameter("password");
// 2.登录事务判别
if ("idbeny".equals(username) && "123456".equals(password)) {
// 登录成功
resp.getWriter().write("Login Success");
} else {
// 登录失利
resp.getWriter().write("Login Failure");
}
}
}
- 修正
login.html
中的action
:action="/hello/login"
- 重新布置后并提交表单后输出
doGet
,而且页面地址显现http://localhost:8080/hello/login?username=idbeny&password=123456
,内容显现Login Success
。 - 修正
method="post"
,重新布置后并提交表单后输出doPost
,而且页面地址显现http://localhost:8080/hello/login
,页面内容显现Login Success
。表单参数能够经过浏览器的开发者东西看到。
Java中的包类似于C++中的命名空间。
四、核算机之间通讯根底
核算机通讯需求得知对方的IP地址,但终究是依据MAC地址(网卡地址),运送数据到网卡,被网卡接纳。
- 假如网卡发现数据的方针MAC地址是自己,就会将数据传递给上一层进行处理(例如Java虚拟机)
- 假如网卡发现数据的方针MAC地址不是自己,就会将数据丢掉,不会传递给上一层进行处理
五、核算机之间的衔接办法
能够经过Cisco Packet Tracer模仿网络衔接。
1. 网线直连
两台核算机之间最简略的衔接办法便是网线直连(穿插线)。
模仿通讯的时分,会运用到ICMP、ARP
协议。ping
运用的是ICMP
协议,ARP
协议其实便是一个播送(ARP
是有缓存的),让同一个网段中的指定IP呼应当时核算机的网卡地址(播送找MAC地址)。
2. 同轴电缆
很早之前用的是半双工通讯办法,特色是非常容易抵触(抵触域),不安全,只需断了全域瘫痪。由于一台设备在发送数据的时分,另一台设备只能接纳数据,不能发送数据。现在根本上都是全双工通讯,在接纳数据的一起也能够发送数据。
3. 集线器(Hub)
选用的也是半双工通讯,所以特色和同轴电缆一样,但仅仅比同轴电缆多一个优点:假如一台设备呈现问题不会影响其他设备。
经过模仿通讯看到,核算机0给核算机2发送数据的步骤如下:
- 核算机0发送数据给核算机2
- 首要发送ARP给集线器0,由集线器0转送ARP给衔接设备(核算机1和核算机2),找寻IP对应的MAC地址
- 核算机1发现不是自己,就丢掉
- 核算机2发现要找的是自己(经过IP识别),然后把MAC地址等信息经过ARP发送给集线器0
- 集线器0又把数据转送给了其他的衔接设备(核算机0和核算机1),
- 核算机0接纳到数据后(MAC地址)开始运用ICMP传输
- 核算机1发现不是自己的数据,就丢掉
- 重复…
总结: 集线器和同轴电缆都是没有智商的,只需有设备发数据,就把数据转给其他一切已衔接设备,设备越多功率越低。
4. 网桥(Bridge)
网桥衔接的是同一个网段的核算机。
网桥能够经过自学习得知每个接口那侧的MAC地址,然后起到阻隔抵触域的效果(变成两个抵触域)
- 核算机0发送数据给核算机4,ARP结束后网桥0就会记载核算机0和核算机4的MAC地址,下次假如网桥左面的设备发送数据给核算机0时,网桥就会优先找右边的设备
- 假如核算机0发送给核算机1,由于集线器没有智商,也会发送给网桥0。网桥记载核算机0的MAC地址,并持续向下转发。下次网桥左面的设备发送数据给核算机1时,集线器0把数据转发给网桥0时,网桥发现现已记载的MAC地址对应的设备在左侧,就不会持续向下转发数据
5. 交换机(Switch)
网桥尽管处理了阻隔抵触域的问题。但同一个抵触域,仍是不能互相一起收发数据。交换机的呈现处理了该问题。
- 交换机相当于集线器和网桥的调集
- 全双工通讯
- 比集线器安全(不会由于抓包而拦截数据)
首次发送数据时,仍是会ARP播送一切设备,由于此刻交换机还不知道源和方针的MAC地址。
考虑:全球一切的设备都用交换机衔接会是什么情况?
意味着都在同一个网段。首要产生的第一个问题便是IP地址不够用,其次假如运用ARP时,全球一切的设备都会收到该音讯(播送风暴)。路由器的呈现便是处理这个问题的。
6. 路由器(Router)
网线直连、同轴电缆、集线器、网桥、交换机的一起特色:
- 衔接的设备必须在同一个网段
- 衔接的设备处在同一个播送域
路由器的特色:
- 能够在不同网段之间转发数据
- 阻隔播送域
主机发数据之前,首要会判别方针主机的IP地址和它是否在同一个网段:
- 在同一个网段 经过交换机/集线器传递数据
- 不在同一个网段 经过路由器转发数据(网关)
交换机0和交换机1处于不同的网段,要想让不同网段之间通讯,就需求在两个交换机之间增加一个路由器。
- 核算机4发送数据给核算机7时,先把发送ARP找到对应IP地址/网关
- 网关把数据转发给另一个网关(核算机7IP段的网关),找到核算机7后,再反向把MAC地址给到核算机4,此刻即可开始数据传输
路由器是处理不同网段之间通讯的,不要试图在同一个网段运用路由器(应该运用交换机)。
专题系列文章
1. 前常识
- 01-探求iOS底层原理|总述
- 02-探求iOS底层原理|编译器LLVM项目【Clang、SwiftC、优化器、LLVM】
- 03-探求iOS底层原理|LLDB
- 04-探求iOS底层原理|ARM64汇编
2. 根据OC言语探求iOS底层原理
- 05-探求iOS底层原理|OC的实质
- 06-探求iOS底层原理|OC目标的实质
- 07-探求iOS底层原理|几种OC目标【实例目标、类目标、元类】、目标的isa指针、superclass、目标的办法调用、Class的底层实质
- 08-探求iOS底层原理|Category底层结构、App发动时Class与Category装载过程、load 和 initialize 执行、相关目标
- 09-探求iOS底层原理|KVO
- 10-探求iOS底层原理|KVC
- 11-探求iOS底层原理|探求Block的实质|【Block的数据类型(实质)与内存布局、变量捕获、Block的品种、内存办理、Block的修饰符、循环引证】
- 12-探求iOS底层原理|Runtime1【isa详解、class的结构、办法缓存cache_t】
- 13-探求iOS底层原理|Runtime2【音讯处理(发送、转发)&&动态办法解析、super的实质】
- 14-探求iOS底层原理|Runtime3【Runtime的相关应用】
- 15-探求iOS底层原理|RunLoop【两种RunloopMode、RunLoopMode中的Source0、Source1、Timer、Observer】
- 16-探求iOS底层原理|RunLoop的应用
- 17-探求iOS底层原理|多线程技能的底层原理【GCD源码剖析1:主行列、串行行列&&并行行列、全局并发行列】
- 18-探求iOS底层原理|多线程技能【GCD源码剖析1:dispatch_get_global_queue与dispatch_(a)sync、单例、线程死锁】
- 19-探求iOS底层原理|多线程技能【GCD源码剖析2:栅栏函数dispatch_barrier_(a)sync、信号量dispatch_semaphore】
- 20-探求iOS底层原理|多线程技能【GCD源码剖析3:线程调度组dispatch_group、事情源dispatch Source】
- 21-探求iOS底层原理|多线程技能【线程锁:自旋锁、互斥锁、递归锁】
- 22-探求iOS底层原理|多线程技能【原子锁atomic、gcd Timer、NSTimer、CADisplayLink】
- 23-探求iOS底层原理|内存办理【Mach-O文件、Tagged Pointer、目标的内存办理、copy、引证计数、weak指针、autorelease
3. 根据Swift言语探求iOS底层原理
关于函数
、枚举
、可选项
、结构体
、类
、闭包
、特点
、办法
、swift多态原理
、String
、Array
、Dictionary
、引证计数
、MetaData
等Swift根本语法和相关的底层原理文章有如下几篇:
- 01-Swift5常用中心语法|了解Swift【Swift简介、Swift的版别、Swift编译原理】
- 02-Swift5常用中心语法|根底语法【Playground、常量与变量、常见数据类型、字面量、元组、流程操控、函数、枚举、可选项、guard语句、区间】
- 03-Swift5常用中心语法|面向目标【闭包、结构体、类、枚举】
- 04-Swift5常用中心语法|面向目标【特点、inout、类型特点、单例形式、办法、下标、承继、初始化】
- 05-Swift5常用中心语法|高档语法【可选链、协议、过错处理、泛型、String与Array、高档运算符、扩展、拜访操控、内存办理、字面量、形式匹配】
- 06-Swift5常用中心语法|编程范式与Swift源码【从OC到Swift、函数式编程、面向协议编程、呼应式编程、Swift源码剖析】
4. C++中心语法
- 01-C++中心语法|C++概述【C++简介、C++来源、可移植性和标准、为什么C++会成功、从一个简略的程序开始认识C++】
- 02-C++中心语法|C++对C的扩展【::效果域运算符、姓名操控、struct类型加强、C/C++中的const、引证(reference)、函数】
- 03-C++中心语法|面向目标1【 C++编程标准、类和目标、面向目标程序设计事例、目标的结构和析构、C++面向目标模型初探】
- 04-C++中心语法|面向目标2【友元、内部类与局部类、强化训练(数组类封装)、运算符重载、仿函数、模板、类型转换、 C++标准、过错&&异常、智能指针】
- 05-C++中心语法|面向目标3【 承继和派生、多态、静态成员、const成员、引证类型成员、VS的内存窗口】
5. Vue全家桶
- 01-Vue全家桶中心常识|Vue根底【Vue概述、Vue根本运用、Vue模板语法、根底事例、Vue常用特性、综合事例】
- 02-Vue全家桶中心常识|Vue常用特性【表单操作、自定义指令、核算特点、侦听器、过滤器、生命周期、综合事例】
- 03-Vue全家桶中心常识|组件化开发【组件化开发思维、组件注册、Vue调试东西用法、组件间数据交互、组件插槽、根据组件的
- 04-Vue全家桶中心常识|多线程与网络【前后端交互形式、promise用法、fetch、axios、综合事例】
- 05-Vue全家桶中心常识|Vue Router【根本运用、嵌套路由、动态路由匹配、命名路由、编程式导航、根据vue-router的事例】
- 06-Vue全家桶中心常识|前端工程化【模块化相关标准、webpack、Vue 单文件组件、Vue 脚手架、Element-UI 的根本运用】
- 07-Vue全家桶中心常识|Vuex【Vuex的根本运用、Vuex中的中心特性、vuex事例】
6. 音视频技能中心常识
- 01-音视频技能中心常识|了解音频技能【移动通讯技能的发展、声响的实质、深化了解音频】
- 02-音视频技能中心常识|树立开发环境【FFmpeg与Qt、Windows开发环境树立、Mac开发环境树立、Qt开发根底】
- 03-音视频技能中心常识|Qt开发根底【
.pro
文件的装备、Qt控件根底、信号与槽】 - 04-音视频技能中心常识|音频录制【命令行、C++编程】
- 05-音视频技能中心常识|音频播映【播映PCM、WAV、PCM转WAV、PCM转WAV、播映WAV】
- 06-音视频技能中心常识|音频重采样【音频重采样简介、用命令行进行重采样、经过编程重采样】
- 07-音视频技能中心常识|AAC编码【AAC编码器解码器、编译FFmpeg、AAC编码实战、AAC解码实战】
- 08-音视频技能中心常识|成像技能【重识图片、详解YUV、视频录制、显现BMP图片、显现YUV图片】
- 09-音视频技能中心常识|视频编码解码【了解H.264编码、H.264编码、H.264编码解码】
- 10-音视频技能中心常识|RTMP服务器树立【流媒体、服务器环境】
7. 核算机网络中心常识
- 01-核算机网络中心常识|核算机网络通识【核算机网络性能指标、网络协议分层的几种办法、OSI七层模型概念通识】
- 02-核算机网络中心常识|【树立调试环境、新建Java项目、核算机通讯根底、核算机衔接办法、集线器/网桥/交换机/路由器】
- 03-核算机网络中心常识|【MAC地址、IP地址的组成、IP地址的分类、CIDR、子网掩码、超网】
- 04-核算机网络中心常识|【 静态路由、动态路由、数据包的传输、ISP、服务器机房、网络分类、家用无线路由器、公网IP、
- 05-核算机网络中心常识|物理层/数据链路层【模仿信号&&数字信号、数据链路层】
- 06-核算机网络中心常识|网络层【IP数据包Packet、网络协议、Checksum、源IP地址和方针IP地址、ping】
- 07-核算机网络协议中心常识|【传输层-UDP】
- 08-核算机网络协议中心常识|【传输层-TCP之牢靠传输】
- 09-核算机网络中心常识|传输层TCP2【流量操控原理、拥塞操控:slow start、congestion avoidance、快速重传、快速康复】
- 10-核算机网络协议中心常识|【传输层-TCP衔接】
- 11-核算机网络协议中心常识|【 应用层】
- 12-核算机网络中心常识|【Cookie、Session(概念、生命周期、有效期、浏览器的要求等)、跨域(概念、 同源战略、跨域处理方
- 13-核算机网络协议中心常识|【 代理/CDN/网络安全】
- 14-核算机网络协议中心常识|【(非)对称加密/数字签名/证书】
- 15-核算机网络协议中心常识|【HTTPS】
- 16-核算机网络中心常识|HTTPS协议【HTTP2、HTTP3】
其它底层原理专题
1. 底层原理相关专题
- 01-核算机原理|核算机图形烘托原理这篇文章
- 02-核算机原理|移动终端屏幕成像与卡顿
2. iOS相关专题
- 01-iOS底层原理|iOS的各个烘托结构以及iOS图层烘托原理
- 02-iOS底层原理|iOS动画烘托原理
- 03-iOS底层原理|iOS OffScreen Rendering 离屏烘托原理
- 04-iOS底层原理|因CPU、GPU资源消耗导致卡顿的原因和处理计划
3. webApp相关专题
- 01-Web和类RN大前端的烘托原理
4. 跨渠道开发计划相关专题
- 01-Flutter页面烘托原理
5. 阶段性总结:Native、WebApp、跨渠道开发三种计划性能比较
- 01-Native、WebApp、跨渠道开发三种计划性能比较
6. Android、HarmonyOS页面烘托专题
- 01-Android页面烘托原理
- 02-HarmonyOS页面烘托原理 (
待输出
)
7. 小程序页面烘托专题
- 01-小程序结构烘托原理