负责地址管理与路由选择(为每一条网络中的数据根据想去的地方选择合适的路径)
IP地址的组成:网络号 + 主机号
网络号:是一个网络的标识,俗称网段; (这个网络中所分配的IP地址都会带有这个网络的标识,这样的话每个网络的网络号保证不同,就可以保证他们分配的IP地址不同);
主机号:一个主机在一个网络中的标识;(一个网络中,有很多主机,主机号就是用于在一个网络中标识不同的主机)
网段的划分:
早期:将所有IP地址划分了五类(五类网络)
A:用于组件大型网络,高1位固定位0,7位网络号,24位主机号; 网络号范围:0~127;IP地址范围:.0.0.0.0 ~ 127.255.255.255; 1.0.0.0 ~ 1.255.255.255 - - -这就是1号网络所能分配的IP地址范围,这种网络可以容纳16581375 个主机;
B:用于组建中型网络,高2位固定为10,14位网络号,16位主机号;网络号范围:128.0~ 191.255;IP地址范围:128.0.0.0 ~ 191.255.255.255; 128.1.0.0~128.1.255.255- - -这就是128.1这个网段所分配的IP地址范围,这种网络可以容纳65536个主机;
C:用于组建小型网络,高3位固定为110,21位网络号,8位主机号;网络号范围:192.0 ~ 223.255;IP地址范围:192.0.0.0 ~ 223.255.255.255; 192.168.1.0 ~ 192.168.1.255- - -这就是192.168.1这个网段所能分配的IP地址方位,这种网络可以容纳256个主机;
D:特殊IP地址;
E:特殊IP地址;
(早期的这种划分方式造成了大量的IP地址浪费,大部分公司申请的是B类网络) - - - - - 划分不够精细
当前:CIDR方案- - -如何将网络划分的更加精细- - - 使用子网掩码划分网络
子网掩码:unit32_t 类型的数字,这个数字由连续的二进制1组成;
子网掩码与IP地址相与:得到当前网络的网络号;
子网掩码取反:得到这个网络中的主机号范围,子网掩码 = 255.255.255.0,则这个网络中的主机号范围是:0 ~255;
IP地址不够用怎么办?
1、DHCP动态地址分配
2、NAT网络地址转换(主要就是用于组建私网,私网中的主机要么只能内部通信,要么就使用统一 一个对外的IP地址上网)
私网之间,只要网络不相邻,网络号就可以相同,分配的IP地址就可以冲突(因为它们对外上网的时候会通过NAT服务转换为对外的地址进行上网,对外来说是没有冲突的);但是私网的网络号,也不能随便使用,万一与公网的某个网络的网络号冲突了就不合适了(则分配的地址都会与公网地址相冲突)。
RFC文档1918规定:能够用于组建私网的网络号有以下几种:
路由为每一个流经的数据根据目的的IP地址进行路径选择
路由表
上图中蓝色圈为一个小的局域网,红色圈为一个小的局域网,但是两者不能直接进行通信,需要通过运营商路由器发到互联网后才可以;蓝色圈之间是可以直接通过局域网进行通信的,红色圈也是。
互联网中路由器上记录的路由表(包含的不仅仅是与自己相连的网络的路由信息,与自己不相连的也会记录- - -路由器会广播自己的路由表多少层网络),路由表生成算法 有很多种。
负责相邻设备之间的数据帧传输(以太网eth),链路层负责每一个相邻节点之间的数据传输;
相邻设备之间也需要描述识别(因为一个设备可能又很多相邻设备),链路层相邻设备之间的识别是通过MAC地址实现的。
MAC地址:网卡的硬件地址。
48位对端MAC地址 / 48位源端MAC地址:描述识别相邻的设备,描述了相邻设备之间的数据传输;
16位上层协议类型:网络层的协议类型,进行数据分用时选择上层的解析协议;
32位CRC校验和:数据帧尾,包含校验和在内;
如何获取对端的MAC地址?
一个主机,第一次通过网线连接到路由器上,然后发送dhcp请求,路由器收到之后就会进行响应,给主机分配IP地址;
arp协议:是一个介于网络层和链路层之间的协议,通过IP地址获取MAC地址;封装 arp 请求,然后arp请求广播到整个局域网中,(以太网头中设置的对端MAC地址FFFFFFFFFFFF,arp请求中描述自己的MAC地址和IP地址,以及对端的IP地址,对端的MAC地址空白),相邻设备收到这个arp请求后,检测目的的IP地址是否与自己相符,若相符则组织arp响应,填充自己的MAC地址回复出去,若不相符则直接丢弃。
arp局域网欺骗攻击:恶意主机收到arp广播请求,伪造自己,告诉主机自己就是目标主机,将自己的MAC地址发送过去。 解决方法:防火墙白名单(主机获取到相邻设备MAC地址之后,会缓存一段时间(默认为20~30分钟))
MTU:最大传输单元,链路层限制的数据帧大小(根据组网方式不同,默认数值也不同,以太网默认1500字节)
MTU对上层协议应用的影响:
tcp协议:tcp在传输层,三次握手的时候,进行MSS - - - 最大数据段大小协商,告诉对方自己的mss是多少,然后通信双方取最小的一方作为最大传输数据段大小,每次从发送缓存区中取出不大于mss大小数据进行传输- - -因此通常也说tcp在传输层会自动进行数据分段。
MSS = MTU - 最小IP报头长度 - 最小TCP报头长度;
如:mtu默认为1500,则mss = 1500 - 20 - 20 =1460
.
udp协议:因为udp不考虑mss(对于udp不存在mss的概念),只要数据段大小小于64k-28,就可以进行传输,但是这个数据大小若是大于mtu则会在网络层进行数据分片。
udp不保证数据可靠传输,一个Udp报文若在网络层进行了分片,则传输过程中,一个分片出问题,整个udp报文都会被丢弃;意味着Udp传输过程中,分片越多在传输出问题的几率就越大。
解决方案:程序员在应用层使用udp协议的时候最好就能考虑mss的问题,将udp数据按照计算的mss进行分包处理。
交换机通过记录mac地址映射实现固定主机间的数据转发。
DNS为域名系统 ,用于存储IP地址与域名的映射关系,提供域名解析,通过域名获取服务器IP地址的服务。
域名:服务器地址的别名 - - -便于记忆,但是最终通过域名访问服务器的时候还是进行解析最终通过IP地址访问服务器的。域名服务器用于记录所有服务地址与域名的映射关系。
域名服务器的划分:根域名服务器(13组)- -> 顶级域名服务器- - > 二级域名服务器 - - ->三级域名服务器;
域名的划分:顶级域名(.com / org /.cn / .jp)- ->二级域名(.baidu.com)- ->三级域名(.zhidao.baidu.com)
域名解析流程:www.zhidao.baidu.com
浏览器中输入url回车之后,都发生了什么?
1、域名解析 - ->2、根据http协议格式组织http请求数据- -> 3、搭建tcp客户端与服务器建立连接,发送请求数据 - -> 4、等待响应,得到后进行解析渲染。
ping:ssh协议使用22号端口 / telnet协议使用23号端口,ping 使用多少端口呢?
ping工具通过icmp协议实现,进行网络探测,而网络层的协议不涉及到端口(但口试传输层的信息);
主要用于组建私网,对外使用统一地址,防止与外部地址冲突;
NAT服务,通常部署在网管设备上,工作在网络层(进行IP报头中的源端地址替换),通过网关设备进行数据转发。
个人网络与互联网服务商之间的中间代理机构(类似于我们买东西时与生产厂家之间代销商);
与NAT是完全不同的
举个聊QQ发消息的例子,进一步掌握 TCP / IP 五层
1、我现在是将数据从我的主机发送给我们家的路由器(我的主机的网关设备),我的主机第一次连接到网关设备的时候会广播DHCP请求,获取到网关的IP地址,生成自己的路由表。
2、数据发送到路由器这个家里的网关设备上之后,路由器会根据自己的路由表以及目标地址,逐个匹配最终生成一条路径,应该将数据发送给哪个与自己相连的网络,发送之前会进行NAPT地址替换映射(指定端口收到回复的时候应该将回复相应给哪个家里的主机),然后由路由连接指定相邻网络的这个网卡将数据发送到这个网络。
3、数据经过这些路由器逐层转发之后就会到达对端。