2021.4.15学习笔记

UDP协议

UDP:用户数据报协议。是一种无连接的传输层协议,不会创建连接,所以是一种不可靠的协议。它的优点为速度快,缺点为会丢包、会出错。

1、无连接不可靠
2、局域网:UDP传送数据的最大长度=1518-18-20-8=1472bit
广域网:UDP传送数据的最大长度=65535-IP(头20)-UDP(8)=65507bit。(使用sendto函数发送超过65507会返回错误

协议的特点:

无连接,减少了开销和发送数据的延迟
尽最大努力进行交互(不保证可靠交互),主机不需要维持复杂的连接状态表
面向报文:发送方的UDP对应用程序交下的报文,在添加首部之后就向下交付给IP层,既不拆分也不合并
没有阻塞控制
支持一对一,多对一和多对多交互通信

UDP使用

由于UDP协议的特点,所以UPD协议的使用场景如下:
不需要可靠机制,只需要速度快。
流媒体、多媒体游戏、IP电话
资源消耗小

TCP协议与UDP协议对比

根据是否连接、传输可靠性、应用场景、速度,连接对象个数,传输方式,前部开销这几个特点,TCP协议和UDP协议有以下几点不同。

特征点TCPUDP
是否连接面向连接面向非连接
传输可靠性可靠会丢包,不可靠
连接对象个数一对一一对多
传输方式发送数据需要建立连接(面向有连接)发送数据不需要建立连接(面向无连接)
前部开销使用资源较多比TCP节省资源
适用场景数据量很大,防止丢包数据量小
速度

常见的应用层协议中:
基于TCP协议的有:HTTP、HTTPS、FTP。
基于UDP协议的有:DNS(域名解析协议)等。

C/S与B/S的优缺点

C/S

优点

1、由于客户端实现与服务器的直接连接没有中间环节因此响应更快
2、操作界面漂亮,形式多样,可以充分满足客户本身的个性化要求
3、C/S结构的管理信息系统具有较强的事务处理能力,能实现复杂的业务流程

缺点

1、需要安装专门的客户端程序,分布功能弱,针对面广,且不具备网络条件的用户群体,不能够实现快速部署和安装
2、兼容性差对不同的开发工具,具有较大的局限性,采用不同的工具需要重新改写程序
3、开发成本高,需要具有一定的专业水平的技术人员才能完成

B/S

优点

1、具备分布式特点,可以随时随地进行查询,浏览等业务
2、业务拓展简单,通过增加网页即可增加服务器功能
3、维护方便,只需要改变网页,即可实现所以用户同步更新
4、开发简单

缺点:

1、表现要达到C/S程序的程度要花费不少精力
2、在速度和安全上需要花费巨大的设计成本,这是B/S架构的最大的问题

TCP服务实现过程

创建套接字:socket函数

int socket(int domain, int type, int protocol);

domain:即协议域,又称为协议族(family)。常用的协议族有,AF_INET、AF_INET6、AF_LOCAL(或称AF_UNIX,Unix域socket)、AF_ROUTE等等。协议族决定了socket的地址类型,在通信中必须采用对应的地址,如AF_INET决定了要用ipv4地址(32位的)与端口号(16位的)的组合、AF_UNIX决定了要用一个绝对路径名作为地址。

type:指定socket类型。常用的socket类型有,SOCK_STREAM、SOCK_DGRAM、SOCK_RAW、SOCK_PACKET、SOCK_SEQPACKET等等(socket的类型有哪些?)。

protocol:故名思意,就是指定协议。常用的协议有,IPPROTO_TCP、IPPTOTO_UDP、IPPROTO_SCTP、IPPROTO_TIPC等,它们分别对应TCP传输协议、UDP传输协议、STCP传输协议、TIPC传输协议。

创建一个套接字文件,然后以文件形式来操作通信

bind()

绑定IP地址以及端口号:bind()
int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);

scokfd:socket函数创建的套接字
const struct sockaddr *addr:保存IP和端口号的结构体
socklen_t addrlen:结构体的长度

功能:指定通信协议的套接字文件与IP以及端口绑定起来

返回值:成功返回0,失败返回1

listen()

将套接字文件描述符,从主动变为被动(做监听准备)listen()
int listen(int socket, int backlog);
int socket:套接文字描述符
int backlog:指定队列容量(小于30即可,一般是2、3)
功能:将套接字文件描述符,从主动变为被动(做监听准备)
返回值:成功返回0,失败返回-1

accept()

等待客户端响应:被动监听客户端的连接并响应accept()
int accept(int sockfd, struct sockaddraddr,socklen_taddrlen);
功能:被动监听客户端发起的三次握手请求,成功,即建立连接。
返回值:成功返回一个通信描述符,专门用于与该连接成功的客户端通信,总之后续服务器与客户端的正式通信,使用的是accept的通信描述符
失败返回1。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值