《网络协议学习笔记》之ip地址 port转换
来源:互联网 发布:源生活网络超市 编辑:程序博客网 时间:2024/05/22 18:27
前言:总是遇到一堆奇怪的ip、port的转换函数,由于只是简单地发个socket消息,所以也没打算详细研究。今天研究tcp长短连接的时候,遇到了TIME_WAIT状态相关的知识点,需要显示本地端口号,所以记录以便梳理逻辑。
储备知识点
字节序
- 网络字节序(大端字节序)
- 主机字节序(小端字节序)
IP地址
概念
一个32位的无符号整型(以网络字节序,即大端字节序,存储的整型数据)
IP地址表示形式
- 二进制表示法:0xffffffff
- 点分十进制表示法: 255.255.255.255
转换函数
在不同主机、网络环境下的通信需要制定一系列标准,tcp/ip协议族的一部分通信标准如下:
1. 字节序标准:ip地址、port在网络通信过程中必须以网络字节序传输(大端字节序);2. IP地址表示(存储)形式标准:ip地址在网络通信过程中行必须以二进制表示传输
于是乎,就需要两类转换函数
字节序转换函数
uint32_t htonl(uint32_t hostlong); //ip转换:主机(host)字节序->>网络(netword)字节序uint16_t htons(uint16_t hostshort); //port转换:主机(host)字节序->>网络(netword)字节序uint32_t ntohl(uint32_t netlong); //ip转换:网络(netword)字节序->>主机(host)字节序uint16_t ntohs(uint16_t netshort); //port转换:网络(netword)字节序->>主机(host)字节序
Note:
由于ip地址存储在32位无符号的整型中,所以采用uint32_t类型(unsigned long int)存储;
由于port存储在16位的无符号整型中,所以采用uint16_t类型(unsigned short int)存储;
IP地址表示(存储)形式转换函数
char *inet_ntoa(struct in_addr in); //二进制形式->>点分十进制int inet_aton(const char *cp, struct in_addr *inp); //点分十进制->>二进制形式in_addr_t inet_addr(const char *cp); //点分十进制->>二进制形式in_addr_t inet_network(const char *cp); //点分十进制->>二进制形式
Note
ntoa和aton是什么意思?
“n”表示的是网络(network)。
“a”表示应用(application)。
“to”表示转换。
阅读全文
1 0
- 《网络协议学习笔记》之ip地址 port转换
- TCP/IP学习笔记之四 --- ARP:地址解析协议
- Linux学习笔记之:获得网络ip地址
- TCP/IP网络协议学习笔记之以太网
- 学习笔记之IP地址
- 【tcp-ip学习笔记】关于IP协议层、IP地址
- TCP/IP协议学习笔记----3.网络层IP协议
- 网络--学习笔记--IP地址分类、子网掩码
- TCP/IP协议学习(网络层补充之网络号、主机号与IP地址、子网掩码)
- TCP/IP网络协议学习笔记二
- TCP/IP网络协议学习笔记三
- TCP/IP网络协议学习笔记
- TCP/IP学习笔记之五 --- RARP: 逆地址解析协议
- 网络学习 IP地址
- 学习笔记之TCP/IP协议结构
- TCP/IP学习笔记:地址分类与协议分层
- TCP/IP学习笔记一:地址解析协议ARP初识
- TCP/IP学习笔记二:地址解析协议ARP 数据格式
- 矩阵中的路径java实现
- android开源
- VC对xml文件的读写
- 字符串的冒泡排序
- 1084. Broken Keyboard (20)
- 《网络协议学习笔记》之ip地址 port转换
- 用Qt实现基于网络请求的用户登录(一)
- Java Object与Map对象相互转换
- Android LayoutInflater原理分析,带你一步步深入了解View(一)
- 如何打开visual studio的诊断工具(diagnostic tool)
- 正则表达式总结(五)
- opencv: 绘制矩形轮廓框,并记录轮廓框坐标
- Android实现购物车
- Android视图绘制流程完全解析,带你一步步深入了解View(二)