网编知识点

TCP协议和UDP协议

TCP是面向连接,可靠的传输层协议。

UDP是无连接的,不保证可靠的传输层协议。

TCP的三次握手:

TCP的四次挥手:

TCP如何保证可靠性:

  1. 预备知识
  1. Socket

  1. IP地址

IP地址用于区分不同主机的

  1. 端口号

端口号用于区分不同进程。

TCP端口号与UDP端口号独立,TCP端口号和UDP端口号允许相同。

  1. 字节序

CPU架构决定了字节序。

  1. 系统调用
  1. 创建套接字

成功:返回创建的套接字文件描述符,失败:返回-1。

  1. 绑定IP地址和端口号

  1. 设置监听套接字(将主动套接字改为被动套接字)

  1. 接受客户端的连接

  1. 客户端连接服务器

  1. 发送消息

  1. 接收消息

关闭套接字

  1. IO模型
  2. 阻塞IO
  3. 缺省情况下,套接字创建后所处的IO模式就是阻塞IO。

    对于接收函数,如果对端没有发送数据,接收函数就会阻塞不返回。

    对于发送函数,如果发送数据大小大于发送缓冲区剩余空间大小,发送函数就会阻塞不返回。

    优点:简单,常用。

    缺点:如果对端不发送消息,或者对端崩溃了,接收函数就会挂住不返回,不能处理其他业务。

  4. 非阻塞IO
  5. 对于接收函数,如果对端没有发送数据,接收函数会返回错误。

    对于发送函数,如果发送数据大小大于发送缓冲区剩余空间大小,发送函数会返回错误。

    while (1) {

           ret = recv();

           if (ret < 0 && errno == EAGAIN) {

                  // 没有数据可读

            continue;

    }

    // 对读取到的数据做处理

    ……………

    }

    优点:可防止进程阻塞在I/O操作上。

    缺点:需要循环不停检测是否有数据,很浪费CPU资源。

  6. 信号驱动IO
  7. void sig_handler(int signo)

    {

           recv();

    }

    signal(SIGIO, sig_handler);

  8. IO多路复用
  9. Linux进程默认能打开1024个文件,对应1024个文件描述符。

    文件描述符的特点:

  10. 文件描述符都是非负的整数
  11. 文件描述符一般从小到大分配
  12. select
  13. poll
  14. epoll
  15. 创建一个文件描述符集合,集合里有1024个bit位,对应1024个文件描述符。每一个文件描述符对应一路IO通道。将关注的.文件描述符加入文件描述符集合,就是将文件描述符对应的bit位置1,其余文件描述符对应的bit位置为0。
  16. 调用select监控文件描述符集合,如果关注的文件描述符上有数据发生,将文件描述符对应的bit位置1,其余bit位置0,返回有数据发生的文件描述符的数量。
  17. 循环遍历select返回的文件描述符集合,用FD_ISSET判断关注的文件描述符上是否有数据发生,如果有数据发生,处理对应文件描述符IO通道上的数据。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值