TCP/IP学习笔记(一)

本文详细介绍了TCP/IP协议的结构,包括应用层、传输层、网络层和链路层,解释了IP地址和子网掩码的概念,数据包的封装与分用过程,IP首部的组成部分及作用,端口号的作用,链路层的功能以及以太网的封装方式。同时,阐述了环回地址、最大传输单元MTU、IP路由选择和路由表的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、 TCP/IP结构:

TCP/IP是一个四层协议,结构如下:

1、应用层:各种应用程序和协议,如Http、FTP等。

2、传输层:TCP和UDP

     TCP提供一种可靠的运输层服务,但UDP是不可靠的,不能保证数据报到正确到达目的地。

3、网络层:IP、IGMP、ICMP

     IP提供的是一种不可靠的服务,也就是尽可能块地把分组从源节点送到目的节点,但并
不提供任何可靠性保证。ICMP是IP的附属协议,主要用来交换错误报文,IGMP是组管理协议,用来将UDP数据报多播到多个主机。

4、链路层:设备驱动程序和网卡等

二、 IP地址和子网掩码

要学习TCP/IP协议,首先要提到的是IP地址。每台主机的IP地址是一个32位的二进制数。每个IP地址被分割位两部分:前缀和后缀。前缀用来确定计算机从属的物理网络,后缀用来确定网络上单独的计算机。互联网上每一个物理网络都有一个唯一的值作为网络号,该网络号必须全球一致。

1、IP地址分类:

    IP地址分位五类:A类、B类、C类、D类、E类,其中A类、B类和C类为基本类,D类用于多播,E类属于保留类,现在不用。它们的格式如下(其中*代表网络号):

A类:0******* XXXXXXXX XXXXXXXX XXXXXXXX

B类:10****** ******** XXXXXXXX XXXXXXXX

C类:110***** ******** ******** XXXXXXXX

D类:1110**** XXXXXXXX XXXXXXXX XXXXXXXX

E类:1111**** XXXXXXXX XXXXXXXX XXXXXXXX

这样,A类地址的范围为:0.0.0.0-127.255.255.255

B类地址的范围为:128.0.0.0-191.255.255.255

C类地址的范围为:192.0.0.0-223.255.255.255

D类地址的范围为:224.0.0.0-239.255.255.255

E类地址的范围为:240.0.0.0-247.255.255.266

◆ 几个特殊IP地址

网络地址:IP地址中主机地址全为0的地址,如128.211.0.0。

广播地址:IP地址中主机地址全为1的地址,如128.211.255.255。

环回地址:127.0.0.1,主要用于测试。

2、子网掩码:

现在的主机都要求支持子网掩码,不再把IP地址看成为由单纯的一个网络号和一个主机号组成,而是把主机号再分成一个子网号和一个主机号。例如一个B类地址(140.252),在剩下的16位中,8位用于子网号,8位用于主机号,这样就允许254个子网,每个子网就可以有254台主机。为了确定多少位用于子网号,多少位用于主机号,这就要用到子网掩码了。其中值为1的位留给网络号和子网号,为0的位留给主机号。

三、 数据包的封装和分用

1、 封装:

应用程序→TCP/UDP→IP→以太网

2、 分用:

以太网←IP←TCP/UDP←应用程序 

以太网
首部
(14)
IP首部
(20)
TCP首
部(20)
应用数据以太网
尾部(4)

四、 IP首部:

IP协议是TCP/IP协议族中最核心的协议,所有的TCP、UDP、ICMP和IGMP数据都以IP数据报格式传输。IP传输的两个特点:不可靠和无连接。IP协议并不保证数据报能成功地到达目的地,也不维护后续数据报的状态信息。必须由上层协议处理。 

4位
版本
4位首
部长度
8位服务类型16位总长度(字节数)
16位标识3位
标志
13位片偏移
8位TTL8位协议16位首部检验和
32位源IP地址
32位目的IP地址

IP首部定义:

01.typedef struct ip_hdr
02.{
03.unsigned char ip_verlen; // 4-bit 版本号
04.// 4-bit 首部长度 (in 32-bit words)
05.unsigned char ip_tos; // IP 服务类型
06.unsigned short ip_totallength; // 总长度(字节数)
07.//第一个32位
08.unsigned short ip_id; // 标识
09.unsigned short ip_offset; //3位标志,13位分片偏移,
10.#define IP_DF 0x4000 //0x4000 don''t fragment flag
11.#define IP_MF 0x2000 //0x2000 more fragment flag
12.#define IP_OFFMASK 0x1fff //0x1fff mask for fragmenting bits
13.//第二个32位
14.unsigned char ip_ttl; // 生存时间
15.unsigned char ip_protocol; // 上层协议
16.unsigned short ip_checksum; // 首部检验和
17.//第三个32位
18.unsigned int ip_srcaddr; // 源IP地址
19.//第四个32位
20.unsigned int ip_destaddr; // 目的IP地址
21.//第五个32位
22.} ip,IPV4_HDR, *PIPV4_HDR, FAR * LPIPV4_HDR;

