网络编程基础(一)

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

相关推荐
weixin_437044641 小时前
Netbox批量添加设备——堆叠设备
linux·网络·python
Hill_HUIL2 小时前
学习日志22-静态路由
网络·学习
大佐不会说日语~3 小时前
使用Docker Compose 部署时网络冲突问题排查与解决
运维·网络·spring boot·docker·容器
qidun2104 小时前
埃夫特机器人防护服使用范围详解-避免十大应用误区
网络·人工智能
Tim风声(网络工程师)4 小时前
防火墙-长链接、介绍作用
运维·服务器·网络
视觉AI4 小时前
【踩坑实录】Windows ICS 共享网络下,国产化盒子 SSH 连接异常的完整分析
网络·windows·ssh
weixin_395448914 小时前
main.c_cursor_0202
前端·网络·算法
橙露4 小时前
NNG通信框架:现代分布式系统的通信解决方案与应用场景深度分析
运维·网络·tcp/ip·react.js·架构
Python+JAVA+大数据4 小时前
TCP_IP协议栈深度解析
java·网络·python·网络协议·tcp/ip·计算机网络·三次握手
一起养小猫5 小时前
Flutter for OpenHarmony 实战:数据持久化方案深度解析
网络·jvm·数据库·flutter·游戏·harmonyos