自学内容网 自学内容网

linux网络编程3

一.UDP(续)

1.UDP编程

(1)sendto函数发送数据

向to结构体指针中指定的ip,发送UDP数据;
通过to和addrlen确定目的地址;
可以发送长度为0的数据

ssize_t sendto(int sockfd,const void *buf,size_t nbytes,int flags,const struct sockaddr *to,socklen_t addrlen);

sockfd:套接字
buf:发送数据缓冲区
nbytes:发送数据缓冲区的大小
flags:一般为0
to:指向目的主机地址结构体的指针
addrlen:to所指向内容的长度

(2)bind函数绑定
bind函数将socket套接字与本地协议的地址进行绑定

int bind(int sockfd,const struct sockaddr *myaddr,socklen_t addrlen);

sockfd:socket套接字
myaddr:指定特定协议的地址结构指针
addrlen:该地址结构的长度

(3)recvfrom函数接收函数
将源地址信息保存在from指向的结构中

ssize_t recvfrom(int sockfd.void *buf,size_t nbytes,int flags,struct sockaddr *from,socklen_t *addrlen);

sockfd:套接字
buf:接收数据缓冲区
nbytes:接收数据缓冲区的大小
flags:套接字标志(常为0)
from:源地址结构体指针,用来保存数据的来源
addrlen:from所指内容的长度

注意:
from和addrlen可以为NULL,表示不保存数据来源

2.注意点

(1)客户端
在客户端的代码中,指设置了目的IP、目的端口,而客户端的IP和端口都是linux系统底层自动给客户端分配的;
分配端口的方法时随机分配;

(2)服务端
因为服务器需要固定本地端口,所以需要进行bind;
服务器也可以主动给客户端发送数据;
客户端可以进行bind,但一般不必要

2.TFTP

TFTP为简单文件传送协议;
其是基于UDP协议实现的,因此在应用层中想要使用TFTP,那么传输层就一定要是UDP;
和UDP一样是不进行用户有效认证;

数据传输模式:

  • octet:二进制模式
  • netascii:文本模式
  • mail:已经不再支持

TFTP通信过程

在这里插入图片描述

  1. 服务器等待客户端的请求
  2. 服务器接收到请求后,使用临时端口与客户端进行通信
  3. 发送长度为512Byte的数据,数据包的编号从1开始增加
  4. 每个数据包都要得到ACK的确认,当出现超时时,则重新发送最近一次的数据包
  5. 当数据包是大小小于512Byte时表示传输结束

TFTP协议分析

在这里插入图片描述
读写请求中操作码为1或2,代表为读或写,即上传或下传;
以上的0代表的是“\0”;


原文地址:https://blog.csdn.net/qq_65818377/article/details/142369180

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!