网络编程基础(一)

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

相关推荐
猫头虎12 小时前
如何在浏览器里体验 Windows在线模拟器:2026最新在线windows模拟器资源合集与技术揭秘
运维·网络·windows·系统架构·开源·运维开发·开源软件
古城小栈14 小时前
Rust 网络请求库:reqwest
开发语言·网络·rust
qq_3168377517 小时前
IP网段冲突 配置指定ip使用指定的网络接口发送,而不经过默认网关
服务器·网络·tcp/ip
布史17 小时前
Tailscale虚拟私有网络指南
linux·网络
枷锁—sha18 小时前
彻底解决 Google Gemini 报错:异常流量与 IP 地址冲突排查指南
网络·网络协议·tcp/ip
Xの哲學18 小时前
深入剖析Linux文件系统数据结构实现机制
linux·运维·网络·数据结构·算法
-To be number.wan19 小时前
经典真题精讲|2010年408统考第34题:文件传输最少需要多久?
网络·计算机网络
知乎的哥廷根数学学派20 小时前
基于多尺度注意力机制融合连续小波变换与原型网络的滚动轴承小样本故障诊断方法(Pytorch)
网络·人工智能·pytorch·python·深度学习·算法·机器学习
好多渔鱼好多20 小时前
【流媒体协议】RTSP / RTP / RTCP 协议全景介绍
网络·网络协议·rtp·rtsp·rtcp·ipc摄像头
映秀小子21 小时前
Wireshark加减显示列
网络·测试工具·wireshark