网络协议基础01

1、网络协议分层

对于同一台设备上的进程间通信,有很多种方式,比如有管道、消息队列、共享内存、信号等方式,而对于不同设备上的进程间通信,就需要网络通信,而设备是多样性的,所以要兼容多种多样的设备,就协商出一套通用的网络协议

这个网络协议是分层的,每一层都有各自的作用和职责,通常是由上到下,分成五层。

  • 应用层
  • 传输层
  • 网络层
  • 数据链路层
  • 物理层

(1)应用层

最上层的,也是我们能直接接触到的就是应用层(Application Layer),我们电脑或手机使用的应用软件都是在应用层实现。那么,当两个不同设备的应用需要通信的时候,应用就把应用数据传给下一层,也就是传输层。

所以,应用层只需要专注于为用户提供应用功能,不用去关心数据是如何传输的,就类似于,我们寄快递的时候,只需要把包裹交给快递员,由他负责运输快递,我们不需要关心快递是如何被运输的。

而且应用层是工作在操作系统中的用户态,传输层以下则工作在内核态。

(2)传输层

应用层的数据包会传给传输层,传输层(Transport Layer)是为应用层提供网络支持的。

在传输层会有两个传输协议,分别是TCP和UDP。

TCP的全称叫传输层控制协议(Transmission Control protocol),大部分应用使用的正是TCP传输层协议,比如HTTP应用层协议。TCP相比UDP多了很多特性,比如流量控制、超时重传、拥塞控制等,这些都是为了保证数据包能可靠地传输给对方。所以TCP又称为可靠性传输

UDP相对简单,只发送数据包,不保证数据包是否能抵达对方,但它实时性相对更好,传输效率也高。当然,UDP也可以实现可靠传输,把TCP的特性在应用层上实现就可以,不过要实现一个商用的可靠UDP传输协议,不是简单的事情。UDP可以认为是不可靠传输

应用需要传输的数据可能会非常大,如果直接传输就不好控制,因此当传输层的数据包大小超过MSS(TCP最大报文段长度),就要将数据包分块,这样即使中途有一个分块丢失或损坏了,只需要重新发送这一个分块,而不用重新发送整个数据包。在TCP协议中,我们把每个分块称为一个TCP段

image-20230916162358211

当设备作为接收方时,传输层要负责把数据包传给应用,但是一台设备上可能会有很多应用在接收或者传输数据,因此需要用一个编号将应用区分开来,这个编号就是端口

比如80端口通常是web服务器用的,22端口通常是SSH远程登陆服务器用的。而对于浏览器(客户端)中的每个标签栏都是一个独立进程,操作系统会为这些进程分配临时的端口号。

由于传输层的报文中会携带端口号,因此接收方可以识别出该报文是发送给哪个应用。

(3)网路层

实际场景中的网络环节是错综复杂的,传输层只负责将数据包装按照TCP或UDP协议打包,真正的传输功能是交给网络层的

image-20230916163229664

网络层最常使用的是IP协议(Internet Protocol),IP协议会将传输层的报文作为数据部分,再加上IP包头组装成IP报文,如果IP报文大小超过MTU(以太网一般为1500字节)就会再次进行分片,得到一个即将发送到网络的IP报文。

image-20230916165119142

网络层负责将数据从一个设备传输到另一个设备,设备这么多,怎么找到对应的设备呢?

所以就需要对其进行编号,这个编号就是IP地址。

对于IPV4协议,IP地址共32位,分成了四段,每段是8位。但是如果只有一个单纯的IP地址,虽然做到了区分设备,但是寻址就很麻烦了。

因此,需要将IP地址分成两种意义:

  • 一个是网络号,负责标识该IP地址是属于哪个子网的;
  • 一个是主机号,负责标识同一子网下的不同主机;

需要配合子网掩码才能算出IP地址的网络号和主机号。在寻址的过程中,先匹配到相同的网络号,才会去找对应的主机。

IP协议除了寻址功能,还有另一个重要功能路由。实际场景中,两台设备并不是用一条网线连接起来的,而是通过很多网关、路由器、交换机等众多网络设备连接起来的,那么就会形成很多条网络的路径,因此当数据包到达一个网络节点,就需要通过算法决定下一步走哪条路径。

所以,IP协议的寻址作用是告诉我们去往下一个目的地该朝哪个方向走,路由则是根据[下一个目的地]选择路径。寻址更像导航,路由更像在操作方向盘。

(4)数据链路层

实际场景中,网络并不是一个整体,比如你家和我家就不属于一个网络,所以数据不仅可以在同一个网络设备间进行传输,也可以进行跨网络传输。

一旦数据需要跨网络传输,就需要有一个设备同时在两个网络中,这个设备一般是路由器,路由器可以通过路由表计算出下一个要去的IP地址。

所以就需要有一个专门的层来标识网络中的设备,让数据在一个链路层中传输,这就是数据链路层,它主要为网络层提供链路级别传输的服务。

image-20230916172302117

IP详解

(1)IP基本认识

IP在TCP/IP参考模型中处于第三层网络层

网络层的主要作用是:实现主机与主机之间的通信,也叫点对点(end to end)通信。

image-20230916173258298

IP(网络层)和MAC(数据链路层)之间的区别和关系

我们知道IP的作用是主机之间通信的,而MAC的作用则是实现[直连]的两个设备之间通信,而IP则负责在[没有直连]的两个网络之间进行通信传输。

