目录
网络发展
- 独立模式:计算机之间相互独立
- 网络互联:多台计算机连接在一起,完成数据共享
- 局域网LAN: 计算机数量多了,通过交换机和路由器连接在一起
- 局域网WAN:将距离很远的计算机连在一起
网络协议
IP地址:在网络上标识唯一的主机
协议:统一的约定
网络通信协议:
数据在网络中传输的格式,在网络通信过程中,通信的环境非常复杂,应对的场景各有不同,导致网络通信中有非常多的协议
协议封装:
将协议的实现封装起来,让协议容易使用
封装:
把复杂的实现过程封装起来,对外提供一个方法或接口供人使用,让封装的这些功能更加好好用
协议分层:
按照通信协议的不同功能,以及不同的使用场景对协议进行了框架性的划分
网络通信
不同主机上的进程间通信
两个出名的通信协议结构模型
优点:
将服务,接口,协议区分开,让通信结构变得清晰明朗,以及给网络通信提供一个标准,不同的厂商都按照这个套标准通信来实现不同类型主机数据传输
OSI七层参考模型
一种构架性的设计方法,主要功能是帮助不同类型的主机实现数据传输
存活在课本及笔试题中
- 应用层:
- 表示层:
- 会话层:
- 传输层:
- 网络层:
- 数据链路层:
- 物理层:
TCP/IP五层参考模型
工作在物理层的设备有什么?交换机,路由器,集线器
(物理层考虑较小,所以有时候也称TCP/IP四层模型)
- 应用层:负责应用程序之间的数据沟通(ssh,http,ftp)
- 传输层:负责端到端之间的数据传输tcp/udp(port)(不同主机上的进程间通信)
- 网络层:负责地址管理和路由选择,IP协议(主机到主机的通讯):路由器
- 链路层:负责数据之间的数据帧的传送和识别,以太协议,交换机(相邻设备到设备的通讯)
- 物理层:光电信号传递,以太网协议,物理层的能力决定了最大传输速率,设备:集线器。
网络通信中的数据(协议的封装与应用)封装与分用
网络层
在复杂的网络中确定一个合适的路径
IP协议
基本概念:
主机配有iP地址,但是不进行路由控制的设备
路由器:既有IP地址,又能进行路由转换
节点:主机和路由器的统称
地址管理与路由选择------IP协议-----路由协议
IP协议头格式
- 版本号(Version):标明了IP 协议的版本号,目前的协议版本号为4。下一代IP 协议的版本号为6。
- 报文长度:指 IP 包头部长度,占4 位。
- 8 位的服务类型:包括一个3 位的优先权字段(已经弃用),4 位TOS 字段(四者互相冲突,只能选一个)和1 位未用位(必须置0)。4 位TOS 分别代表最小时延、最大吞吐量、最高可靠性和最小费用。
- 总长度:是整个IP 数据报长度,包括数据部分。
- 标识符:唯一地标识主机发送的每一份数据报。通常每发送一份报文它的值就会加1。
- 生存时间:设置了数据包可以经过的路由器数目。一旦经过一个路由器,TTL 值就会减1,当该字段值为0 时,数据包将被丢弃。
- 协议:确定在数据包内传送的上层协议,和端口号类似,IP 协议用协议号区分上层协议。TCP 协议的协议号为6,UDP 协议的协议号为17。
- 报头校验和:计算IP 头部的校验和,检查报文头部的完整性。
- 源IP 地址和目的IP 地址字段:标识数据包的源端设备和目的端设备。
- IP选项:一般格式为1个字节的代码,一个字节的长度,一个字节的指针,指针的值从1开始计数,指向IP选项的内容,一般其值为4(跳过了前面的代码&长度&指针的三个字节),长度包括前面3个字节在内的整个IP选项,最大值为40。
网段划分
ip地址分为两个部分:
地址管理:ip地址的组成:网络号+主机号
网络号:用于划分网络,相连的两个网络不能有相同的网络号
主机号: 用于标识网络中的主机, 同一网段内,主机之间有相同的网络号,但是必须有不同的主机号
CIDR
过去提出一种划分网络号和主机号的方案,把所有ip地址分为5类,但是随着发展局限性很快显现
针对这种情况提出了新方案,称为CIDR
方案:使用子网掩码与ip地址相与得到网络号的方式来进行网段划分
- 主机号为0:网络号----代表局域网络
- 主机号全为1:局域网广播地址---局域网的广播地址(不是所有的广播地址都用255结尾)
- 127.0.0.1:本地回环网卡(虚拟网卡做本地测试)
- 通过合理的设置主机号和网络号,就可以保证在相互连接的网络中,每台主机的ip地址都不同。
管理子网的ip是一件相当麻烦的事情
- 有一种技术叫DHCP,能够自动给子网内新建的主机节点分配ip地址,避免了手动管理的不变
- 一般路由器都有DHCP的功能,因此路由器也看做一个DHCP服务器
为什么地址管理这么复杂?
--------------因为IP地址不够用,CIDR一定程度上缓解了这个问题(提高了利用率,减少了浪费)
仍不够时使用这三种方式:
- DHCP动态地址分配------谁上网给谁分配
- NAT/NAPT-------------地址替换--------建立映射表
- IPV6-----没有推广起来
私有IP地址和公有IP地址
如果一个组织内部建局域网,IP地址只用于局域网内部通信,而不是连接到网上,理论上使用
任意地址都可以,但是RFC1918规定了用于组建局域网的私有IP地址
用于组建私网的网络:10.* 172.16-31.* 192.168.*
路由选择
- 当ip数据包,到达路由器时,路由器会先查看目的ip
- 路由器会决定这个数据包是直接发送给目标主机还是下一个路由器
- 依次反复,直到到达目标地址
一台pc插入网线,连到路由器上,通过dhcp动态获取一个ip地址,子网掩码,网关地址。
当主机发送数据时候,首先将数据发送到网关地址上(路由器的地址)路由器对数据进行解析
拿目的地址和路由表中的各个信息进行比对,选择通过那个网卡发送,如果比对出来的网络号和
自己组建的局域网网络号相同,则通过自己网关地址发送到相应主机,如果跟路由表中的所有
信息都对比失败则通过WAN口将数据发送给自己的上层网关(路由器的上层路由器)
数据链路层
认识以太网
- 以太网不是一种具体的网络,而是一种技术标准,既包含了数据链路层,也包含了一些物理层的内容
- 负责相邻设备节点之间的数据帧传输----以太网协议----交换机
以太网数据帧格式
- 源地址和目的地址是指网卡的硬件地址(也叫MAC地址),长度48位,网卡出厂时固话
- 帧协议类型字段有三种值:IP,ARP,RARP
- 帧末尾是CRC校验码
MAC地址
- mac地址:物理硬件地址,长度是六个字节48位,6字节,一般用16进制数字加上冒号形式来表示
- 以太网协议帧类型中包含了:源mac地址/目的mac地址
- 在网卡出厂时固话,不能修改,mac地址通常是唯一的(虚拟机中的mac地址不是真正的mac地址)
- 数据帧就是从源mac传输到目的mac地址
- mac地址就是每一个区间的起点和终点
- ip地址就是总起点和总终点
ARP协议
问题:我们知道自己的mac地址,但我们怎么知道相邻设备的mac地址呢?
ARP协议:介于网络层和数据链路层之间的协议:通过IP地址获取mac地址
获取过程:
- 知道相邻设备的ip地址
- 但不知道mac地址
- 这时候就会组织一个arp请求包
- 应答时将硬件地址填写在包里
- 广播到所有地址
- 每一台主机到维护一个ARP缓存表,可以使用arp -a查看
- 映射不能长久保存
- 万一断开连接之后重新连接ip地址就会改变(地址改变映射就无效,所以缓存时间不会太长)
ARP数据报格式
注意到源MAC地址、目的MAC地址在以太网首部和ARP请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层是其它类型的网络则有可能是必要的。
- 以太网目的地址:即目的MAC地址
- 以太网源地址:源MAC地址
- 帧类型:即上层协议类型。0x0806表示ARP
- 硬件类型:指链路层网络类型。1为以太网
- 协议类型:指要转换的地址类型。0x0800为IP地址
- 硬件地址长度:以太网地址长度(一般为6字节)
- 协议四肢长度:IP地址长度(一般为4字节)
- op字段:为1表示ARP请求,op字段为2表示ARP应答
- 发送端以太网地址:与前相同(MAC)
- 发送端IP地址:
- 目的以太网地址:与前同(MAC)
- 目的IP地址:
MTU
- MTU相当于发快递时对包裹尺寸的限制,这个限制是不同的数据链路层对应的网络层产生的限制
- 一般不会出现超出限时,因为超出限制时传输会发生分片
- 每个分片ip协议头相同且有标志字段,到达后会重组拼装到一起返回给传输层
- 但是如果任意一个包裹丢失,重组就会失败(直接丢弃),并且不会重新传输数据
- MTU:最大传输单元————定义了在网络数据传输时最大的一个数据包长度
- MSS:最大报文段大小---最大的应用层数据大小(TCP的数据包也不能无限大,取决于MTU大小)
- MSS = MTU - IP_L - UDP_L/TCP_L
其他重要协议
DNS:
(应用层udp)对域名解析,得到对应的IP地址的一个域名系统
主域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称
域名是分层结构,域名服务器也是对应的层级结构
域名的层级划分。dns服务器的层级结构
(中国:cn 日本:jp).com一级域名 .baidu二级域名,公司名
www.baidu.com--------本机hosts
ICMP:
icmp是一个网络层协议
功能:
- 确认IP包是否成功到达目标地址
- 通知在发送过程中IP包被丢弃的原因
- ICMP只能搭配IPV4使用,如果是IPV6,需要使用ICMPv6
ping命令
ping + 域名
用于测试网络连接量的程序。Ping发送一个ICMP;回声请求消息给目的地并报告是否收到所希望的ICMP echo (ICMP回声应答)。它是用来检查网络是否通畅或者网络连接速度的命令
ping命令通常用来作为网络可用性的检查。ping命令可以对一个网络地址发送测试数据包,看该网络地址是否有响应并统计响应时间,以此测试网络。
ping和ICMP的关系:ping命令发送数据使用的是ICMP协议。
ping的原理:
向指定的网络地址发送一定长度的数据包,按照约定,若指定网络地址存在的话,会返回同样大小的数据包,当然,若在特定时间内没有返回,就是“超时”,会被认为指定的网络地址不存在。
ICMP协议通过IP协议发送的,IP协议是一种无连接的,不可靠的数据包协议。在Unix/Linux,序号从0开始计数,依次递增。而Windows ping程序的ICMP序列号是没有规律。
ICMP协议在实际传输中数据包:20字节IP首部 + 8字节ICMP首部 + 1472字节<数据大小>38字节。
ICMP报文格式:IP首部(20字节) + 8位类型 + 8位代码 + 16校验和 + (不同类型和代码,格式也有所不同)。
面试题:ssh22端口· ping是多少端口?(网络层不携带端口,出输层才有端口信息)
ping是网络层,而不是传输层,所以不会有端口号信息