该篇介绍微观层面的TCP/IP协议————基于W5500的嵌入式TCP通讯开发
一、基础知识
这里将会连续引申出微观TCP/IP协议的一些概念。嵌入式的TCP通讯最重要的一个概念,就是IP地址。
1.1 IP地址
1.1.1 概念
IP地址,英文名为IP Address,是internet protocol address的缩写,译为互联网协议地址,又译为网际协议地址。它是IP协议(internet protocol )提供的一种统一的地址格式,分配给使用IP协议的设备的数字标签。它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。更通俗的来说,IP地址给网上的每个通信设备分配了一个编号,每台联网的主机都需要有这个编号来通信。常见的IP地址分为IPv4与IPv6两大类,但是也有其他不常用的小分类。
1.1.2 表示
通常所说的IP地址,是指IPv4。IP地址是一个32位的二进制数,例如:
1 | 00000000111111110000000011111111 |
通常被分割为4个8位二进制数,例如上面这个IP地址,可以分割为如下形式:
1 | 00000000 11111111 00000000 11111111 |
再使用十进制数来表示每个8位二进制数,十进制数之间使用点号分隔,IP地址最终表示成如下形式:
1 | a.b.c.d |
因为一个8位二进制数表示的范围00000000 ~ 11111111正好对应十进制数0 ~ 255,所以a、b、c和d都是0 ~ 255的十进制整数。例如上面IP地址,可以表示为0.255.0.255.
(1)冒分十六进制表示法
1 | X:X:X:X:X:X:X:X |
其中每个X表示地址中的16b,以十六进制表示,例如:
1 | ABCD:EF01:2345:6789:ABCD:EF01:2345:6789 |
这种表示法中,每个X的前导0是可以省略的,例如:
1 | 2001:0DB8:0000:0023:0008:0800:200C:417A→ 2001:DB8:0:23:8:800:200C:417A |
(2)0位压缩表示法
在某些情况下,一个IPv6地址中间可能包含很长的一段0,可以把连续的一段0压缩为“::”。但为保证地址解析的唯一性,地址中”::”只能出现一次,例如:
1 | FF01:0:0:0:0:0:0:1101 → FF01::1101 |
(3)内嵌IPv4地址表示法
为了实现IPv4-IPv6互通,IPv4地址会嵌入IPv6地址中,此时地址常表示为:
1 | X:X:X:X:X:X:d.d.d.d |
前96b采用冒分十六进制表示,而最后32b地址则使用IPv4的点分十进制表示,例如:
1 | ::192.168.0.1与::FFFF:192.168.0.1 |
就是两个典型的例子,注意在前96b中,压缩0位的方法依旧适用。
1.1.3 IPv4地址分类
网络号或网络地址(NetID):用于识别主机所在的网络;
主机号或主机地址(HostID):用于识别该网络中的主机;
为了便于寻址以及层次化构造网络,每个IP地址包括两个标识码(ID),即网络ID和主机ID。同一个物理网络上的所有主机都使用同一个网络ID,网络上的一个主机(包括网络上工作站,服务器和路由器等)有一个主机ID与其对应。
私有地址:所谓的私有地址就是在互联网上不使用,而被用在局域网络中的地址。
类别 | 用途 | 网络号和主机号 | 最高位 | 地址范围 | 私有地址和保留地址 | 子网掩码 |
---|---|---|---|---|---|---|
A | 保留给政府机构 | 第一段表示网络地址,剩下三段表示主机地址 | 0 | 0.0.0.0——127.255.255.255 | ①10.X.X.X是私有地址 ②127.X.X.X是保留地址 | 255.0.0.0 |
B | 分配给中等规模的公司 | 前两段表示网络地址,后两段表示主机地址 | 10 | 128.0.0.0——191.255.255.255 | ①172.16.0.0—172.31.255.255是私有地址②169.254.X.X是保留地址;191.255.255.255是广播地址,不能分配。 | 255.255.0.0 |
C | 分配给任何需要的人 | 前三段表示网络地址,剩下一段表示主机地址 | 110 | 192.0.0.0——223.255.255.255 | 192.168.X.X是私有地址 | 255.255.255.0 |
D | 用于组播 | 不分网络地址和主机地址 | 1110 | 224.0.0.0——239.255.255.255 | ||
E | 用于实验 | 不分网络地址和主机地址 | 11110 | 240.0.0.0——255.255.255.254 |
如图:
这里就不再详细介绍IP地址中的一些特殊地址了;我们目前主要用的是C类别,也就是192.168.X.X的私有地址
1.2 子网掩码
IP地址填完后,网段不同,是并不能够直接通讯的;(平常)路由器连接的是不同的网络,网桥连接的是不同网段,这里的网络和网段有什么区别呢?
1.2.1 网段
路由器连接的是不同的网络,这里的网络就是网段不同的网段和不同的网络是同一个概念;专业点就说网段,通俗一点就说网络,其实就是一个意思。
- 那什么是同一网段?
同一网段指的是IP地址和子网掩码相与得到相同的网络地址;
想在同一网段,必需做到网络标识相同;各类IP的网络标识算法都是不一样的,需要根据子网掩码的位数来判断。
- 那什么是掩码?
- 想在同一网段,必需做到网络标识相同,那网络标识怎么算呢?
1.2.2 掩码
掩码,是一串二进制代码对目标字段进行位与运算,屏蔽当前的输入位。
用途:将源码与掩码经过按位运算或逻辑运算得出新的操作数。其中要用到按位运算如OR运算和AND运算。用于如将ASCII码中大写字母改作小写字母。
举例:如A的ASCII码值为65= (01000001)2,a的ASCII码值为97=(01100001)2,要想把大写字母A转化为小写字母只需要将A的ASCII码与(00100000)2进行或运算就可以得到小写字母a。
子网掩码,即就是用来算网络标识的掩码.
1.2.3 网络标识
算法只要把IP和子网掩码的每位数AND就可以了。
AND方法:0&1=0 0&0=0 1&1=1
如:And
192.168.0.1
,255.255.255.0
,先转换为二进制,然后AND每一位1
2
3IP 11000000.10101000.00000000.00000001
子网掩码 11111111.11111111.11111111.00000000
得出AND结果 11000000.10101000.00000000.00000000转换为十进制192.168.0.0,这就是网络标识,
再将子网掩码反取,也就是00000000.00000000.00000000.11111111,与IP AND
得出结果00000000.00000000.00000000.00000001,转换为10进制,即0.0.0.1;这0.0.0.1就是主机标识。要想在同一网段,必需做到网络标识一样。
这里介绍最常用的两种子网掩码,它们分别是“255.255.255.0
”和“255.255.0.0
”。
1.3 网关地址
如果网段不同,就实现不了通信,但现实生活中那么多设备肯定不在同个网段;那么不同网段确能够通信,就需要 网关 了.
网关(gateway)是一个网络连接到另一个网络的“关口”,网关地址实质上是一个网络通向其他网络的IP地址,主要用于不同网络间数据传输。网关在网段内的可用ip中选一个,一般选择是第一个或最后一个。
举例:比如有网络A和网络B,网络A的IP地址范围为“192.168.1.1 ~ 192. 168.1.254”,子网掩码是255.255.255.0;如果需要与其他网段通信,那么它的网关可以设置为192.168.1.1,当然也可以设置为网段内其他的一个IP地址。网络B的IP地址范围是“192.168.2.1 ~ 192.168.2.254”,子网掩码255.255.255.0。如果需要与其他网段通信,那么它的网关可以设置为192.168.2.1,当然也可以设置为网段内其它的一个ip地址。
- 网关是如何实现通信?
在没有路由器的情况下,不同的网络之间是不能进行TCP/IP通信的,即使是两个网络连接在同一台交换机(集线器)上,TCP/IP协议也会根据子网掩码(255.255.255.0)判定两个网络的主机处在不同的网络里。而要实现这两个网络之间的通信,则必须通过网关。如果网络A中的主机发现数据包的目的的主机不再本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络B的网关,网络B的网关再转发给网络B的某个主机。网络B向网络A转发数据包的过程。所以说,设置好网关的IP地址,TCP/IP协议才能实现不同网络之间的相互通信。
- 网关设置方式有哪些?
- 手动设置:手动设置适用于电脑数量比较少、TCP/IP参数基本不变的情况,比如只有几台到十几台电脑。因为这种方法需要在联入网络的每台电脑上设置“默认网关”,非常费劲,一旦因为迁移等原因导致必须修改默认网关的IP地址,就会给网管带来很大的麻烦,所以不推荐使用。
- 自动设置:利用DHCP服务器来自动给网络中的电脑分配IP地址、子网掩码和默认网关。这样做的好处是一旦网络的默认网关发生了变化时,只要更改了DHCP服务器中默认网关的设置,那么网络中所有的电脑均获得了新的默认网关的IP地址。这种方法适用于网络规模较大、TCP/IP参数有可能变动的网络。
1.4 MAC地址
媒体访问控制(media access control,MAC)是物理地址、硬件地址,用来定义网络设备的位置。
ip是虚拟地址;mac是网卡地址全世界只有一种没重复的。MAC是网络中用来识别网卡设备的唯一网络地址;由相关硬件制造商统一分配,每台电脑的MAC地址都是唯一的
1.5 DNS
DNS是域名解析服务器,是把网址变成IP地址的服务器。DNS说白了是把域名翻译成IP地址用的;
举例 ,例如我们在浏览器里面输入www.baidu.com
的时候,机器要跟百度这个网站进行通信,机器要往外面发送数据包,数据包里面要写百度这服务器的IP地址,我们不知道IP地址是多少,那么就需要主机问DNS服务器,DNS服务器就自动帮我们把www.baidu.com
这个域名翻译成了IP地址61.135.169.105
。
这就是DNS的作用,所以你的本地连接里面写DNS才能正常浏览网页,如果不设置的话,是无法正常访问网页的。
1.6 Socket 和 端口号
TCP通讯:两个进程在两个计算机上,需要有一个进程做被动方,叫做服务器。另一个做主动方,叫做客户端。
这里引入 端口号 的概念:一个计算机上可以有多个进程作为(多个)服务器 or 客户端 ,但是 ip 每个机器只有一个,所以通过不同的 port 数字加以区分。
Ps:端口是TCP/IP协议中的概念,描述的是TCP协议上的对应的应用,可以理解为基于TCP的系统服务,或者说系统进程!特定的服务往往需要特定的端口;例如,FTP就需要占用特定的TCP端口。
因此,服务器程序需要绑定在本机的某个端口号上。客户端需要声明自己连接哪个地址的那个端口。两个进程通过网络建立起通讯渠道,然后就可以通过 recv 和 send 来收发一些信息,完成通讯。
Socket : 就是指代承载这种通讯的系统资源的标识。(系统资源:协议,本地地址,本地端口号,远地地址,远地端口号)
Ps:Socket是一个接口,在用户进程与TCP/IP协议之间充当中间人,完成TCP/IP协议的书写,用户只需理解接口即可。
二、基于W5500的TCP通讯
等待更新中。。。