《Linux高性能服务器编程》第1章 TCP/IP协议族

1.1 TCP/IP协议族体系结构以及主要协议

TCP/IP协议族是一个四层协议系统
    自底而上分别是:数据链路层、网络层、传输层、应用层
    上层协议使用下层协议提供的服务

在这里插入图片描述

1.1.1 数据链路层

数据链路层
	1、实现了网卡接口的网络驱动程序,以处理数据在物理媒介(比如以太网、令牌环等)上的传输。
	(网络驱动程序隐藏了物理电气细节,为上层协议提供一个统一的接口)
	2、有两个常用的协议
		ARP协议:地址解析协议 Address Resolve Protocol
		RARP协议:逆地址解析协议 Reverse Address Resolve Protocol
		它们实现了IP地址和机器物理地址之间的相互转换
	3、ARP协议(很重要!)
		网络层使用IP地址寻址一台机器,而数据链路层使用物理地址寻址一台机器,
		因此网络层必须先将目标机器的IP地址转化成其物理地址,才能使用数据链路层提供的服务
		这就是ARP协议的用途
		注:
			物理地址:通常是MAC地址,以太网、令牌环和802无线网络都使用MAC地址
	4、RARP协议
		仅用于网络上的某些无盘工作站。
		因为缺乏存储设备,无盘工作站无法记住自己的IP地址,
		但它们可以利用网卡上的物理地址来向网络管理者(服务器或网络管理软件)查询自身的IP地址。
		运行RARP服务的网络管理者通常存有该网络上所有机器的物理地址到IP地址的映射

1.1.2 网络层

网络层
	1、网络层:实现数据包的选路和转发
	通信的主机之间一般不是直接相连的,而是通过多个中间结点(路由器)连接的
	网络层的任务就是:选择这些中间结点,以确定两台主机之间的通信路径
	2、网络层最核心的协议是:IP协议(Internet protocol),IP协议根据数据包的目的地址来决定如何投递它
	IP协议使用逐跳(hop by hop)的方式确定通信路径
	3、另一个重要的协议是ICMP协议(Internet control Message Protocol,因特网控制报文协议)
	它是IP协议的重要补充,主要用于检测网络连接
	ICMP报文格式是
		1. 8位类型字段:用于区分报文类型
		2. 8位代码字段:来进一步细分不同的条件
		3. 16位校验和字段来对整个报文(包括头部和内容部分)进行循环冗余校验(CRC:Cyclic Redundancy Check)
	ICMP协议并不是严格意义上的网络层协议
		因为它使用位于同一层的IP协议提供的服务
		(一般来说,上层协议使用下层协议提供的服务)

在这里插入图片描述

1.1.3 传输层

在这里插入图片描述

传输层:
	1、为两台主机上的应用程序提供端到端(end to end)的通信
		只关心通信的起始端和目的端
	2、
		数据链路层(驱动程序):封装了物理网络的电气细节
		网络层:封装了网络连接的细节
		传输层:为应用程序封装了一条端到端的逻辑通信链路,它负责数据的收发、链路的超时重传等
传输层协议主要有三个
	1、TCP协议
		为应用层提供:可靠的、面向连接的、基于流(stream)的服务
			基于流的数据:数据没有边界(长度)限制
				它源源不断地从通信的一端流入另一端
				发送端可以逐个字节地向数据流中写入数据,接收端也可以逐个字节地将它们读出
			使用:超时重传、数据确认等方式来确保数据包被正确地发送到目的地址
				因此:TCP服务是可靠的
			使用TCP协议通信的双方必须先建立TCP连接,并在内核中为该连接维持一些必要的数据,
				比如:连接的状态、读写缓冲区、以及诸多定时器等,
				当通信结束时,双方必须关闭连接以释放这些内核数据
	2、UDP协议
		为应用层提供:不可靠、无连接、基于数据报的服务
			不可靠:
				无法保证数据从发送端正确地传送到目的端
				使用UDP协议的应用程序通常要自己处理数据确认、超时重传等逻辑
			无连接:
				通信双方不保持一个长久的联系,
				因此应用程序每次发送数据都要明确指定接收端的地址(IP地址等信息)
			基于数据包的服务:
				是相对基于流的服务而言的
				每个UDP数据报都有一个长度,接收端必须以该长度为最小单位将其所有内容一次性读出,否则数据将被截断
	3、SCTP协议
		流控制协议
		是为了在因特网上传输电话信号而设计的

1.1.4 应用层

应用层
	1、负责处理应用程序的逻辑
		数据链路层、网络层和传输层负责处理网络通信细节
			这部分必须既稳定又高效,因此它们都在内核空间中实现
		应用层则在用户空间实现
			它负责处理众多逻辑,比如文件传输、名称查询和网络管理等
应用层协议很多
	1、ping是应用程序,而不是协议,
	前面说过它利用ICMP报文检测网络连接,是调试网络环境的必备工具
	2、telnet协议是一种远程登录协议
	它使我们能在本地完成远程任务,比如使用telnet客户端登录到其他服务上
	3、OSPF协议(Open Shortest Path First,开放最短路径优先)
	是一种动态路由更新协议,用于路由器之间的通信,以告知对方各自的路由信息
	4、DNS协议(Domain Name Service,域名服务)
	提供机器域名到IP地址的转换
应用层协议(或程序)可能跳过传输层直接使用网络层提供的服务
	比如ping程序和OSPF协议
应用层协议(或程序)通常既可以使用TCP服务,又可以使用UDP服务
	比如DNS协议
我们能通过/etc/services文件
	查看所有知名的应用层协议,
	以及它们都能使用哪些传输层服务

