1. 笔记中子网掩码的练习
2. 笔记中字节序的练习(上交)
#include
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. 整理思维导图(截图上交)
七层模型、五层模型、四层模型:
功能:包括ip地址与物理地址的映射(MAC),以及将上一层的ip报文封装层帧,转换成二进制比特流传输
MAC:物理地址,48bit全球唯一,网卡编号,网络设备的身份标识(cmd ---> ipconfig/all),由厂商出厂后确定。
负责在主机之间的通讯中选择数据包传输的路径,即选择路由。
ip协议根据数据包的目的ip地址来决定如何投递数据包。
如果数据包不能直接投递给目标主机,那么ip协议就为他寻找下一个合适的下一跳路由器。
英特网控制管理协议,ping检测网络就是用这个协议
用于在IP主机、路由器之间传递控制消息
英特网分组管理协议,组播,广播。
负责提供应用程序之间通讯服务,这种服务又称之为端到端。
传输层与网络层不同,传输层只关心通讯的 起始端 和 目的端,并不在乎数据包的传输中转过程。
TCP:(transmission control Protocol 传输控制协议):提供面向连接的,一对一的可靠数据传输协议。
UDP:(user datagram Protocol 用户数据报协议):提供无连接的,不可靠的尽力的传输协议,但是效率更高
负责处理应用程序的逻辑
超文本传输协议,万维网数据通信的基础
http:明文发送, https加密传输
收:POP3(post office protocol)邮局协议第三个版本
从服务器接收右键,接收完后服务器就没有这个邮件了;
发:SMTP(简单邮件传输协议)
IMAP:交互式邮件存储协议,与POP3类似的邮件访问标准协议之一。
收取邮件后,服务器上邮件依然存在,如果删除、标记服务器也会做相应操作。
文件传输协议,是用于在网络上进行文件传输的一套标准协议,使用TCP传输
简单文件传输协议,适用于在网络上进行文件传输的一套标准协议,使用UDP传输
域名解析
Telnet/ssh :远程登录
Maximum Transmission Unit 最大传输单元
物理接口(数据链路层)提供给上层(网络层(IP层))最大一次传输数据的大小。
规定了数据链路层所能传送最大数据长度
以太网为例,缺省MTU=1500字节,这是以太网接口对IP层的约束
如果IP层<=1500字节需要发送,只需要一个IP包就可以
如果IP层>1500字节需要发送,需要分片才能发送(分片:帧)
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:
1、提供有连接的,可靠的传输协议。
2、能够提供数据无误,数据无丢失,数据无失序,数据无重复到达的通信。
i) 每个数据包都会有一个编号(序列号),每一个数据包都需要一个应答包应答
ii) 应答包中会有应答号,告诉对方,下一次序列号应该从什么编号开始发送。
3、传输效率低,耗费资源多。
4、数据的收发不同步。(不存在数据边界。粘包:发送函数调用多次,接收函数调用一次就可以将所有数据接收)
i) 粘包:由于TCP效率比较低,为了提高效率,将多个足够小,且发送间隔很短的包合成一个包发送。
ii) 这个粘包算法成为:Nagle算法
适用场景:对传输质量要求比较高,以及传输大量数据的通信,在需要可靠通信的场景。
例如:网上支付,账户登录。
UDP:
1、提供无连接的,不可靠的,尽力的传输协议。
2、提供的通信,可能会出现数据错误,数据丢失,数据失序,数据重复到达。
3、传输效率高。
4、数据的收发是同步的(存在数据边界)
5、限制数据包的大小,超出部分直接删除。
适用场景:对传输质量要求比较低,以及传输小尺寸数据的通信,在给出应答比较困难的网络中使用。
例如:直播,语音视频电话,广播,组播
1、IP地址是因特网中主机的标识,每个数据包都必须携带目的IP地址和源IP地址,路由器依靠此信息为数据包选择路由。
2、IP地址是路由器下发的。(自动,手动)
1、IPv4:采用4个字节,32bit无符号整数存储IP地址。[0, 2^32-1] == 42.9亿多个
局域网:让多个主机使用一个广域网IP。只要连在同一个路由器的下,则这些主机会使用同一个广域网IP
广域网:与外界通信的网络。
2、IPv6:采用16个字节,128bit无符号整数存储IP地址。2^128-1个。 IPv4和IPv6不兼容。
由于IP地址基数比较大,所以为了提高寻径效率,则将IP地址划分成二级IP地址;
二级IP地址 = 网络号 + 主机号
网络号:确定计算机从属的物理网络地址
主机号:确定网络号后,用主机号标识该网络号中的所有主机。
注意:
将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地址:无法分配给主机用。---->掐头去尾。
二级IP地址划分后,主机的基数还是比较大,所以引入了另外一个概念:子网掩码。利用子网掩码可以将主机号进行再次划分:
IP = 网络号 + 子网号 + 主机号
三级划分比较灵活,可以选择划分,也可以选择不划分,可以选择划分出2部分,4部分,8部分...2^n(n=0,1,2......)
子网掩码:用于将一个大的IP网络中的主机号划分为若干小的子网络(常用)。
或者将若干个小网络组合成一个大的局域网(称之为超网技术)。
子网掩码的格式:
与IP地址一样长的32位无符号整数,是由一串连续的1,后面跟着一串连续的0组成。
默认子网掩码的格式:
1的个数与IP地址中网络号的个数一致
0的个数与IP地址中主机号的个数一致。
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地址没有子网掩码。因为他们不用于标识主机(没有主机号);
格式: IP地址 & 子网掩码 = 子网网段。
子网网段个数 = 2^(子网掩码中多加的1的个数)
每个子网网段中主机号的个数 = 2^(剩余0的个数)
不同类型cpu主机,内存存储 多字节整数 序列的方式。
char,字符串,float,double均没有字节序的说法
short, int, long , long long 有字节序的说法。
小端字节序:低序字节存储在低地址上,高序字节存储在高地址上。
大端字节序:低序字节存储在高地址上,高序字节存储在低地址上。
本地字节数:主机字节序(Host Byte Order) HBO
网络字节序(Network Byte Order) NBO,网络字节序规定使用大端字节序。
在跨主机传输过程中,需要使用统一的字节序,即网络字节序,避免兼容性问题。