网络编程基础(一)

一、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;

相关推荐
运维有小邓@10 分钟前
文件分析如何检测文件安全漏洞?
网络·安全·web安全
志栋智能10 分钟前
从手动处置到自动响应:安全工作的范式升级
网络·安全
mounter62518 分钟前
深度解析 RDMA 技术的里程碑:基于 DMA-BUF 的 P2P 直接访问(GPU Direct RDMA 新姿势)
linux·运维·服务器·网络·p2p·kernel
taxunjishu33 分钟前
MODBUS TCP转Profinet 化工安全管控物联网网关实战案例
网络·物联网·自动化
乾元35 分钟前
全球治理: 从《AI 法案》看安全合规的国际趋势
网络·人工智能·安全·机器学习·网络安全·架构·安全架构
-Excalibur-35 分钟前
IP数据包在计算机网络传输的全过程
java·网络·c++·笔记·python·网络协议·智能路由器
BioRunYiXue38 分钟前
从现象到机制:蛋白降解调控研究的系统策略与实验设计
java·linux·运维·服务器·网络·人工智能·eclipse
历程里程碑44 分钟前
41 .UDP -3 群聊功能实现:线程池助力多客户端通信
linux·开发语言·网络·数据结构·c++·网络协议·udp
ALex_zry1 小时前
通用RPC跨平台方案设计
网络·网络协议·rpc
有位神秘人1 小时前
Android中Mvvm+Retrofit的常用网络架构记录
android·网络·retrofit