网络编程——基础概念

IP地址

基本概念
● IP地址是Internet中主机的标识
● Internet中的主机要与别的机器通信必须具有一个IP地址
● IP地址为32位(IPv4)或者128位(IPv6)
● 表示形式:常用点分十进制,如192.168.1.109,最后都会转换为一个32位的无符号整数。

IP地址要素

在这里插入图片描述
子网掩码:子网掩码规定了当前IP地址哪些位是网络号,哪些位是主机号,一个局域网里,网络号不可变,主机号是可变的,所以已知子网掩码就能算出当前网络能容纳的主机数量。
网络号:= IP&子网掩码,比如上面的例子,计算出来的网络号就是:192.168.0.0,网络号相同的主机,属于同一个局域网,可以直接进行通信。
网段号的定义:主机位全为0,代表当前设备所处的网段号
这个需要结合子网掩码来计算,子网掩码规定了哪些是网络号,哪些是主机号
如果子网掩码位是1,那么当前为就是网络号,如果是0,那么当前位是主机号
网段号(网络号)=IP&子网掩码

地址划分

在这里插入图片描述主机号的第一个和最后一个都不能被使用,第一个作为网络号,最后一个作为广播地址。

A类:1.0.0.1~126.255.255.254
B类:128.0.0.1~~191.255.255.254
C类:192.0.0.1~~223.255.255.254
D类(组播地址):224.0.0.1~~239.255.255.254

特殊地址

0.0.0.0:在服务器中,0.0.0.0指的是本机上的所有IPV4地址,如果一个主机有两个IP地址,192.168.1.1 和 10.1.2.1,并且该主机上的一个服务监听的地址是0.0.0.0,那么通过两个ip地址都能够访问该服务。在程序里,用宏定义表示:INADDR_ANY
127.0.0.1:回环地址/环路地址,所有发往该类地址的数据包都应该被loop back。仅作为测试使用,只能实现本机上通信

IP地址转换

实现了人看的IP(192.168.1.155)和机器内部使用(32位的无符号的整数)的实际IP进行转换

struct in_addr {
    uint32_t s_addr;
};

typedef uint32_t in_addr_t;
 //从人看的ip地址转为机器使用的32位
in_addr_t inet_addr(const char *cp);

//从机器到人
char *inet_ntoa(struct in_addr in);  

端口

● 为了区分一台主机接收到的数据包应该转交给哪个进程来进行处理,使用端口号来区
● TCP端口号与UDP端口号独立
● 端口号一般由IANA (Internet Assigned Numbers Authority) 管理
● 端口用两个字节来表示–USHORT
● 端口指定需要统一为网络字节序(大端)

众所周知端口:
1 ~ 1023(1 ~ 255之间为众所周知端口,256~1023端口通常由UNIX系统占用)
注册端口:1024~49151(尽量用5000以上的)
动态或私有端口:49152~65535

字节序

网络中传输一字节以上的带类型的数据(比如short、int),必须使用网络字节序,即大端字节序。
小端序(little-endian) - 低序字节存储在低地址
大端序(big-endian)- 高序字节存储在低地址
如何判断当前主机的字节序?

int checkCPU()
{
	union w{
		short a;
		char b;
	}c;
	c.a = 1;
	return (c.b == 1);
}

主机字节序到网络字节序

uint16_t htons(uint16_t hostshort);
uint32_t htonl(uint32_t hostlong);

网络字节序到主机字节序

uint16_t ntohs(uint16_t netshort);
uint32_t ntohl(uint32_t netlong);
  • 24
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值