image-20230916173727942

计算机网络中也需要【数据链路层】和【网络层】这个分层才能实现向最终目标地址的通信。

重要的一点是,源IP地址和目标IP地址在传输过程中是不会变化的,只有源MAC地址和目标MAC一直在变化。

(2)IP地址的基础知识

IP地址的定义

在TCP/IP网络通信时,为了保证能正常通信,每个设备都需要配置正确的IP地址,否则无法实现正常的通信。

IP地址(IPv4地址)由32位正整数来表示,IP地址在计算机是以二进制的方式处理的。

最大是2的32次方,但是像服务器、路由器等设备都有两个以上的网卡,所以他们会有两个以上的IP地址。

IP地址的分类

IP地址分类成5种类型,分别是A类、B类、C类、D类、E类。

image-20230916174939809

image-20230916175011672

最大主机个数,就是看主机号的位数,比如说C类就是2的8次方减去2=254

减去二是因为要减去两个特殊IP,分别是主机号全为1和全为0地址。

  • 主机号全为1指定某个网络下的所有主机,用于广播
  • 主机号全为0指定某个网络

广播地址用于在同一个链路中相互连接的主机之间发送数据包

  • 在本网络内广播的叫做本地广播
  • 在不同网络之间的广播叫做直接广播

IP分类优点

不管路由器还是主机解析到一个IP地址时候,我们判断其IP地址的首位是否为0,为0则为A类地址,那么就能很快的找出网络地址和主机地址。

公有IP与私有IP

image-20230916180325172

公有IP在整个互联网范围内保持唯一。

IP地址与路由控制

IP地址的网络地址这一部分是用于进行路由控制。

路由控制表中记录着网络地址与下一步应该发送至路由器的地址,在主机和路由器上都会有各自的路由控制表。

在发送IP包时,首先要确定IP包首部中的目标地址,再从路由控制表中找到与该地址具有相同网络地址的记录,根据该记录将IP包转发给相应的下一个路由器。如果路由控制表中存在多条相同的网络地址的记录,就选择相同位数最多的网络地址,也就是最长匹配。

image-20230916181312740

环回地址是在同一台计算机上的程序之间进行网络通信时所使用的一个默认地址。

计算机使用一个特殊的IP地址为127.0.0.1作为环回地址,与该地址具有相同意义的是一个叫做localhost的主机名。

使用这个IP或主机名时,数据包不会流向网络。

(3)IP协议相关技术

跟IP协议相关的技术。

  • DNS域名解析
  • ARP与RARP协议
  • DHCP动态获取IP地址
  • ICMP互联网控制报文协议

DNS域名解析

我们在上网的时候,通常使用的方式域名,而不是IP地址,因为域名方便记忆。

实现这一技术的就是DNS域名解析,DNS可以将域名网址自动转化为具体的IP地址。

域名层级关系

DNS中的域名都是用句点来分隔的,比如www.server.com,这里的句点代表了不同层次之间的**界限**。

在域名中,越靠右的位置表示层级越高

根域名在最顶层,它的下一层就是com顶级域,再下面是server.com。

所以域名的层级关系类似一个树状的结构:

  • 根DNS服务器
  • 顶级域DNS服务器(com)
  • 权威DNS服务器(server.com)

image-20230916182912795

ARP与RARP协议

在传输一个IP数据报的时候,确定了源IP地址和目标地址后,就会通过主机[路由表]确定IP数据包下一跳。然而,网络层的下一层是数据链路层,所以我们还要知道[下一跳]的MAC地址。

由于主机的路由表中可以找到下一条的IP地址,所以可以通过ARP协议,求得下一跳的MAC地址。

简单地说,ARP是借助ARP请求与ARP响应的两种类型的包确定MAC地址的。

image-20230916215746511

  • 主机会通过广播发送ARP请求,这个包中包含了想要知道的MAC地址的主机Ip地址。
  • 当同个链路中的所有设备收到ARP请求时,会去拆开ARP请求包里的内容,如果ARP请求包中的目标IP地址与自己的IP地址一致,那么这个设备就会将自己的MAC地址塞入到ARP响应包返回给主机

ARP协议是已知IP地址求MAC地址,RARP协议正好相反

它是已知MAC地址求Ip地址。

DHCP动态获取IP地址

DHCP动态获取IP地址,省去配IP信息繁琐的过程。

image-20230916220441672

DHCP交互过程中,全程都是使用UDP广播通信

NAT网络地址转换

网络地址转换NAT的方法缓解了IPv4地址耗尽的问题。

image-20230916220743101

私有IP转换为公有IP。

NAPT

image-20230916221106166

两个私有IP地址都转化IP地址为公有地址120.229.175.121,但是以不同的端口号区分

ICMP互联网控制报文协议

ICMP的全称是Internet Control Message Protocol,也就是互联网控制报文协议。

主要功能包括:确认IP包是否成功送达目的地址、报告发送过程中IP包被废弃的原因和改善网络设置等。

在IP通信如果某个IP包因为某种原因未能达到目标地址,ICMP就负责通知具体的原因。

image-20230916222146108

ICMP的这种通知消息会使用IP进行发送。

ICMP大致可以分为两大类:

  • 一类是用于诊断的查询消息,也就是[查询报文类型]
  • 另一类是通知出错原因的错误消息,也就是[差错报文类型]

image-20230916222411232