作业:
1. 笔记中子网掩码的练习
2. 笔记中字节序的练习(上交)
#include <myhead.h>
typedef union{
unsigned short int value;
unsigned char bytes[2];
}Bytes;
int main(int argc, const char *argv[])
{
unsigned short int val = 0x0201;
Bytes b;
b.value = val;
if(b.bytes[0] == 0x01 && b.bytes[1] == 0x02){
printf("小端字节序\n");
}else if(b.bytes[0] == 0x02 && b.bytes[1] == 0x01){
printf("大端字节序\n");
}else{
printf("未知字节序\n");
}
return 0;
}
3. 笔记中9个字节序转换函数
4. 整理思维导图(截图上交)
一、网络基础
【1】网络编程的概念
- 网络编程就是进程间通信,只不过多个进程间不一定在同一台主机上。
- 由于不在同一个主机上,不在同一个进程上就需要注意协议。
二、OSI体系结构
七层模型、五层模型、四层模型:
【1】网络接口与物理层(网络访问层)
功能:包括ip地址与物理地址的映射(MAC),以及将上一层的ip报文封装层帧,转换成二进制比特流传输
MAC:物理地址,48bit全球唯一,网卡编号,网络设备的身份标识(cmd ---> ipconfig/all),由厂商出厂后确定。
【2】网络层
负责在主机之间的通讯中选择数据包传输的路径,即选择路由。
i. IP协议(Internet Protocol)
ip协议根据数据包的目的ip地址来决定如何投递数据包。
如果数据包不能直接投递给目标主机,那么ip协议就为他寻找下一个合适的下一跳路由器。
ii. ICMP协议(Internet Control Management Protocol)
英特网控制管理协议,ping检测网络就是用这个协议
用于在IP主机、路由器之间传递控制消息
iii. IGMP协议(Internet Group Management Protocol)
英特网分组管理协议,组播,广播。
【3】传输层
负责提供应用程序之间通讯服务,这种服务又称之为端到端。
传输层与网络层不同,传输层只关心通讯的 起始端 和 目的端,并不在乎数据包的传输中转过程。
TCP:(transmission control Protocol 传输控制协议):提供面向连接的,一对一的可靠数据传输协议。
UDP:(user datagram Protocol 用户数据报协议):提供无连接的,不可靠的尽力的传输协议,但是效率更高
【4】应用层
负责处理应用程序的逻辑
i. HTTP/HTTPS
超文本传输协议,万维网数据通信的基础
http:明文发送, https加密传输
ii. 邮件协议
收:POP3(post office protocol)邮局协议第三个版本
从服务器接收右键,接收完后服务器就没有这个邮件了;
发:SMTP(简单邮件传输协议)
IMAP:交互式邮件存储协议,与POP3类似的邮件访问标准协议之一。
收取邮件后,服务器上邮件依然存在,如果删除、标记服务器也会做相应操作。
iii. FTP(FILE Transfer Protocol)
文件传输协议,是用于在网络上进行文件传输的一套标准协议,使用TCP传输
iv. TFTP
简单文件传输协议,适用于在网络上进行文件传输的一套标准协议,使用UDP传输
v.DNS
域名解析
Telnet/ssh :远程登录
三、网络封包与拆包
MTU :
Maximum Transmission Unit 最大传输单元
物理接口(数据链路层)提供给上层(网络层(IP层))最大一次传输数据的大小。
规定了数据链路层所能传送最大数据长度
以太网为例,缺省MTU=1500字节,这是以太网接口对IP层的约束
如果IP层<=1500字节需要发送,只需要一个IP包就可以
如果IP层>1500字节需要发送,需要分片才能发送(分片:帧)
MSS:
Maximum Segment Size 最大报文长度
TCP提交给IP层最大分段大小,指TCP报文所允许传送数据部分最大长度。
不包含TCP头,MSS式TCP来限制应用层最大发送字节数。
如果MTU=1500,则MSS = 1500-20(IP header)-20(TCP header) =1460字节
如果应用有2000字节要发,需要2 Segment
第一个TCP Segment = 1460 第二个TCP Segment = 540
四、TCP和UDP协议的异同点
相同点:
TCP和UDP协议都是传输层协议。
不同点:
TCP:
1、提供有连接的,可靠的传输协议。
2、能够提供数据无误,数据无丢失,数据无失序,数据无重复到达的通信。
i) 每个数据包都会有一个编号(序列号),每一个数据包都需要一个应答包应答
ii) 应答包中会有应答号,告诉对方,下一次序列号应该从什么编号开始发送。
3、传输效率低,耗费资源多。
4、数据的收发不同步。(不存在数据边界。粘包:发送函数调用多次,接收函数调用一次就可以将所有数据接收)
i) 粘包:由于TCP效率比较低,为了提高效率,将多个足够小,且发送间隔很短的包合成一个包发送。
ii) 这个粘包算法成为:Nagle算法
适用场景:对传输质量要求比较高,以及传输大量数据的通信,在需要可靠通信的场景。
例如:网上支付,账户登录。
UDP:
1、提供无连接的,不可靠的,尽力的传输协议。
2、提供的通信,可能会出现数据错误,数据丢失,数据失序,数据重复到达。
3、传输效率高。
4、数据的收发是同步的(存在数据边界)
5、限制数据包的大小,超出部分直接删除。
适用场景:对传输质量要求比较低,以及传输小尺寸数据的通信,在给出应答比较困难的网络中使用。
例如:直播,语音视频电话,广播,组播
五、IP地址
1、IP地址是因特网中主机的标识,每个数据包都必须携带目的IP地址和源IP地址,路由器依靠此信息为数据包选择路由。
2、IP地址是路由器下发的。(自动,手动)
【1】IP地址的分类
1、IPv4:采用4个字节,32bit无符号整数存储IP地址。[0, 2^32-1] == 42.9亿多个
局域网:让多个主机使用一个广域网IP。只要连在同一个路由器的下,则这些主机会使用同一个广域网IP
广域网:与外界通信的网络。
2、IPv6:采用16个字节,128bit无符号整数存储IP地址。2^128-1个。 IPv4和IPv6不兼容。
【2】IP地址划分
由于IP地址基数比较大,所以为了提高寻径效率,则将IP地址划分成二级IP地址;
二级IP地址 = 网络号 + 主机号
网络号:确定计算机从属的物理网络地址
主机号:确定网络号后,用主机号标识该网络号中的所有主机。
注意:
- ABC类为基本类,可以分配给主机使用,且只有ABC类可以分配给主机使用
- D类:不表示网络,用于特殊用途:组播,多播组
- E类:保留,或者实验室使用。
【3】点分十进制
将32位IP地址的二进制数,以8bit为一组,用十进制表示,利用点分割。
IP地址范围 | 网络号个数 | 主机号个数 | ||
A类地址 | 0.0.0.0~127.255.255.255 | 2^7(网络号) | 2^24(主机号) | 大型网络 |
B类地址 | 128.0.0.0~191.255.255.255 | 2^14 | 2^16 | 名地址网管中心 |
C类地址 | 192.0.0.0~223.255.255.255 | 2^21 | 2^8 | 校园网或企业网、家庭网 |
D类地址 | 224.0.0.0~239.255.255.255 | 组播地址 | ||
E类地址 | 240.0.0.0~255.255.255.255 | 保留 |
特殊的IP地址:无法分配给主机用。---->掐头去尾。
- 网络地址:用于标识该网络 --->有效网络号+全是0的主机号
- 广播地址:向该IP地址发送数据,代表向当前局域网内的所有主机发送数据,用于广播--->有效网络号+全是1的主机号
六、子网掩码
二级IP地址划分后,主机的基数还是比较大,所以引入了另外一个概念:子网掩码。利用子网掩码可以将主机号进行再次划分:
IP = 网络号 + 子网号 + 主机号
三级划分比较灵活,可以选择划分,也可以选择不划分,可以选择划分出2部分,4部分,8部分...2^n(n=0,1,2......)
【1】子网掩码的概念
子网掩码:用于将一个大的IP网络中的主机号划分为若干小的子网络(常用)。
或者将若干个小网络组合成一个大的局域网(称之为超网技术)。
- 指明一个IP地址的哪些位表示的是主机所在的子网
- 指明哪些位表示的是主机的位掩码。
- 子网掩码不能单独使用,必须结合IP地址一起使用
子网掩码的格式:
与IP地址一样长的32位无符号整数,是由一串连续的1,后面跟着一串连续的0组成。
默认子网掩码的格式:
1的个数与IP地址中网络号的个数一致
0的个数与IP地址中主机号的个数一致。
【2】默认子网掩码
A类IP地址默认子网掩码: 11111111 00000000 00000000 00000000 ===》255.0.0.0
B类IP地址默认子网掩码: 11111111 11111111 00000000 00000000 ===》255.255.0.0
C类IP地址默认子网掩码: 11111111 11111111 11111111 00000000 ===》255.255.255.0
DE类IP地址没有子网掩码。因为他们不用于标识主机(没有主机号);
【3】子网掩码的使用
格式: IP地址 & 子网掩码 = 子网网段。
子网网段个数 = 2^(子网掩码中多加的1的个数)
每个子网网段中主机号的个数 = 2^(剩余0的个数)
七、跨主机传输
【1】字节序
1. 字节序的概念
不同类型cpu主机,内存存储 多字节整数 序列的方式。
char,字符串,float,double均没有字节序的说法
short, int, long , long long 有字节序的说法。
小端字节序:低序字节存储在低地址上,高序字节存储在高地址上。
大端字节序:低序字节存储在高地址上,高序字节存储在低地址上。
2. 本地字节序与网络字节序
本地字节数:主机字节序(Host Byte Order) HBO
网络字节序(Network Byte Order) NBO,网络字节序规定使用大端字节序。
在跨主机传输过程中,需要使用统一的字节序,即网络字节序,避免兼容性问题。