1.2 封装

上层协议是如何使用下层协议提供的服务呢?
	通过封装
	应用层数据在发送到物理网络上之前,将沿着协议栈从上往下依次传递,
	每层协议都将在上层数据的基础上加上自己的头部信息(有时还包括尾部信息),以实现该层的功能,这个过程就称为封装。

在这里插入图片描述

TCP协议
	为通信双方维持一个连接,并且在内核中存储相关数据。
	这部分数据中的TCP头部信息和TCP内核缓冲区(发送缓冲区或接收缓冲区)数据一起构成了TCP报文段

发送端应用程序使用send/write函数向一个TCP连接写入数据时,
	内核中的TCP模块首先把这些数据复制到与该连接对应的 TCP内核发送缓冲区中,
	然后TCP模块调用IP模块提供的服务,传递的参数包括TCP头部信息和TCP发送缓冲区中的数据,即TCP报文段

在这里插入图片描述

经过TCP封装后的数据称为TCP报文段(TCP message segment)/TCP段
经过UDP封装后的数据称为UDP数据段(UDP datagram)
	UDP无须为应用层数据保存副本
经过IP封装后的数据称为IP数据报(IP datagram)
经过数据链路层封装后的数据称为帧(frame)
	根据传输媒介不同,帧的类型也不同
	如:以太网帧、令牌环帧
帧的最大传输单元,即帧最多能带多少上层协议数据,通常受到网络类型的限制
	过长的IP数据报可能需要被分片(fragment)传输
帧才是最终在物理网络上传送的字节序列

至此,封装过程完成

以太网帧:以太网帧头部和尾部,共18字节
在这里插入图片描述

1.3 分用

当帧到达目的主机时,将沿着协议栈自底而上依次传递。
各层协议依次处理帧中本层负责的头部数据,以获取所需要的信息,并最终将处理后的帧交给目标应用程序。
这个过程称为分用。

1.4 测试网络 略

1.5 ARP协议工作原理

ARP协议能实现任意网络层地址到任意物理地址的转换
本书仅讨论从IP地址到以太网地址(MAC地址)的转换
工作原理是:
	主机向自己所在的网络(LAN)广播一个ARP请求,
	该请求包含目标机器的网络地址(此处指IP地址),
	此网络上的其他机器都将收到这个请求,但只有被请求的目标机器会回应一个ARP应答,其中包含自己的物理地址

1.5.1 以太网ARP请求/应答报文详解

在这里插入图片描述

1.5.2 ARP高速缓存的查看和修改

通常 ,ARP维护一个高速缓存,其中包含经常访问(比如网管地址)或最近访问的机器的IP地址到物理地址的映射。
这样就避免了重复的ARP请求,提高了发送数据包的速度

1.5.3 使用tcpdump观察ARP通信过程

tcpdump抓取的数据报本质上是以太网帧

在这里插入图片描述

1.6 DNS工作原理

我们通常使用机器的域名来访问这台机器,而不是直接使用其IP地址
	比如:访问因特网上的各种网站
那么如何将机器的域名转换成IP地址呢?
	这就需要使用:域名查询服务

1.6.1 DNS查询和应答报文详解

DNS是一套分布式的域名服务器
每个DNS服务器上都存放着大量的机器名和IP地址的映射,并且是动态更新的

1.6.2 Linux下访问DNS服务

1、要访问DNS服务,必须先知道DNS服务器的IP地址
2、Linux使用/etc/resolv.conf文件来存放DNS服务器的IP地址
3、Linux下一个常用的访问DNS服务器的客户端程序是host
	-t 选项是告诉DNS协议使用哪种查询类型
	A类型 即通过机器域名获得其IP地址

1.6.3 使用tcpdump观察DNS通信过程

1、运行host命令以查询域名对应的IP地址
2、使用tcpdump抓取这一过程中LAN上传输的以太网帧  
	port domain :该参数,是用来过滤数据包,表示只抓取使用domain(域名)服务的数据包,即DNS查询和应答报文
DNS查询的两种方式
	对于DNS解析,一共有两种查询方式:迭代查询和递归查询,
		迭代查询是主机A向服务器B发起DNS查询请求,但是服务器B不知道这个域名的IP地址,则他向主机A返回另外一个服务器C的IP地址,让主机A继续去向服务器C查询,也就是说在这种查询模式下,服务器是不负责任的,都是由主机发起查询请求;
		而递归查询不同,若服务器B是递归查询模式,那么对于主机A的查询请求,它会全权代理,如果自己不知道目的主机的IP地址,它会继续向上级DNS服务器查询,直到查到了IP地址再将其返回给主机A。

1.7 socket和TCP/IP协议族的关系

数据链路层、网络层、传输层协议是在内核中实现的。
因此操作系统需要实现一组系统调用,使得应用程序能够访问这些协议提供的服务
实现这组系统调用的API主要是socket

socket这组API提供如下两点功能
	1、将应用程序数据从用户缓冲区中复制到TCP/UDP内核发送缓冲区,以交付内核来发送数据(比如send函数)
		或者是从内核TCP/UDP接受缓冲区中复制数据到用户缓冲区,以读取数据
	2、应用程序可以通过它们修改内核中各层协议的某些头部信息或者其他数据结构,
		从而精确的控制底层通信的行为

附:网上的优秀笔记一篇

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
应用背景为变电站电力巡检,基于YOLO v4算法模型对常见电力巡检目标进行检测,并充分利用Ascend310提供的DVPP等硬件支持能力来完成流媒体的传输、处理等任务,并对系统性能做出一定的优化。.zip深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值