嵌入式Linux系统TCP链路

1 IP通信

IP是Internet Protocol(网际互连协议)的缩写,IP是整个TCP/IP协议族的核心,IPV4地址由四段组成,每个字段是一个字节,8位,最大值是255,IP地址由两部分组成,即网络地址主机地址。网络地址表示其属于互联网的哪一个网络,主机地址表示其属于该网络中的哪一台主机。

A类:(1.0.0.0-126.0.0.0)(默认子网掩码:255.0.0.0或 0xFF000000)第一个字节为网络号,后三个字节为主机号,一般用于大型网络。

B类:(128.0.0.0-191.255.0.0)(默认子网掩码:255.255.0.0或0xFFFF0000)前两个字节为网络号,后两个字节为主机号,一般用于中等规模网络。

C类:(192.0.0.0-223.255.255.0)(子网掩码:255.255.255.0或 0xFFFFFF00)前三个字节为网络号,最后一个字节为主机号,一般用于小型网络。

D类:是多播地址。该类IP地址的最前面为“1110”,所以地址的网络号取值于224~239之间。一般用于多路广播用户[1]  。

E类:是保留地址。该类IP地址的最前面为“1111”,所以地址的网络号取值于240~255之间。

其中最常见的是C类地址:192.168.0.0~192.168.255.255

回环地址:127.0.0.1。 也是本机地址,等效于localhost或本机IP。

公网IP:互联网设备通信的地址。

局域网IP:由上一级路由器分配的一个地址,一般是C类地址。

局域网设备通过路由器的转发,最终通过公网IP把数据送到互联网中。

由于局域网IP和路由转发,很大地缓解了IP资源(公网IPV4全球是唯一地)紧张问题,也造成了IPV6地发展出现了一定程度的停滞。

2 TCP特点和应用

2.1 特点

长连接:类似于打电话,打通后,只要不挂断,一直都可以传输数据。

可靠传输:主要体现在差错控制,数据校验和重复数据处理上;因此可以保证数据传输的可靠性。

流式数据:SOCK_STREA,传输的数据是字节流,需要应用程序自己判断起始位置和结束位置;补充说明下,帧数据比如UDP传输,应用程序收取一帧就是完整的报文。

2.2 服务器建立

TCP编程的服务器端一般步骤是:

1、创建一个socket,用函数socket();

2、设置socket属性,用函数setsockopt();

3、绑定IP地址、端口等信息到socket上,用函数bind();

4、开启监听,用函数listen();

5、接收客户端上来的连接,用函数accept();

6、收发数据,用函数send()和recv(),或者read()和write();

7、关闭网络连接,close(fd);

2.3 客户端建立

1、创建一个socket,用函数socket();

2、设置socket属性,用函数setsockopt();* 可选

3、绑定IP地址、端口等信息到socket上,用函数bind();* 可选

4、设置要连接的对方的IP地址和端口等属性;

5、连接服务器,用函数connect();

6、收发数据,用函数send()和recv(),或者read()和write();

7、关闭网络连接,close(fd);

3 实例

本章的代码在目录:…\tutorials\Patchs\1. TCP程序

创建一个tcp服务器:

参考2.2.2内容的基本步骤。

这里的max_used_connections表示最大监听队列长度,默认是128。

link_build_tcp_server成功返回socket id,失败返回-1。

调用方式如下:

创建成功后,进行accept等待客户端,有客户端连接时接收数据并响应。

创建一个tcp客户端:

客户端逻辑:

连接成功后发送数据,再接收来自服务器的数据。

我们把代码copy到ubuntu_server的samba服务器中。

编译运行:

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

TCP链路就这样轻松就学习完啦,就是这样Easy!!

如果觉得对您有帮助并想进一步深入学习交流可以扫描以下微信二维码或加入QQ群:928840648

欢迎共同学习成长,有一群爱学习的小伙伴一起勉励!!一起加油!!也可点击

 

笔者基于嵌入式系统框架内容如下整理编辑: