在TCP/IP协议族中,有很多种协议。TCP/IP协议群中的核心协议被设计运行在网络层和传输层,它们为网络中的各主机提供通信服务,也为模型的最高层–应用层中的协议提供服务。其中的TCP和UDP协议就是应用在传输层的协议。
IP地址
1. IP地址的作用
IP地址用来标识网络中的一台主机。
本篇文章主要讨论基于IPV4协议的网络通信。
2. IP地址的格式转换
IP地址有两种格式:十进制点分形式和32为二进制形式。前者=是大众所熟悉的形式,后者是网络传输中IP地址的存储方式。
十进制点分形式 “192.168.1.1”
32位二进制形式 10111110 10101000 00000001 00000001
IPv4地址转换函数: inet_aton(); inet_addr(); inet_ntoa();
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
char *inet_ntoa(struct in_addr address);//返回点分十进制形式
in_addr_t inet_addr(const char *cp);//返回二进制地址形式
参数:
cp 点分十进制IP地址字符串
返回值:
成功返回 转换后的二进制地址形式
端口
- 端口号是一个无符号短整型,取值范围0-65535;
- 端口号是一种系统资源,一般0-1023被系统程序所使用
- TCP端口号和UDP端口号独立,互不影响
端口号可以用来代表主机内部的某个套接字。换句话说,当一个套接字建立好,需要和某个IP和端口号进行绑定,这样双方才能实现端到端的通信。 - 字节序是指计算机中多字节整形数据的存储方式。
- 字节序有两种:大端序和小端序。
字节序转换函数: htons(); ntohs(); htonl(); ntohl();
h: 主机host
to: 转换
s: short类型
l: long类型
n: network网络
#include <arpa/inet.h>
uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netshort);
参数:
hostshort 主机字节序的 16bit数据
hostlong 主机字节序的 32bit数据
netshort 网络字节序的 16bit数据
netlong 网络字节序的