网络的发展史
- 电报时代(19世纪中叶):电报是最早的远程通信方式之一,它通过电线传输编码信息,极大地缩短了信息传递的时间
- 电话的发明(1876年):亚历山大·格拉汉姆·贝尔发明了电话,使得人们能够通过语音进行实时远程通信
- 无线电技术(20世纪初):无线电技术的发展使得信息可以通过无线电波进行传输,这为后来的无线通信技术奠定了基础
- ARPANET(1960年代):美国国防部高级研究计划局(ARPA)建立了ARPANET,这是第一个广泛使用的分组交换网络,被认为是现代互联网的前身
- TCP/IP协议(1980年代初):互联网协议(IP)和传输控制协议(TCP)的标准化,为不同网络之间的互联互通提供了基础
- 万维网(WWW,1990年代初):蒂姆·伯纳斯-李发明了万维网,并通过超文本传输协议(HTTP)和超文本标记语言(HTML)使得信息可以通过网页的形式在互联网上共享
- 互联网的商业化(1990年代中期):随着网络技术的成熟和普及,互联网开始商业化,大量的公司和个人开始使用互联网进行商务活动
- 搜索引擎的出现(1990年代末):谷歌、雅虎等搜索引擎的出现,极大地方便了用户在海量信息中寻找所需内容
- 社交媒体的兴起(2000年代初):Facebook、Twitter等社交媒体平台的出现,改变了人们的交流方式,使得信息的分享和传播更加迅速
- 移动互联网(2000年代末至今):智能手机和移动网络技术的发展,使得人们可以随时随地接入互联网,极大地扩展了网络的应用场景
- 物联网(IoT,21世纪初):物联网技术的发展,使得各种设备能够连接到互联网,实现数据的收集、交换和分析
- 5G网络(2010年代末至今):5G网络的推出,提供了更高的数据传输速率和更低的延迟,为未来的网络应用提供了更多可能性
几个关键的概念
局域网,广域网
两者之间只是一种相对的概念,没有绝对的局限,全世界最大的广域网叫做Intenet(万维网)
在用户路由器下载时,总的上传下载带宽,不能超过最顶层路由器wan口的带宽
主机
主机可以理解为用户或者商用的服务器,也就是说任意一台计算机都可以被叫做主机
交换机,路由器
交换机是一个重要的网络设备,路由器虽然有很多网口,可以让你插网线,组网,但是实际上,路由器的口可能不够用,此时就可以使用交换机,对接口进行扩展(类似于电脑的扩展坞)
交换机的特点就是口特别多,交换机对路由器的接口起到补充效果,一般家用/公司使用都是不至于的,但是确实联网设备特别多的,也是有可能会的
集线器:也可以对于端口进行扩展,现在几乎见不到了
五元组
在TCP/IP协议中,用五元组来标识⼀个⽹络通信:
- 源IP:标识源主机
- 源端⼝号:标识源主机中该次通信发送数据的进程
- ⽬的IP:标识⽬的主机
- ⽬的端⼝号:标识⽬的主机中该次通信接收数据的进程
- 协议号:标识发送进程和接收进程双⽅约定的数据格式
可以在cmd中,输⼊ netstat -ano 查看⽹络数据传输中的五元组信息:
IP地址
标识网络一个设备的位置,通过位置找到这个设备,进行进一步的通信
IP地址,其实就是32位的整数(IPv4),IP地址就是4个字节的数字,往往是使用“点分十进制”的方式来表示IP地址,使用3个,把上述ip地址分成4个部分,每个部分1个字节,每个部分表示的范围0-255
端口号
标识一个主机上不同的应用程序,要求每个程序在启动的时候,就需要关联上一个和别人不重复的端口号(也可以叫做绑定),有的时候可能会谈到有的程序是有固定端口号的,这个说法源自于一个概念“知名端口号”,上古时期,大佬们为了避免当时的一些程序,端口号之间发生冲突,就给这些知名的程序,分配了不同的端口,比如...(不包含MySQL,tomcat更不包含Java,这些都是后来的,当时人家分的时候,这几个兄弟,还没起来呢)
- http服务器:80
- ssh服务器:22
- ftp服务器:23
- https:443
这些知名的端口当时一共分了1024个,随着时间的发展,知名端口,更多的是“建议”而不是约束,你搞一个http服务器,你可以使用80,也可以使用别的,想用哪个,你自己说了算
端口号不会不够用,除非你电脑上开了几万个服务器程序,消耗掉几万个端口,正常来说不会的,这种情况恐怕内存先不够用了,IP是区分主机的,要担心够不够用,端口号,无论如何都会够用的,一个主机上有0-65535这么多端口可以用(端口号是一个2个字节的整数),而且是要求同一时刻,不能重复,A程序这会用80,过一会A结束了,继续用80,也是ok的
协议
协议,⽹络协议的简称,⽹络协议是⽹络通信(即⽹络数据传输)经过的所有⽹络设备都必须共同遵 从的⼀组约定、规则。如怎么样建⽴连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能 相互通信交流。
最终体现为在网络上传输的数据包的格式
听起来很抽象,实际上是一个比较简单朴素的概念,其实就是一种约定,通信双方,对于通信规则的约定,一定是通信双方都得认可的,有一句话叫做:三流公司做产品,一六公司做标准
听起来感觉标准和协议类似,如果深究还是有差别的,标准往往是一个认可面非常广泛的“国家标准”,“国际标准”,协议则不一定,可以是认可面非常广,也可以是认可面不广的(甚至说只有你自己用的,也是ok的)
假设我有个朋友去相亲,相约在天桥见面,这个朋友很早就过去了,发现,果然有个妹子在那里好像是等人的样子,他俩就一边走一边聊,聊着聊着,聊了半天了,他突然感觉不对劲,你是王阿姨介绍的xxx嘛?人家说我不是啊,人家妹子问你是李阿姨介绍的xxx嘛??他说我也不是啊,这个兄弟直接抛下这个妹子,折回去找之前约好的妹子,等他溜回去之后,发现人家之前的早都不见了
假设,如果在见面之前,做好更充分的约定,就可以很好的避免上述问题,举个例子,约定见面的时候,妹子穿一个红色的裙子,男生胸前插个玫瑰花~~(通信双方都认可的一套规则,这样的规则,就可以称为是协议,即使这个协议,知识两个人之间的)
进行网络通信的时候,一定是需要通信协议的,主要是,两个用来通信的主机设备,不同的硬件,不同的操作系统,不同的应用程序,即使上述内容不同,通信也能够进行正常进行
协议分层
网络通信,是一个非常复杂的事情,这个过程中涉及到很多的细节问题,如果你使用一个协议来约定上述所有的细节,这个协议就会非常庞大,非常复杂;此时就可以把一个功能复杂的协议,拆分成多个功能更单一的协议了
确实是拆分了,但是拆出来的协议太多了,于是,就要对这些协议进行分类,甚至要进行“分层”(某个方法,非常复杂了,就可以拆分成多个方法,某个类,非常复杂了,拆分成多个类,某个文件,非常复杂了,拆分成多个文件),拆分是为了管理复杂程度,不让这个东西太复杂,每个部分负责一个功能,可以举一个例子来理解
小公司,没有复杂的组织架构,老板和大家都坐在一起,你有啥问题,都是直接和老板汇报,老板有啥活,也是直接给你安排;大公司,会对整个公司进行分组,每个组负责一部分工作,组和组之间要解耦合,每个组都会有组长,组员,把工作结果汇报给组长,组长再汇报给老板,如果组又进一步的多了,还要划分成部门
协议分层,也就是上述类似的效果,把很多协议按照功能分成不同的层级,每个层级都有对应的主线任务(目标/要解决的问题),上层协议会调用下层协议的功能,下层协议会给上层协议提供服务,不能够越级调用
协议分层的优势,主要是两个方面
封装的效果:某一层协议,不必知道其他层协议的细节,降低学习使用成本,只要会说汉语,不需要理解电话的工作原理,就能打电话,设计电话的人,可能是老外,不必懂汉语,也不妨碍他设计开发电话
任意层次的协议,都是可以灵活替换的(解耦合)
站在使用者的角度,完全感知不到任何区别,电话该咋打,还是咋打,语言协议变了,即使语言变了,电话这一层,没有任何影响,设计电话的人不需要针对“英语”做任何的改变和特殊处理
下一篇博客介绍TCP/IP五层(或四层)协议