计算机网络概述
1、数据交换
1.1、最早的广域网(电路交换)
在通信双方或多方之间,通过电路交换建立电路连接的网络
电路交换网特点:
1、建立链接->使用链接->释放链接
2、物理通路被通信双方独占
计算机数据是突发式出现在数据链路上的,而电路交换网的建立链接、使用链接、释放链接的三个过程使得传
输效率太低,故电路交换不适合传输计算机数据。
1.2、分组交换(又称存储转发交换,报文交换)
每一小块必须包含一个首部
首部:
1、该数据在原始数据中的位置(方便数据重组)
2、目的主机的地址信息(方便数据传输)
交换方式(存储-转发)
节点收到分组,先暂时存储下来,再检查其首部,按
照首部中的目的地址,找到合适的节点转发出去
特点:
1、以分组作为传输单位
2、独立的选择转发路由
3、逐段占用,动态分配传输带宽
2、网络的分层结构
2.1、七层模型:OSI/RM开放互联模型(理论上的标准)
应用层:应用层协议APP
表示层:将计算机能识别的二进制 转换成人能识别的数据
会话层:分析数据的通信状态
传输层:进程和进程的通信(端口信息)
网络层:主机与主机之间的通信(IP地址)
数据链路层:收发的完整帧数据(在网络上独立传输)mac地址(设备地址)
物理层:不是物理设备,而是物理设备上的接口类型、电流强弱
2.2、四层模型:TCP/IP协议
TCP/IP协议在一定程度上参考了OSI的体系结构。OSI模型共有七层,从下到上分别是物理层、数据链路层、网络层、运输层、会话层、表示层和应用层。但是这显然是有些复杂的,所以在TCP/IP协议中,它们被简化为了四个层次。
(1)应用层、表示层、会话层三个层次提供的服务相差不是很大,所以在TCP/IP协议中,它们被合并为应用层一个层次。
(2)由于运输层和网络层在网络协议中的地位十分重要,所以在TCP/IP协议中它们被作为独立的两个层次。
(3)因为数据链路层和物理层的内容相差不多,所以在TCP/IP协议中它们被归并在网络接口层一个层次里。只有四层体系结构的TCP/IP协议,与有七层体系结构的OSI相比要简单了不少,也正是这样,TCP/IP协议在实际的应用中效率更高,成本更低。
应用层:应用层的协议有FTP、Telnet、HTTP
传输层:进程和进程间的通信(端口信息)TCP、UDP
网络层:主机与主机之间的通信(TP地址)IP、ICMP
链路层:收发完整的数据帧(在网络上独立传输)mac地址(设备地址)ARP(地址解析协议)RARP(将MAC物理地址转换成IP地址)
3、协议的说明
3.1、IP协议 网际协议(网络层)
在一个相互连接的网络系统上从源地址到目的地传输数据包(互联网数据包)所提供必要功能的协议
尽量将数据从源地址 发送 目的地
特点:
不可靠:它不能保证IP数据包能成功地到达它的目的地,仅提供尽力而为的传输服务
无连接:IP并不维护任何关于后续数据包的状态信息。每个数据包的处理是相互独立的。IP数据包可以不按发送顺序接收
IP数据包中含有发送它主机的IP地址(源地址)和接收它主机的IP地址(目的地址)
3.2、TCP协议 传输控制协议 (传输层)
TCP是一种面向连接的,可靠的传输层通信协议
功能:
提供不同主机上的进程间通信
特点:
1、建立链接->使用链接->释放链接(虚电路)
2、TCP数据包中包含序号和确认序号
3、对包进行排序并检错,而损坏的包可以被重传
服务对象:
需要高度可靠性且面向连接的服务
如HTTP、FTP、SMTP等
总结:TCP 面向链接 可靠 排序 检错 失败重传 不支持广播
3.3、UDP协议 用户数据报协议 (传输层)
UDP是一种面向无连接的传输层通信协议
功能:
提供不同主机上的进程间通信
特点:
1、发送数据之前不需要建立链接
2、不对数据包的顺序进行检查
3、没有错误检测和重传机制
服务对象
主要用于“查询—应答”的服务
如:NFS、NTP、DNS等
总结:UDP 无连接 不排序 不检错 不重传 快 支持广播
4、地址介绍
4.1、mac地址(链路层) 设备和设备的通信(48位6个字节,12个16进制数)
MAC地址,用于标识网络设备(网络接口卡NIC(网卡)),类似于身份证号,且理论上全球唯一。
组成:以太网内的MAC地址是一个48bit的值
4.2、IP地址IPv4 (网络层) 主机 和 主机 (32位)
ip地址组成:使用32bit,由{网络ID,主机ID}两部分组成 //点分十进制字符串
子网ID:IP地址中由子网掩码中1覆盖的连续位
主机ID:IP地址中由子网掩码中0覆盖的连续位
IP和子网掩码一起使用:
案例:192.168.0.111/255.255.255.0 子网ID192.168.0 主机ID 111
案例:192.168.0.111/255.255.0.0 子网ID 192.168 主机ID0.111
案例:192.168.0.111/255.0.0.0 子网ID 192 主机ID168.0.111
子网ID:标记网络网段 192.168.0.111/255.255.255.0 192.168.0.112/255.255.255.0
主机ID:标记同一网段下的主机号
总结:子网ID标记的是属于哪个网段, 主机ID标识的是网段下具体的主机号
192.168.0.111/255.255.255.0 == 192.168.0.111/24
192.168.0.111/255.255.0.0 == 192.168.0.111/16
192.168.0.111/255.0.0.0 == 192.168.0.111/8
案例:192.168.0.111/24 子网ID192.168.0 主机ID 111
案例:192.168.0.111/16 子网ID 192.168 主机ID0.111
案例:192.168.0.111/8 子网ID 192 主机ID168.0.111
ip地址特点:不同网段 不能直接通信
子网ID不同的网络不能直接通信,如果要通信则需要路由器转发
主机ID全为0的IP地址 表示 网段地址。
主机ID全为1的IP地址 表示该 网段的广播地址。
案例:192.168.0.111/255.255.255.0 问当前IP所处网段地址__192.168.0.0__ 以及 广播地址___192.168.0.255__
注意:任何一个网段中的网段地址和广播地址 都不能分配主机
192.168.0.1~192.168.0.254 == 可用的IP数量 只有254个
案例:192.168.0.111/255.255.0.0 问当前IP所处网段地址_192.168.0.0_ 以及 广播地址_192.168.255.255__可用的主机数1~65534 可用的IP数量有65534个
5、IP地址分类(更加合理的利用IP地址)
5.1、按网段分
A类地址:默认8bit子网ID,第一位为0 广域网(国家-国家,大城市-大城市)
0xxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx/255.0.0.0
B类地址:默认16bit子网ID,前两位为10 城域网(城市-城市)
10xx xxxx xxxx xxxx xxxx xxxx xxxx xxxx/255.255.0.0
C类地址:默认24bit子网ID,前三位为110
110x xxxx xxxx xxxx xxxx xxxx xxxx xxxx/255.255.255.0 局域网
D类地址:前四位为1110,多播地址
E类地址: 前五位为11110,保留为今后使用
A,B,C三类地址是最常用的
在IP地址3种主要类型里,各保留了3个区域作为私有地址,其地址范围如下:
A类地址:10.0.0.0~10.255.255.255
B类地址:172.16.0.0~172.31.255.255
C类地址:192.168.0.0~192.168.255.255
5.2、是否可直接连接Internet
公有IP(可直接连接Internet)
经由InterNIC所统一规划的IP
私有IP(不可直接连接Internet )
主要用于局域网络内的主机联机规划
6、回环地址(主要是测试本机的网络配置)
功能
主要是测试本机的网络配置,能ping通127.0.0.1说
明本机的网卡和IP协议安装都没有问题
注意
127.0.0.1~127.255.255.254中的任何地址都将回环到本地主机中
不属于任何一个有类别地址类,它代表设备的本地虚拟接口
设置Linux IP sudo ifconfig eth0 192.168.0.222 netmask 255.255.255.0
7、子网掩码
子网掩码(subnet mask)又叫网络掩码、地址掩码是一个32bit由1和0组成的数值,并且1和0分别连续。
特点
必须结合IP地址一起使用,不能单独存在
IP地址中由子网掩码中1覆盖的连续位为子网ID,其余为主机ID
子网掩码的表现形式
192.168.220.0/255.255.255.0 ==> 11111111.11111111.11111111.00000000
192.168.220.0/24
手动进行配置如下(linux)
sudo ifconfig et0 192.168.0.1 netmask 255.255.255.0
案例: 一下合法的子网掩码有哪些?ABD
A:255.255.0.0 B:255.0.0.0 C:255.0.255.0 D:255.255.255.128
D:255.255.255.0==>11111111 11111111 11111111 10000000
8、端口
TCP/IP协议采用端口标识通信的进程。
用于区分一个系统里的多个进程
特点:
1、对于同一个端口,在不同系统中对应着不同的进程
2、对于同一个系统,一个端口只能被一个进程拥有
3、一个进程拥有一个端口后,传输层送到该端口的数据全部被该进程接收,
同样,进程送交传输层的数据也通过该端口被送出
8.1、端口号:
类似进程pid标识一个进程;在网络程序中,用端口号(port)来标识一个运行的网络程序
特点:
- 1、端口号是无符号短整型的类型(16字节)
2、每个端口都拥有一个端口号
3、TCP、UDP维护各自独立的端口号
4、网络应用程序,至少要占用一个端口号,也可以占有多个端口号
8.2、端口的分类
知名端口(1~1023)
由互联网数字分配机构(IANA)根据用户需要进行统一分配
例如:FTP—21,HTTP—80等
服务器通常使用的范围; 若强制使用,须加root特权
动态端口(1024~65535)
应用程序通常使用的范围
注意
端口号类似于进程号,同一时刻只能标志一个进程
可以重复使用
9、数据在各层的组包、解包
9.1、mac头:
9.2、IP、TCP、UDP头:
10、字节序的概念(重要)
字节序概念:
是指多字节数据的存储顺序(多个字节看成一个整体处理)
分类:
小端格式:将低位字节数据存储在低地址
大端格式:将高位字节数据存储在低地址
注意
LSB:低地址
MSB:高地址
注意:大小端 是系统自动确定
字节序的详细介绍点这里
问题:如何确定当前系统是大端存储 还是 小端存储?
#include <stdio.h>
typedef union
{
//共用体 成员公用一个空间
unsigned short data;
unsigned char buf[2];
}DATA;
int main(int argc, char *argv[])
{
printf("%d\n",sizeof(DATA));
DATA ob;
ob.data = 0x0102;
//如果buf[0]=0x01大 buf[0]=0x02
if(ob.buf[0]==0x01 && ob.buf[1]==0x02)
{
printf("大端格式\n");
}
else if(ob.buf[0]==0x02 && ob.buf[1]== 0x01)
{
printf("小端格式\n");
}
return 0;
}
运行结果:
11、开发流程
通信流程:决定了写代码的流程
通信原理:协议 决定了 每一步 组啥样的报文
TCP—面向连接:
电话系统服务模式的抽象
每一次完整的数据传输都要经过建立连接、使用连接、终止连接的过程
本质上,连接是一个管道,收发数据不但顺序一致,而且内容相同
保证数据传输的可靠性
UDP—面向无连接:
邮件系统服务模式的抽象
每个分组都携带完整的目的地址
不能保证分组的先后顺序
不进行分组出错的恢复和重传
不保证数据传输的可靠性
你了解网络通信架构:C/S(客户端/服务器) B/S(浏览器/服务器)
server工作过程
打开一通信通道并告知本地主机,它愿意在一特定端口(如80)上接收客户请求
等待客户请求到达该端口
接收客户请求,并发送应答信号,激活一新的线程处理这个客户请求
服务完成后,关闭新线程与客户的通信链路
client工作过程
打开一通信通道并连接到服务器特定端口
向服务器发出服务请求,等待并接收应答
根据需要继续提出请求
请求结束后关闭通信通道并终止