第一章 基本概念【为什么学网络协议 | C和Java跨平台原理区别 | 客户端VS服务器 | 协议 | 请求过程】

互联网

互联网的出现,彻底改变人们的生活方式,足不出户就可以购物、聊天、看电影、买车票、上班等;互联网就是几台电脑之间可以相互通讯起来?通过互联网,互联网是一朵云吗?计算机通过互联网给其他计算机,但真正的互联网远比这复杂,如果一台计算机要发送给其他计算机需要经过一系统的设备,例如交换机、路由器等等

  • 思考:数据是如何从一个设备传递到另一个设备的?
  • 这一切都是网络协议来规定的,没有网络协议,就没有今天的互联网

为什么要学习网络协议

互联网、移动互联网、物联网,都离不开网络协议

  • 最熟悉的网络协议HTTP
  • 为了满足各种需求,有各种各样的协议:HTTP、STMP、MQTT、RTMP等
  • 为什么有这么多网络协议?
  • 因为我们在特定的场合用特定的协议会事半功倍,我们也可以用HTTP,只不过效果并不是特别好
  • 你可以理解成每一种网络协议的应用场景都不太一样,比如这一个设备是我,这是另一个设备是你,我向你索要一张图片,这样简单的需求只需要HTTP就可以解决,但如果是别的需求,你有各种资源和文件,我索要你一些文件并且要下载,并且我也会上传一些文件,并且允许我删掉你的一些文件和重命名,这个时候采取HTTP就不太合适,这个时候就需要FTP协议
  • 学习网络协议可以知道很多协议大同小异,

随着物联网、音视频、直播等领域的发展,企业提高对开发人员网络基本功的要求,经常问网络协议的面试题

  • TCP和UDP的区别?说一下它们的报文格式?
  • TCP的流量控制和拥塞控制?TCP如何实现可靠性传输?
  • 为什么连接是3次握手,关闭时4次握手
  • 7层模型与4层模型的区别?5层模型?每一层的区别是什么?
  • 交换机与路由器的区别?

作为IT行业人士开发人员都需要知道,但是你可能会想,我又不是网管,我为什么要知道这些东西呢?你不要以为这些只需要网络工程师才需要知道,但其实作为网络开发人员,你知道这些东西能够更好的编程,比如,爬虫,遇到了一些问题,你就知道哪里出现了问题,cookie没有,登录没有上去,等等,网络环境优化,不懂网络底层怎么优化?开发的过程中会不停的发送网络请求,你可以经常会调用一些第三方库,比如IOS,以前有一个很火的框架AFN,底层是怎么工作的?牵扯到更多的网络配置是怎么回事?或许你是安卓,OKHTTP3,这个的底层是这样的,怎么配置的?这些都和网络协议息息相关的

学习中需要搭建的环境

不管你是前端开发,还是移动开发,课程理论多,但是为了偏实战,所以多搭建一些实战,首先是一个客户端到服务器的开发环境,你可以大概知道公司的服务器开发大概写的什么代码,大概会返回什么东西给你,大概怎么操作的

  • 客户端-服务器开发环境
    • 客户端:浏览器(HTML+CSS+JS)
    • 服务器:Java
  • 网络抓包
    • 浏览器(Chrome、Firefox)、Fiddler(charles类似)、Wireshark
  • 模拟工具(模拟网络环境的)
    • Xshell、Packet Tracer、GNS3(如果不是考CCNA华为工程师或计算机考研这两个东西不需要学的很精)

说明Java特点的一些前言


现在开发来说有安卓开发、IOS开发、前端开发、服务器开发
移动开发、前端开发、嵌入式开发(开发机器人)都可以跟服务器进行交互
一般来说服务器这边叫做服务器开发,上面的统一叫做客户端开发
客户端经常和服务器沟通,中间的这些交互就是网络协议,怎么来怎么过去,在后面都是需要进行详细分析的,但是现在我们首先先搭建一些真实的网络环境
因为我们自己搭建的服务器环境的话,我们可以自己去发送数据,我们抓包也可以观察到底是什么样子的格式,所以必须是自己搭建。
客户端前端开发,直接搞浏览器,直接用浏览器
而后台开发可以用很多语言,这里采取的是Java,Java开发后台效率比较高,并且现在市场需求量最大的就是Java了
如何搭建?我们需要了解:Java语言的特点,搭环境为什么这么干

  • 为什么go很火,不用go,用java?
  • 因为java已经诞生很多年了,生态圈非常成熟,go虽然很优秀但是一些功能还需要自己去造轮子,而java全都有了,所以就算很火,在短时间不可能打败java

再说Java语言的特点之前,我们要先了解一下C和C++的特点

C\C++的跨平台原理

  • C\C++能跨平台,是怎么跨平台?
