TCP/IP五层网络协议

1,112 阅读13分钟

本文正在参与 “网络协议必知必会”征文活动

C/S & B/S机构

互联网通信软件有两种模式,分别是C/S架构和B/S架构。

C/S架构指的是Client-Server,分别有一个客户端软件和一个服务端软件,比如说计算机上安装的QQ、WeChat、Youku等都属于C/S架构的网络通信软件,需要安装客户端软件。

B/S架构指的是Brower-Server,B/S架 构本质上也是C/S架构,B指的就是浏览器,在这种架构中浏览器就是客户端,比如访问百度,百度就是服务端 ,访问优酷网页端,优酷网页端就是服务端。

计算机之间进行通信从根本上来说还是基于计算机硬件,计算机硬件之间通过物理介质进行通信。

网络通信介绍

网络存在的意义就是跨地域传输数据,也称为通信;互联网的本质就是一系列的网络协议,这些协议规定了计算机如何接入Internet以及接入Internet的标准。比如说中国人和中国人打电话说的是中文,美国人和美国人打电话说的是英文。

因此可以说网络 = 物理链接介质 + 互联网通信协议。

网络通信协议

互联网的核心就是由一堆协议组成,目前来讲世界上通用的语言是英语,如果将计算机比作人的话,互联网协议就是计算机界的英语,如果所有计算机都遵守互联网协议,那么所有的计算机都可以按照统一的标准进行收发信息从而完成通信。这些协议规定了计算机如何接入Internet以及接入Internet的标准。

互联网协议按照功能不同分为osi七层协议或者tcp/ip五层协议或者tcp/ip四层协议。

image-20210606153337950

OSI七层协议是国际标准化组织ISO提出的,但由于是市场原因和该协议本身的缺点(协议实现过于复杂等)导致起初市场上大规模使用的并不是该协议,而是因特网。所以有这样一个现象:得到最广泛应用的不是法律上的国际标准OSI,而是非国际标准TCP/IP五层协议。这样TCP/IP五层成为了事实上的国际标准。

TCP/IP五层协议

将应用层、表示层、会话层合并为应用层,接下来我们就从TCP/IP五层协议的角度介绍每层的功能,理解互联网通信原理。

用户感知到的只有最上面一层协议即应用层,自上而下每层都依赖下一层,因此从最下面一层-物理层还是介绍,每层都有特定的协议,越往上越靠近用户,越往下越靠近硬件。

物理层

计算机之间想要一起happy,就必须接入Internet,就是计算机之间必须完成组网。

物理层的主要功能就是发送电信号,一组物理层的数据称为,单纯的电信号没有任何数据意义,必须对电信号进行分组才能使这些电信号具有数据意义。

问题就是如何对这些电信号进行分组呢?这就是数据链路层的作用。

数据链路层

由于计算机之间通信的底层是基于电信号的,电信号只有两种状态0和1,但是单纯的电信号没有任何意义,必须对这些电信号进行分组,每组表示什么意义。因此数据链路层的主要作用就是定义电信号的分组方式。

以太网协议

对电信号的分组方式以前是不统一的,后来形成统一的标准后,就是现在的以太网协议,因此,以太网协议规定了数据链路层对电信号的分组方式。

以太网协议规定,一组电信号构成一个数据包,叫做,每一个数据帧分成报头head和数据data两部分。

head - 固定包含18个字节data - 46~1500字节
发送者/源地址:6个字节
接收者/目标地址:6个字节
数据类型:6个字节
电信号数据包的具体内容

每个数据帧包含的数据最短为64字节,最长为1518字节,如果超过最大限制就分片发送。

mac地址

报头中发送者和接收者的地址又是如何来的呢?以太网协议规定接入Internet的设备都必须具备网卡,发送者和接收者的地址就是指网卡的地址,即mac地址。每块网卡在出场的时候就会被刻上世界上唯一的mac地址。

广播