说明:ip_verlen前4位目前为4,表示为IPv4,后4位为5,表示首部长度为5X4=20个字节。

ip_tos为服务类型(type of service),aaabbbbc,aaa为优先权子字段,现在已被忽略,bbbb为TOS子字段,代表:最小时延、最大吞吐量、最高可靠性和最小费用,c未使用必须为0。如果bbbb均为0,则表示为一般服务。目前大多数TCP/IP实现都不支持TOS特性。

ip_totallength为IP数据报的总长度,以字节为单位,因此理论最大值为65535,但实际是不可能的。

ip_id为唯一标识主机发送的每一个数据报,通常每发一份它的值就会加1。

ip_off前3位标志abc,a为保留,必须为0,b为不分片标志,c为更多分片标志。

ip_off后13位为分片位置,以8字节为单位计算。因此,除最后一个分片外,其他每个分片都希望是一个8字节倍数的数据,从而使后面的分片从8字节边界开始。

ip_ttl为IP报的生存周期,每经过一个路由器就减1,如果该字段为0,则该数据报被丢弃。

ip_protocol:1=ICMP,2=IGMP,3=TCP,17=UDP

ip_checksum为数据报的首部检验和。计算方法如下:

01.USHORT checksum(ip *ip, int size) 
02.
03.unsigned long cksum=0;
04.while (size > 1) 
05.{   
06.cksum += * ((USHORT*)ip )++;
07.size -= sizeof(USHORT);
08.}
09.if (size) 
10.{
11.cksum +=(USHORT) *(UCHAR*)ip;
12.}
13.cksum = (cksum >> 16) + (cksum & 0xffff);
14.cksum += (cksum >>16);
15.return (USHORT)(~cksum);
16.}

ICMP、IGMP、TCP和UDP协议也采用相同的检验和算法。

五、 端口号:TCP/UDP都使用一个16bit地端口号来表示不同地程序。

1、 知名端口:一般介于1~255之间,例如:FTP的TCP端口号是21。

2、 临时端口,由于客户端对端口号一般并不关心,只需保证唯一就可以了,所以系统一般分配临时端口号。

六、 链路层:(以以太网为例,地址为48bit)

1、 链路层的功能:

◆ 为IP模块发送和接收IP数据报

◆ 为ARP模块发送ARP请求和接收ARP应答

◆ 为RARP模块发送RARP请求和接收RARP应答

2、 以太网的封装,以太网IP数据报的封装在RFC 894中定义的:

目的地址
(6)
源地址
(6)
类型
(2)
数据(46-1500),包括IP、ARP、RARPCRC
(4)

对于ARP和RARP请求/应答数据报大小只有28字节,为了达到46字节的最小长度,必须在后面添加18字节的填充字节。

七、 环回地址:

一般把127.0.0.1分配给这个接口,并命名为localhost,一个发给环回接口的IP数据报不能在任何网络上出现。

1、 传给环回地址的任何数据均作为IP输入。

2、 传给广播地址和多播地址的数据报复制一份传给环回接口,然后送到以太网上。

3、 任何传给该主机IP地址的数据均送到环回接口。

八、 最大传输单元MTU:

以太网对数据帧的长度都有限制,其最大值为1500。链路层的这个特性叫做最大传输单元MTU。如果一个IP数据报比MTU大,那IP层就必须进行分片,把数据报分为若干片。如果两台主机间的通信要通过多个网络时,那么每个网络的链路层可能有不同的MTU。重要的不是两台主机所在网络的MTU,重要的是两台主机路径中的最小MTU,它被成为路径MTU。

九、 IP路由选择

如果目的主机与源主机直接相连或都在一个共享网络上,那么IP数据报就直接送到目的主机上。否则主机就会把数据报发送到一个默认的路由器上,由该路由器来转发该数据报。IP层在内存中有一个路由表,当收到一份数据报并进行发送时,它都要对该表搜索一次。当数据报来自某个网络接口时,IP首先检查目的IP地址是否为本机的IP地址之一或者IP广播地址。如果是这样,数据报就被送到由IP首部协议字段所指定的协议模块进行处理,否则如果IP层被设置为路由器的功能,那么就对数据报进行转发,否则丢弃数据报。

我们来看看路由表是什么:

C:\WINNT\system32>route PRINT

==========================================================================

Interface List

0x1 ........................... MS TCP Loopback interface

0x1000003 ...00 08 02 ca 2d 11 ...... Intel 8255x-based Integrated Fast Ethernet

==========================================================================

Active Routes:

Network Destination   Netmask       Gateway     Interface    Metric

目的地            掩码                网关            主机

0.0.0.0         0.0.0.0            192.1.8.26      192.1.8.84    1

127.0.0.0       255.0.0.0          127.0.0.1       127.0.0.1     1

192.1.8.0       255.255.255.0      192.1.8.84      192.1.8.84    1

192.1.8.84      255.255.255.255    127.0.0.1       127.0.0.1     1

192.1.8.255     255.255.255.255    192.1.8.84      192.1.8.84    1

