网络基础知识(二)

常见的网络接口

  • berkeley UNIX操作系统定义了一种API,称为BSD Socket API;
  • 微软的Windows NT操作系统定义了WinSock API;
  • AT&T的UNIX操作系统定义了SysV Socket API;

三元组

IP地址+端口号+协议
1.IP地址:标识网络设备
2.端口号:标识进程
3.协议:指定数据传输方式

套接字

地址族结构体

  • SA_family:地址族:IPv4、IPv6、Unix域、网络域

    • AF_UNIX:Unix域地址族,使用本地域套接字地址结构,用于本地通信;
    • AF_INET:IPv4地址族;
    • AF_INET6:IPv6地址族;
  • 通用地址结构体:

struct sockaddr{
    sa_family_t sa_family;
    char sa_data[14];
};
  • IPv4地址结构体:
struct sockaddr_in{
    sa_family_t sin_family;
    uint16_t sin_port;
    struct in_addr sin_addr;
};
struct in_addr{
    uint32_t s_addr;
};
  • IPv6地址结构体:
struct sockaddr_in6{
    sa_family_t sin6_family;
    uint16_t sin6_port;
    uint32_t sin6_flowinfo;
    struct in6_addr sin6_addr;
    uint32_t sin6_scope_id;
};
struct in6_addr{
    uint8_t s6_addr[16];
};

套接字类型

  • SOCK_STREAM:流套接字,TCP协议;

  • SOCK_DGRAM:数据报套接字,UDP协议;

  • SOCK_RAW:原始套接字,用户协议;
    展示

    • 套接字属于一种特殊的文件描述符
    • UNIX域套接字用于本地进程间通信

实现过程:
1.创建套接字:
int socket(int domain,int type,int protocol);
2.绑定套接字:
int bind(int sockfd,const struct sockaddr *addr,socklen_t addrlen);
3.监听套接字:
int listen(int sockfd,int backlog);
4.接受连接:
int accept(int sockfd,struct sockaddr *addr,socklen_t *addrlen);
5.发送数据:
ssize_t send(int sockfd,const void *buf,size_t len,int flags);
6.接收数据:
ssize_t recv(int sockfd,void *buf,size_t len,int flags);

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值