部分协议举例:
MTU:最大传输单元:1500bytes
MSS:最大报文长度:1460bytes
① IP协议(Internet Protocol)
② ICMP协议(Internet Control Management Protocol)
③ IGMP协议(Internet Group Management Protocol)
① HTTP/HTTPS
超文本传输协议,万维网数据通信的基础
http:明文发送, https加密传输
② 邮件协议
收: POP3(post office protocol)邮局协议第三个版本
从服务器接收右键,接收完后服务器就没有这个邮件了;
发: SMTP(简单邮件传输协议)
IMAP: 交互式邮件存储协议,与POP3类似的邮件访问标准协议之一。
收取邮件后,服务器上邮件依然存在,如果删除、标记服务器也会做相应操作。
③ FTP(FILE Transfer Protocol)
文件传输协议,是用于在网络上进行文件传输的一套标准协议,使用TCP传输
④ TFTP
简单文件传输协议,适用于在网络上进行文件传输的一套标准协议,使用UDP传输
⑤ DNS
Telnet/ssh :远程登录
MSS:
1. 是提供面向连接的,可靠的稳定的数据传输协议。
2. 数据在传输过程中,无误,无丢失,无失序,无重复到达的通信。
1.1 每一个数据包都会编上一个编号,该编号称之为序列号(seq),且每一个数据包都需要一个正确的应答包应答
1.2 应答包:应答数据包,且通知对方下一次从哪个包开始发送(应答号:ack)。
3. 超时重传机制。
3. 传输效率低,耗费资源多。
4. 在数据链路层限制数据包大小(46~1500bytes),超出部分分帧发送。
5. 数据的收发是不同步的,会粘包(不存在数据边界)
5.1 粘包:为了提高效率,将多个足够小,且发送间隔极短的数据包合成一个包发送,该现象称之为粘包现象,该算法称之为Nagle算法。
适用场景: 适用于对传输质量要求比较高,传输大量数据的通信,在需要可靠数据传输的场合,通常使用TCP协议。
例如: 网上购物付钱的时候,装备购买,账户密码登录的时候
1.是提供无连接的,不可靠的尽力的数据传输协议。
2.数据在传输过程中有可能出现,错误,丢失,失序,重复到达的通信。
3. 传输效率高
4. 限制每次传输的大小(46~1500bytes),超出部分直接删除。
5. 数据收发是同步的,不存在粘包现象(存在数据边界)
适用场景: 适用于对传输质量要求比较低,传输小尺寸数据的通信,给出应答比较困难的网络中使用。
例如: 广播/组播 直播 语音视频电话,多人竞技类游戏。
1. IPv4:占4个字节,采用32bit的无符号整数来存储IP地址。[0, 2^32-1],给你个2^32个 = 42.9亿
1.1 局域网:为了解决IP地址不够用的问题,让多台主机使用同一个广域网IP地址。
1.2 广域网:与外界通信的网络环境。
1.3 每一个IP地址都可以下发一个局域网。
2. IPv6:占16个字节,采用128bit的无符号整数来存储IP地址。[0, 2^128-1];
2.1 容量足够多,能够给地球上的每一粒沙子都分配一个IP地址。
2.2 IPv4往IPv6过渡的阶段还未完成。IPv4和IPv6尚不兼容。
桥接模式和net模式的区别?
桥接模式:windows和ubuntu是兄弟关系,连接同一个路由器
net模式:windows当做路由器,下发一个网络给ubuntu
由于IP地址基数比较大,所以为了提高寻径效率,则将IP地址划分成二级IP地址;
注意:
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 | 保留 |
在ABC类中的特殊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
子网掩码是对主机号做再次划分,D类E类没有主机号,所以没有子网掩码。
C类IP地址的默认子网掩码:11111111 11111111 11111111 00000000 ===> 255.255.255.0
11111111 11111111 11111111 10000000 ===> 255.255.255.128
11111111 11111111 11111111 11000000 ===> 255.255.255.192
11111111 11111111 11111111 11100000 ===> 255.255.255.224
11111111 11111111 11111111 00000011 ===> 1不连续错误的!!!
192.168.125.229 & 255.255.255.0
11000000 10101000 01111101 11100101 ===> 192.168.125.229
11111111 11111111 11111111 00000000 ===> 255.255.255.0
------------------------------------------------------------------------------
11000000 10101000 01111101 00000000 ===> 192.168.125.0 子网网段
即192.168.125.229属于192.168.125.0该子网网段。
在00000000-11111111该范围内的主机号,&上255.255.255.0这个子网掩码,得到的结果均为192.168.125.0 子网网段。
即0~255这个范围内的主机号,均为192.168.125.0 子网网段。
所以没有划分出新的子网,所有主机号都在192.168.125.0 子网网段内。
该子网网段可以写作:192.168.125.0/24 (24代表该子网网段是通过有24个1的子网掩码得到)。
这个子网网段内的主机号是多少个 2^8个= 256个。
192.168.125.229 & 255.255.255.128
11000000 10101000 01111101 1 1100101 ===> 192.168.125.229
11111111 11111111 11111111 1 0000000 ===> 255.255.255.128
----------------------------------------------------
11000000 10101000 01111101 1 0000000 ===> 192.168.125.128 子网网段
范围:如下范围的主机号[128, 255],& 255.255.255.128得到的结果均为192.168.125.128/25 子网网段。
11000000 10101000 01111101 1 0000000 ===> 192.168.125.128
11000000 10101000 01111101 1 1111111 ===> 192.168.125.255
192.168.125.127 & 255.255.255.128
11000000 10101000 01111101 0 1111111 ===> 192.168.125.127
11111111 11111111 11111111 1 0000000 ===> 255.255.255.128
----------------------------------------------------
11000000 10101000 01111101 0 0000000 ===> 192.168.125.0 子网网段
范围:如下范围的主机号[0, 127],& 255.255.255.128得到的结果均为192.168.125.0/25 子网网段。
11000000 10101000 01111101 0 0000000 ===> 192.168.125.0
11000000 10101000 01111101 0 1111111 ===> 192.168.125.127
综上所述,
通过255.255.255.128可以将192.168.125.0该网络划分出2个子网
每个子网中有2^7个主机号。
由于使用IP地址来指定计算机不方便人们记忆,且输入时候容易出错,用字符标识网络种计算机名称方法。
这种命名方法就像每个人的名字,这就是域名(Domian Name)
域名服务器(Domain Name server): 用来处理IP地址和域名之间的转换。
域名系统(Domain Name System,DNS): 域名翻译成IP地址的软件
一个域名,可以绑定多个ip
域名结构
1~1023 端口我们编程时候不要使用,是那些 系统/规定 应用程序占了
TCP 21端口:FTP文件传输服务
TCP 23端口:TELNET终端仿真服务
TCP 25端口:SMTP简单邮件传输服务
TCP 110端口:POP3邮局协议版本3
TCP 80端口:HTTP超文本传输服务
TCP 443端口:HTTPS加密超文本传输服务
UDP 53端口:DNS域名解析服务
UDP 69端口:TFTP文件传输服务
TCP和UDP的端口号是相互独立的: 有时TCP和UDP用到了同一个端口,也是能用的
首地址都是低地址,数据的读取都是从低地址往高地址读取,经过大小端转换后得出结果。
本地字节数:主机字节序(Host Byte Order) HBO
网络字节序(Network Byte Order) NBO,网络字节序规定使用大端字节序。
在跨主机传输过程中,需要使用统一的字节序,即网络字节序,避免兼容性问题。
头文件:
#include
uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
参数:
指定要转换成网络字节序的整型:分别是32bit和16bit;
返回值:
成功,返回转换后网络字节序的整型
示例:
#include
#include
int main(int argc, const char *argv[])
{
unsigned int a = 0x87654321;
printf("%#x\n", a); //0x87654321
printf("%#x\n", htonl(a)); //0x21436587
printf("%#x\n", htons(a)); //0x2143
return 0;
}
头文件:
#include
原型:
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netshort);
参数:
uint32_t hostlong:32位网络字节序整型;
uint16_t hostshort:16位网络字节序整型;
返回值:
成功,返回转换成主机字节序的整型;
例如:
#include
#pragma pack(1) //设置默认对齐系数 :()中的参数只能填2^n (n=0,1,2,3,4,5......)
typedef struct
{
char a; //1
int b; //4
int d; //4
}_A;
#pragma pack() //重置默认对其系数,重新置为8
typedef struct
{
char a; //1
int b; //4
int d; //4
} __attribute__((packed)) B; //取消结构体对齐
typedef struct
{
char a; //1
//3
int b; //4
int d; //4
}_C;
int main(int argc, const char *argv[])
{
printf("%ld\n", sizeof(_A)); //9
printf("%ld\n", sizeof(_B)); //9
printf("%ld\n", sizeof(_C)); //12
return 0;
}