网络编程基础(一)

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

相关推荐
lusasky6 小时前
实现智能体调用海量api
网络
zfj3217 小时前
“昨晚快手被黑直播平台出现大量违规内容“技术解析
网络·网络安全·系统防护
TG:@yunlaoda360 云老大7 小时前
华为云国际站代理商的ESW主要有什么作用呢?
网络·数据库·华为云
向宇it7 小时前
【unity游戏开发——网络】使用Unity+PurrNet+Heathens+Steam,在 Unity 中通过 Steam与你的朋友建立联系
网络·游戏·unity·c#·游戏引擎·steam
鬼臾区7 小时前
Chapter 9 USB Device Framework 摘要1
网络
ikkkkkkkl7 小时前
计算机网络:传输层
网络·计算机网络·udp·tcp·传输层
G_H_S_3_8 小时前
【网络运维】容器、容器架构与docker部署
运维·网络·docker·架构
fantasy_arch8 小时前
SVT-AV1帧类型决策-场景切换检测
前端·网络·av1
开开心心_Every8 小时前
无广告干扰:简单好用文字LOGO设计工具
xml·java·网络·数据库·华为od·华为云·excel