OSI七层模型和TCP/IP四层模型(二)

2、自下而上的网络分层

1.物理层

电脑要组网,第一件事要干什么?固然是先把电脑连起来,能够用光缆、电缆、双绞线、无线电波(WiFi)等方式。物理层的做用就是经过物理手段把电脑链接起来,它主要规定了网络的一些电气特性,做用是负责传送0和1的电信号。java

这里说一下,经过物理手段将设备链接起来组网,物理手段就是光缆、电缆、双绞线、无线电波(WiFi)等,好比中美之间的网络通讯是经过海底光缆;两个不一样的局域网(电信的网络和移动的网络)通信,嗯,稍微麻烦点,个人电信手机先连上电信的服务器,你的移动手机连移动服务器,他们两个ISP(Internet Service Provider 互联网服务提供商)之间是经过物理手段连接的,这样咱们就可以间接的实现通信了。程序员

互联网能够说就是用物理设备将各个“局域网”相连组成的更大的“局域网“,更大局域网层层相连,最终就组成了”互联网“,好比小的互联网就是你家和我家的WiFi,一个省的每户家庭的WiFi组成这个省的局域网,各个省的局域网组成中国的局域网,各个国家之间的局域网经过物理手段互联就组成了横跨世界的”互联网“(固然天朝还有一堵墙)。数据库

2.数据链路层

1)定义

物理层就是传输电路的0和1信号的,可是单纯的0和1没有意义,必须规定解读方式:多少个0和1算一组?每一个信号有什么意义?——这就是链路层的意义,它在物理层的上方,肯定了0和1的分组方式。编程

2)以太网协议

早些时候,各个公司都有本身的电信号分组方式,后来出现了“以太网”这种协议逐渐占据了主导的地位。“以太网”规定,一组电信号构成一个数据包,叫作“帧(Frame)”;每一帧分红两个个部分:标头(Head)和数据(Data)。浏览器

所以,数据链路层链路层的数据包就叫“以太网数据包”,他由“标头”和“数据”两部分组成——其中,“标头”包含数据包的一些说明项,好比发送者、接受者、数据类型等等。服务器

3)MAC地址

上面咱们提到,以太网数据包的“标头”包含了发送者和接受者的信息,那么,发送者和接受者是如何标识的呢?网络

  • 以太网规定,连入网络的全部设备,都必须具备“网卡”接口。数据包必须是从一块网卡,传送到另外一块网卡,网卡的地址,就是数据包的发送地址和接受地址,也叫MAC地址。架构

  • 每块网卡出厂的时候,都有全世界独一无二的MAC地址,长度是48位的二进制,一般用12个十六进制数表示。less

  • 前6个十六进制是厂商编号,后6个是该厂商的网卡流水号,有了MAC地址,就能够定位网卡和数据包的路径了。socket

4)广播

定义地址只是第一步,后面还有更多步骤—首先,一块网卡怎么只带另外一块网卡的MAC地址?回答是有一种ARP协议,能够解决这个问题。这个留到后面介绍,这里只须要知道,以太网数据包必须知道接收方的MAC地址,而后才能发送

其次,就算有了MAC地址,系统怎样才能把数据包准确送到接收方?回答是以太网采用了一种很"原始"的广播式的方式,它不是把数据包准确送到接收方,而是向本网络(局域网)内全部计算机发送,让每台计算机本身判断,是否为接收方。

一台计算机向本局域网内的全部电脑均发送相同的数据包,其余计算机收到这个数据包以后,会读取这个数据包的“标头”,找到其中接收方(目标方)的MAC地址,而后与自身的MAC地址进行比对,若是二者相同,说明就是要发给本身的,而后接受这个包并作出进一步的处理,不然丢弃这个包。这种发送方式就叫“广播”,主要经过分组交换机或者网络交换机进行。

3.网络层

根据上面的讲解,理论上依靠MAC地址和广播技术,上海的网卡发出的数据包就能够找到洛杉矶网卡了——可是若是全世界的计算机都这么干,那么每一台计算机发出的数据包都同步广播到全世界其余电脑,再一一比对判断,这样显然是低效、不现实的。

所以,上面咱们强调,广播是在发送者所在的局域网内广播的,不一样也就是说,若是两台计算机没有在同一个子网(局域网)内,是没法经过广播直接传过去的。前面咱们说过,互联网是由一个个子网组成的更大的子网,一级一级组网,最终构成的互联网。

所以咱们必须找到一种方法,区分哪些MAC地址属于同一个子网。若是是同一个子网就采用广播的形式,若是不是,则采用“路由”的方式(后面会讲)发送——这就致使了网络层的出现,他的做用是引入一套新的地址,使咱们可以区分哪些计算机属于同一个子网,这套机制就叫作“网络地址”,也就是“IP地址”。

1)IP协议

规定网络地址的协议,叫IP协议。他定义的地址,就叫作“IP地址”。IP地址目前有IPV4(Internet Protocol version 4,IPv4)和IPV6(Internet Protocol version 4,IPv6)两版,又称“互联网通讯协议第四/六版”。2011年,IANA IPv4 pool地址彻底用尽时,IPv6仍处在部署的初期,所以IPV4地址也是目前最为普遍的IP地址——这个版本规定,网络地址由32个二进制位组成,习惯上,咱们分红四段十进制数表示IPV4地址,从0.0.0.0到255.255.255.255。

互联网的每一台计算机,都会被分配到一个IP地址,这个地址由两部分组成,前一部分表明网络,后一部分表明主机(又称终端系统,end system)。 好比,IP地址172.16.254.1,这是一个32位的地址,假定它的网络部分是前24位(172.16.254),那么主机部分就是后8位(最后的那个1)。处于同一个子网络的电脑,它们IP地址的网络部分一定是相同的,也就是说172.16.254.2应该与172.16.254.1处在同一个子网络,然后面的“2”与“1”则是同一子网内两台不一样电脑(主机)的编号。

2)子网掩码

问题在于单单从IP地址,咱们没法判断网络部分。仍是以172.16.254.1为例,它的网络部分,究竟是前24位,仍是前16位,甚至前28位,从IP地址上是看不出来的。那么,怎样才能从IP地址,判断两台计算机是否属于同一个子网络呢?这就要用到另外一个参数**"子网掩码"**(subnet mask)。

** 所谓"子网掩码",就是表示子网络特征的一个参数。它在形式上等同于IP地址,也是一个32位二进制数字,它的网络部分所有为1,主机部分所有为0。**好比,IP地址172.16.254.1,若是已知网络部分是前24位,主机部分是后8位,那么子网络掩码就是11111111.11111111.11111111.00000000,写成十进制就是255.255.255.0。

知道"子网掩码",咱们就能判断,任意两个IP地址是否处在同一个子网络。方法是将两个IP地址与子网掩码分别进行AND运算(两个数位都为1,运算结果为1,不然为0),而后比较结果是否相同,若是是的话,就代表它们在同一个子网络中,不然就不是。

3)路由/路由器/网关/交换机

上面咱们已经肯定了两台计算机是否在同一个子网中,若是在,则采用广播+MAC寻址的的方式发送数据包,若是不是,则要采用“路由”的方式了,那么什么是“路由”呢?

路由(routing)

就是经过互联的网络把信息从源地址传输到目的地址的活动。路由引导分组转送,通过中间的一些节点,到它们最后的目的地。

从“路由”的定义中能够看到,“路由”是一种活动,一种动做,一种行为,做用是是将信息从原地址传输到目的地址,比较特殊的是,原地址和目标地址是在两个不一样的子网中的。 那么如何传输呢?路由定义一条路径,通过因特网发送包到另外一网络上的地址,但路由不定义彻底路径,只定义从主机到能够将包转发到目的地的网关(子网)间的路径段(或从一个子网到另外一个子网)。

路由器(Router)

简单理解就是实现路由功能的机器。路由器链接两个或多个网络并提供路由功能。

前面咱们说过,网卡是计算机的一个硬件,它在接收到网路信息以后,将信息交给计算机。当计算机须要发送信息的时候,也要经过网卡发送。一台计算机能够有不仅一个网卡,好比笔记本就有一个以太网卡和一个WiFi网卡。计算机在接收或者发送信息的时候,要先决定想要经过哪一个网卡。路由器(router)能够通俗理解为一台配备有多个网卡的专用电脑,它让网卡接入到不一样的网络中。

网关(Gateway)

是路由器的一种,一般咱们把网络层使用的路由器称为网关,路由器能够在网络接口级或物理级路由;网关是在网络层上路由(我的感受应该是一种概念,即在网络层链接两个子网的概念,并不存在实体,真正实现路由功能仍是得靠路由器)。

