• 字节序:

    • 主机字节序(host byte order):不同的主机有不同的字节序,x86:小端;
    • 网络字节序(network byte order):大端字节序;

0. 什么是套接字

  • 套接字是网络进程间的通信(网络进程间通信,又叫 network IPC)接口,进程用该接口能够与其他进程通信,无论是否在同一台计算机上,
  • 套接字是对通信端点的抽象,就像文件描述符(file descriptor)是对文件的抽象表示;

1. 基本概念

  • socket 可以看成是用户进程(Application,工作在用户空间)与内核网络协议栈(内核空间,kernel space)的编程接口(称为套接口);

    • 以实现用户空间的应用对内核网络协议栈提供的服务的访问和调用;

    socket 以下的 UDP/TCP、IP、Channel 等即为内核网络协议栈;

2. IPv4 套接字地址接口

$ man 7 ip

IPv4 套接字地址结构通常也称为“网际套接字地址结构”,以sockaddr_in命名,定义在 <netinet.h>中:

struct sockaddr_in {
sa_family_t sin_family; /* address family: AF_INET */
in_port_t sin_port; /* port in network byte order */
struct in_addr sin_addr; /* internet address */
}; /* Internet address. */
struct in_addr {
uint32_t s_addr; /* address in network byte order */
};
  • AF_INET:代表的是 IPv4 协议;

    • 此外还有 Unix 域协议;
  • Network byte order:网络字节序;

3. 通用地址结构

使不同协议间的套接字地址兼容。

struct sockaddr {
uint8_t sin_len;
sa_family_t sin_family;
char sa_data[14];
}
  • sin_len:整个 sockaddr 结构体的长度;
  • sin_family:指定该地址家族;
  • sa_data:由 sin_family 决定其形式;

4. 字节序转换函数

uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
uint32_t ntohl(uint32_t hostlong);
uint16_t ntohs(uint16_t hostshort);
  • h:host,表示主机(主机字节序);
  • n:network,表示网络(网络字节序);
  • s:short,l:long

最新文章

  1. MFC如何隐藏RibbonBar的QAT QuickAccessToolBar(快速访问工具栏)
  2. tomcat7 Could not load the Tomcat server configuration at /Servers/Tomcat v7.0 Server at localhost-config. The configuration may be corrupt or incomplete
  3. Atitit dsl exer v3 qb3 新特性
  4. 【转】ORATOP工具使用说明
  5. 【BZOJ1006】【HNOI2008】神奇的国度
  6. win8 任务栏不合并隐藏标题
  7. 一品楼论坛www.ep6.info一品楼论坛
  8. maven插件报错之解决
  9. Scala 中的 apply 和 update 方法[转]
  10. 简易版DES加密和解密详解
  11. Wampserver红色橙色解决思路----端口冲突是关键
  12. solr7.2安装实例,中文分词器
  13. AD用户属性:UserPrincipalName与SamAccountName的差别
  14. web页面锁屏初级尝试
  15. 杭店 ACM 1864 最大报销额 01背包
  16. Cookie 和Session 简介
  17. 读论文《BP改进算法在哮喘症状-证型分类预测中的应用》
  18. &lt;&lt;网络是怎样连接的&gt;&gt;笔记第5章 防火墙,缓存服务器
  19. Centos 关闭图形界面
  20. 「Django」rest_framework学习系列-路由

热门文章

  1. TCP的send与recv函数小结
  2. Zabbix 默认网络发现模板修改(第三篇)
  3. C# 获得星期几
  4. centos添加永久的环境变量
  5. querySelector
  6. Python random模块&amp;string模块 day3
  7. tomcat8安装及配置
  8. 我的FPGA
  9. const浅析
  10. 293. [NOI2000] 单词查找树——COGS