【网络编程】01 网络IO与套接字编程 概述

目录

1. UNIX的 5 种IO模型


1.1. 基本概念

  1. 同步与异步:

    1. 同步:
    2. 异步:
  2. 阻塞与非阻塞

    1. 阻塞:
    2. 非阻塞:

1.2. UNIX–5 种I/O模型

  • 5 种IO
    • blocking IO
    • nonblocking IO
    • IO multiplexing
    • signal driven IO
    • asynchronous IO

1.2.1. 介绍

  1. IO multiplexing 多路复用IO

    1. 单个Process可以处理 多个网络连接的IO;
    2. select,poll,epoll这个function会不断的轮询所负责的所有socket,当某个socket有数据到达,然后通知用户进程;
  2. signal driven IO 信号驱动I/O

    1. 进程通过接受到的信号确认数据是否准备就绪;
  3. asynchronous IO

    1. 进程不受阻塞,将任务交给内核处理;
    2. 数据的拷贝在内核进行;

1.2.2. 对比 & 区别

  1. blocking IO & nonblocking IO
    1. 优点:等待任务完成的时间里,“后台”可以进行多个任务;
    2. 缺点:任务完成的响应延迟 增大了,导致整体数据吞吐量降低;

注意:

  1. IO多路复用+多线程处理基本满足 高性能并发服务程序;
  2. IO多路复用 比 异步IO 更加常用;

2. 线程模型

  • 阻塞式I/O服务模型
  • Reactor模式
  • Proactor模式

3. 套接字编程

  1. 概述
    1. UNIX/Linux的网络连接可以看成一个文件,拥有文件描述符,相当于windows系统中的 “文件句柄”;

3.1. socket的类型:

  1. Internet域套接字

    1. 流格式(sock_stream): 可靠的双向通信数据流,数据损坏或丢失可以重新发送;
    2. 数据报格式(sock_dgram): 计算机只管传输数据,不进行数据校验;
  2. Unix域套接字
    同一台机器上的进程之间的通信,Internet域也可以完成,但UNIX域效率更高;


3.2. 面向连接和无连接的套接字

  1. 面向连接
    1. 在正式通信之前,先确定路径;
    2. 优势:可靠,万无一失,传输效率低,耗费资源多;
    3. 使用场景:(TCP服务)HTTP、FTP服务等;
  2. 无连接套接字
    1. 传输效率高,但不可靠,有丢失数据包、捣乱数据的风险;
    2. 使用场景:(UDP服务),DNS,即时聊天工具;

3.3. 网络模型

3.3.1. 网络通信中确认身份

  1. IP地址、
  2. MAC地址
  3. 端口号
    1. web服务:80
    2. ftp服务:21
    3. smtp服务:25

4. 套接字编程


4.1. 基本概念和原理

  1. 网络数据的大小端问题:
    1. 大端序: 高位字节存储在低位地址;-- 高字节在前
    2. 小端序: 高位字节存储在高位地址;-- 低字节在前

4.2. 函数

  1. int bind(int sock, struct sockaddr *addr, socklen_t addrlen);
  2. connect() 函数
    1. 用于建立连接;
  3. listen()
    1. 让套接字进入被动监听状态;
  4. accept()函数
    1. 当套接字处于监听状态,该函数用于接收用户请求;

4.3. 发送数据 & 接收数据

  1. Linux

    1. Linux 不区分套接字文件和普通文件;
    2. 使用write() 向套接字中写入数据,使用read() 从套接字中读取数据;
  2. 函数说明


4.4. socket缓冲区以及阻塞方式

4.4.1. 缓冲区

  1. socket 建立以后,会分配输入缓冲区和输出缓冲区;
  2. 数据先发送到缓冲区,而不是直接发送到网络;

4.4.2. 阻塞方式

4.4.3. TCP协议的粘包问题

  1. 问题

  2. 解决方法


5. TCP协议与套接字

3次握手,4次挥手;

5.1. TCP & UDP 区别


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值