为了保持学习网络编程的连贯性和系统性,我在以前已经更新了《学网络编程前的计算机知识普及》和《如何进行网络通讯》,我只能说写的确实很详细,能让你全盘吸取,不过你要没看也没关系,我会在此篇再来一个前情回顾,不会像上两篇那样详细,但也能让你理解。html
时代不一样了,你们如今生活都好了,家家户户都有电脑了,并且咱们都习惯了使用电脑办公,打打游戏,聊聊天。那咱们来想一个事儿:若是没有了网络,咱们是否是就不能使用电脑进行聊天了啊。那网络究竟是如何帮助咱们来完成网络聊天的?此篇我就跟你们继续聊计算机网络究竟是怎么回事儿。编程
这回我和以往反着来,先说官方定义,再解释:浏览器
计算机网络是由通讯介质将地理位置不一样的且相互独立的计算机链接起来,实现数据通讯与资源共享。服务器
咱们知道两个独立且绝不相关的计算机,一台在青海,一台在河南,想要进行数据传输(聊天),没网是不行的。这个网指的就是互联网(Internet)。这个Internet它是一个通讯协议。什么是协议?打个比方,就比如咱们打电话,在中国,中国有十几亿人,地大物博,全国各地都有本身的方言,还有些地方使用本身的民族语言,这时候想要良好的沟通就必须使用统一的一个标准,就是普通话。你们都讲普通话,沟通起来就没有问题了。那若是是不一样国家进行沟通呢?咱们能够选择使用英语进行交流,那英语就是全世界国家通用的一个标准,计算机就比如是分布在全世界各个角落的人,计算机之间通话也要找一个统一的标准,这个标准就是Internet标准,又叫作Internet协议。微信
先给你们讲一个虚构版隔壁老王的故事:
有一我的叫隔壁老王,他有一个爱好就是看电影。有一天,这个隔壁老王想看一部电影,但是电脑里面存储的电影太多了,他费了老大劲才从里面找到,以为很不爽。因而他想,我能不能把全部电影作个分类,把同一种类型的电影放在同一个文件夹下,而后把全部的文件夹整合在一块儿,本身写个浏览器软件,把文件夹信息放到浏览器上,到时候找电影的时候就好找了,只要找到相应的文件夹直接点进去就能找到电影了,老王说干就干,没多久就把全部的文件夹整理好了,而后把全部文件夹放到同一个页面上,到时候他想点哪一个就点哪一个,So easy!(那些网站可能就是这样来的)。
这回出来一个新人物,就叫小王吧,不是小王八,老王就是住在小王隔壁,有一天小王看到老王电脑上有那么多电影,就跟老王商量,能不能在他电脑上也弄个跟老王同样的,让他也看看。老王也不是个小气的人,好东西就是要分享的嘛,想都没想就答应了,给小王说在你电脑上插根线接到我电脑上,而后下载我这个软件,直接访问个人电脑就好了。小王很高兴,他立刻回家按老王说的作,没多久他的电脑上也能看老王电脑上的东西了。有了小王,就还会有小张,小李,互相插根网线,他们都能互相共享电影了。这样,局域网也就产生了,就好比在一个公司或者一个学校用的网络,都称为局域网。那学校有不少呀,不一样的学校用的局域网是不一样的,不一样城市的有不一样的局域网,以局域网为单位,散布在一个区或一个城市的各个局域网加一块儿叫城域网,而后全世界全部城市的城域网加一块儿就叫广域网。
过了一段时间,老王去小王家,看到小王电脑里的电影比本身的还多,并且还好看,而后老王跟小王说,把你的这些电影给我一份吧,我也想看看。不用想,小王确定立马答应了,说你本身弄吧,想看哪一个随便看。姜仍是老的辣,老王想到一个好办法,他跟小王说,我再找一台电脑,把我俩电脑上的资源所有放到那台电脑里,我俩只要在那个电脑上插根线连到本身电脑上,就都能访问那电脑上的东西了,这样岂不是很方便。小王一拍脑门,呀!我咋就没想到,那还不赶忙的。老王另外找了一台电脑,而后他俩把本身的电脑和那台电脑用线连起来,再把本身电脑里的全部资源全传进那台电脑中,最后他俩就能共享资源了。(那台电脑就是服务器)(附加内容)
总结一下就是:网络
网络按地域分类:根据参照物不一样、类型不一样分为tcp
- 局域网:一个公司、一个家庭、一个学校······
- 城域网:一个地区、一个城市······
- 广域网:一个国家、全世界······
我在上面说了Internet协议,互联网协议按照功能的不一样,分为osi七层,tcp/ip五层,tcp/ip四层协议。以下图:学习
osi的七层协议体系结构的概念清楚,理论也比较完善,但它既复杂又不实用,ISO制定的osi协议参考模型的过于庞大、复杂招致了许多批评。于此对照,由技术人员本身开发的TCP/IP协议得到了更为普遍的应用。所以,咱们只须要弄明白TCP/IP五层协议就能了解和明白计算机最底层的通讯是怎么回事。网站
如图,从最下方的物理层到最上方的应用层,对于咱们用户而言,最直接的是应用层。从上到下每一层都依赖于下一层,因此我从最下一层开始给你们讲解:spa
注意:每一层都运行着一个特定的协议,共同组合成互联网协议
物理层主要是由双绞线、光缆、电缆、无线电波组成,其做用很简单,就是链接不一样的计算机,并传递底层电信号,高电压:1,低电压:0。
咱们从物理层上接收或者发送单纯的0、1是没有意义的,为何呢?想一想哈,我想给女友发送一句话:“你好漂亮”,那咱们要把“你好漂亮”转换成01以后,交给网卡,网卡就懵逼了,发给谁???不知道。那怎么办?必需要肯定数据发给谁。就像咱们的快递同样,是否是在外层包装上有商家地址和我的地址,这样咱们无论是发仍是收,都能准肯定位了。网络传送数据也同样,咱们就在数据前面加上目标地址,为了能接收到回信,也要把本身的地址也加上。可是,若是数据和地址放在一块儿,又乱了,好比,我给你一堆01,1010101000101010101,你也分不清哪里是数据,哪里是地址。这时咱们就要对要发送的01进行分组,规定前面xxx位是地址,后面xxx位是数据,而且,你们想互相都能通讯,就必须都遵照这样的规则(协议),这个协议叫以太网协议。在以太网协议出现以前,各个公司都有本身的分组规则,后来都统一使用以太网协议了。
以太网协议规定:一组电信号构成一个数据包,叫帧,每一帧分为报头(head)和数据(data)两部分。
![]()
报头(head):固定18个字节
发送者/ 源地址: 6个字节
接收者/ 目标地址: 6个字节
数据类型:6个字节
数据(data):最短46个字节,最长1500字节
数据包的具体内容(发送给女友的话/快递货物)
以太网协议中的地址叫MAC地址,MAC地址是每台计算机惟一的物理地址,是被写在网卡上的。以太网协议规定,每一台接收和发送数据的设备必需要装有网卡,负责发送和接收数据的设备,发送端和接收端的地址,指的就是网卡的地址,即MAC地址。
MAC地址是每一个网卡在出厂的时候,由各个厂商直接烧录在网卡上的,并且,这个地址必须是全世界惟一的。
MAC地址是由12位16进制的数字表示(前六位是厂商编号,后六位是流水线号),这样不一样的厂商之间就不会产生冲突了,本身生产本身的就行了。
在这给你们介绍一个东西,咱们说两个电脑要通讯要先连根线,可是若是电脑多了以后,电脑间通讯连的线也就多了,这样太乱了,我介绍的这个东西就是交换机,它是负责组件局域网,研究的是MAC地址,它有什么用你看下面图片中的接口就知道了
有了MAC地址,以太网就能够进行工做了.理论上讲,咱们能够和世界上的每一台链接了互联网的计算机进行通讯了,此时通讯的方案是:广播
广播又是怎么一回事?其实广播的方式很原始,基本通讯就是靠吼。就像你想跟女友求婚同样,你会大喊:“xxx,嫁给我吧”,旁边能听到这句话的人有不少,可是只有你女友会回复你。其余人会把你当傻逼同样看待。
没错,广播就是这样进行通讯的。首先组织好了一个数据包以后,把这个数据包经过电信号发出去,这时整个网络上全部的人都会收到你发的这条数据,而后看看这个数据是否是本身的。若是不是就当他不存在,若是是,就接收。虽然效率低点,但毕竟能通讯了。
广播带来什么问题呢?若是是在一个小的网络环境里。比方说,大家宿舍几我的,一块儿玩CS,没问题,你喊一嗓子,你室友也能回应你,也就效率低点。可是若是你链接到全世界的互联网上,还使用广播的方式来通讯,就不是效率问题了,而是一个巨大的通讯灾难。全世界60多亿人,每一个人吼一嗓子,每一个人发送一条信息,那每一个人都会收到60多亿条信息,网络瞬间瘫痪,这种问题被称为广播风暴,那如何解决呢?
首先,咱们要了解一个事情,世界大网络(广域网)是由一个一个的互相隔离的小型局域网(子网)组成的,不一样的局域网之间使用路由来链接。
上面说的交换机是负责组建局域网,研究的是MAC地址,而路由器是负责组件广域网,研究的是IP地址,这个IP地址下面我再解释。
刚才说的广播,只能在一个局域网内进行通讯,不能够在大网络上进行广播,有了路由器,就避免了广播风暴的问题。每一个局域网被称为一个广播域,局域网和局域网之间使用路由的方式进行通讯(向不一样的广播域/子网发送数据包),用路由器把一个局域网里的全部计算机划分红一个个子网。
如今你们先想想生活中,若是是以前说的广播,就至关于在一间教室里你正在上课,你要给某个女孩传纸条,那你要在纸条外面写上你和你要传的女孩的名字,再在里面写上你要写的话,写好后折起来,你和女孩的名字在外,内容在内,而后让同窗一个一个帮你传,每一个同窗在传的时候都会看外面写的名字,若是不是他,就继续传,直到传到的人是你写的那个女孩为止。那这间教室就至关于一个局域网。好,如今咱们要实现局域网和局域网之间的通讯,好比此时位于青海的你要给河南的朋友送东西,你不可能用广播的方式了,你只能快递,这个青海和河南以及还有不少不一样的省份是我国的土地划分,每个省也能够看做是一个个局域网,那在网络中,我国就至关于广域网,那不一样的局域网是如何划分的呢?MAC地址是没办法区分的,由于MAC地址上只有厂商的流水号,这就引出我要说的网络层,网络层引出了一套新的地址来区分不一样的局域网/子网,这一套地址就是网络地址。
规定网络地址的协议叫IP协议,它定义的地址叫IP地址。其实跟我国的省份名差很少,继续说送快递,你要把送的东西包装好,在外面写上你本身的地址和省份地址,还有朋友的地址和省份地址,交给青海的快递公司,而后青海的快递公司转交给河南的快递公司,最后由河南的快递公司分配给你朋友,你朋友就收到快递了。在这有两点须要注意:
- 你要同时写两个地址,本身的地址(MAC地址)和省份地址(IP地址),这样就能肯定所要接收和发送人的具体的位置了。
- 青海的快递公司和河南的快递公司就至关于路由器
在这给你们普及一下子网掩码,咱们上面说有了IP地址和MAC地址,咱们就能让任何计算机之间进行通讯了,那如今再想一想,若是我要用个人计算机给另一台计算机实现通讯,我是否是要判断要通讯的计算机是否和个人计算机在同一个IP地址中,至关于上面例子中我和我要送东西的朋友是否在一个省,这个时候就须要用子网掩码,我拿着个人IP地址和对方的子网掩码经过计算,判断是否在同一个IP地址下,若是在同一个IP地址下,我能够用广播的形式进行通讯,若是不在同一个IP地址下,我能够先把数据传给我方的路由器,再由我方的路由器把数据传给对方的路由器,最后由对方的路由器把数据传给要接收数据的计算机。这样说,再联系上面已经说过的,我想不难理解了。
目前咱们广泛使用的是IPV4,它规定,一个网络地址由32位二进制组成,把32位平均分红四份,每一份8位,8位最大能表示的数据是255,因此IP地址的范围:0.0.0.0-255.255.255.255.
一个IP地址分为两部分,分别是网络位和主机位
网络位用来标识不一样的子网
主机位用来标识子网下主机的编号
为何要分两部分呢?很简单,就比如你想写信给你的女友,假设你女友的地址是西宁市平安路128号,那么网络位就会直接找到西宁市,主机位帮你找到你的女友。
网络位和主机位是如何划分的?使用子网掩码来划分。子网掩码和IP地址差很少,都是由32位二进制数来表示,子网掩码也分为网络部分和主机部分,网络部分由1组成,主机部分由0组成。
那说了这么多,IP协议是如何发送数据的?协议规定,IP协议使用IP数据包进行发送数据。IP数据包一样把数据分为了两部分,head和data,而且在发送数据的时候,直接用IP数据包直接装载以太网的data部分。
head:长度为20到600字节
data:最长为65515字节
而以太网数据包的“数据”部分,最长只有1500字节,所以,若是IP数据包超过了1500字节,它就须要分割成几个以太网数据包,分开发送了。
再回顾一下啊,以太网的头是包含了本身的MAC地址和目标MAC地址的,那如何查找目标MAC地址呢?前辈们弄了一个叫ARP协议的东西专门来解析目标MAC地址。它是如何工做的?首先,它是数据链路层的东西,在咱们发送一个数据包的时候是包含着对方的IP地址的。例如我(172.13.4.58)想发送一条数据给女友(172.13.4.90),首先,我得先拿到女友的MAC地址才能够通讯。此时,咱们会先计算一下我和女友是否在一个子网内(子网掩码)
- 在一个子网内,直接广播发送一个数据包
子网内的计算机发现了这个包以后会返回一个数据包而且带有MAC地址,这样就经过IP地址找到了目标主机的MAC地址,接下来就能够进行数据传输了。- 不在一个子网内,单纯的用广播就不行了,由于广播只是针对本身内网而言。那怎么办,此时会把数据包发给网关,由网关发给其它路由,这样在整个万维网里就能够找到你想要的那个计算机的MAC地址了。
- ARP就是经过IP地址来查找MAC地址的一套固定协议,它是数据链路层的内容。
- 网络层的意义:定义了子网, 区分各个局域网
- IP地址:网络地址
- 子网掩码:计算是不是同一个子网
到目前为止,前三层内容已经能够进行数据传输了。可是,咱们的一台计算机上能够一次性运行多个网络应用程序,好比,QQ、微信、LOL三个软件一块儿运行,都要进行网络传输,可是就前面学习的这三层内容,是没办法区分开数据是要发送给哪个软件的。那怎么办?引入第四层,传输层,传输层定义了端口的概念,每个网络应用程序占用一个网络端口,不一样的程序就用端口把数据隔离,两两互相不影响。
- 端口:应用程序和网卡的关联编号
- 传输层:创建端口到端口的通讯。
- 传输层有两种协议:TCP和UDP
TCP协议:可靠传输,TCP数据包没有长度限制,理论上能够无限长,可是为了保证网络的效率,一般TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包没必要再分割。
![]()
TCP头放的主要是 源端口和 目标端口
UDP协议:不可靠传输,“报头”部分一共只有8个字节,总长度不超过65535字节,正好放进一个IP数据包。
![]()
其实和邮信是同样的,写好地址,写好接收人,直接装进信封里,丢进邮箱里就不用你管了,对方何时收,收没收到,你不知道。
用户使用的都是应用程序,均工做于应用层,你们均可以开发本身的应用程序,数据多种多样,必须规定好数据的组织形式。对于用于而言最直观的就是应用层。
- 应用层:规定应用程序的数据格式
例:TCP协议能够为各类各样的程序传递数据,好比Email、WWW、FTP等,那么,必须有不一样协议规定电子邮件、网页、FTP数据的格式,这些应用程序协议就构成了“应用层”。
以上是对TCP/IP5层协议的解读,总结一下:
发送数据其实就是一个封装数据的过程
最后从物理层发出,对方接收到了以后再自下而上一层一层打开拿到数据,以上内容就是一个网络传输的大体过程,其中还有好多细节没有阐述,但你们知道和了解以上内容,对开发而言足够了。
原本还想加上TCP协议的三次握手和四次断开,奈何考虑到篇幅过大,对读者不利,权衡再三,决定单独去写这部分。
看完有收获?那么但愿老铁别吝啬你的三连击哦
一、点个推荐,让更多的人看到这篇文章
二、关注个人原创微信公众号【泰斗贤若如】,第一时间阅读个人文章
三、欢迎关注个人博客
【原创声明】:本人原创:https://www.cnblogs.com/zyx110/