TCP/IP四层模型及四层模型与七层模型的对应关系

物理层(七层中的第一层)

物理层:类似于说,你有台电脑,现在要联网,咋联?以前N年前,大家记不记得都是在电脑上插根线是吧,然后才能上网,结果现在就是联个wifi就行了,还有中国美国之前联网靠的是海底的光缆。所以物理层就指的就是这个,就是怎么把各个电脑给联结起来,形成一个网络,这就是物理层的含义,物理层负责传输0和1的电路信号。芯片内常使用的逻辑电平为5v的TTL电平或CMOS电平,一般为正逻辑,即:逻辑0表示低电压,逻辑1表示高电压;不同种类的逻辑电平表示的具体电压值不同;

一、数据链路层

我们通过物理层已经有传输的介质,并且也说了网络中的0和1是怎么表示的,但是怎么传,传给谁现在是还不知道的。所以后来出来了以太网协议,以太网。一组电信号是一个数据包,叫一个帧(frame),每个帧分成两个部分,标头(head)和数据(data),标头包含一些说明性的东西,比如说发送者、接收者和数据类型之类的。

以太网规定了,接入网络里的所有设备都得有个网卡,每个网卡必须得包含一个mac地址,mac地址就是这个网卡的唯一标识。

mac地址:48位的二进制,但是一般用12个16进制数字表示,前6个16进制是厂商编号,后6个16进制是网卡流水号。

以太网的数据包怎么从一个mac地址发送到另一个mac地址?

这个不是精准推送的,以太网里面,如果一个电脑发个数据包出去,会广播给局域网内的所有电脑设备的网卡,然后每台电脑都从数据包里获取接收者的mac地址,跟自己的mac地址对比一下,如果一样,就说明这是发给自己的数据包。

但是上面这种广播的方式,仅仅针对一个子网(局域网)内的电脑,会广播,一个电脑不能广播数据包给全世界所有的其他电脑,是仅仅广播给一个子网里面的电脑的。

二、网络层

子网内的电脑,通过以太网发个数据包,对局域网内的电脑,是广播出去的。那么怎么知道哪些电脑在一个子网内呢?这就得靠网络层了。

网络层里有IP协议,IP协议定义的地址就叫做IP地址。IP地址有IPv4IPv6两个版本,目前广泛使用的是IPv4,是32个二进制数字组成的,但是一般用4个十进制数字表示,范围从0.0.0.0到255.255.255.255之间。

每台计算机,都会分配一个ip地址,ip地址的前24位(就是前面3个十进制数字),代表了网络,后8位(就是最后1个十进制数字),代表了主机。如果几台电脑是一个子网的,那么前面的3个十进制数字一定是一样的。

ARP地址解析协议(Address Resolution Protocol),其基本功能为透过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。其实就是在子网内进行广播机器mac地址和ip的关系,子网中每个机器都知道其子网内所有机器的mac地址和ip的对应关系。它是IPv4中网络层必不可少的协议,不过在IPv6中已不再适用,并被邻居发现协议(NDP)所替代。

ARP工作流程:

  1. 主机A首先查看自己的ARP表,确定其中是否包含有主机B对应的ARP表项。如果找到了对应的MAC地址,则主机A直接利用ARP表中的MAC地址,对IP数据包进行帧封装,并将数据包发送给主机B。
  2. 如果主机A在ARP表中找不到对应的MAC地址,则将缓存该数据报文,然后以广播方式发送一个ARP请求报文。ARP请求报文中的发送端IP地址和发送端MAC地址为主机A的IP地址和MAC地址,目标IP地址和目标MAC地址为主机B的IP地址和全0的MAC地址。由于ARP请求报文以广播方式发送,该网段上的所有主机都可以接收到该请求,但只有被请求的主机(即主机B)会对该请求进行处理。
  3. 主机B比较自己的IP地址和ARP请求报文中的目标IP地址,当两者相同时进行如下处理:将ARP请求报文中的发送端(即主机A)的IP地址和MAC地址存入自己的ARP表中。之后以单播方式发送ARP响应报文给主机A,其中包含了自己的MAC地址。
  4. 主机A收到ARP响应报文后,将主机B的MAC地址加入到自己的ARP表中以用于后续报文的转发,同时将IP数据包进行封装后发送出去。

每个电脑都可以搞多个网卡的,不是只有一个网卡,一般笔记本电脑都有以太网网卡和wifi网卡,发送数据包的时候要决定走哪个网卡。其中有一个关键的设备路由器也是拥有多个网卡的;

路由器(Router):是用于连接多个逻辑上分开的网络,所谓逻辑网络是代表一个单独的网络或者一个子网。当数据从一个子网传输到另一个子网时,可通过路由器来完成。因此,路由器具有判断网络地址和选择路径的功能,它能在多网络互联环境中,建立灵活的连接,可用完全不同的数据分组和介质访问方法连接各种子网,路由器只接受源站或其他路由器的信息,属网络层的一种互联设备。

路由器的主要工作就是为经过路由器的每个数据帧寻找一条最佳传输路径,并将该数据有效地传送到目的站点。由此可见,选择最佳路径的策略即路由算法是路由器的关键所在。为了完成这项工作,在路由器中保存着各种传输路径的相关数据――路径表(RoutingTable),供路由选择时使用。路径表中保存着子网的标志信息、网上路由器的个数和下一个路由器的名字等内容。路径表可以是由系统管理员固定设置好的,也可以由系统动态修改,可以由路由器自动调整,也可以由主机控制。

路由表说白了就是一条发送消息给目标机器的一个最优路径,其中会经过一些路由器到达目标机器,如下图所示,以中间经过三个路由器为例,看一下路由表的生成:

网络层流程图

我们通过数据链路层知道数据传输是需要知道mac地址在进行广播的,如果你需要向不同子网的机器发送消息时需要知道其ip;

1、通过ARP表找到路由器对应的mac地址,其实就是网关的mac地址,因为是发送给其他子网的,所以需要将消息先给路由器,路由器会根据目前ip地址算出一个最优路径,在将消息传递给下一个路由器;

2、路由器之间也是通过广播来传递消息的,所以需要将以太网包中的目标mac地址修改为下一个路由器的mac地址,在通过路由器的另一个网卡来广播消息,下一个路由器发现mac地址是自己就会接收消息;

3、判断目标ip机器是否在自己的子网中,不是则修改mac地址为下一个路由器的mac地址,在继续广播,如果是在自己子网中则进行子网内广播,目标机器接收之后判断是给自己的则会进行解析;

三、传输层

一台机器上,是很多个程序用一个网卡进行网络通信的,比如说浏览器、QQ、视频直播,这些软件都用了一个网卡往外面发送数据,然后从网卡接收数据,所以其实还有一个端口的概念,系统在启动时会监听一个端口,如果该端口被占用了会进行切换端口;

传输层协议主要有两个

  • TCP(Transmission Control:Protocol)
  • UDP(User Datagram Protocol)

TCP即传输控制协议,是一个可靠的、面向连接的协议。它允许网络间两台主机之间无差错的信息传输。TCP协议还进行流量控制,以避免发送过快而发生拥塞。不过这一切对用户都是透明的。

UDP即用户数据报协议,它采用无连接的方式传送数据,也就是说发送端不关心发送的数据是否到达目标主机,数据是否出错等。收到数据的主机也不会告诉发送方是否收到了数据,它的可靠性由上层协议来保障。

四、应用层

应用层将会话层、表示层和应用层合成一层,应用层比较常见的协议则为http协议,进行网络通信,规定了数据解析的格式,如:文本数据,网页数据,邮件数据等;

http数据传输时有时会通过域名去传输数据,但是我们之前网络层是通过ip协议进行地址解析传输数据的,那域名怎么处理呢?域名则会通过DNS解析成ip之后进行后续的处理;

DNS是什么?

DNS 全名叫 Domain Name Server,中文俗称“域名服务器”,在Internet上域名与IP地址之间是一一对应的,域名虽然便于人们记忆,但机器之间只能互相认识IP地址,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器来完成,DNS就是进行域名解析的服务器。DNS 是一个分布式数据库,提供了主机名和 IP 地址之间相互转换的服务。这里的分布式数据库是指,每个站点只保留它自己的那部分数据。

总结

4层:数据链路层(以太网协议),网络层(ip协议),传输层(tcp协议),应用层(http协议)

7层:物理层(网线,海底光缆,传递0/1电路信号),会话层、表示层、应用层 -> 应用层