224.0.0.0       224.0.0.0          192.1.8.84      192.1.8.84    1

255.255.255.255 255.255.255.255    192.1.8.84      192.1.8.84 1

Default Gateway: 192.1.8.26

==================================================================

IP路由的主要功能:

1、 搜索路由表,寻找与目的IP地址完全匹配的表目,如果找到,则将数据报发给该表目指定的下一站路由器或直接连接的网络接口。

2、 搜索路由表,寻找能与目的网络号相匹配的表目,如果找到,则将数据报发给该表目指定的下一站路由器或直接连接的网络接口。

作者:肖进

单位:南京中萃食品有限公司 资讯部

邮件:xiaoj@njb.swirebev.com

电话:025-58642091

本文转自:http://www.vckbase.com/index.php/wv/782

基于数据挖掘的音乐推荐系统设计与实现 需要个代码说明,不需要论文 采用python语言,django框架,mysql数据库开发 编程环境:pycharm,mysql8.0 系统分为前台+后台模式开发 网站前台: 用户注册, 登录 搜索音乐,音乐欣赏(可以在线进行播放) 用户登陆时选择相关感兴趣的音乐风格 音乐收藏 音乐推荐算法:(重点) 本课题需要大量用户行为(如播放记录、收藏列表)、音乐特征(如音频特征、歌曲元数据)等数据 (1)根据用户之间相似性或关联性,给个用户推荐与其相似或有关联的其他用户所感兴趣的音乐; (2)根据音乐之间的相似性或关联性,给个用户推荐与其感兴趣的音乐相似或有关联的其他音乐。 基于用户的推荐和基于物品的推荐 其中基于用户的推荐是基于用户的相似度找出相似相似用户,然后向目标用户推荐其相似用户喜欢的东西(和你类似的人也喜欢**东西); 而基于物品的推荐是基于物品的相似度找出相似的物品做推荐(喜欢该音乐的人还喜欢了**音乐); 管理员 管理员信息管理 注册用户管理,审核 音乐爬虫(爬虫方式爬取网站音乐数据) 音乐信息管理(上传歌曲MP3,以便前台播放) 音乐收藏管理 用户 用户资料修改 我的音乐收藏 完整前后端源码,部署后可正常运行! 环境说明 开发语言:python后端 python版本:3.7 数据库:mysql 5.7+ 数据库工具:Navicat11+ 开发软件:pycharm
MPU6050是款广泛应用在无人机、机器人和运动设备中的六轴姿态传感器,它集成了三轴陀螺仪和三轴加速度计。这款传感器能够实时监测并提供设备的角速度和线性加速度数据,对于理解物体的动态运动状态至关重要。在Arduino平台上,通过特定的库文件可以方便地与MPU6050进行通信,获取并解析传感器数据。 `MPU6050.cpp`和`MPU6050.h`是Arduino库的关键组成部分。`MPU6050.h`是头文件,包含了定义传感器接口和函数声明。它定义了类`MPU6050`,该类包含了初始化传感器、读取数据等方法。例如,`begin()`函数用于设置传感器的工作模式和I2C地址,`getAcceleration()`和`getGyroscope()`则分别用于获取加速度和角速度数据。 在Arduino项目中,首先需要包含`MPU6050.h`头文件,然后创建`MPU6050`对象,并调用`begin()`函数初始化传感器。之后,可以通过循环调用`getAcceleration()`和`getGyroscope()`来不断更新传感器读数。为了处理这些原始数据,通常还需要进行校准和滤波,以消除噪声和漂移。 I2C通信协议是MPU6050与Arduino交互的基础,它是种低引脚数的串行通信协议,允许多个设备共享对数据线。Arduino板上的Wire库提供了I2C通信的底层支持,使得用户无需深入了解通信细节,就能方便地与MPU6050交互。 MPU6050传感器的数据包括加速度(X、Y、Z轴)和角速度(同样为X、Y、Z轴)。加速度数据可以用来计算物体的静态位置和动态运动,而角速度数据则能反映物体转动的速度。结合这两个数据,可以进步计算出物体的姿态(如角度和角速度变化)。 在嵌入式开发领域,特别是使用STM32微控制器时,也可以找到类似的库来驱动MPU6050。STM32通常具有更强大的处理能力和更多的GPIO口,可以实现更复杂的控制算法。然而,基本的传感器操作流程和数据处理原理与Arduino平台相似。 在实际应用中,除了基本的传感器读取,还可能涉及到温度补偿、低功耗模式设置、DMP(数字运动处理器)功能的利用等高级特性。DMP可以帮助处理传感器数据,实现更高级的运动估计,减轻主控制器的计算负担。 MPU6050是个强大的六轴传感器,广泛应用于各种需要实时运动追踪的项目中。通过 Arduino 或 STM32 的库文件,开发者可以轻松地与传感器交互,获取并处理数据,实现各种创新应用。博客和其他开源资源是学习和解决问题的重要途径,通过这些资源,开发者可以获得关于MPU6050的详细信息和实践指南
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值