目录
一、网络基本概念
1.1.协议
通信双方约定的一套标准;
1.2.国际网络通信协议标准
1.OSI协议
应用层 发送的数据内容
表示层 数据是否加密
会话层 是否建立会话连接
传输层 数据传输的方式
网络层 数据的路由
数据链路层 局域网内部通信
物理层 物理介质的连接
2.TCP/IP协议 (现在常用)
应用层 发送的数据内容
传输层 数据传输的方式
网络层 数据由一台主机到达另一台主机
网络接口层 物理介质连接
1.应用层
FTP 文件传输协议
TFTP 简单文件传输协议
HTTP 超文本传输协议
HTTPS 安全超文本传输协议
SMTP 简单邮件传输协议
TELNET 网络终端登录协议
DNS 域名系统
..
2.传输层
1)UDP (用户数据报协议)
UDP:不安全、不可靠的传输方式
UDP机制简单
UDP占用的资源开销比较小
他只管发,不管对方能不能收到
2)TCP (传输控制协议)
TCP:安全、可靠的传输方式
TCP机制复杂
TCP占用的资源开销比较大
为何安全呢?
此过程会经历如下:
三次握手建立连接,确认双方能够通信
通信过程中保障数据传输的完整性
四次挥手断开连接,确保数据传输的完整
3) 端口号:找到同一台主机不同的应用程序;
3.网络层
IPV4协议
IP地址
IP地址 = 网络位 + 主机位
网络位:IP地址所属的网段(局域网的编号)
主机位:局域网中的第几台主机
网段号:网络位不变,主机位全为0
广播号:网络位不变, 主机位全为1
子网掩码:
每个IP地址都会搭配一个子网掩码,用来区分IP地址的网络位及主机位
子网掩码展开成二进制,1对应的部分就是IP地址的网络位,0对应的部分就是IP地址的主机位
1)IP地址分类
IP地址的划分:
公有地址
私有地址
A类:1.0.0.0 ~ 126.255.255.255
子网掩码:255.0.0.0
管理超大规模型网络
私有地址:10.0.0.0 ~ 10.255.255.255
B类:128.0.0.0 ~ 191.255.255.255
子网掩码:255.255.0.0
管理大中规模型网络
私有地址:172.16.0.0 - 172.31.255.255
C类:192.0.0.0 ~ 223.255.255.255
子网掩码:255.255.255.0
管理中小规模型网络
私有地址:192.168.0.0 ~ 192.168.255.255
D类:224.0.0.0 ~ 239.255.255.255
用于组播:255.255.255.0
E类:240.0.0.0 ~ 255.255.255.255
用于实验和研究:255.255.255.0
2)MAC地址:设备自带网卡的地址(该地址是唯一的);
1.3.命令
1. ifconfig
查看自己IP地址
2.将虚拟机的网络IP设置为桥接模式
2.将虚拟机IP地址设置为桥接模式:
1.点击"虚拟机"
2.点击"设置"
3.选择"网络适配器"
4.点击"桥接模式"
5.点击"确定"
3.将虚拟机桥接到无线网卡上去
1.点击"编辑"
2.点击"虚拟网络编辑器"
3.点击"更改设置"
4.已桥接至选择无线网卡
5.点击"确定"
4.修改网卡配置文件
1.sudo vim /etc/network/interfaces
2.修改文件内容为:
auto lo
iface lo inet loopback
auto ens33
iface ens33 inet dhcp
3.保存退出
:wq
5.重启网络服务
sudo /etc/init.d/networking restart
6.测试与局域网内其余IP地址是否能够连通
ping 192.168.0.167
ping www.baidu.com
二、UDP编程
2.1.套接字
1.什么是套接字?
一次通信对象的抽象
2.功能
实现Linux系统下的网络通信
2.2.UDP发信息步骤
1.创建套接字
函数接口:socket
int socket(int domain, int type, int protocol);
功能:
创建套接字
参数:
domain: AF_INET 表示IPV4协议
type:套接字类型
SOCK_STREAM:流式套接字
SOCK_DGRAM:数据报套接字
SOCK_RAW:原始套接字
protocol:
TCP和UDP协议:0
返回值:
成功返回用来通信的文件描述符
失败返回-1
2.将自己的端口和IP与套接字绑定
函数接口:htons、inet_addr、bind
uint16_t htons(uint16_t hostshort);
功能:
将本地字节序(小端)转换成网络大端字节序
in_addr_t inet_addr(const char *cp);
功能:
将字符串的IP地址转换为32位的地址类型
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
功能:
将套接字与IP地址和端口进行绑定
参数:
addr:绑定地址结构体空间首地址
addrlen:绑定地址空间大小
返回值:
成功返回0
失败返回-1
注意:
只能绑定自己的IP地址(发送端哦,也可不用,不绑定默认随机端口号)
3.配置要发生的IP
函数接口: htons、inet_addr
4.发消息
函数接口:sendto
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
const struct sockaddr *dest_addr, socklen_t addrlen);
功能:
发送信息
参数:
sockfd:套接字文件描述符
buf:发送数据空间首地址
len:发送数据长度
flags:发送属性 默认为0
dest_addr:目标地址存放空间首地址
addrlen:目的地址的长度
返回值:
成功返回发送字节数
失败返回-1
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 */
};
/* Internet address. */
struct in_addr {
uint32_t s_addr; /* address in network byte order */
};
注意: 如果sendto对应的套接字没有绑定端口,则sendto绑定一个随机端口完成发送功能
5.关闭套接字
函数接口:close
2.3.UDP接收消息步骤
1.创建套接字
函数接口:socket
2.将自己的端口和IP与套接字绑定
函数接口:htons、inet_addr、bind
3.接收消息
函数接口:recvfrom
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
struct sockaddr *src_addr, socklen_t *addrlen);
功能:
接收信息
参数:
sockfd:套接字文件描述符
buf:接收数据空间首地址
len:接收数据长度
flags:接收的属性 默认为0
src_addr:存放发送方地址空间的地址
addrlen: 要接收的发送方地址的长度
返回值:
成功返回实际接收字节数
失败返回-1
三、总结
2024年8月15日,学习的第31天。今天开始学习了Linux下的网络编程,主要学习了基础的网络知识以及UDP编程的实现。
加油!