说的再通俗一点,路由器上面有MAC地址和MAC地址对应的IP,而网关因为是网络层的概念所以只有IP地址。在今天不少局域网采用都是路由来接入网络,所以如今一般指的网关就是路由器的IP。

另外,须要强调一点,虽然路由器上面有MAC地址和IP地址,但它并不能经过MAC地址工做,必须经过IP寻址。所以它是工做在网络层的设备。

网络交换机(Network Switch)

是一个扩大网络的器材,能为子网中提供更多的链接端口,以便链接更多的电脑。交换机与路由器的区别:

  • 工做层次不一样
    • 交换机主要工做在数据链路层(第二层)
    • 路由器工做在网络层(第三层)。
  • 转发依据不一样
    • 交换机转发所依据的对象是:MAC地址。(物理地址)
    • 路由转发所依据的对象是:IP地址。(网络地址)
  • 主要功能不一样
    • 交换机主要用于组建局域网,链接同属于一个(广播域)子网的全部设备,负责子网内部通讯(广播)。
    • 路由主要功能是将由交换机组好的局域网相互链接起来,或者将他们接入Internet。
    • 交换机能作的,路由都能作。
    • 交换机不能分割广播域(子网),路由能够。
    • 路由还能够提供防火墙的功能。
    • 路由配置比交换机复杂。

交换机虽然主要依靠MAC地址查找工做在数据链路层,可是他也能够有IP地址,这样就能够进行远程登陆等操做了。

  • LAN,全称Local Area Network,中文名叫作局域网;
  • WAN,全称Wide Area Network,中文名叫作广域网。
  • WLAN,全称Wireless LAN, 无线局域网,通俗点讲就是WiFi。

WAN是一种跨越大的、地域性的计算机网络的集合。一般跨越省、市,甚至一个国家。广域网包括大大小小不一样的子网,子网能够是局域网,也能够是小型的广域网。

家用的路由器,通常包括了交换机和路由器,所以他有两个接口——WAN端口用于链接至Internet;LAN端口用于链接至局域网设备。

家用路由器

PASS:举例

4)ARP协议

在上面的过程当中,咱们实际上假设了,每一台主机和路由都能了解局域网内的IP地址和MAC地址的对应关系,这是实现IP包封装(encapsulation)到帧的基本条件。 IP地址与MAC地址的对应是经过ARP协议传播到局域网的每一个主机和路由。每一台主机或路由中都有一个ARP cache,用以存储局域网内IP地址和MAC地址如何对应。

ARP协议(ARP介于数据链路层和网络层之间,ARP包须要包裹在一个帧中)的工做方式以下:主机发出一个ARP包,该ARP包中包含有本身的IP地址和MAC地址。经过ARP包,主机以广播的形式询问局域网上全部的主机和路由:我是IP地址xxxx,个人MAC地址是xxxx,有人知道199.165.146.4的MAC地址吗?拥有该IP地址的主机会回复发出请求的主机:哦,我知道,这个IP地址属于个人一个NIC(网卡),它的MAC地址是xxxxxx。因为发送ARP请求的主机采起的是广播形式,并附带有本身的IP地址和MAC地址,其余的主机和路由会同时检查本身的ARP cache,若是不符合,则更新本身的ARP cache。

这样,通过几回ARP请求以后,ARP cache会达到稳定。若是局域网上设备发生变更,ARP重复上面过程。ARP协议只用于IPv4。IPv6使用Neighbor Discovery Protocol来替代ARP的功能。

4.传输层

1)端口号

有了MAC地址和IP地址,咱们已经能够在互联网上的任意两台电脑之间创建通讯了。接下来的问题是,同一台主机上许多程序(进程)都须要用到网络,好比你一遍浏览网页一遍聊天。当一个数据包从网上发送过来的时候,咱们须要一个参数来区分,他究竟是提供哪一个进程使用的——这个参数就叫作“端口号”,他其实就是每个使用网卡的程序的编号。 每一个数据包发送到主机特定的端口,因此不一样的程序就能取到本身想要的数据包。

端口是0到65535之间的一个整数,正好16个二进制。0~1023的端口被系统占用,用户只能使用大于1023的端口。 无论是浏览网页仍是聊天,应用程序都会随机选用一个端口,而后与服务器创建相应的端口关系。这里须要补充一点,HTTP协议默认使用80端口,8080是用来访问代理服务的。

