嵌入式Linux学习 -- 网络1
一、网络
1. 网络的定义
网络指通过通信链路交换设备(路由器等)实现不同主机的进程间通信
实现高效可靠的信息交换
2. 网络通信链路
网络通路 = 物理链路 + 逻辑链路
物理通路: 有线(光纤、同轴电缆)、无线(4G/5G、卫星)
逻辑通路:协议栈 - TCP/IP,实现 不同硬件体系结构间以及 不同软件间的通信
3. 网络参数
1. IP 地址
IP地址是网络中主机的唯一标识,由网络地址和主机号组成。
网络地址是子网的唯一标识,类似于电话号码的区号
主机号是子网内每台主机的编号
在IPv4网络中,IP地址是32bit的二进制数,采用大端字节序,点分十进制表示
将32位二进制码划分为4字节,每字节转换成十进制数展示
每字节范围为0 - 255
0~255 | 0~255 | 0~255 | 0~255
如192.168.0.130
2. 子网掩码
获取IP地址中的网络地址和主机地址
如子网掩码为255.255.255.0,与IP地址相与得前三位字节,对其进行分类
3. 网关
一个网络到另一个网络的关口
4. DNS
域名解析系统,将域名、计算机名转换成百度服务器的IP地址。
4. 网络层次模型
1. OSI 七层模型(参考理论模型)
分类 | 功能 | 说明 | 举例 |
7. 应用层 | 为用户的应用程序提供网络服务 | 最靠近用户的OSI层 | http,ftp,QQ消息 |
6. 表示层 | 数据格式化,加密解密 | 确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取 | 表示层会通过使用一种通格式来实现多种数据格式之间的转换 PC程序与另一台计算机进行通信, |
5. 会话层 | 建立、维护连接状态 | 通过传输层(端口号:传输端口与接收端口)建立数据传输的通路。 主要在系统之间发起会话或者接受会话请求 | www.youku.com/video1 <----会话----> 优酷服务器 |
4. 传输层 | 传输控制协议 tcp: 可靠 udp:高效 | 定义传输数据的协议和端口号 | WWW端口80 TCP(传输控制协议,传输效率低,可靠性强,用于传输可靠性要求高,数据量大的数据) |
3. 网络层 | 数据包 IP寻址,路由器 | 在位于不同地理位置的网络中的两个主机系统之间提供连接和路径选择 | 路由器-路径选择 |
2. 数据链路层 | 封装成帧,差错控制 | 定义如何让格式化数据以帧为单位进行传输 如何让控制对物理介质的访问 提供错误检测和纠正,确保数据的可靠传输 | 串口通信中使用到的115200、8、N、1 |
1. 物理层 | 比特流传输 超5类 ,超6类,远距离传输 | 定义物理设备标准 0、1与电流的转换,即数模转换与模数转换 | 网线的接口类型、光纤的接口类型、各种传输介质的传输速率 |
2. TCP/IP 模型(实际应用模型)
tcp:transmission control protocol 传输控制协议
3. 网络层次和linux内核
网络协议栈
5. socket函数
1. 概念
提供 一个网络操作的特殊文件
socket
1.socket是网络通信的特殊文件 ,不占用内核空间
2.socket也是linux系统提供的一个编程接口,通过这个编程接口,就可以使用到linux的网络功能
2. 函数接口
- 原型:int socket(int domain, int type, int protocol);
- 功能
创建通信的一端 , 返回文件描述符
- 参数
domain 协议族
ip地址: AF_INET ipv4 32位
AF_INET6 ipv6 128位
AF_UNIX 本地套接字
type 说明socket网络通信的文件的类型
SOCK_STREAM 流式套接字 ---tcpSOCK_DGRAM 数据报套接字 ---udp
protocol 协议, 通常设为0
- 返回值
成功返回socket对应的fd,失败返回-1
6. 协议
1. 传输层的协议
tcp协议 udp协议
2. TCP(传输控制协议)Transmission Control Protocol
1. 定义
是一种面向连接的传输层协议,它能提供高可靠性通信
即数据无误、数据无丢失、数据无失序、数据无重复到达的通信
2. 特点
1. 建立可靠传输
无丢失,无失序,无差错,无重复
2. 面向连接
在通信前建立一条逻辑通路
3. 字节流
3. 适用情况
1. 适合于对传输质量要求较高,以及传输大量数据的通信。
2. 在需要可靠数据传输的场合,通常使用TCP协议
3. MSN/QQ等即时通讯软件的用户登录账户管理相关的功能通常采用TCP协议
3. UDP(用户数据报协议)User Datagram Protocol
1. 定义
是不可靠的无连接的协议。在数据发送前,因为不需要进行连接,所以可以进行高效率的数据传输。
2. 特点
1. 不建立可靠传输
2. 无连接
3. 数据报
3. 适用情况
1. 发送小尺寸数据(如对DNS服务器进行IP地址查询时)
2. 在接收到数据,给出应答较困难的网络中使用UDP。(如:无线网络)
3. 适合于广播/组播式通信中。
4. MSN/QQ/Skype等即时通讯软件的点对点文本通讯以及音视频通讯通常采用UDP协议
5. 流媒体、VOD、VoIP、IPTV等网络多媒体服务中通常采用UDP方式进行实时数据传输
7. 网络通信模式
1. 分类
1. c / s
client 客户端
server 服务器
2. b / s
browser 浏览器
server 服务器
3. p2p
peer to peer 点对点
2. tcp cs 模型
1. tcp 客户端 -- 主动
socket => (bind) => connect ||
write => read => close
2. tcp 服务器 -- 被动
socket => bind => listen => accept ||
read => write => close
3. 函数接口
1. 客户端
1. socket
2. connect
- 原型: int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
- 功能
通过socket链接到指定的地址上
- 参数
- sockfd socket创建的fd
- addr 标识网络中一个进程对应的地址 ip+端口号
ip 确定一台主机
端口号 用来标识一个网络通信的进程
struct sockaddr *addr不通用
socket的不同的通信范围不同通信域 都有自己特定的结构体
对于 ipv4 模式有
- struct sockaddr_in {
sa_family_t sin_family; /* address family: AF_INET 地址族 */
in_port_t sin_port; /* port in network byte order 端口号 */
struct in_addr sin_addr; /* internet address ip地址*/
}
- addrlen
说明 第二个参数的 地址类型的大小
- 返回值
成功返回 0,失败返回 -1
2. 服务器端
1. socket
2. bind -- 绑定
- 函数:int bind (int sockfd, const struct sockaddr *addr, socklen_t addrlen);
- 功能:
给sockfd 绑定一个地址信息(ip+port)
- 参数:
sockfd --- 要操作的socket
addr --- 要绑定的地址信息
addrlen --- 地址信息对应的大小
- 返回值:
成功返回0, 失败返回-1
3. listen -- 监听
- 原型: int listen(int sockfd, int backlog);
- 功能:
将sockfd对应的socket设置为监听套接字
这个套接字 负责看 有没有客户端,发送连接请求
有了放等待队列中
- 参数:
sockfd ---socket 的fd
backlog --- 等待队列的长度
- 返回值:
成功返回0,失败返回-1
4. accept -- 连接
- 原型:int accept (int sockfd, struct sockaddr *addr, socklen_t *addrlen);
- 功能:
从监听的socket中提取连接请求,完成连接(三次握手)
返回已连接的一个新socket
- 参数:
sockfd --- 监听的socket的fd
addr --- 用来存放,客户端的地址信息
addrlen --- 值结果参数
注意: 必须初始化 ,初始成 addr对应sockaddr_in 类型的大小
- 返回值:
成功返回已连接的socket的fd,失败返回-1
线程:
client:
server:
进程:
client:
server:
3. 辅助函数
1. in_addr_t inet_addr(const char *cp);
cp 表示要用的ip地址的字符串, 点分十进制 "192.168.0.150"
返回:
网络字节序形式的ip地址的32位数值
2. char *inet_ntoa(struct in_addr in);
将网络字节序形式的ip地址 转换为 点分十进制格式的 ip 字符串