TCP/IP五层模型简单介绍

对计算机网络中TCP/IP五层模型每层的设备及工作进行介绍

概述

互联网可以说是由一系列协议组成的。

分为好几层,每一层都是由下一层支持,就像盖房子一样

分层有七层和五层,这里只针对于五层协议来说。

自底向上分为:

  1. 物理层:把电脑连接起来的物理手段,通过电缆,光缆等等,作用就是负责传输0和1
  2. 数据链路层(MAC):规定了多少个信号算一组,确定0和1的分组方式,也就是以太网协议
  3. 网络层(IP):传输数据包,通过虚拟的IP地址;建立主机到主机之间的通信
  4. 传输层(TCP/UDP):与远程计算机建议连接(Established),建立端口到端口的通信
  5. 应用层:生成数据和请求连接

我们平时开发接触到的一般是应用层

每一层之间如何联系工作?

物理层

把电脑连接起来的物理手段,通过电缆,光缆等等,作用就是负责传输0和1,就是传输电信号

数据链路层

以太网协议

规定了多少个信号算一组,确定0和1的分组方式,0和1的含义;也就是以太网协议

以太网规定一个数据帧由head和data组成:

head:固定长度18字节,包含发送者和接收者的信息

data:最短46字节,最长1500字节

整个帧最短64字节,最长1518个字节

MAC地址

以太网协议的head中包含了发送者和接收者的信息,如何确定发送者和接收者的身份?这就用到了MAC地址,head中有发送者和接收者的MAC地址,这个MAC地址也就是网卡的MAC地址,就是你的数据是通过哪一块网卡发送的。

MAC地址重复?每一块网卡出厂的时候都会有一个MAC地址,这个MAC地址是全世界独一无二的

当然MAC地址也可以通过某些软件修改

MAC地址具体长啥样?

12个十六进制数

可以查看计算机的网络属性,里面就有网卡的MAC地址:

网卡长啥样?或者打开购物网站,搜索网卡;具体如下图

广播

两个问题

  1. 我咋知道对面网卡的MAC地址?

    是通过ARP协议,在TCP/IP模型中,ARP协议属于网络层(IP层),在OSI七层模型中,ARP协议属于数据链路层

  2. 知道了MAC地址,怎么把数据包发送到对应MAC地址的计算机呢?

    很原始的方式,就是广播,给同一个网络(子网)的所有计算机都要发送数据包,每个计算机检查自己收到的数据包,看看目标MAC地址是不是自己,不是自己就扔掉,是自己的就接受

网络层

建立主机到主机之间的通信

以太网的方式局限于子网络中,互联网是由无数个子网组成的一个巨型网络,当发数据包的时候,我们会,先看看是不是在同一个子网中,如果是同一个子网,就直接以太网的方式发送,也就是广播,如果不是同一个子网,就通过路由的方式发送,就是先找到对面的子网,然后再找mac具体计算机。

IP地址

这里只说IPV4

简单认识下IP地址

从0.0.0.0~255.255.255.255,看似只有四位,其实每一位都是由一个八位的二进制数组成

00000000.00000000.00000000.00000000 ~ 11111111.11111111.11111111.11111111

这个四位的十进制表示法其实是为了方便记忆

ip地址由网络地址和主机地址组成,网络地址就是看这俩ip是不是在一个子网里面

如何区分IP地址的网络地址和主机地址?

这就用到了子网掩码的概念:

【子网掩码】形式上和IP地址一样,都是四位的十进制数表示,每一位是由八个二进制数表示,它的特点就是网络地址的二进制数全是1,主机地址的二进制数全是0

如子网掩码:255.255.255.0,就是:11111111.11111111.11111111.0

【例子】:如192.168.1.3,他的子网掩码是255.255.255.0

区分哪几位是网络地址,可以拿ip地址和子网掩码做与运算,

11000000.10101000.00000001.00000011

11111111.11111111.11111111.00000000

11000000.10101000.00000001.00000000

192.168.1.0就是网路号

如果现在又来了个ip是192.168.1.5,和子网掩码(255.255.255.0)做与运算,得出网络号是192.168.1.0,所以这两个IP属于同一个子网中

IP数据包

以太网数据包是否需要再加个栏位?存入发送方的ip和接收方的ip,那是没有必要的,我们有ip数据包,数据包中就已经存入了发送方ip和接收方ip,那这个ip数据包咋传呢?直接放入以太网数据包的data中即可

ip数据包也是由head和data组成

将ip数据包放入以太网数据包,以太网数据包就是如下模样了:

ip数据包最大也是65535字节,所以ip数据包的data中可以放65535-head(20)=65515个字节(head最小是20字节)

ARP协议

干啥的:通过主机ip找到主机的MAC地址