有了mac地址标识不同的计算机,同一网络内的两台计算机就可以通信了(一台计算机通过ARP协议获取另一台计算机的mac地址),以太网协议采用最原始的方式---广播进行通信,理论上只要有数据链路层就可以实现全世界的网络通信,但是这是非常不合理的,因为全世界的计算机不可能存在于同一个广播域。以太网协议广播的这种通信方式,会产生一个问题,就是发送者发送一个数据包时,在同一个网络中的其他计算机也可以收到这个数据包,数据量太大。

为了解决以太网协议的这种广播靠吼产生的问题,网络层就有了解决方案 --- 将计算机放到不同的广播域中。

网络层

通过以太网协议,理论上来说世界上的计算机都可以进行彼此通信,但是世界上的互联网是由一个个彼此隔离的小的局域网组成的,如果所有的通信都采用以太网协议的这种广播进行信息发送,那么一台计算机发送的数据包全世界都能收得到,这已经不只是效率的问题了。因此必须找到一种方式来区分哪些计算机属于同一个广播域,在同一个广播域中的计算机可以通过广播的方式进行数据包的传输。

网络层引入了一套新的地址来区分不同的广播域(子网),这套地址就是网络IP地址。

IP协议

IP协议规定了网络地址,该地址称为IP地址,目前多数还是使用的v4版本ipv4,范围是0.0.0.0~255.255.255.255,一个IP地址通常携程四段十进制数比如112.162.78.49.

IP协议同时规定,一组数据称为一个数据包,数据包分成两部分,头和数据,头包含源IP地址和目标IP地址,数据是传输层发送过来的数据。

IP地址分为两部分,一部分是网络部分,用来标识局域网(子网),另一部分是主机部分,用来标识主机,单纯的ip地址段只是标识了IP地址的种类,从网络部分或主机部分都无法辨识一个ip所处的子网。比如112.162.78.49和112.162.78.94并不能说明这两个IP地址属于同一个局域网。

一个合法的ipv4地址组成部分应当是:IP地址 /子网掩码地址。

子网掩码

子网掩码是表示局域网(子网)特征的一个参数,在形式上等同于IP地址,是一个32位二进制数字,网络部分全部为1,主机部分全部为0。比如,IP地址为172.16.10.1,如果已知网络部分是前24位,主机部分是后8位,那么该网络的子网掩码就是:

11111111.11111111.11111111.00000000,写成十进制就是255.255.255.0

子网掩码的功能就是用来判断任意两个IP地址是否处于同一个子网(局域网),判断两个IP 地址是否属于同一个局域网的方法就是将两个IP地址与子网掩码分别进行与运算(两个数位都为1,运算结果为1,否则为0)。如果比较结果相同,如果相同就表明它们在同一个子网中,否则不在。 判断两个计算机是否属于同一个局域网,比如:

# IP地址和子网掩码配合到一起会计算出一个广播域地址/子网地址/局域网地址
# 计算方式:将IP地址和子网掩码地址转换为二级制 --- 按位与运算
计算机1
172.16.10.110101100.00010000.00001010.00000001
255.255.255.0       11111111.11111111.11111111.00000000
计算结果: 172.16.10.010101100.00010000.00001010.00000000

计算机2
172.16.10.210101100.00010000.00001010.00000010
255.255.255.0    11111111.11111111.11111111.00000000
计算结果: 172.16.10.010101100.00010000.00001010.00000000

如果两个计算机处于同一个局域网,直接靠广播的方式进行数据包的传输,如果不属于同一个局域网,需要通过网关,将数据包输出到公网,根据IP协议传输给另一个网络地址。

ARP协议

计算机通信基本靠吼,即广播的方式,所有上层的包到最后都要封装上以太网头,然后通过以太网协议发送,在谈及以太网协议时候,我们了解到通信是基于mac的广播方式实现,计算机在发包时,获取自身的mac是容易的,如何获取目标主机的mac,就需要通过ARP协议。

