【网络协议系列】- 五层模型


一、五层模型

  • 应用层

    • 应用层决定了向用户提供应用服务时通信的活动
    • Email、WWW、FTP、HTTP
  • 传输层

    • 传输层对上层应用层,提供处于网络连接中的两台计算机之间的数据传输

    • TCP 和 UDP 协议

  • 网络层

    • 处理在网络上流动的数据包,数据包是网络传输的最小数据单位
    • 选择通过怎样的传输路线到达目的主机,起路由作用
    • IP 协议、IP地址、ARP协议、ICMP协议
  • 链路层/链接层

    • 确定了0和1的分组方式,把报文送达目的主机
    • 以太网协议、MAC地址、广播
  • 实体层/物理层

    • 把电脑连接起来的物理手段,光缆、电缆、双绞线、无线电波等,负责传送0和1的电信号

二、链接层

数据链路层的主要目的:

  • 为IP模块发送和接受IP数据包
  • 为ARP模块发送ARP请求,接受ARP应答
  • 为RARP发送RARP请求,接受RARP应答

TCP/IP支持多种不同的数据链路协议,如以太网协议、令牌环网、FDDI、RS-232串行线路等

当今主要局域网技术还是以太网

1. 以太网协议

以太网Ethernet,一组电信号构成一个数据包,叫做"帧"(Frame),每一帧分成两个部分:标头(Head)和数据(Data)

"标头"包含数据包的一些说明项,比如发送者、接受者、数据类型等,"数据"则是数据包的具体内容

"标头"的长度,固定为18字节;"数据"的长度,最短为46字节,最长为1500字节。因此,整个"帧"最短为64字节,最长为1518字节,如果数据很长,就必须分割成多个帧进行发送

1.1 MAC地址

以太网数据包的"标头",包含了发送者和接受者的信息,其信息通过MAC地址标识

以太网规定,连入网络的所有设备,都必须具有"网卡"接口,数据包必须是从一块网卡,传送到另一块网卡。网卡的地址,就是数据包的发送地址和接收地址,这叫做MAC地址

每块网卡出厂时,都有一个全世界独一无二的MAC地址,长度是48个二进制位,通常用12个十六进制数表示,前6个十六进制数是厂商编号,后6个是该厂商的网卡流水号

有了MAC地址,就可以定位网卡和数据包的路径了

1.2 广播

一块网卡怎么知道另一块网卡的MAC地址?可通过ARP协议

以太网数据包必须知道接收方的MAC地址,才能发送

就算有了MAC地址,怎样把数据包准确送到接收方?

以太网采用了一种很"原始"的方式,它不是把数据包准确送到接收方,而是通过广播,向子网络内所有计算机发送,让每台计算机自己判断,是否为接收方

收到广播的主机读取这个包的"标头",找到接收方的MAC地址,然后与自身的MAC地址相比较,如果两者相同,就接受这个包,做进一步处理,否则就丢弃这个包

2. 最大传输单元MTU

数据链路层中的网络对数据帧的长度都有一个限制,不同网络的MTU不同

常用的以太网为1500字节,其他网络的MTU:

在这里插入图片描述

MTU主要为了限制一次传输的最大IP数据报的大小,如果IP层有一个长度比数据链路层MTU大的数据报要传,则需将IP数据报分片,使每片都小于MTU

路径MTU:

  • 如果两台主机之间的通信要经过多个网络 ,每个网络的链路层有不同的MTU,这时要考虑通信路径上各网络的最小MTU,称为路径MTU
  • 不一定对称,取决于选择的路径,从A到B的MTU可能和从B到A的MTU不同

三、网络层

以太网协议采用广播方式发送数据包,所有成员人手一"包",不仅效率低,而且局限在发送者所在的子网络,如果两台计算机不在同一个子网络,广播是传不过去的。这种设计是合理的,否则互联网上每一台计算机都会收到所有包,那会引起灾难

互联网是无数子网络共同组成的一个巨型网络,因此,必须找到一种方法,能够区分哪些MAC地址属于同一个子网络,哪些不是。如果是同一个子网络,就采用广播方式发送,否则就采用"路由"方式发送

这就导致了"网络层"的诞生,来引进一套新的地址,用于区分不同计算机是否属于同一个子网络

于是,"网络层"出现以后,每台计算机有了两种地址,一种是MAC地址,另一种是网络地址。两种地址之间没有任何联系,MAC地址是绑定在网卡上的,网络地址则是管理员分配的

网络地址帮助确定计算机所在的子网络,MAC地址则将数据包送到该子网络中的目标网卡

1. IP协议

