目录
为何网路要分层?
这似乎挺好理解,唐朝开始就有吏部、户部、礼部、兵部、刑部、工部了,一个庞大的组织要管理好必需要分拆下来,各有各的职责出了事情直接定位,每一层可以制订自己的标准来解决好自己层面上的事情。
再譬如一个项目分dao数据库层,缓存层,service层,controller接入层一样,每一层专注自己的部份,关于优势,把高内聚,低耦合,可维护性强这种词甩在网路分层里面也是用得的,出了事情直接找负责那部份的那一层。
从专业角度来说,程序设计要求,复杂的程序都须要分层。
OSI模型比对TCP/IP模型
OSI模型(OpenSystemInterconnectionReferenceModel开放系统互连参考模型),他只是一种参考概念模型,并没有提供一个可以实现的方式,如今的因特网采用的是TCP/IP模型(五层),TCP/IP网路通讯合同(四层)。
了解网路发展史会发觉OSI模型出现的时间比TCP/IP晚,是在TCP/IP模型基础里面提出的,那时侯TCP/IP合同应用已然成形了,各大营运商们不想再换,再加上OSI模型有些设计冗余,因而因特网最终选择了草根选手TCP/IP。并且OSI在理论研究里面具有很大参考价值,所以各大教材还会提及OSI模型.
TCP/IP模型
有这五层模型进行分工合作,就可以用tcp/ip合同将计算机连上去通讯啦。
化学层
声音传信靠声波,肉鸽传信靠电磁波,电留传信靠电波。化学层须要解决借助传输介质传输比特流的问题。
以打双截龙为例(这个游戏有点曝露年纪),首先可以使用一个按键,两个人一起打,这样没问题并且也太影响体验了。
两个人两台笔记本联机打,两台笔记本最简单的通讯方法是一根双绞线,两个水晶头,交叉接法,联接两个笔记本的网卡,分别配置‘ip地址’,‘子网网段’,‘默认网段’使之成为一个网路,这两台笔记本就组成了一个最简单的局域网,可以联机打双截龙啦!
假如第三个人想加进来,就可以买一个有多个口的网桥(hub)设备,将三个人的笔记本都连上去。网桥是纯数学工作,将自己收到的字节全部复制到其他的端口,其他机器看着收进来,这样就实现了三个人一起happy了。
一个网咖人都想加入进来linux中tcp/ip协议实现及嵌入式应用,可以加上交换机,交换机互联,产生网路拓扑。一个网咖人辣么多,必需要痛快啊,为此交换机是具有MAC地址学习功能的linux解压命令,有利于更快找到目标机器。不过交换机是工作在数据链路层的。
一个城市的人都想加进来,就须要联通移动联通这样的营运商四处铺线缆光纤,构建基站了,才会像我们现在这样无论身处何处,都能”每晚八点,王者峡谷见“了。
数据链路层
数据链路层也称作MAC层,MediumAccessControl即媒体访问控制,专业词称作“多路访问控制”。
以太网合同
化学层上面,早已帮你把联通号转化成数字讯号010101001方式,而且两台机器要交流总不可能一个bit一个bit的0101交流,假如他人和你说话总是故意一个字一个字的蹦恐怕你早就火了。
数据链路层就是要负责把这种无穷尽的010011001封装成一个个帧来进行传输,这时以太网合同就诞生了,帧也称作以太网帧,以太网合同规定成帧的各项规则,比如多少位成一个帧等。以太网合同如下:
以太网帧
三个人一起互联打格斗游戏,游戏是有严格的角色和次序的,随意一个人发出讯号,这一层主要就是解决这三个问题:
为何叫”媒体访问控制“,控制的就是这种。
MAC地址
数据发给谁接收,最早是只有网桥没有交换机的,三台笔记本每台笔记本发送讯号都是通过广播的形式,广播出去哪一台笔记本须要处理呢,每台笔记本都须要一个标示才能在数据链路层表示自己,MAC地址由此诞生,对应的数学设备是网卡插口,每块网卡的mac地址都是全球惟一的,生产时就固定了。并且网路通讯中,却不用mac地址进行通讯,而是ip地址,读者可以思索一下诱因留言答出。
有了身分了,以太网帧上面源MAC和目标MAC都有了,才能找到相应目标机器,数据包在链路上广播,目标MAC的网卡能够判断这个是给自己的,将其收进来打开。IP数据包收进来以后,拆掉MAC头,打开IP包发觉IP包的地址也是自己的,再拆掉ip头,按照tcp头上面对应端口xxx了,这个端口刚好是我的打开的窃听的端口,就找到了陌陌这个进程扔给处理了。返回也是一样的,源MAC就弄成了目标MAC。
ARP合同
有个问题就是,一个数据包过来,如何找到对应的主机呢?网络上面最开始肯定是谁也不认识谁,当机器不多的时侯,可以把目标机器的MAC地址直接放进数据包里,而且假如有n台机器呢?一个网咖的人一起玩格斗,总不可能一个个去问哎,兄弟你的MAC地址是啥?,这些操作太骚了,于是就有了ARP合同。
在局域网上面,假如晓得了IP地址不清楚MAC地址,这么就广播吧,发送一个广播包,谁是这个IP谁来回答,回答的包上面会带上自己的MAC信息。为了避免每次都ARP广播,机器本地会进行ARP广播结果缓存,交换机就是具有MAC地址学习能力的设备,学习完以后才能精准找到主机,不须要广播,这儿再度提及了交换机为何工作在数据链路层了。
网路层
里面虽然早已提及过一些IP地址,计算机网路世界上面,都是通过IP地址来进行定位的,如何配置自己的ip地址呢?
现实中我们的网路是由一个个局域网组成的复杂网路拓扑,每位局域网处于同一个网关,MAC地址相当于这个人的DNA,能精准到一个人,而且却是没有定位轮询功能的linux中tcp/ip协议实现及嵌入式应用,MAC地址没有为轮询功能设计编号,出厂后网卡在那里被使用不晓得,中国可以用进口的日本产的网卡,然而ip地址是有设计轮询功能的,每位地区的ip,如同货运地址一样能一层层定位到一个人的具体位置,黑客找人好多就是按照ip地址的。
DHCP(DynamicHostConfigurationProtocol)动态主机配置合同
假如局域网内只有几台主机,自己配置一下ip地址玩儿也是可以的,并且假如一个校区的笔记本都须要网管来一个一个配置的话,那就不好玩了,所以我们须要一个可以手动配置ip的合同,即DHCP。
每台主机要加入一个网路的时侯,肯定是初来乍到哪些情况也懂,只晓得自己的MAC地址,因而这个时侯还是靠广播,使用ip地址0.0.0.0发送一个广播包,发给目的地址255.255.255.255,封装在UDP合同上面,UDP封装在BOOTP上面(DHCP的前身),DHCPSERVER收到带有MAC地址的包,在没有ip地址的情况下就晓得是谁在索取ip了,因而就给他子网网段,网段和ip信息,之后这台新来的机器就可以轻快的加入局域网你们庭了。
网段(gateway)
说了如此多还都是在局域网内小打小闹,外边的网路这么精彩,假如想要出国玩儿第一件事就是解决签证,能够通过海关,上面不止一次说到网卡配置的时侯须要配置网段。如果你配置的ip是192.168.1.100,后面兄弟的是192.168.10.100,之后我要访问他,来瞧瞧笔记本是如何理解的,以下是linux的处理方法:
太晚了就这个图吧!
网段你们可以理解成工作在网路层的路由器,它有多个网卡分别连着不同的局域网,每位网卡的ip地址都和对应局域网在同一个公网,工作时犹如机场,你拿着哪一国签证就往哪一国送,会将MAC头和IP头都取出来,之后判别内容看将包往那里转发。路由上面又分为静态路由动态路由,路由算法等复杂的逻辑。
DNS(DOMAINNAMESYSTEM)域名系统
假如你有强悍的记忆力的话,其实可以12.34.45.56这样的方法去访问百度,就跟纯敲电话号码去给一个人打电话一样,而且大多数人都是直接翻看通信录找名称来打电话吧,网路世界也是一样,须要域名来标识一个ip,于是你就可以通过来访问百度了。域名就是网路世界上面的通信录。
想像一下,全世界都靠一个通信录找人,它一旦挂了这么月球村就gg了,因而dns服务器一定得高可用,高并发,分布式,那么复杂第一反应肯定是分层设计的嘛,思想都是相通的,于是就有了根DNS服务器,顶尖域DNS服务器linux伊甸园论坛,权威DNS服务器,如下:
图画的有点丑丑的
树形结构,访问就须要递归了,为了提升ip解析性能,就须要缓存了,好多营运商(联通联通移动)会就近布署DNS缓存服务器,DNS解析流程如下:
image
CDN(contentdeliverynetwork)缓存
访问一个地址都要如此复杂,找如此多层,现实中多等1秒都难过,这么就要想办法尽量走缓存拿数据,全球有这么多数据中心,我们不远的地方都有数据中心,何不在那些数据中心里背部署一些机器来做缓存集群缓存部份数据呢?于是cdn的角色就下来了,这儿不细讲其具体形态,无外乎又是分层,高可用设计。
传输层
###TCP,UDP
像货运系统一样,接单以后选好了路径,就要运货了,交通情况这么复杂,运货过程中肯定会碰到堵车,丢货,超时等一系列问题,传输层就是为了解决这种问题而设计的。主要有UDP合同和TCP合同,她们之间最主要的区别就是UDP不可靠,TCP可靠。
UDP合同适用于对丢包不敏感的应用,不须要构建联接,速率快,以上说到的ARP,DHCP都是基于UDP合同的,还有直播的流媒体合同,初期对实时性要求高的游戏,物联网和联通通讯领域等等。
TCP要保证可靠传输,就要考虑到保证次序,丢包处理,维护联接,流量控制,和串扰控制等问题,因而就出现了复杂的三次握手,四次挥手,还要维护TCP状态机等。串扰控制是通过串扰窗口来解决的,次序,丢包处理,流量控制对应滑动窗口。
端口(port)
试想一下数据跋山涉水的抵达了你的笔记本,之后呢咋整,你同时开了陌陌,QQ,钉钉,他人给你发条消息你总要运送到对应的程序吧,这样才算最终抵达,这儿不妨把每位应用都理解成一个程序,端口的须要就彰显下来了,这个端口在你笔记本是不会重复的,要不然数据过来就无法判定了,好多人在玩tomcat的时侯,开两个8080端口就会碰到报错吧。
应用层
到了应用层,才会比较具体了,虽然我们看得见,每位人都有不同的需求,例如A须要发短信,B须要下订单,C须要下载文件,这层须要解决告诉对方,我要干哪些的问题,依据干的事情不一样,又会催化出各类不同的合同来最好解决你的需求。