层与协议的关系
每一层为了完成一种功能,定义了一种规则,这个规则叫作互联网协议
把电脑连接起来的物理手段,比如用光缆、电缆、双绞线,它主要规定了网络的一些电器特性,负责传送0和1的电信号
硬件上的范畴均在链路层的作用范围之内。规定了0和1的解读方式:比如多少个信号算一组,每个信号为有什么意义,这就是链接层的功能。
穿插几个概念,链路层要进行通信要具备下列条件
数据包、网卡的MAC地址、广播的发送方式,链路层就才可以在多台计算机之间传送数据了。
以太网协议
以太网规定一组电信号构成一个数据包,叫作帧,每个帧分成两个部分:标头和数据。
“标头”包含数据包的一些说明项,比如发送者、接受者、数据类型等
“数据”则是数据包的具体内容。
标头的长度,固定为18字节,数据的长度最短为46字节,最长为1500字节,因此,整个帧最短64字节,最长为1518字节,如果数据很长的话,就会进行分割成多个帧进行发送。
MAC地址
以太网数据包的“标头”,包含了发送者和接受者的信息,那么发送者和接受者是如何标识的呢?
以太网规定,炼乳网络的所有设备,都必须具有网卡接口,数据包必须是从一块网卡,传送到另一块网卡,网卡的地址就是数据包的发送地址和接收地址,叫作MAC地址。Ip地址通常可以变,但是MAC地址是独一无二的,不会改变。
广播(同一个子网络才能使用)
通过ARP协议一块网卡可以知道另一块网卡的MAC地址,以太网数据包必须知道接收方的MAC地址才能发送。
有了MAC地址,系统怎样才能把数据包准确送到接收方?
向本网络内所有计算机发送,让每台计算机自己判断是否为接收方。
上图中,1号计算机像2号计算机发送一个数据包,全部计算机都将收到,收到后,读取这个包的“标头”,找到接收方的MAC地址,然后与自身的MAC地址比较,如果两者相同,就接受这个包,做进一步处理,否则就丢弃这个包,这种方式叫作广播。
网络层用来处理在网络上流动的数据包。数据包是网络传输的最小数据单位。该层规定了通过怎样的路径(所谓的传输路线)到达对方计算机,并把数据包传送给对方。如果两台主机在不同的子网络,广播是传不过去的,只能通过路由的方式发送。这就导致了网络层的诞生,网络层出现后每台计算机就有了两个地址,一种是MAC地址,一种是网络地址,两者没有联系,MAC是绑定在网卡上的,网络地址是管理员分配的。
网络地址(ip地址)帮我们确定了计算机所在的子网络,MAC地址将数据包送到该子网络中的目标网卡,先处理ip地址,在处理mac地址。
IP协议
网络地址的协议叫作IP协议,它所定义的地址被称为IP地址
通过子网掩码可以两个任意的IP地址是否为同一个子网络,将两个IP地址分别与子网掩码进行AND运算,然后比较结果是否相同,如果是的话,表明所处同一个网络。
IP数据包
IP协议发送的数据,就叫做IP数据包,其中包含IP地址信息。以太网数据包头只包含MAC地址,而IP数据包直接放入以太网数据包的数据部分。
IP数据包分为“标头”和“数据”
标头部分主要包括版本、长度、IP地址信息,对数据部分则是IP数据包的具体内容,它放入以太网数据包后就变成了这样。
ARP协议
关于网络层,还需要补充的是。
IP数据包是放入以太网数据包里发送的,所以我们必须知道两个地址,一个是对方的MAC地址,一个是对方的IP地址,通常IP地址是可知的,MAC地址是未知的,我们需要IP地址得到MAC地址,这就是ARP协议的诞生。
ARP协议只用在局域网中,它用来将IP地址解析为MAC地址。局域网中的每个主机都有一个ARP缓存,它保存了最近发起的IP地址到MAC地址的映射记录,当该主机要向局域网中的某一主机发送数据时,它会先从自己的缓存中查找,看是否存在目标IP地址,如果找到,就通过映射找到它的MAC地址,从而发送过去,如果没有找到该目的IP地址,它就向该局域网内发送一个广播,广播中包含自己的IP地址、MAC地址和目的主机的IP地址,局域网内的所有主机都会收到该广播,但只有目的IP地址的主机会做出回应,并把自己的MAC地址发送给源主机,源主机收到后,在自己的ARP缓存中增加上该映射,并根据发来的MAC地址将数据发送给目的主机。
ARP高速缓存中的表项一般都要设置超时值,如果一段时间内没有与某主机通信,就将该主机对应的IP与MAC之间的映射关系去掉,下次在需要通信时,依然发送广播。
如果ARP请求是从一个网络的主机到另一个网络的主机,那么连接这两个网络的路由器就可以回答该请求,这个过程成为ARP代理。
有下列两种情况
1、两台主机不在同一个网络,是没有办法的到对方的MAC地址,只能把数据包传送到两个子网络连接处的“网关”,让网关去处理。
2、如果两台主机在同一个网络,可以使用ARP协议,得到对方的MAC地址。ARP协议是发出一个数据包,其中包含它查询主机的IP地址,在对方的MAC地址这一栏,填的是FF::FF::FF::FF::FF::FF::FF,这是一个广播地址。通过广播的形式,它所在的子网络的每一台主机,都会收到这个数据包,从中取出IP地址,与自身的地址相比较,如果两者相同,就会做出回复,向对方报告自己的MAC地址,否则就丢弃这个包。
有了ARP协议,就可以得到同一个子网络内的MAC地址,可以把数据包发送到子网络内的任意一台主机上。
有了MAC地址和IP地址,我们就可以在互联网上任意两台主机上建立通信端口传来数据包,通过端口给特定的程序来使用。
传输层的功能,就是建立端口到端口的通信,相比之下,网络层的功能是建立主机到主机的通信,只要确定主机和端口,就能就能实现程序间的交流。因此,UNIX系统就把主机+端口叫作“套接字“,有了它,就可以进行网络应用程序开发。
UDP协议
现在,我们必须在数据包加入端口信息,这就需要新的协议,最简单的实现叫作UDP协议,它的格式几乎就是在数据前面加上端口号。
UDP数据包,也是“标头“和“数据“两部分组成。
标头部分主要定义了发出端口和接收端口,数据部分就是具体的内容,然后把整个UDP数据包放入IP数据包的数据部分,IP数据包又是放在以太网数据包之中的,所以整个以太网数据包变成了下面这样:
TCP协议
UDP协议的优点是比较简单,容易实现,缺点是可靠性比较差,一旦数据包发出来,无法知道对方是否收到,而TCP是可靠的连接,当数据包丢失会重传,而UDP数据包不会。
它类似于有确认机制的UDP协议,每发出一个数据包都要确认,如果有一个数据包丢失,就收不到确认。
TCP数据包和UDP数据包一样,都是内嵌在IP数据包的数据部分,TCP数据包没有长度限制,为了保证网络效率不会设置很大,UDP是由长度限制的。
应用层决定了向用户提供应用服务时通信的活动。
TCP/IP协议族内预存了各类通用的应用服务,比如FTP和DNS服务就是其中两类,HTTP协议也处于该层。
应用程序收到传输层的数据,就要进行解读,其作用就是规定应用程序的数据格式。
举例来说TCP协议可以为各种各样的程序传递数据,比如Email等,那么必须有不同协议规定电子邮件等格式,这些应用程序协议就构成了应用层。
最高的一层,直接面对用户,它的数据就放在TCP数据包的数据部分,以太网数据包就变成了下面这样。
网络同行就是交换数据包实现两台电脑见得通信,数据包的结构如上图
发送这个包需要知道两个地址,一个是对方的MAC地址,一个是对方的IP地址,有了这两个地址,数据包才能准确送到接受者手中,但是前面说过,MAC地址有局限性,如果两台电脑在不同一个子网络,就无法知道对方的MAC地址,必须通过网关转发。
如上图中,1号电脑要想往4号电脑发送一个数据包,它先判断4号电脑是否在同一个子网络,如果发现不是,就把这个数据包发到网关A,网关A通过路由协议,发现4号电脑位于网络B,就把数据包有发送给网关B,再让网关B转发到4号电脑。
所以1号电脑把数据包发到网关A,就必须知道网关A的MAC地址,所以有如下两种情况。
必须要下列四个参数才可以连接上网
DNS协议可以把域名解析为IP地址(也可以把ip地址解析为域名),ARP协议可以把由ip地址知道mac地址。这样就可以知道ip地址和mac地址了。
静态ip地址
计算机每次开机前都会分到同样的IP地址叫作静态IP解析上网
动态ip地址
计算机开机后,自动分配到一个IP地址,不用人为设定,它使用的协议叫作DHCP协议。
DHCP
这个协议规定,每一个子网络,都有一台计算负责管理本网络的所有IP地址,叫作DHCP服务器,新的计算机加入网络,必须向DHCP服务器发送一个DHCP请求数据包,申请IP地址和相关的网络参数。
它是一种应用层协议,建立在UDP协议之上,整个数据包是这样的。
(1)最前面的"以太网标头",设置发出方(本机)的MAC地址和接收方(DHCP服务器)的MAC地址。前者就是本机网卡的MAC地址,后者这时不知道,就填入一个广播地址:FF-FF-FF-FF-FF-FF。
(2)后面的"IP标头",设置发出方的IP地址和接收方的IP地址。这时,对于这两者,本机都不知道。于是,发出方的IP地址就设为0.0.0.0,接收方的IP地址设为255.255.255.255。
(3)最后的"UDP标头",设置发出方的端口和接收方的端口。这一部分是DHCP协议规定好的,发出方是68端口,接收方是67端口。
(4)这个数据包构造完成后,就可以发出了,以太网是广播发送,接受方的MAC地址是FF-FF-FF-FF-FF-FF。看不出是发送给谁的,,必须分析这个包的IP地址,才能取确定发送给谁的。当看到发出方的IP地址是0.0.0.0,接受方式255.255.255.255,于是DHCP服务器知道这个包,其他计算机就丢弃这个包。
(5)接下来,DHCP服务器读出这个包的数据内容,分配好IP地址,发送回去一个"DHCP响应"数据包。这个响应包的结构也是类似的,以太网标头的MAC地址是双方的网卡地址,IP标头的IP地址是DHCP服务器的IP地址(发出方)和255.255.255.255(接收方),UDP标头的端口是67(发出方)和68(接收方),分配给请求端的IP地址和本网络的具体参数则包含在Data部分
(6)计算机你收到这个响应,于是就知道了自己的IP地址、子网掩码、网关地址、DNS服务器等参数。
注意区分
DNS协议、DHCP协议、ARP协议
DNS协议:是通过域名或者ip地址知道域名或ip地址
DHCP协议:是新加入的计算机必须向所在的子网的DHCP服务器发送一个DHCP请求的数据包,申请自己的IP地址、子网掩码、等参数。
ARP协议:在子网络的情况下,通过广播的形式寻找MAC地址
本文主要对http协议五层模型进行了解析,如有错误欢迎批评和指正。