规定网络地址的协议,叫做IP协议,目前广泛采用的是IPv4

IP协议的作用主要有两个,为每一台计算机分配IP地址,和确定哪些地址在同一个子网络

1.1 IP地址

网络地址由32个二进制位组成,习惯上,用4个十进制数表示IP地址,从0.0.0.0一直到255.255.255.255

  • IP地址分成两个部分,网络部分+主机部分;比如,IP地址172.16.254.1,这是一个32位的地址,假定它的网络部分是前24位(172.16.254),那么主机部分就是后8位(最后的那个1)

  • 处于同一个子网络的电脑,IP地址的网络部分必定相同

  • 单单从IP地址,无法判断网络部分,要用到另一个参数"子网掩码"(subnet mask)

  • 子网掩码形式上等同于IP地址,也是一个32位二进制数字,它的网络部分全部为1,主机部分全部为0;比如,如果网络部分是前24位,则子网络掩码写成十进制就是255.255.255.0

  • 判断任意两个IP地址是否处在同一个子网络,可将两个IP地址与子网掩码分别进行AND运算,然后比较结果是否相同,如果是的话,就表明在同一个子网络中,否则不在

1.2 IP数据包

根据IP协议发送的数据,叫做IP数据包

把IP数据包直接放进以太网数据包的"数据"部分

IP数据包也分为"标头"和"数据"两个部分,标头长度为20到60字节,主要包括版本、长度、IP地址等信息,数据部分则是IP数据包的具体内容

整个IP数据包的总长度最大65535字节,因此,一个IP数据包的"数据"部分,最长为65,515字节;以太网数据包的"数据"部分,最长只有1500字节,因此,如果IP数据包超过了1500字节,它就需要分割成几个以太网数据包,分开发送了

1.3 IP数据报格式

前20字节和选项部分为IP数据报的首部

大端字节序传输:对于4字节的32bit,先传输0-7bit,再8-15,16-23,最后24-31bit,TCP/IP首部的传输都以这种次序,又称网络字节序,其他形式(如little endian)存储的二进制数据在传输数据前必须转为网络字节序

  • 4位首部长度: 指首部所占的32b的数目,首部长最大60字节,正好可用4位二进制数表示,选项部分最长40字节,不够4的倍数要用0填充

  • 16位总长度: 指整个IP数据报的长度,包括首部和数据部分,最长65535字节;虽然理论上能传,但要考虑网络的最大承载能力,标准的TCP/IP分组大小为576字节,减去20字节的IP首部,20字节的TCP首部,24字节的路由协议头,还剩512字节,因此数据部分一般不超过512字节

  • 3位标志: 主要用来标识分片的IP数据报

  • 13位片偏移: 指分片的数据报的首个字节偏离整个原始数据报的位置

在这里插入图片描述

1.4 IP路由选择

主机通过路由器与目的主机连接,搜索到达目的主机路径的过程如下:

  • 先搜索路由表,如果能找到与IP地址完全一致的目标主机,则向该主机发送数据包
  • 如果匹配失败,则匹配同子网的路由器,将包发给路由器
  • 如果搜索路由器失败,则匹配同网号的路由器,将包发给它
  • 又失败了则搜索默认路由器,发包给它
  • 如果全失败了,就丢掉这个包

2. ARP协议

ARP协议用于根据IP地址得到MAC地址

  • 通常情况下,对方的IP地址是已知的,但不知道它的MAC地址

    • 如果两台主机不在同一个子网络,那么事实上没有办法得到对方的MAC地址,只能把数据包传送到两个子网络连接处的"网关"(gateway),让网关去处理
    • 如果两台主机在同一个子网络,那么可以用ARP协议,得到对方的MAC地址
  • ARP协议发出一个数据包(包含在以太网数据包中),其中包含它所要查询主机的IP地址,在对方的MAC地址这一栏,填的是FF:FF:FF:FF:FF:FF,表示这是一个"广播"地址。它所在子网络的每一台主机,都会收到这个数据包,从中取出IP地址,与自身的IP地址进行比较。如果两者相同,都做出回复,向对方报告自己的MAC地址,否则就丢弃这个包

3. RARP协议

与ARP协议相对,将MAC地址解析为IP地址

RARP协议通常在DHCP中集成,很少单独使用