int main() {
	.....
	return 0
|

假设上面是一个C\C++语言程序,写了很多代码,这个代码计算机是不认识的,需要进行编译,编译成0101二进制的机器指令,如果我们编写了C\C++代码,如果要把C\C++(语言程序)运行到windows、Mac、Linux,如果写一份代码,写同样一份C\C++代码能不能跑这三个平台?如果一份代码可以跑多个平台且这个效果是一样的,那么我们称之为具备跨平台。
那C\C++的跨平台原理是什么?
在这里插入图片描述

C\C++是根据不同的平台编译成不同的文件,如果我想把这段代码运行到Mac系统,就编译成Mach-O格式,这个格式才能运行到Mac,如果是想跑到Windows平台,则会编译成PE格式(Portable Executable,可移植的可执行文件),这样就可以跑到Windows平台了,如果是Linux平台,则又会重新编译成ELF格式

C的跨平台的特点

  • 但是有一个问题:编译多次;如果要跑windows,就编译一次,然后如果又要跑到Mac系统的话,这个时候就需要重新编译一次了,比较麻烦
  • C\C++的跨平台:使用平台相关的编译器生成对应平台的可执行文件,这个是它跨平台的原理

Java的跨平台原理

java也可以跨平台

public class main {
	public static void main(String[] args) {
		....
	}
}

如果我们编译了一大堆java代码,假设是上面那样;什么是跨平台:写同样一份代码可以运行到多个平台,java可以吗?可以,怎么跨和C\C++不一样,只需要编译一次,但是这个编译的文件不是可执行文件,C\C++编译之后可以直接生产平台对于的可执行文件
在这里插入图片描述

但是Java编译之后形成的是字节码文件,不是可执行文件,平台不能直接加载这个文件,这个还不完全是0101的机器指令,这个时候各个平台上都需要安装一个软件并且启动,这个软件就是JVM(java Virtual Machine java虚拟机),你可以理解它是一个程序一个软件,先打开,有什么用??????
编译完字节码文件后,如果Mac上启动了JVM,这个时候则会加载这个字节码文件(字节码不是由操作系统直接加载的,而是JVM,就好比如播放视频我们要打开一个播放器软件,再由播放器软件去加载这个视频文件),JVM解析字节码内容,紧接着翻译成机器指令,也就是010101,也就是说用java编写的代码如果要变成机器指令,它的过程是通过JVM这个阶段完成的

Java的跨平台的特点

  • JVM(Java Virtual Machine):Java虚拟机
  • 一次编译,到处运行
  • 如果代码有语法错误,将会编译失败,不会生成字节码文件
  • 就不会去运行JVM程序,最后导致Java程序运行失败

这个是Java跨平台,和C\C++跨平台完全不一样?

JVM是由谁提供的?

你可以理解为是Oracle公司提供,Java官方最开始是Sun公司,但是在2009年的时候被Oracle用74亿美元收购了,所以现在Java官方是Oracle,在官网会提供一个JDK的东西,里面有一个东西就是JRE,什么意思,就是Java Runtime Envir… Java运行环境,JRE就是必要的运行环境,有了JDK就有了JRE,有了JRE就有了JVM

和Java类似的跨平台原理

你有没有觉得Java的跨平台和什么语言很像?跟解释性语言很像,如Python、Js等,为什么?

在这里插入图片描述

  • 拿Js来说,一般浅一些来说就是浏览器,如果收到一个v8,深一点就是v8,浅一点就是浏览器

js如果想跑到不同操作系统可不可以?可以,它不用编译,直接在不同的操作系统的里面运行浏览器,编译都不需要,Js本来是怎样就怎样,浏览器直接加载和识别Js,浏览器解析完Js代码后一样也是换算成0101的机器指令,比如Js里做了一个加法,var age = 1 + num,浏览器会这样做,最后都会变成机器指令,只不过不同编程语言过程大同小异,但最后都会变成机器指令




关于学习网络协议前需要装的一些环境而需要安装的工具、软件

  1. 我们需要安装一个JDK,企业用的最多的是JDK8
  2. 免费服务器软件Tomcat
  3. IDEA专业版

关于以上的三个东西需要自己找链接学习然后安装,这里不详细笔记,有推荐链接如下:

  • JDK:https://www.oracle.com/java/technologies/downloads/#java8-windows
    WINJDK下载,之后安装即可,环境配置可以看第二章 集线器_网桥_交换机 配置,只需要配置JAVA_HOME和Path
  • Tomcat:https://www.bilibili.com/video/BV16T4y1U7hs?p=1&vd_source=fa78367be70939cf9bced395d2f58775
    第二章 集线器_网桥_交换机 有较为详细的整理笔记,有关于环境的搭配
  • IDEA专业版破解下载教程和资源:
    破解IDEA视频教程:https://www.bilibili.com/video/BV1Dv4y1Y7aF/?spm_id_from=333.880.my_history.page.click&vd_source=fa78367be70939cf9bced395d2f58775
    破解下载链接:https://pan.baidu.com/s/1AJVZRkc9rBnhJzHtzrOBSQ
    提取码:rqfj



客户端VS服务器

发送和接收的原理讲解
在这里插入图片描述

  1. 今天搞得环境很特殊,如果只是java环境就只需要安装一个jdk,但是这个是服务器环境;不管是客户端还是服务器,大家都是计算机,只不过对于服务器来说,它的各种配置和用的客户端不太一样,比如客户端打游戏的话,对显卡的要求就高,但是服务器完全没要求,有个基本图形界面就行,但它要求cpu、内存、硬盘、散热等各种要求比较高,服务器其实就是计算机,我们客户端不是通过互联网去发起给服务器吗?但是未来我们有很多计算机都发送给服务器,那服务器是怎么去接收别的机器发给它的东西的呢?你需要知道一个东西,叫做端口号(如上图),你可以理解成平时去中国银行营业厅的办事窗口,这个服务器这边就可以搞很多的端口,比如80端口,再搞一个3306,或者在搞一个8080,端口是干什么的?是提供服务的,什么服务?网络服务、数据服务,比如你的客户端要发起给一个服务器,那你可以发送给这个服务器的一个端口, 这个端口是用来监听你发了什么东西给它的,你可以理解它有监听作用,这个服务器可以监听80端口有没有别人发的东西,同时监听三个端口,比如挑80端口扔一些数据,那服务器怎么拿到这些东西呢??得有一些软件去拿到这些东西,得在80端口运行一个软件去监听扔来的东西,软件有代码去处理这些数据,这个软件一般叫做服务器软件,就是用来监听服务的,用来监听客户端发送的数据的,要装一个服务器软件,服务器软件的作用就是占用某一个端口,然后监听某一个端口的网络数据的流通,所以客户端想往80端口发数据,发了之后,服务器软件会识别到有人往80端口扔数据了,这个时候它就会拿到,拿到后就会解析执行一些代码,执行java开发人员代码,服务器软件有一个作用,执行我们编写的java代码,我们java代码会对我们客户端发送过来的数据做一个处理,比如查数据库,肯定会返回数据给他,也是通过服务器软件,通过80端口,把数据输送回去,中间的过程比较复杂,牵扯到网卡接口等等,先从应用层去理解,基本上每一个人端口都要搞一个服务器软件,大致是一个这样的过程,如果我们要搭建一个服务器环境,我们要占用一个端口,然后运行一个服务器软件,然后用来处理客户端发送过的数据,然后做一个响应。

  1. 假设有一台服务器,开放端口为80,如果服务器端有多个程序要,如果服务器很好,服务器软件也能撑住,且这几个程序也不大,那么服务器如何区分这些程序的,其实靠的是部署java的项目,根据端口来的数据程序来部署java项目

服务器简介:
在这里插入图片描述

什么是协议

  • 协议就是互相的约束,比如租房协议,约束双方,节约沟通成本
  • 但每个人拿到的租房协议是不一样的,不只是价格和房子,格式也不一样
  • 协议不一样有什么麻烦的事情?需要阅读,很麻烦

如果租房协议有一个国家标准,会是怎样?

  • 减少沟通成本
  • 很省事

而网络协议就是规定网络双方两个节点怎么沟通的,客户端能给服务器发什么,服务器能给客户端发什么
世界上有很多的客户端和服务器,各种开发商和服务器软件,怎么约束它们的发送格式?如果没有东西约束发送的话,会发生什么?这个时候就无法沟通
网络协议的重要性:约束双方

国际标准组织,制定标准:HTTP协议访问网页

  • 为了更好的促进互联网络的研究的发展,国际标准化组织ISO在1985年制定了网络互联模型
  • OSI参考模型(Open System Interconnect Reference Mondel ),具有7层结构
  • 制作标准的人太过理论了,没有实战
  • 这个时候实际应用中得到认可的网络模型已经有了:TCP/IP协议模型
  • 下面左边是国际标准,右边是实际当中走的
    在这里插入图片描述

请求过程

假设走HTTP协议,这个5是代表发送服务器的数据,比如说是你好,应用层拿到你好,运输层会在你好这个数据的基础上拼接一些东西,再传给下一层,然后又拼接一些东西又传给下一层,然后在数据链路层拼接,最后在物理层,拼接完后,就只需要通过一些介质,比如无线网,WIFI传给这台服务器,服务器拿到这太数据后,先物理层,然后一层一层的往上传,然后拆,一直到应用层,就拿到了你好,这个应用层就可以里理解成给了Tomcat
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值