Socket简介
Socket是一个独立于具体协议的网络编程接口,它是一种特殊的文件描述符,代表着网络编程的一种资源。
Socket类型
流式套接字(SOCK_STREAM)对应TCP:提供了一个面向连接、可靠的数据传输服务。数据无差错、无重复的发送且按发送顺序接收。内设置流量控制,避免数据流淹没慢的接收方。数据被看作是字节流,无长度限制。
数据报套接字(SOCK_DGRAM)对应UDP:提供无连接服务。数据包以独立数据包的形式被发送,不提供无差错保证,数据可能丢失或重复,顺序发送,可能乱序接收。
原始套接字(SOCK_RAM)对应多个协议,发送穿透了传输层:可以对较低层协议如IP、ICMP直接访问。
Socket位置
IP地址
IP地址是Internet中主机的标识,Internet中的主机要与其他的机器通信必须具有一个IP地址。IP地址分为32位(IPV4)或者128位(IPV6)。每个数据包都必须携带目的的IP地址和源IP地址,路由器依靠此信息为数据包选择路由。
IP地址常用点分形式,如192.168.0.1,最后都会转换为一个32位的无符号整数。
局域网IP:192.xxx.xxx.xxx 10.xxx.xxx.xxx
广播IP:xxx.xxx.xxx.255 255.255.255.255(全网广播)
组播IP:224.xxx.xxx.xxx ~ 239.xxx.xxx.xxx
端口号
为了区分一台主机接收到的数据包应该转交给哪个任务来进行处理,使用端口号来区别(1 ~ 65535)。
TCP端口号与UDP端口号是相互独立的。
众所周知的端口:1 ~ 1023(FTP:21,SSH:22,HTTP:80)。
保留端口:1024 ~ 5000(不建议使用)。
可以使用的端口:5001 ~ 65535。
网络里面的通信是由 IP地址 + 端口号 来决定的。
字节序
不同类型CPU的主机中,内存存储多字节数据有两种方法,称为主机字节序(HBO)。
小端序:低序字节存储在低地址,X86/ARM。
大端序:高序字节存储在低地址,powerpc/mips。
网络中传输的数据必须按网络字节序(NBO),即大端字节序。
在大部分PC机上,当应用进程将整数送入Socket前,需要转化成网络字节序,当进程从Socket取出整数后,要转化成小端字节序。