目录
计算机网络背景
- 我们通常在手机或者电脑上使用的APP,比如抖音、京东等等,这些APP都是在**客户端(client)**的应用层上的。
- 用户在**客户端(client)**的应用层上的各种请求最终会下达给操作系统,操作系统内除了进程管理、文件管理、内存管理、驱动管理之外,还有一个内嵌的软件协议栈
- 协议栈将用户的数据进行各种封包后,通过网卡将数据传递到网络当中,数据在网络内部经过各种路由转发,最终将数据传送到了服务端(server)。
- **服务端(server)**本身也是一台计算机,该计算机的操作系统就是Linux,而我们在访问目标服务器时使用的可能是Windows、安卓或者IOS等操作系统。
- **服务端(server)**也有自己的协议栈,对端服务器将拿到数据通过协议栈进行各种解包操作后上交给应用层,在对端服务器的应用层就有一个对应的软件服务器,比如抖音服务器、淘宝服务器等,软件服务器内部对收到的用户请求进行各种分析处理后,再将对应的数据以相同的方式返回给用户。
网络 vs 系统
**系统:**不同操作系统的进程管理、文件管理、内存管理、驱动管理的实现方式可能是不一样的。比如Windows和Linux实现多线程的方式是不一样的,Linux当中的线程是用轻量级进程模拟的,而Windows当中是有真正意义上的线程的。
**网络:网络一定要保证所有不同的机器都可以无障碍的接入互联网,而协议栈是网络标准组织定义的,是具有全球性质的,所有的操作系统都必须支持。**也就是说,虽然客户端和服务端可能使用的是不同种类的操作系统,但每个操作系统实现网络协议栈的方法包括各种细节都是一样的,因此双方对数据进行的封包和解包操作都是一样的。
网络发展
独立模式:计算机之间相互独立
在早期的时候,计算机之间是相互独立的,此时如果多个计算机要协同完成某种业务,那么就只能等一台计算机处理完后再将数据传递给下一台计算机,然后下一台计算机再进行相应的业务处理,效率非常低下。
网络互联: 多台计算机连接在一起, 完成数据共享
这时就有人设法将这些计算机连接在一起,当某个业务需要多台计算机协同完成时,就可以将共享的数据放到服务器中进行集中管理,此时各个计算机就都能获取到这些共享的数据,所以各个业务在处理就能随时进行切换了。
局域网LAN:计算机数量更多了,通过交换机和路由器连接在一起
**局域网(LAN)是一种在有限地理范围内将多台计算机连接在一起的网络。**随着计算机数量的不断增加,交换机和路由器成为了构建局域网的关键设备。
**交换机在局域网中起着至关重要的作用。**它就像一个智能的交通枢纽,负责在连接到它的计算机之间快速、高效地传输数据。交换机能够识别每台计算机的网络地址,并根据目标地址将数据准确地发送到相应的计算机,从而避免了数据的混乱和冲突。通过交换机,多台计算机可以同时进行数据传输,大大提高了网络的性能和效率。
**路由器则是局域网与外部网络连接的桥梁。**它不仅可以将局域网内的计算机连接在一起,还可以将局域网与互联网或其他广域网连接起来。路由器能够根据网络地址和路由表,将数据从一个网络转发到另一个网络,实现不同网络之间的通信。例如,当局域网内的一台计算机需要访问互联网上的资源时,路由器会将请求转发到互联网,并将返回的数据转发回该计算机。
在局域网中,计算机可以通过有线连接(如以太网电缆)或无线连接(如 Wi-Fi)与交换机和路由器相连。这样,无论是台式机、笔记本电脑还是移动设备,都可以方便地加入局域网,实现数据共享和资源共享。
广域网WAN:将远隔千里的计算机都连在一起
广域网(WAN)是一种覆盖范围广阔的网络,它能够将远隔千里的计算机连接在一起,打破了地理距离的限制。
广域网通常由多个局域网通过通信线路和网络设备连接而成。这些通信线路可以是电话线、光纤、卫星通信等,网络设备包括路由器、交换机、调制解调器等。通过这些设备和线路,不同地区的计算机可以相互通信、共享资源。
实际局域网和广域网是一种相对的概念,我们也可以将广域网看作一个比较大的局域网。
认识协议
为什么要有网络协议 ?
我们在传输数据的时候,因为距离变长了,会导致如下问题:
- 丢包了怎么办
- 目标机器的定位的问题
- 如何让我们的数据,在经历了无数个设备之后,还能准确的把数据推送给远端机器
一、协议的定义
**协议可以理解为计算机之间进行通信的一种规则或约定。**就如同人类在交流中需要遵循一定的语言规则和社交礼仪一样,计算机在网络中也需要依据特定的协议来传递信息。它规定了数据的格式、传输的顺序、错误处理方式等各个方面的细节,确保不同的计算机系统能够准确地理解和处理彼此发送的信息。
二、协议的重要性
-
实现通信标准化
- 不同的计算机硬件和软件系统可能有很大的差异,如果没有统一的协议,它们将无法有效地进行通信。协议为各种设备和系统提供了一种通用的语言,使得它们能够在网络中相互理解和交互。
- 例如,在互联网中,TCP/IP 协议就是一种广泛使用的通信协议,它确保了全球范围内的计算机能够顺利地进行数据传输和通信。
-
确保数据准确传输
- 协议规定了数据的封装方式、校验方法等,以保证数据在传输过程中的准确性和完整性。
- 例如,在数据链路层的协议中,会对数据进行帧封装,并添加校验码,接收方可以通过校验码来判断数据是否在传输过程中出现错误。如果发现错误,协议还会规定相应的错误处理方式,如请求重传等。
-
提高网络效率
- 协议通过优化数据传输的方式和流程,提高了网络的效率和性能。
- 例如,流量控制协议可以根据网络的负载情况调整数据的发送速度,避免网络拥塞;路由协议可以选择最佳的路径将数据从源节点传输到目的节点,减少传输延迟。
三、常见的网络协议
-
TCP/IP 协议族
- 这是互联网上最常用的协议族,包括传输控制协议(TCP)和网际协议(IP)等。TCP 负责确保数据的可靠传输,IP 负责将数据从源地址传输到目的地址。
- 应用场景非常广泛,如网页浏览、电子邮件、文件下载等都是基于 TCP/IP 协议族实现的。
-
HTTP 协议
- 超文本传输协议(HTTP)是用于在 Web 浏览器和 Web 服务器之间传输超文本的协议。它规定了浏览器如何向服务器请求网页资源,以及服务器如何响应这些请求。
- 当你在浏览器中输入一个网址并按下回车键时,浏览器就会使用 HTTP 协议向服务器发送请求,服务器接收到请求后,会将相应的网页资源返回给浏览器。
-
FTP 协议
- 文件传输协议(FTP)用于在计算机之间传输文件。它提供了一种可靠的文件传输方式,可以上传和下载文件,还支持目录浏览、文件删除等操作。
- 常用于在不同的计算机系统之间传输大型文件,如软件安装包、数据库备份等。
网络协议
一、网络通信的问题
我们如何安全的将数据从A传输到B,会有如下几个问题
- 怎么保证把数据先交给下一跳主机
- 在转发中,如何进行路径选择,目标主机定位的问题
- 如果报文中间出现错误,或者丢失
- 送达的数据,还要解决如何使用数据的问题
以上每个问题都要协议来解决
二、网络通信的解决办法 --------------- 网络的层状结构
三、网络和系统的关系
**系统:**不同操作系统的进程管理、文件管理、内存管理、驱动管理的实现方式可能是不一样的。比如Windows和Linux实现多线程的方式是不一样的,Linux当中的线程是用轻量级进程模拟的,而Windows当中是有真正意义上的线程的。
**网络:网络一定要保证所有不同的机器都可以无障碍的接入互联网,而协议栈是网络标准组织定义的,是具有全球性质的,所有的操作系统都必须支持。**也就是说,虽然客户端和服务端可能使用的是不同种类的操作系统,但每个操作系统实现网络协议栈的方法包括各种细节都是一样的,因此双方对数据进行的封包和解包操作都是一样的。
协议分层
网络协议栈设计成层状结构,其目的就是为了将层与层之间进行解耦,保证代码的可维护性和可扩展性。
比如在打电话的时候:
- 站在工程师的角度实际这两个人并不是直接进行沟通的,而是甲的电话将甲说的话记录下来
- 经过一系列编码转码后,通过通信网络将信息从甲的电话传递到了乙的电话
- 然后信息在乙的电话中再经过对应的编码转码,最后乙才通过话筒听到了甲所说的话。
其中,人与人之间通信使用的是汉语,我们可以将其称为语言层; 而电话和电话之间通信使用的是电话系统相关的一些接口,我们可以将其称之为通信设备层。
- 后面我们流落荒岛使用无线电,此时我们下层使用的通信设备变了,我们只需要更改通信设备层即可,仍然可以正常沟通。
- 如果电话机卖到了其他漂亮国,此时上层使用的通信语言变了,我们只需要更改语言层即可,仍然可以正常沟通。
分层最大的好处在于"封装",在分层情况下,将某层的协议进行替换后,通信双方之间是不会受到影响的。
OSI七层模型
- OSI(Open System Interconnection,开放系统互联)七层网络模型称为开方式系统互联参考模型,是一个逻辑上的定义和规范。
- OSI把网络从逻辑上分为了七层,每一层都有相关的、相对应的物理设备,比如路由器,交换机。
- OSI七层模型是一种框架性的设计方法,其最主要的功能就是帮助不同类型的主机实现数据传输,比如手机和电视之间数据的传输。
- OSI七层模型最大的优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整,通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯。
- OSI七层模型既复杂又不实用,所以后来在具体实现的时候就对其进行了调整,于是就有了我们现在看到的TCP/IP四层协议。
OSI七层模型如下:
应用层
- 功能:为用户提供各种网络应用服务,如电子邮件、文件传输、网页浏览、远程登录等,是用户与网络直接交互的层次。它包含了各种具体的网络应用协议,这些协议规定了应用程序之间通信的规则和方式。
- 协议:常见的应用层协议有超文本传输协议(HTTP),用于网页浏览;文件传输协议(FTP),用于文件的上传和下载;简单邮件传输协议(SMTP),用于电子邮件的发送等。
表示层
- 功能:主要处理数据的表示、加密、解密、压缩和解压等,确保不同系统之间能够正确地理解和处理数据。它负责将应用层的数据进行格式转换、加密、压缩等处理,以适应不同系统之间的通信需求,保证数据的安全性和传输效率。
- 应用场景:在不同操作系统或不同编码格式的系统之间进行通信时,需要表示层进行数据的转换和处理。例如,将文本数据从一种字符编码格式转换为另一种编码格式,或者对敏感数据进行加密传输,以确保数据的保密性和完整性。
会话层
- 功能:建立、维护和管理会话,协调不同主机上各种进程之间的通信,如会话的建立、拆除和同步等。它负责在不同的应用程序之间建立、维护和管理通信会话,确保数据的有序传输和交互。
- 应用场景:在一些需要长时间交互的应用中,如远程登录、文件传输等,会话层的作用尤为重要。它可以保证在整个会话过程中,数据的传输和交互能够按照预定的规则进行,避免数据的丢失和混乱。
传输层
- 功能:为应用层提供端到端的可靠通信服务,负责数据的分段、重组、流量控制和差错控制等。它通过端口号来区分不同的应用程序,为每个应用程序建立独立的连接,确保数据能够准确无误地到达目的地。
- 协议:传输层有两个重要的协议,即传输控制协议(TCP)和用户数据报协议(UDP)。TCP 提供可靠的面向连接的通信服务,它通过三次握手建立连接,在数据传输过程中进行流量控制和差错控制,保证数据的可靠传输;UDP 则提供不可靠的无连接通信服务,它不进行连接的建立和维护,数据传输的可靠性由应用程序自己负责,具有传输效率高、开销小的特点,适用于对实时性要求较高但对数据可靠性要求相对较低的应用场景,如视频会议、实时游戏等。
网络层
- 功能:主要负责数据包的路由和转发,根据网络地址将数据包从源节点发送到目标节点,实现不同网络之间的通信。它通过路由算法确定数据包的最佳传输路径,并在数据包中添加网络层的首部信息,如源 IP 地址、目的 IP 地址等。
- 设备:路由器是网络层的典型设备,它可以连接不同的网络,根据 IP 地址进行数据包的转发和路由选择,实现不同网络之间的互联互通。
数据链路层
- 功能:将物理层提供的比特流组织成帧,进行差错检测和纠正,以及实现介质访问控制等功能,确保数据在相邻节点之间的可靠传输。它通过帧的格式定义,将数据分成一个个的帧,并在帧中添加控制信息,如源地址、目的地址、差错校验码等。
- 设备:数据链路层的设备主要有网桥和交换机。网桥可以连接两个或多个局域网,根据帧中的 MAC 地址进行转发,过滤掉不需要在其他网段传输的帧,从而减少网络中的冲突和提高网络性能;交换机则是一种多端口的网桥,它能够更智能地根据 MAC 地址学习和转发数据帧,提高了网络的带宽利用率和灵活性。
物理层
- 功能:负责在物理介质上传输原始的比特流,定义了物理介质的电气特性、机械特性、功能特性和规程特性等,如网线的接口类型、信号的传输速率、传输模式等,以确保比特流能在不同的物理介质上正确传输。
- 设备:常见的物理层设备有集线器、中继器等。集线器主要用于将多个设备连接在一起,形成一个共享的网络环境;中继器则用于延长网络的传输距离,对信号进行放大和整形,以保证信号的质量。
TCP/IP五层(或四层)模型
应用层
- 功能:为用户提供各种网络应用服务,是用户与网络直接交互的层次,包含了各种具体的网络应用协议,这些协议规定了应用程序之间通信的规则和方式 。
- 协议 :**常见的应用层协议有超文本传输协议(HTTP),用于网页浏览;**文件传输协议(FTP),用于文件的上传和下载;简单邮件传输协议(SMTP),用于电子邮件的发送;域名系统(DNS),用于将域名转换为 IP 地址等24 。
传输层
- 功能:为应用层提供端到端的可靠通信服务,负责数据的分段、重组、流量控制和差错控制等。它通过端口号来区分不同的应用程序,为每个应用程序建立独立的连接,确保数据能够准确无误地到达目的地。
- 协议 :**主要有传输控制协议(TCP)和用户数据报协议(UDP)。**TCP 提供可靠的面向连接的通信服务,通过三次握手建立连接,在数据传输过程中进行流量控制和差错控制,保证数据的可靠传输;UDP 则提供不可靠的无连接通信服务,不进行连接的建立和维护,数据传输的可靠性由应用程序自己负责,具有传输效率高、开销小的特点,适用于对实时性要求较高但对数据可靠性要求相对较低的应用场景,如视频会议、实时游戏等24 。
网络层
- 功能:主要负责数据包的路由和转发,根据网络地址将数据包从源节点发送到目标节点,实现不同网络之间的通信。它通过路由算法确定数据包的最佳传输路径,并在数据包中添加网络层的首部信息,如源 IP 地址、目的 IP 地址等。
- 设备 :**路由器是网络层的典型设备,**它可以连接不同的网络,根据 IP 地址进行数据包的转发和路由选择,实现不同网络之间的互联互通 。
- 协议 :核心协议是互联网协议(IP),此外还包括地址解析协议(ARP)、逆地址解析协议(RARP)、互联网控制报文协议(ICMP)等 。
数据链路层
- 功能:将物理层提供的比特流组织成帧,进行差错检测和纠正,以及实现介质访问控制等功能,确保数据在相邻节点之间的可靠传输。它通过帧的格式定义,将数据分成一个个的帧,并在帧中添加控制信息,如源地址、目的地址、差错校验码等 。
- 设备 :主要设备有网桥和交换机。网桥可以连接两个或多个局域网,根据帧中的 MAC 地址进行转发,过滤掉不需要在其他网段传输的帧,从而减少网络中的冲突和提高网络性能;交换机则是一种多端口的网桥,它能够更智能地根据 MAC 地址学习和转发数据帧,提高了网络的带宽利用率和灵活性 。
- 协议 :常见的协议包括以太网协议、Wi-Fi 协议等。
物理层
- 功能:负责在物理介质上传输原始的比特流,定义了物理介质的电气特性、机械特性、功能特性和规程特性等,如网线的接口类型、信号的传输速率、传输模式等,以确保比特流能在不同的物理介质上正确传输。
- 设备 :常见的物理层设备有集线器、中继器等。集线器主要用于将多个设备连接在一起,形成一个共享的网络环境;中继器则用于延长网络的传输距离,对信号进行放大和整形,以保证信号的质量 。
- 协议:物理层没有特定的协议,因为其转换方法因通讯媒体不同而不同 。
可以看到,OSI七层模型和TCP/IP五层(或四层)模型的下面几层几乎是没有区别的,操作系统对应的是传输层和网络层,数据链路层和物理层都是对应在驱动层的,而TCP/IP协议当中的应用层就对应到OSI七层协议当中的应用层、表示层和会话层。
一般而言:
- 对于一台主机,它的操作系统内核实现了从传输层到物理层的内容。
- 对于一台路由器,它实现了从网络层到物理层的内容。
- 对于一台交换机,它实现了从数据链路层到物理层的内容。
- 对于集线器,它只实现了物理层的内容。
但这并不是绝对的,比如很多交换机也实现了网络层的转发,很多路由器也实现了部分传输层的内容(比如端口转发)。
网络传输基本流程
我们这里以两台主机进行文件传输为例,此时各层对应的协议如下:
同局域网的两台主机通信
同一个局域网内的两个 主机是**能够直接进行通信的,**因为每一个网卡都是有mac地址的。
MAC 地址识别机制:每台主机的网卡都有一个唯一的媒体访问控制(MAC)地址。MAC 地址长度为 48 位,通常用十六进制表示,如 00 - 1A - 2B - 3C - 4D - 5E。数据链路层通过 MAC 地址来识别局域网中的不同主机。当主机 A 要向主机 B 发送数据时,数据链路层会将数据帧的目的 MAC 地址设置为主机 B 的 MAC 地址,这样,网络中的数据链路层设备(如交换机)就能根据 MAC 地址将数据帧准确地转发到主机 B。
在一个局域网当中,除了当前正在进行通信的A主机和B主机以外,还有其他的主机,那A主机是如何将数据成功发送给B主机的呢?
实际当主机A想要发数据给主机B的时候,该局域网内的其他主机也都收到了该数据,只不过除了主机B以外,其他主机识别到该数据并不是发给自己的,此时其他主机就把收到的数据丢弃了。
也就是说,在局域网(以太网)通信时,**该局域网内所有的主机在底层其实都收到了该数据,**只不过经过筛选后只提交上来了发给自己的数据。
数据碰撞
当主机A在向主机B发送数据时,其他主机彼此之间可能也正在进行通信,甚至主机A在和主机B通信的同时也在和其他主机进行通信。
- 同一局域网中的所有主机在通信时,使用的都是一个共同的通信信道,因此如果局域网内的多台主机同时进行通信,此时这些数据之间就可能会相互干扰。
- 每一个局域网都可以看作是一个碰撞域,如果某个主机发送出去的数据与其他主机发送的数据之间产生了干扰,我们就称这两台主机在该碰撞域中发生了碰撞。
如何判断发送出去的数据是否发生了碰撞?
- 发送过程中的信号对比:在以太网的带有冲突检测的载波侦听多路访问 / 冲突检测(CSMA/CD)机制下,设备在发送数据的同时会对传输介质进行监听。发送设备会将自己正在发送的信号与从介质中接收到的信号进行对比。如果这两个信号不一致,就可以判断发生了碰撞。例如,发送设备发送的是一个规则的二进制数据序列对应的电信号,而在发送过程中接收到的信号出现了不符合这个序列的波动或干扰,那么很可能是发生了碰撞。
- 冲突检测电路的工作原理:网络设备(如网卡)内部有专门的冲突检测电路。当发送数据时,这个电路会监测发送线路和接收线路上的信号。正常情况下,如果没有碰撞,接收线路上应该没有信号或者只有符合预期的微弱反馈信号(如回声信号)。一旦发生碰撞,接收线路上会出现强度足以干扰发送信号的干扰信号,冲突检测电路就能感知到这种变化,并向设备的控制器发送一个冲突信号,告知设备发生了碰撞。
发生碰撞后是如何处理的?
- 停止发送并发送干扰信号(Jam Signal) :在以太网中,当设备检测到数据碰撞后,首先会立即停止发送数据。这是为了避免继续发送无效的数据而占用传输介质。然后,设备会发送一个特殊的干扰信号,即 Jam Signal。这个信号的作用是强化碰撞,使得网络中所有正在监听的设备都能清楚地知道发生了碰撞。例如,在一个基于总线型拓扑的以太网环境中,多个设备连接到同一条总线上,发送 Jam Signal 可以确保总线上的其他设备都能检测到碰撞情况。
- 采用二进制指数退避算法等待 :发送完 Jam Signal 后,设备会等待一段时间后再尝试发送数据。这个等待时间是通过二进制指数退避(Binary Exponential Back - off)算法来确定的。具体来说,设备会在一个冲突窗口(Collision Window)内随机选择一个等待时隙(Slot Time)。第一次发生碰撞后,设备会在 0 到 (即 0 到 1)个时隙之间随机选择一个等待时间;如果再次发生碰撞,等待时间的范围会扩展到 0 到 (即 0 到 3)个时隙之间;每次碰撞后,等待时间的范围都会成倍增加。这种机制的目的是使得不同设备在发生碰撞后选择不同的等待时间,从而降低再次发生碰撞的概率。例如,设备 A 和设备 B 第一次碰撞后,设备 A 可能选择等待 0 个时隙就重新发送,而设备 B 可能选择等待 1 个时隙,这样就避免了它们再次同时发送而导致碰撞。
数据的封装和解包
封装,一定要考虑后面解包的过程
- 如何将报文中,报头和有效载荷进行分离
- 任何协议,都要解决如何将自己的有效载荷,交付给上层的那一个协议
当用户要将文件传输给另一台主机前,该文件数据需要先通过网络协议栈进行封装:
- **应用层:**文件数据先交给应用层,应用层添加上对应应用层协议的报头信息后,将数据再交给传输层。
- **传输层:**传输层收到数据后,再添加上对应传输层协议的报头信息,并将数据继续向下进行交付。
- **网络层:**网络层收到数据后,再添加上对应网络层协议的报头信息,接着将数据再交给链路层。
- **链路层:**链路层收到数据后,最后再添加上对应链路层协议的报头信息,至此数据封装完毕。
数据封装完毕后就可以通过局域网将其发送给对端主机了,而当对端主机收到数据后,对应也需要通过网络协议栈对该数据进行解包与分用:
- **链路层:**链路层收到数据后,先将数据中对应链路层协议的报头信息提取出来,然后将剩下的数据交给网络层。
- **网络层:**网络层收到该数据后,再将数据中对应网络层协议的报头信息提取出来,然后将剩下的数据继续向上进行交付。
- **传输层:**传输层收到该数据后,再将数据中对应传输层协议的报头信息提取出来,然后将剩下的数据再交付给应用层。
- **应用层:**应用层收到数据后,最后将数据中对应应用层协议的报头信息提取出来,至此便完成了数据的解包与分用。
任何一台主机在发送数据之前,该数据都要先自顶向下贯穿协议栈来完成数据的封装,在这个过程中,每一层协议都会添加上对应的报头信息;而任何一台主机收到数据后,都要先自底向上贯穿协议栈来完成数据的解包和分用,在这个过程中,每一层协议都会将对应的报头信息提取出来。
什么是数据包的封装和分用 ?
- 不同协议层对数据包有不同的称谓,在传输层叫做数据段,在网络层叫做数据报,在链路层叫做数据帧。
- 应用层数据通过协议栈发到网络上,每层协议都要加上一个数据首部(header),称为封装(Encapsulation)。
- 首部信息中包含了一些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息。
- 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的"上层协议字段"将数据交给对应的上层协议处理。
数据封装的过程:
数据分用的过程:
报头和有效载荷
什么是报头?
一、基本概念
在网络通信和数据存储领域,报头(Header)是指添加在数据前面的一段控制信息。它就像是一个包裹的标签,包含了关于后面数据的各种重要细节,这些细节用于数据的传输、处理和正确交付。例如,在发送一封信件时,信封上的收件人地址、寄件人地址和邮编等信息就类似于报头,而信件内容则类似于数据主体。
二、网络通信中的报头
- 物理层报头(如以太网的前导码):在物理层,虽然严格意义上有些 "头部" 信息不称为报头,但有类似的功能。以以太网为例,在数据帧之前有一个前导码(Preamble),它主要用于接收方的物理层电路进行同步,使得接收方能够正确地识别数据帧的开始。前导码通常是一串特定的二进制序列,如 7 个字节的 10101010 和 1 个字节的 10101011。
- 数据链路层报头(以以太网帧头部为例):数据链路层的报头包含了用于在本地网络(如局域网)中准确传输数据的关键信息。在以太网帧头部,有 6 字节的目的 MAC 地址和 6 字节的源 MAC 地址。MAC 地址用于在局域网中唯一标识设备,通过这些地址,交换机等数据链路层设备可以将数据帧准确地转发到目的设备。此外,还有 2 字节的类型字段,用于标识上层协议(如 IP 协议对应的类型值为 0x0800),以便数据链路层知道将接收到的数据交给哪个上层协议处理。
- 网络层报头(以 IP 报头为例):在网络层,IP 报头是非常重要的。IP 报头长度可变,一般为 20 字节(不包括可选字段)。其中包括 4 字节的源 IP 地址和 4 字节的目的 IP 地址,这两个地址确定了数据包在互联网中的发送端和接收端。还有 8 位的协议字段,用于指示上层协议(如 TCP 为 6、UDP 为 17),以及 16 位的总长度字段用于表示整个 IP 数据包的长度(包括报头和数据部分)。此外,还有一些字段用于分片、生存时间(TTL)等功能,以确保数据包能够正确地在不同网络之间路由和转发。
- 传输层报头(以 TCP 报头为例):传输层的 TCP 报头用于提供可靠的端到端通信服务。TCP 报头长度也是可变的,最少 20 字节。它包含源端口号和目的端口号,用于标识发送和接收数据的应用程序。例如,HTTP 服务通常使用端口 80,当浏览器发送请求时,TCP 报头中的目的端口号就是 80。还有序列号和确认号,用于保证数据的顺序和可靠性。另外,还有一些控制位(如 SYN、ACK、FIN 等)用于建立、维护和拆除 TCP 连接。
三、数据存储中的报头(以文件格式为例)
在数据存储领域,很多文件格式也有报头。例如,
- 常见的**图像文件格式(如 JPEG)**有文件报头。JPEG 文件的报头包含了关于图像的基本信息,如文件格式标识符(用于识别这是一个 JPEG 文件)、图像的尺寸、颜色模式(如 RGB、CMYK 等)等。这些信息使得图像查看软件能够正确地读取和显示图像内容。
- 在**音频文件格式(如 MP3)**中,报头包含了音频的采样率、声道数、比特率等信息,播放器根据这些报头信息来正确地解码和播放音频。
什么是有效载荷?
- 定义:在网络通信里,有效载荷是指在数据包或者帧中,除去报头(Header)和可能存在的报尾(Trailer)部分之后,实际用于传输信息的内容。例如,当你通过网络发送一封电子邮件,邮件的正文和附件就是有效载荷,而在传输过程中添加的如 IP 地址、端口号等控制信息的部分属于报头。
- 分层中的体现 :
- 应用层:应用层的有效载荷是用户真正想要传输的信息。以网页浏览为例,浏览器发送的 HTTP 请求中的 URL、请求方法(如 GET、POST)以及附带的表单数据等构成了有效载荷。服务器返回的 HTML 文档、图片、脚本文件等网页内容也是有效载荷。
- 传输层:对于传输层协议(如 TCP 和 UDP),来自应用层的有效载荷会被添加传输层报头。例如,TCP 把应用层有效载荷分割成段(Segment),并添加 TCP 报头,其中包括源端口号、目的端口号、序列号、确认号等信息。这里,被 TCP 报头包裹的应用层数据就是传输层视角下的有效载荷。
- 网络层:网络层将传输层传来的带有报头的数据(TCP 段或 UDP 数据报)视为有效载荷,然后添加网络层报头(如 IP 报头),用于路由和转发。IP 报头中的源 IP 地址和目的 IP 地址帮助数据包在不同网络间找到路径,此时被 IP 报头包裹的传输层数据就是网络层的有效载荷。
- 数据链路层:在数据链路层,网络层传来的 IP 数据包又成为有效载荷,被封装进数据链路层的帧,添加帧头(如包含 MAC 地址)和帧尾(如用于差错检测的 CRC 码)。帧头和帧尾帮助在本地网络(如局域网)中准确传输数据,而其中的 IP 数据包部分就是数据链路层的有效载荷。
- 传输目的:有效载荷是网络通信的核心内容。无论是传输文件、发送消息,还是进行视频会议等应用场景,最终用户关心的都是有效载荷的准确、快速传输。比如,在视频流传输中,视频的每一帧画面的数据就是有效载荷,这些数据的质量(如分辨率、帧率)和传输效率(如是否卡顿)直接影响用户的观看体验。
如何将报头与有效载荷进行分离?
- 依据协议规范在接收端分离
- 物理层到数据链路层:在网络通信的接收端,物理层接收到信号后将其转换为二进制比特流。数据链路层会根据协议规定的帧格式来分离报头和有效载荷。以以太网为例,以太网帧有固定的格式,前导码(用于同步)之后是帧头部分,包含目的 MAC 地址、源 MAC 地址和类型字段。帧头长度是固定的(14 字节),数据链路层通过识别帧头的长度,就可以将帧头后的部分作为有效载荷分离出来。当遇到帧尾(4 字节的 CRC 校验码)时,就完成了一个完整帧的接收和分离过程。
- 数据链路层到网络层:数据链路层将分离出的有效载荷(如 IP 数据包)传递给网络层。网络层根据 IP 协议的报头格式来分离。IP 报头一般最短为 20 字节,通过读取固定位置的字段(如前 4 字节为版本和首部长度字段,通过首部长度字段可以确定报头总长度)来确定报头的边界,进而将报头后的部分作为有效载荷(如 TCP 段或 UDP 数据报)分离出来。
- 网络层到传输层:网络层把分离出的有效载荷传递给传输层。传输层根据相应协议(如 TCP 或 UDP)来分离。以 TCP 为例,TCP 报头最短为 20 字节,其中前 2 字节包含源端口号和目的端口号等信息,通过识别报头长度字段确定报头范围,将报头后的部分作为有效载荷(即应用层数据)分离出来并交给应用层。UDP 的分离过程类似,但 UDP 报头结构更简单,只有 8 字节,通过确定报头长度后就可以很容易地分离出有效载荷。
当前层如何知道应该将有效载荷交付给上层的哪个协议?
实际在每种协议的报头当中,几乎都会包含一个字段,表明我们应该把分离出来的有效载荷交付给上层的哪个协议,这就是分用的过程。
网络通信中的协议标识字段
- 数据链路层的协议类型字段:在数据链路层,以以太网为例,以太网帧头部有一个 2 字节的类型字段。这个字段用于指示帧中有效载荷所属的上层协议。例如,当类型字段的值为 0x0800 时,表示有效载荷是一个 IP 数据包,数据链路层就知道应该将这个有效载荷交付给网络层的 IP 协议进行处理;如果类型字段的值为 0x0806,则表示有效载荷是一个 ARP(地址解析协议)数据包,应交付给 ARP 协议处理。
- 网络层的协议字段:在网络层,IP 报头中有一个 8 位的协议字段。它明确指出了 IP 数据包中有效载荷所属的上层协议。例如,协议字段的值为 6,表示有效载荷是 TCP 段,应将其交给传输层的 TCP 协议;若值为 17,则表示有效载荷是 UDP 数据报,要交给传输层的 UDP 协议。另外,还有一些其他的值对应不同的协议,如协议字段的值为 1 表示 ICMP(互联网控制消息协议),用于网络控制和错误消息传递。
- 传输层的端口号机制(用于区分应用程序):在传输层,TCP 和 UDP 通过端口号来区分不同的应用程序。端口号是一个 16 位的数字。对于 TCP 和 UDP 数据包,其中的源端口号和目的端口号用于标识发送和接收数据的应用程序。例如,HTTP 服务通常使用端口 80,当传输层收到一个目的端口号为 80 的 TCP 段时,就知道有效载荷应该交付给处理网页浏览的应用程序(如浏览器)。同样,FTP 服务使用端口 21 用于控制连接,端口 20 用于数据连接,通过端口号就可以确定有效载荷所属的具体应用程序并进行交付。
各种协议的共性
- 提供一个将报头与有效载荷分离的方法。
- 协议当中必须包含一个字段,表明应该将有效载荷交付给上层的哪个协议。
实际当我们要学习一种协议的时候,首先就应该明确这两点,因为当我们在解包的时候必须将报头与有效载荷分离,而当我们在分用的时候必须知道应该将有效载荷交付给上层的哪个协议。
跨网络的两台主机通信
上面说的都是同一局域网内的主机之间的通信,那跨局域网的两台主机之间是如何进行通信的呢?
同一通信标准下
局域网之间都是通过路由器连接起来的,因此一个路由器至少能够横跨两个局域网。而这些被路由器级联局域网都认为,该路由器就是本局域网内的一台主机,因此路由器可以和这些局域网内的任意一台主机进行直接通信。
比如局域网1当中的主机A想要和局域网2当中的主机G进行通信,那么主机A可以先将数据发送给路由器,然后路由器再将数据转发给局域网2当中的主机G
不同的通信标准
路由器级联的局域网可能采用的是不同的通信标准,比如局域网1采用的是以太网,而局域网2采用的却是令牌环网。
由于以太网和令牌环网是不同的通信标准,它们给数据添加的报头也是不一样的,因此令牌环网当中的主机无法对以太网当中的数据帧进行解包。
如果要实现以太网和令牌环网之间的数据通信,可以通过路由器。路由器能够理解并处理两种不同网络的协议和数据帧格式。
路由器会接收来自以太网的数据帧,去除以太网报头,提取有效载荷,然后根据目的地址和其他配置信息,将有效载荷重新封装成令牌环网的数据帧格式发送到令牌环网中,反之亦然。
路由器如何知道该数据应该转发到哪一个局域网的呢?
一个路由器可能会级联多个局域网,当路由器需要将一个局域网的数据转发到另一个局域网时,路由器如何知道该数据应该转发到哪一个局域网的呢?
路由器其实是通过IP地址来确定数据的转发方向的,因特网上的每台计算机都有一个唯一的IP地址,而在数据向下进行封装时,在网络层封装的报头当中就会包含两个字段,分别是源IP地址和目的IP地址。
当路由器需要将一个局域网的数据转发到另一个局域网时,在路由器的链路层会先将数据的在当前局域网对应的底层报头去掉,然后将剩下的数据向上交付给网络层,此时在网络层就可以获取到该数据对应的目的IP地址,然后路由器就可以根据该IP地址在路由表当中进行查找,最终就能够确认该数据应该发送到哪一个局域网。
屏蔽底层的差异
IP地址的存在除了帮助数据"路由"以外,还有一个很重要的作用,那就是屏蔽了底层网络的差异。对于通信主机双方的IP层及其往上的协议来说,它们并不需要关心底层采用的是以太网还是令牌环网,它们认为只要填写了源IP地址和目的IP地址就能够将数据发送出去,因此现在主流的网络也叫做"IP网络"。
这种类似的技术还有:
- 虚拟地址空间: 屏蔽了内存之间的差别,让所有的进程看到的都是同一块内存,并且这块内存的布局都是一样的。
- 一切皆文件: 通过文件结构体和函数指针的方案,让我们能够以对待文件的方式对待某些资源。
网络中的地址管理
IP地址
一、基本概念
IP 地址(Internet Protocol Address)是互联网协议地址,用于在 IP 网络中标识设备的位置。它就像是网络世界中的家庭住址,让数据能够准确地在不同设备之间传输。IP 地址是一个 32 位(IPv4)或 128 位(IPv6)的二进制数字,为了方便人们使用,通常将其转换为十进制(IPv4)或十六进制(IPv6)的点分格式表示。
二、IPv4 地址
- 格式与表示 :IPv4 地址由 32 位二进制数组成,通常用点分十进制表示。例如192.168.1.1,其中每个数字代表 8 位二进制数,范围是 0 - 255。IPv4 地址空间理论上可以有个不同的地址。
- 分类地址 :
- A 类地址:第一个字节的第一位固定为 0,网络号占 8 位,主机号占 24 位。A 类地址的范围是 1.0.0.0 - 127.255.255.255,适用于大型网络,如大型企业或互联网服务提供商。A 类网络数量相对较少,但每个网络可容纳的主机数量很多。
- B 类地址:第一个字节的前两位固定为 10,网络号占 16 位,主机号占 16 位。范围是 128.0.0.0 - 191.255.255.255,通常用于中等规模的网络,如中型企业或校园网络。
- C 类地址:第一个字节的前三位固定为 110,网络号占 24 位,主机号占 8 位。范围是 192.0.0.0 - 223.255.255.255,适用于小型局域网,如家庭网络或小型办公室网络。
- D 类地址:第一个字节的前四位固定为 1110,用于多播(Multicast)通信,范围是 224.0.0.0 - 239.255.255.255。多播是一种一对多的通信方式,用于将数据同时发送给多个接收者。
- E 类地址:第一个字节的前五位固定为 11110,保留用于实验和研究目的,范围是 240.0.0.0 - 255.255.255.255。
- 子网掩码与子网划分:子网掩码用于区分 IP 地址中的网络部分和主机部分。它也是一个 32 位的二进制数,与 IP 地址进行逻辑与运算可以得到网络地址。例如,对于 IP 地址 192.168.1.1 和子网掩码 255.255.255.0,通过逻辑与运算得到网络地址为 192.168.1.0。子网划分是将一个大的网络划分为多个小的子网,以提高网络管理的灵活性和 IP 地址的利用率。通过改变子网掩码的位数,可以创建不同大小的子网。
三、IPv6 地址
- 产生原因:随着互联网的发展,IPv4 地址空间逐渐耗尽,IPv6 应运而生。IPv6 地址长度为 128 位,大大扩展了地址空间,能够满足未来互联网设备数量不断增长的需求。
- 格式与表示:IPv6 地址通常用十六进制表示,分为 8 组,每组 16 位,用冒号分隔,例如:2001:0db8:85a3:0000:0000:8a2e:0370:7334。为了简化表示,对于连续的 0 组可以使用双冒号 "::" 进行缩写,但在一个地址中双冒号只能出现一次。例如,上面的地址可以写成 2001:0db8:85a3::8a2e:0370:7334。
- 地址类型 :
- 单播地址(Unicast Address):用于标识单个网络接口,就像 IPv4 中的单播地址一样,数据会被发送到指定的单个设备。
- 多播地址(Multicast Address):用于一对多的通信,与 IPv4 的多播类似,但 IPv6 的多播功能更加强大,范围是 FF00::/8。
- 任播地址(Anycast Address):这是 IPv6 特有的地址类型,数据会被发送到一组设备中距离最近(根据路由协议定义)的一个设备,通常用于提供冗余和负载均衡服务。
四、IP 地址的分配与管理
- ICANN(互联网名称与数字地址分配机构):是全球互联网的管理机构,负责协调全球 IP 地址的分配。ICANN 将 IP 地址分配给各个地区的互联网注册机构(RIR),如亚太网络信息中心(APNIC)、欧洲网络信息中心(RIPE NCC)等。
- RIR 的职责:这些地区性的注册机构负责将 IP 地址分配给本地的互联网服务提供商(ISP),ISP 再将 IP 地址分配给企业、组织和个人用户。在企业和组织内部,网络管理员可以根据内部网络的需求进行子网划分和 IP 地址分配。
五、动态与静态 IP 分配:
- 动态 IP 分配:通过动态主机配置协议(DHCP)实现,由 DHCP 服务器自动为网络中的设备分配 IP 地址。这种方式适合于临时接入网络的设备,如在咖啡馆、酒店等公共场所的 Wi - Fi 网络中,用户的设备每次接入时可能会被分配不同的 IP 地址。
- 静态 IP 分配:网络管理员手动为设备分配固定的 IP 地址。这种方式适用于需要固定 IP 地址的设备,如服务器、网络打印机等,以便其他设备能够稳定地访问它们。
IP地址和MAC地址的区别
一、地址层次与作用范围
- IP 地址(网络层) :
- IP 地址用于在不同网络之间进行寻址和路由选择。它的作用范围可以是整个互联网,从源主机所在的局域网,通过多个路由器跨越不同的网络,最终到达目的主机所在的局域网。例如,当你从家中的电脑访问国外的网站时,IP 地址就像一张全球通行证,数据依据 IP 地址在互联网的各个网络之间进行转发,直到找到目标服务器。
- 这种网络层的地址使得不同网络之间能够相互通信,并且可以通过子网划分等方式灵活地构建和管理网络拓扑结构。例如,一个大型企业可以通过子网划分,利用 IP 地址将不同部门的网络划分开,方便内部管理和外部通信。
- MAC 地址(数据链路层) :
- MAC 地址主要用于在同一个局域网(如以太网)内进行设备到设备的直接寻址。它的作用范围局限于本地网络链路,例如在一个办公室的局域网或者家庭 Wi - Fi 网络中。当数据在局域网内传输时,交换机等数据链路层设备根据 MAC 地址来确定数据帧的转发路径,将数据从源设备准确地发送到目的设备。
- 以办公室的局域网为例,计算机之间相互共享文件或者打印机时,数据在局域网内部的传输主要依靠 MAC 地址来定位目标设备。
二、地址性质与分配方式
- IP 地址 :
- IP 地址是逻辑地址,它的分配和管理是基于网络的逻辑架构。可以通过动态主机配置协议(DHCP)动态分配,在这种情况下,设备每次接入网络时可能会获得不同的 IP 地址。例如,在酒店、咖啡馆等公共场所的 Wi - Fi 网络中,用户的设备每次连接时,DHCP 服务器会从可用的 IP 地址池中为设备分配一个临时的 IP 地址。
- 也可以进行静态分配,网络管理员手动为设备分配固定的 IP 地址,这种方式适用于服务器、网络打印机等需要固定 IP 地址以便其他设备能够稳定访问的设备。而且,IP 地址可以根据网络的需要进行修改,例如,当企业内部网络拓扑结构调整或者子网划分改变时,IP 地址可能会重新分配。
- MAC 地址 :
- MAC 地址是物理地址,它通常固化在网络设备的网卡中。在设备生产过程中,由设备制造商分配。MAC 地址的前 24 位(3 字节)是组织唯一标识符(OUI),用于识别网络设备的制造商;后 24 位(3 字节)是由制造商分配的唯一编号,用于区分同一制造商生产的不同设备。
- 一般情况下,MAC 地址是固定不变的,除非更换网卡。这种物理性质使得 MAC 地址成为设备在数据链路层的一个相对稳定的标识符。
三、地址长度与表示方式
- IP 地址 :
- IPv4 地址长度为 32 位,通常采用点分十进制表示法。例如,192.168.1.1,其中每个数字代表 8 位二进制数,范围是 0 - 255。IPv6 地址长度为 128 位,为了方便表示,采用十六进制表示法,分为 8 组,每组 16 位,用冒号分隔,例如:2001:0db8:85a3:0000:0000:8a2e:0370:7334。为了简化表示,对于连续的 0 组可以使用双冒号 "::" 进行缩写,但在一个地址中双冒号只能出现一次。
- MAC 地址 :
- MAC 地址长度为 48 位,通常采用十六进制表示法,每两个十六进制数字表示 1 字节,中间用冒号或连字符分隔。例如,00:1A:2B:3C:4D:5E 或 00 - 1A - 2B - 3C - 4D - 5E。
四、安全性方面
- IP 地址 :
- IP 地址容易受到网络攻击,如 IP 地址欺骗。攻击者可以伪造 IP 地址来隐藏自己的真实身份或者进行恶意攻击,例如在分布式拒绝服务攻击(DDoS)中,攻击者可能会使用虚假的 IP 地址来发送大量请求,使目标服务器无法正常响应。
- 为了提高安全性,可以采用一些技术,如防火墙设置、访问控制列表(ACL)等来限制对 IP 地址的访问,以及通过 IPsec 等协议进行 IP 层的加密和认证。
- MAC 地址 :
- MAC 地址也存在安全风险,如 MAC 地址克隆。攻击者可以将自己设备的 MAC 地址修改为其他合法设备的 MAC 地址,从而绕过基于 MAC 地址的访问限制,例如在一些采用 MAC 地址过滤的网络中,非法获取网络访问权限。
- 不过,MAC 地址的可见范围相对较小,主要在局域网内,而且现在一些设备和操作系统采用随机 MAC 地址生成技术,在一定程度上保护了用户的隐私和设备的安全性。例如,在 Wi - Fi 连接中,移动设备每次连接到一个新的 Wi - Fi 网络时,可以随机生成一个 MAC 地址。
查看当前主机所对应的网卡信息
ifconfig
命令可以查看当前主机所对应的网卡信息
ifconfig