一、OSI模型与TCP/IP
1.osi模型是描述所有网络的模型
主要由七层组成:
- 应用层:为网络用户提供各种服务,例如电子邮件、文件传输等
- 表示层:为不同主机间的通信提供统一的数据表示形式
- 会话层:负责信息传输的组织和协调,管理进程会话过程
- 传输层:管理网络通信两端的数据传输,提供可靠或不可靠的传输服务
- 网络层:负责数据传输的路由选择和网际互连
- 数据链路层,负责物理相邻(通过网络介质相连)的主机间的数据传输,主要作用包括物理地址寻址、数据帧封 装、差错控制等。该层可分为逻辑链路控制子层(LLC)和介质访问控制子层(MAC)
- 物理层,负责把主机中的数据转换成电信号,再通过网络介质(双绞线、光纤、无线信道等)来传输。该层描述了通信设备的机械、电气、功能等特性
2.TCP/IP协议
tcp/ip 描述互联网模型。tcp/ip 把osi模型进行了合并。
DNS域名解析 把网址 翻译成ip地址
DHCP 动态主机配置协议
-
应用层: HTTP (超文本传输 网页)TFTP FTP(文件传输) SNMP(简单网络管理) DNS
-
传输层: TCP(传输控制协议,传输文件) UDP(用户数据报协议,实时,音频,视频)
-
网络层: IP(互联网协议,根据ip查找主机) ICMP(ping,互联网控制管理协议) RIP OSPF(和路由协议) IGMP(组播管理协议)
-
接口层 : ARP(ip--->mac 地址解析) RARP
二、IP的组成
IP地址 == 网络位 + 主机位
ip地址版本, V4(主流) V6(未来的方向)
三、UDP用户数据报协议

服务端:提供服务的一端。1个
客户端:使用服务的一端 。多个
1.函数的调用步骤
server:socket() -> bind() -> recvfrom() -> close()
client:socket() -> sendto() -> close()
2.函数的调用关系

3.相关函数
int socket(int domain, int type, int protocol)
功能:程序向内核提出创建一个基于内存的套接字描述符
参数:domain 地址族:
PF_INET == AF_INET ==>互联网程序
PF_UNIX == AF_UNIX ==>单机程序
type 套接字类型:
SOCK_STREAM 流式套接字 ===》TCP
SOCK_DGRAM 用户数据报套接字===>UDP
SOCK_RAW 原始套接字 ===》IP
protocol 协议 ==》0 表示自动适应应用层协议。
返回值:成功 返回申请的套接字id;失败 -1
int bind(int sockfd, struct sockaddr *my_addr,socklen_t addrlen)
功能:如果该函数在服务器端调用,则表示将参数1相关的文件描述符文件与参数2 指定的接口地
址关联,用于从该接口接受数据。
sockfd, 需要被绑定 ip 和端口号的套接字
my_addr ipv4 对应的地址结构体,man 7 ip
struct _sockaddr_in ///网络地址结构
{
u_short sin_family; ////地址族
u_short sin_port; ///地址端口
struct in_addr sin_addr; ///地址IP
}
socklen_t addrlen: 参数2 的长度。
返回值:成功0;失败 -1
发送接收函数
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
const struct sockaddr *dest_addr, socklen_t addrlen)
功能:用于UDP协议中向对方发送数据。
参数:sockfd 本地的套接字id
buff 本地的数据存储,一般是要发送的数据。
len 要发送的数据长度
flags 要发送数据方式,0 表示阻塞发送。
dest_addr: 必选,表示要发送到的目标主机信息结构体。
addrlen :目标地址长度。
返回值:成功 发送的数据长度;失败 -1
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
struct sockaddr *src_addr, socklen_t *addrlen)
功能:用于UDP协议中获取对方发送的数据。
参数:sockfd 本地的套接字id
buff 要存储数据的内存区,一般是数组或者动态内存。
len 要获取的数据长度,一般是buff的大小。*-
flags 获取方式,0 阻塞
src_addr 可选,表示对方的地址信息结构体,
如果为NULL,表示不关心对方地址。
addrlen 对方地址信息结构体大小。
如果对方地址是NULL,则该值也为NULL。
返回值:成功 接收到的数据长度;失败 -1;