chapter6 - 地址家族和名字解析
本章将一一说明Winsock支持的协议以及各协议如何把一个指定家族的地址解析成网络上一台具体的机器
IP
- IP协议时无连接的协议
- TCP/UDP协议依赖于IP协议
TCP
- TCP(Transmission Control Protocol)
- 传输控制协议
UDP
- UDP(User Datagram Protocol)
- 用户数据报协议
- UDP能向若干个目标发送数据,接收发自若干个源的数据
AF_INET
- TCP,UDP都利用IP协议进行数据传输,一般称为 TCP/IP,UDP/IP
- Winsock通过AF_INET地址家族为IP通信定址
定址
SOCKADDR_IN
struct sockaddr_in{
short sin_family;
u_short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
}
sin_family
- 地址家族字段, AF_INET
sin_port
- 通信端口字段
已知端口:0 ~ 1023由IANA控制,是为固定服务保留的
已注册端口:1024 ~ 49151是IANA列出来的、已注册的端口,供普通用户的普通用户进程或程序使用。
- 动态和私用端口:49152 ~ 65535是动态和(或)私用端口。
sin_addr
- 表示IP地址的4字节无符号长整数
字节序
- 网络字节序: 大端序
- 主机字节序: x86 - 小端序
常用函数
unsigned long inet_addr(const char FAR*cp); //https://msdn.microsoft.com/zh-cn/library/windows/apps/ms738563.aspx
u_long WSAAPI htonl(_In_ u_long hostlong);
//https://msdn.microsoft.com/zh-cn/library/windows/apps/ms738556.aspx
struct hostent* FAR gethostbyname(
_In_ const char *name
);
//https://msdn.microsoft.com/zh-cn/library/windows/desktop/ms738524(v=vs.85).aspx