ARP和RARP的补充:

  • 局域网中的ARP攻击是通过伪造IP地址和MAC地址实现ARP欺骗,能在网络中产生大量的ARP通信量,使网络阻塞
  • 每台主机都有一个ARP缓存,保存了最近发送的IP到MAC的映射记录,当该主机要向局域网中的某一主机发送数据时,会先从自己的缓存中查找,看是否存在目标的IP地址
    • 若找到,则映射它的MAC地址
    • 若找不到,则向局域网内发送一个ARP广播,局域网中的所有主机都会收到该广播,只有目的IP地址的主机会做出回应,并把自己的MAC地址发送给源主机,源主机收到后会在自己的ARP缓存上增加该映射,并根据发来的MAC地址将之间要发的数据发给目的主机
    • ARP高速缓存表项一般要设置超时值,一段时间没有与对应主机通信,就要将该条IP与MAC的映射去掉,下次再找该主机时还得重新广播
  • 如果ARP请求跨网络,则就由连接这俩网络的路由器回答该请求,充当ARP代理

4. ICMP协议

ICMP协议规定传递差错报文及其他需要注意的信息

ICMP报文通常被IP层或更高层使用,在IP数据报内传输

ICMP报文分为两类:

  • **差错报文:**当传送IP数据报发生错误时,ICMP协议会发送一个ICMP差错报文给源主机
    • 错误包括:主机不可达、网络不可达、协议不可达、端口不可达等,端口不可达指UDP中如果收到一份UDP数据报但端口与进程不符,则UDP返回一个ICMP端口不可达报文
    • Traceroute程序就是利用端口不可达来产生ICMP差错报文的
    • 大多数情况下,传送IP数据报发生错误就会产生一个ICMP错误报文,但为了防止广播风暴,下面情况不会产生:
      • ICMP差错报文不会再产生差错报文,查询报文可能会
      • 目的地址是广播地址或多播地址的IP数据报
      • 作为链路层传播广播的数据报
      • 不是IP分片的第一片
      • 原地址不是单个主机的数据报
  • **查询报文:**主要用于子网掩码查询、时间戳查询、ping查询

ICMP应用:

  • ping程序
    • ping程序是对两个TCP/IP系统连通性进行测试的基本工具,查看连通性、丢包率
    • 只利用ICMP回显请求和回显应答报文,不用经过传输层
  • Traceroute程序
    • Traceroute用来侦测源主机到目的主机之间所经过的路由的情况
    • 使用ICMP报文和IP首部中的TTL字段
    • 原理:开始时发送一个TTL字段为1的UDP数据报,而后每次收到ICMP超时报文后,再发送一个TTL字段+1的UDP数据报,以确定路径中的每个路由器,最终达到目的主机后,由于选择了一个不可能的值(大于30000)作为UDP接口,故目的主机会发送一个端口不可达的ICMP错误报文

ICMP源站抑制差错:

  • 当系统中某主机或路由器处理数据的速度赶不上接受数据的速度时,因为接收主机的IP缓存可能会被占满,而产生 ICMP抑制 差错报文

四、传输层

有了MAC地址和IP地址,就已经可以在互联网上任意两台主机上建立通信

但同一台主机上有许多程序都需要用到网络,需要表示每个数据包到底供哪个进程使用,端口这个参数,其实是每一个使用网卡的程序的编号,每个数据包都发到主机的特定端口,所以不同的程序就能取到自己所需要的数据

端口是0到65535之间的一个整数,正好16个二进制位。0到1023的端口被系统占用,用户只能选用大于1023的端口。不管是浏览网页还是在线聊天,应用程序会随机选用一个端口,然后与服务器的相应端口联系

传输层的功能,就是建立"端口到端口"的通信。相比之下,"网络层"的功能是建立"主机到主机"的通信。只要确定主机和端口,我们就能实现程序之间的交流

Unix系统就把主机+端口,叫做"套接字"(socket)

1. UDP协议

在数据包中加入端口信息,最简单的实现就是UDP协议

  • UDP数据包,标头一共只有8个字节,放发出端口和接收端口,UDP数据包总长度不超过65535字节,正好放进一个IP数据包
  • UDP首部的校验和是对首部和数据部分都校验的,TCP也是校验一整个,而IP只校验IP首部;UDP校验和是可选的,TCP是必选的
  • UDP是不可靠的协议,没有超时和重传功能,UDP数据封装到IP数据报传输,丢了会发送ICMP差错报文给主机
  • UDP不会分段,需由IP来分,UDP在网络层完成分片和重组

数据报截断:

  • IP数据报最大只能发65535字节,UDP大于限制的数据报会被截断,从而发生数据丢失,并且没有任何出错通知
  • 而TCP对于过大的数据报可以分片传输,且有收到确认和重传

2. TCP协议

UDP协议可靠性较差,一旦数据包发出,无法知道对方是否收到;TCP提供了一种可靠的、面向连接的数据传输服务

