目前linux系统中使用的比较普遍的网络通信协议是TCP和UDP,下面就讲一下两个协议的通讯原理。主要是分为客户端和服务器端,客服端用于发送数据,而服务器端用于接收数据,一个服务器端可以对应多个客户端。
目录
UDP通信协议
UDP通信协议概述
UDP全称用户数据报协议(User Datagram Protocol),是一种无连接的不可靠的数据报协议。客户端不与服务器端进行连接,而只是使用sendto函数给服务器端发送数据报,其中必须指定目的地,即服务器端的地址作为参数。同样,服务器端不接受来自客户端的连接,而只管调用recvfrom函数接收客户端的数据报,其中必须指定接收数据的来源地,即客户端的地址作为参数。服务器端接收到数据之后,也可以通过sendto函数把响应发给正确的客户。
UDP通信协议原理图
API函数
socket函数
int socket(int domain,int type, int protocol);
domain:指定通信域参数
type:socket的类型
protocol:参数一般设置为0,表示使用默认协议
返回值:socket id,出现错误则为-1
bind函数
int bind(int sockfd,const struct sockaddr * addr,socklen_t addrlen);
sockfd :socket id
addr:绑定端口号
addrlen:地址长度
recvfrom函数
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen);
sockfd:socket id
buf:接收数据buf
len:buf长度
flags:一般设定为0
src_addr:客户端的ip地址(如果是服务器端调用)
addrlen:地址的长度
sendto函数
ssize_t sendto(int sockfd, const void *buff, size_t nbytes, int flags,const struct sockaddr *to, socklen_t *addrlen);
sockfd:socket id
buff:发送数据buf
nbytes:长度
flags:一般为0
to:服务器端ip地址(如果是客户端调用)
addrlen:地址的长度
TCP通信协议
TCP通信协议概述
TCP全称传输控制协议(Transmission Control Protocol),是一种可靠的网络传输协议。首先,TCP提供客户与服务器之间的连接,建立连接之后才会进行数据传输。当TCP向另一端发送数据时,它要求对端返回一个确认。如果没有收到确认,TCP就会自动重传数据并等待更长时间,在数次重传失败之后才会放弃。
TCP通信协议原理图
API函数
connect函数
int connect(int sockfd, const struct sockaddr *server_addr, socklen_t *addrlen);
sockfd:socket id
server_addr:服务器端的ip地址(客户端使用)
addrlen:地址长度
write函数
ssize_t write(int fd,const void *buf,size_t count);
fd:socket id
buf:要发送的数据buf
count:数据长度
read函数
ssize_t read(int fd,void *buf,size_t count);
fd:socket id
buf:要接收的数据buf
count:数据长度
————
2022/07/19
家中