TCP通讯_微观

  该篇介绍微观层面的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
2
3
FF01:0:0:0:0:0:0:1101 → FF01::1101
0:0:0:0:0:0:0:1 → ::1
0:0:0:0:0:0:0:0 → ::

(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 网络标识

  1. 算法只要把IP和子网掩码的每位数AND就可以了。

  2. AND方法:0&1=0 0&0=0 1&1=1

  3. 如:And 192.168.0.1255.255.255.0,先转换为二进制,然后AND每一位

    1
    2
    3
    IP            11000000.10101000.00000000.00000001
    子网掩码 11111111.11111111.11111111.00000000
    得出AND结果 11000000.10101000.00000000.00000000
  4. 转换为十进制192.168.0.0,这就是网络标识,

  5. 再将子网掩码反取,也就是00000000.00000000.00000000.11111111,与IP AND

  6. 得出结果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协议才能实现不同网络之间的相互通信。
  • 网关设置方式有哪些?
  1. 手动设置:手动设置适用于电脑数量比较少、TCP/IP参数基本不变的情况,比如只有几台到十几台电脑。因为这种方法需要在联入网络的每台电脑上设置“默认网关”,非常费劲,一旦因为迁移等原因导致必须修改默认网关的IP地址,就会给网管带来很大的麻烦,所以不推荐使用。
  2. 自动设置:利用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通讯

  等待更新中。。。

-------------本文结束感谢您的阅读-------------