既然我们的ip数据包是放在下一层的以太网数据包里面,那么,我们必须知道目标主机的ip地址和MAC地址,ip地址我们知道,因为就是要向目标ip主机发数据包的,那么MAC地址怎么搞?所以就用到了ARP协议

  1. 情况一:两个主机不在同一个子网,则发送至目标ip所在网关,然后具体寻址
  2. 情况二:两个主机在同一个子网,直接使用ARP协议,发送IP数据包,但是到以太网数据包封装的时候,目标MAC地址封装为FF:FF:FF:FF:FF:FF,表示这个是广播地址,那么所有计算机都会收到,然后看自己的ip是不是数据包中的ip,如果是则上报自己的MAC地址,然后就完成寻址

端口的概念

当一个数据包发来我们的电脑,我们现在正在浏览网页,还正在和朋友聊QQ,咱们怎么知道从网络上获取到的这个数据包是网页数据还是qq消息?所以就有了端口

原来,我们每一个应用(进程)都会监听一个计算机的端口,发过来的数据包也会指定是哪个端口应用来接收处理,端口其实是每一个使用网卡的程序的编号。

端口号在065535之间,01023是计算机占用的,用户不可以占用,所以我们只能占用其他的

只要确定了主机和端口,我们就可以建立程序和程序之间的通信了,而网络层只能建立主机到主机之间的通信,所以就有了传输层!

传输层

建立端口到端口之间的通信

只要确定主机和端口,我们就能建立程序和程序之间的通信了,所以unix系统就把主机+端口叫做套接字(Socket),有了Socket我们就可以进行网络编程了!传输层主要就是两大协议,TCP和UDP

UDP

也分为head和data,很简答,几乎就是在数据前面加上简单的发送和接受者的信息

head:存储发送端的ip和端口,接收端的ip和端口

data:存储数据

udp的head部分只有8字节,总长度不会超过65535个字节

这个UDP数据包是放在IP数据包的data部分

又因为IP数据包是放在以太网数据包的data部分,所以以太网数据包就是如下

UDP协议简单轻便,性能消耗少,但是UDP不可靠,发出去不知道对面是否收到,这种情况下TCP就诞生了

TCP

可以粗略的认为TCP是有确认机制的UDP

可以保证数据不会丢失,缺点是性能消耗大

TCP数据包无长度限制,但是一般不会超过IP数据包的长度

两者比较

早期QQ其实也是用的UDP,后来肯定换TCP了

应用层

应用层协议有:HTTP协议、FTP协议、SMTP协议(邮件传送协议)、DNS协议、WebServices协议和DHCP协议等等

应用层的数据包是放到了TCP或UDP的data里面的

最后总的包结构如下所示:

两个子网中的计算机通信通过网关来通信

DHCP协议

DHCP(Dynamic Host Configuration Protocol),动态主机配置协议,是一个应用层协议。 当我们将客户主机ip地址设置为动态获取方式时,DHCP服务器就会根据DHCP协议给客户端分配IP,使得客户机能够利用这个IP上网。

流程:子网中一台电脑开机,就向子网中的DHCP服务器发送一个DHCP数据包,申请一个IP和子网掩码网关等相关网络参数

新加入的机器自己没有ip,只有一个MAC地址,并不知道DHCP服务器的IP和MAC地址,这咋发数据包啊!

DHCP做了解决办法:

发出方ip:0.0.0.0 接收方ip:255.255.255.255

发出方的MAC地址:网卡的MAC地址 接收方的MAC地址:FF:FF:FF:FF:FF:FF

发出方端口:68 接收方端口:67端口

子网中每个计算机都会收到这个数据包(因为接收方MAC是全F,就是局域网内广播),DHCP服务器看到发出方IP是0.0.0.0,接收方是255.255.255.255就知道自己来活了,然后进行分配IP,进而返回一个DHCP响应,相关网络参数都在data里面了,然后新加入的机器就能上网了

浏览器输入一个网址,网络协议之间是怎么运作的?

  1. 输入网址:DNS协议解析到IP,然后本机先查看这个ip和自己的子网掩码计算,看看是不是在一个子网中
  2. 一看不是在一个子网中,所以就必须得经过网关(路由器)进行转发
  3. 然后TCP协议将请求发到网关,设置发送方随机端口号,接收方网址的端口,一般是80
  4. IP协议发送,指定发送方和接收方的IP
  5. 以太网协议,设置双方MAC地址,发送方是本机,接收方是网关MAC地址

从咱们自己的网关发出去还需要经过多个网关的转发才会到服务器,然后服务器做响应,同样的步骤

参考

本文的学习基于@biezhi大哥的视频学习的,视频链接:https://www.youtube.com/watch?v=iNITVjVLpxI&list=PLK2w-tGRdrj4kATfdbiZmwQbI2NkYGGlY