ARP协议是通过获取目标计算机的IP地址,从而获取获取其mac地址。

传输层

网络层的IP地址可以区分计算机属于哪个局域网,数据链路层的mac地址可以标识独一无二的计算机,那么如何对计算机上的应用程序进行标识呢?因为计算机发送的数据可能是由不同的应用程序发送,比如QQ、youku,标识计算机上的应用程序就需要靠端口,端口是应用程序与网卡关联的编号,端口的范围是0-65535,0-1023位系统占用端口。

传输层的功能就是建立端口到端口的通信。传输层有两种协议分别是TCP协议和UDP协议。

TCP协议

TCP协议也被称为好人协议,是可靠传输的,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割。

基于TCP协议的通信,客户端与服务端必须建立一个双向通信的通道,客户端和服务端在建立双向连接时需要进行三次握手,断开连接时则需要四次挥手

UDP协议

UDP协议是不可靠传输的,发送数据之前不需要建立连接,同理发送数据结束也没有连接可以释放,这极大减少了资源开销,但是UDP协议不保证数据的可靠交付,只负责将数据尽可能快的发出去。

应用层

用户使用的都是应用程序,都工作在应用层,互联网是开放的,大家都可以开发自己的应用程序,数据多种多样,就必须规定好应用层的数据的组织形式,因此应用层的功能就是规定应用程序的数据格式。

TCP协议可以为各种各样的程序传递数据,比如邮件、文件等,因此就必须有不同的协议来规定邮件、网页、文件等数据的格式,这些应用程序的协议就构成了应用层,这些协议就包括HTTP协议、SMTP、FTP等协议。

网络通信流程

下面这张图片很好地总结了这几层协议数据传输的封包和解包过程:

img

计算机想要实现网络通信,每台计算机需要具备四种要素:

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

DNS域名解析

在互联网中其实没有类似于www.baidu.com这种域名的概念,而应该是IP地址,比如百度的IP地址是112.112.112.0,在浏览器中应该输入此IP地址,也可以访问百度,但是如今网站的数量数不胜数,如果要记住这么多网站的IP地址实在是一个非常大的挑战,所以DNS就出出现了。

这里并不对DNS进行详细的介绍,如果有想要详细的了解DNS的小伙伴,可以自行搜索相关知识,这对我们正常编程影响不大。

这里只需要知道,DNS的主要作用就是将IP地址解析为域名,比如将112.112.112.0解析为www.baidu.com

网络通信流程

我们知道基于网络通信的软件有两种:BS架构、CS架构。不同之处在于BS架构没有客户端软件,它依赖浏览器(特殊的客户端)。

在网络通信流程方面的不同之处在于,BS架构的软件在客户端(浏览器网址输入栏)多一个DNS域名解析过程。

在浏览器的网址输入栏上输入一个网址,按回车键到获取页面响应信息发生了以下几件事情:

在浏览器的url输入框中输入想访问的地址.

(1) 在发送http请求之前,需要进行域名解析得到目标服务器的IP地址,查询请求会先找到本地 DNS 服务器来查询是否包含 IP 地址,如果本地 DNS 无法查询到目标 IP 地址,就会向根域名服务器发起一个 DNS 查询用户需要访问的IP地址。

(2) 浏览器和目标服务器建立TCP连接。

(3) 建立连接之后浏览器会向目标服务器发起http请求,请求数据包。

(4) 如果目标服务器是一个简单的页面,就会直接返回。对于需要的重定向的页面,浏览器在获取了重定向响应后,找到重定向地址,重复第一步操作,然后浏览器重新发送请求,携带新的 URL,目标服务器返回数据。

结语

文章首发于微信公众号程序媛小庄,同步于掘金知乎

码字不易,转载请说明出处,走过路过的小伙伴们伸出可爱的小指头点个赞再走吧(╹▽╹)

网络协议