网络编程–套接字
IP地址
IPV4:uint32_t--43亿左右--在网络上唯一标识一台主机
IPV6:uchar ip[16]--因为不向前兼容IPV4因此没有推广起来
DHCP:动态地址分配技术--动态分配ip地址(谁上网给谁分配IP地址)
NAT:地址替换--实现多人使用同一地址上网
二进制数字不好记忆,使用2-》10 的进制转换来方便记忆
每条数据都会包含:src ip dest ip ----表示了这条数据的源地址和目的地址
port端口:uint16_t --0~65535
0~1024不推荐使用
按端口号可分为 3 大类:
( 1 )公认端口(Well Known Ports ):从0 到1023 ,它们紧密绑定(binding )于一些服务。通常这些端口的通讯明确表示了某种服务的协议。例如:80 端口实际上总是HTTP 通讯。
( 2 )注册端口(注册端口):从1024 到49151 它们松散地绑定于一些服务也就是说有许多服务绑定于这些端口,这些端口同样用于许多其它目的例如:。许多系统处理动态端口从1024 左右开始。
( 3 )动态和 / 或私有端口(动态和/或专用端口):从49152 到65535 。理论上,不应为服务分配这些端口实际上,机器通常从1024 起分配动态端口但也有例外。:SUN 的RPC 端口从32768 开始
网络程序分了客户端和服务端,主动发起请求的一方是客户端,被动在指定位置接受请求的一方是服务端(服务端被动的接收地址必须是固定不变的);
一个端口只能被一个进程占用:一个进程可以使用多个端口
每条数据中包含了:sip sport dip dport proto (五元组–标识一条通信)
四元组:源IP地址、目的IP地址、源端口、目的端口
五元组:源IP地址、目的IP地址、协议号、源端口、目的端口
七元组:源IP地址、目的IP地址、协议号、源端口、目的端口,服务类型以及接口索引
网络字节序:
字节序:字节序是指多字节数据的存储顺序,在设计计算机系统的时候,有两种处理内存中数据的方法:大端格式、小端格式。
小端格式(Little-Endian):将低位字节数据存储在低地址。
大端格式(Big-Endian):将高位字节数据存储在低地址。
主机字节序:当前计算机的字节序–大小端取决于cpu架构
如果通信两端主机字节序不同,就会造成数据二义(针对存储大于一个字节数据)
解决方案:订立标准–网络字节序(通信双方都使用网络字节序)-大端字节序
字节序的判断:
在数组中 a[0]-----------------a[9]
--------------低-------------------高
针对一个int类型 —0x12345678
-------------------------高-----------低
include<stdio.h>
typedef union student{
int i;
unsigned char ch[4];
}stu;
int main(){
stu a={0};
a.i=0x12345678;
printf("%x\t%x\t%x\t%x\t\n",a.ch[0],a.ch[1],a.ch[2],a.ch[3]);
return 0;
}
传输层协议:TCP/UDP 比较
TCP:传输控制协议–面向连接,可靠传输,面向字节流服务
UDP:用户数据报协议–无连接,不可靠,面向数据报
哪个更好呢?------------视情况而定