TCP提供可靠性的手段:

  • TCP保持可靠性的方式是超时重传,这比ICMP差错报文要好,因为其可能在过程中又丢失了

    • TCP发出一个报文后,会启动一个定时器,等待目的端发送确认收到报文,如果没能及时收到确认信息,则重发这个报文,确保数据不会遗失
    • TCP接收端收到TCP报文段时,发送确认不是立即发送,而会推迟几分之一秒
  • TCP保持它首部和数据的校验和,如果收到的报文段校验和有差错,则TCP丢掉该报文段,同时不发送确认收到消息,从而使发送端超时重发

  • TCP能提供流量控制,TCP连接的每一方都有固定大小的缓存空间

  • 由于TCP报文段作为IP数据报来传输,IP数据报可能失序到达,因此TCP数据报也会失序,TCP会对收到的数据进行重排序,将收到的数据以正确顺序交给应用层

  • 由于IP数据报可能有重复,TCP接收端必须丢弃重复数据

  • 应用层数据被分割为TCP认为最合适发送的大小,而UDP不会切割数据报,只会在加上IP首部后,由IP层分片

    • TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割
  • 缺点是过程复杂、实现困难、消耗较多的资源

五、应用层

TCP协议可以为各种各样的程序传递数据,比如Email、WWW、FTP等等。那么,必须有不同协议规定电子邮件、网页、FTP数据的格式,这些都是不同的应用层协议

这是最高的一层,直接面对用户,它的数据就放在TCP数据包的"数据"部分

在这里插入图片描述

1. WWW

最初设想的基本理念是:借助多文档之间相互关联形成的超文本,连成可相互参阅的World Wide Web万维网,WWW也可简称为 Web

现在已提出了 3 项 WWW 构建技术,分别是:

  • 把 SGML(Standard Generalized Markup Language,标准通用标记语言)作为页面的文本标记语言的 HTML(HyperText Markup Language,超文本标记语言)
  • 作为文档传递协议的 HTTP
  • 指定文档所在地址的 URL(Uniform12Resource Locator,统一资源定位符)

2. TCP/IP协议族

TCP/IP 是互联网相关的各类协议族的总称

在这里插入图片描述

接收端的服务器在链路层接收到数据,按序往上层发送,一直到应用层。当传输到应用层,才能算真正接收到由客户端发送过来的 HTTP请求

在这里插入图片描述

3. DNS

应用层协议

负责域名解析,DNS服务器提供域名到 IP 地址之间的解析服务

主机既可以被赋予 IP 地址,也可以被赋予主机名和域名,比如www.hackr.jp

在这里插入图片描述

4. HTTP

  • HTTP规定在HTTP客户与HTTP服务器之间的每次交互,都由一个ASCII码串构成的请求和一个"类MIME“的相应组成
  • 从层次的角度看,HTTP是面向事务的应用层协议。所谓事务,就是指一系列的信息交换,而这一系列的信息交换是一个不可分割的整体,即要么所有信息交换都完成,要么一次交换都不进行
  • HTTP协议本身是无连接的,虽然HTTP通常使用的是TCP连接,但通信的双方在交换HTTP报文前不需要建立HTTP连接
  • HTTP协议是无状态的,同一个客户第二次访问同一个服务器上的页面时,服务器的响应与第一次被访问时的相同
  • 客户把HTTP请求报文作为TCP连接三次握手的第三个报文的数据发送给服务器,服务器收到HTTP请求报文后,就把所请求的文档作为响应报文返回给客户
  • HTTP/1.0的主要缺点,是每请求一个文档就要有两倍RTT的开销
  • HTTP/1.1使用持续连接,就是服务器在发送响应后仍然在一段时间内保持这条连接,使同一个客户(浏览器)和该服务器可以继续在这条连接上传送后续的HTTP请求报文和响应报文,这并不局限于传送同一个页面上链接的文档,而是只要这些文档都在同一个服务器上就行
  • HTTP/1.1协议的持续连接有两种方式,即非流水线方式和流水线方式
    • 非流水线方式,客户在收到前一个响应后才能发出下一个请求
    • 流水线方式,收到HTTP的响应报文前就能发送新的请求
  • HTTP请求报文和响应报文都由三个部分组成:开始行、首部行、实体主体
    • 开始行用于区别报文是响应报文还是请求报文,在请求报文中,开始行叫做请求行,而在响应报文中,开始行叫做状态行
    • 请求报文请求行只有三个内容:方法、请求资源的URL、HTTP的版本
    • 响应报文的状态行也包括三项内容:HTTP的版本、状态码、解释状态码的简单短语
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