“传输层”的功能,就是创建“端口到端口”之间的通讯。相比之下,“网络层”的功能是创建“主机到主机"的通讯。 只要肯定主机和端口号,咱们就能实现程序之间的交流。

2)Socket

上面咱们已经说了,传输层是创建“端口到端口”之间的通讯,更具体一点,也就是程序和程序之间的通讯,或者“进程间通讯”。 嗯,挺唬人的一个概念。

进程间通讯分为两种——一种是主机内部(或终端内部)进程间通讯 ,这个由终端或主机上的操做系统决定,好比在Android系统上面进程间通讯就是AIDL;另外一种是跨主机进程间通讯或者网络进程间通讯,也叫 “socket通讯” 。咱们能够先笼统的理解——Unix系统把主机+端口,叫作"套接字"(socket),固然,这样说是有失偏颇的。

那么,Socket是什么?

  • 从编程语言的角度,socket是一个无符号整型变量,用来标识一个通讯进程。 两个进程通讯,总要知道这几个信息:双方的ip地址和端口号,通讯所采用的协议栈。socket就是和这些东西绑定的,实现socket可使用unix提供的接口,也可使用Windows提供的winSock。

  • socket本质是编程接口(API),对TCP/IP的封装。TCP/IP只是一个协议栈,必需要具体实现,同时还要提供对外的操做接口(API),这就是Socket接口。 经过Socket,咱们才能使用TCP/IP协议,所以有了一系列咱们知道的函数接口——connect、accept、send、read、write等。

JDK的java.net包下有两个类:Socket和ServerSocket,在Client和Server创建链接成功后,两端都会产生一个Socket实例,操做这个实例,完成所需的会话,而程序员就经过这些API进行网络编程。 Socket链接过程分为三个步骤:服务器监听,客户端请求,链接确认。

3)UDP/TCP协议

UDP和TCP协议都是传输层的协议,他们的主要做用就是在应用层的数据包标头加上端口号(或者在IP协议的数据包中插入端口号)。

  • UDP协议的优势是比较简单,容易实现,可是缺点是可靠性较差,一旦数据包发出,没法知道对方是否收到。
  • TCP协议能够近似认为是有确认机制的UDP协议。每发出一个数据包都要求确认。若是有一个数据包遗失,就收不到确认,发出方就知道有必要重发这个数据包了。

TCP协议主要的确认机制是"三次握手,四次挥手",因为这个协议很是复杂,咱们会另起一篇文章详细讲解。

5.应用层

应用程序收到"传输层"的数据,接下来就要进行解读。因为互联网是开放架构,数据来源五花八门,必须事先规定好格式,不然根本没法解读。。"应用层"的做用,就是规定应用程序的数据格式。 举例来讲,TCP协议能够为各类各样的程序传递数据,好比Email、WWW、FTP等等。那么,必须有不一样协议规定电子邮件、网页、FTP数据的格式,这些应用程序协议就构成了"应用层"。这是最高的一层,直接面对用户。

这里的应用层是文章开头的OSI七层模型的最上面三层的综合,由于是直接面向用户,所以它的主要做用是“消除设备固有数据格式和网络标准数据格式直接的差别”,由于在网络流中,数据的格式是标准化的,可是具体到不一样得设备,不一样的操做系统上,他的要求数据呈现格式是不一样的,所以须要转化成统一的、用户可以感知的声音、图片、文字等信息,这就是应用层作的事情。

1)用户上网设置

  • 本机的IP地址
  • 子网掩码
  • 网关的IP地址
  • DNS的IP地址

2)DNS解析

网域名称系统(英文:Domain Name System,缩写:DNS),端口53,是互联网的一项服务。它做为将域名和IP地址相互映射的一个分布式数据库,可以令人更方便地访问互联网。

什么意思?咱们上面已经说了,网络中的数据包,是经过“端口号+IP地址+MAC地址”来识别目的地址的,也就是说定位一个主机的时候,咱们是定位的是他的IP地址,而后咱们经过浏览器访问的时候呢?好比咱们要访问谷歌,就在浏览器中输入他的"域名":www.google.com ,却不是谷歌服务器的IP地址——这个时候,DNS协议就起做用了:

咱们输入www.google.com 并按下回车的时候,本机服务器先是请求DNS服务器,DNS服务器根据咱们发送的域名,根据DNS协议,解析成该域名对应的IP地址并返回给本机,这样,咱们就能够进行下面几层的地址封装了。

相关文章
相关标签/搜索