基础知识
-
TCP_IP协议是IP.TCP, UDP, HTTP等一系列协议的集合
- TCP/IP模型中对数据链路层和物理层未作定义,视为透明
- TCP/IP模型中对数据链路层和物理层未作定义,视为透明
-
OSI分层模型
- 如果不进行协议分层,那个最终的大协议会是否复杂,难以实现,也不利于后续的优化和拓展
- 应用层
- 针对特定应用的协议
- 例如电子邮件协议(SMTP),远程登录协议(SSH),文件传输协议(FTP)
- 表示层
- 把数据从特定的格式转换为网络通用的标准数据格式
- 例如HTML,MIME协议
- 会话层
- 表示层和会话层在TCP/IP模型中是合并到应用层中的
- 传输层
- TCP/UDP等协议
- 网络层
- IP,ARP等协议,硬件为路由器等
- 数据链路层
- PPP等协议,硬件为网桥、交换机等
- 物理层
- 硬件为中继器,双绞线等
-
IP和MAC地址都具有唯一性,但是只有IP地址具有层次性
- 通过IP地址是按照位置信息组织的,可以快速定位终端
- MAC地址是根据厂家和产品编号等组织的,但是并不能确定哪家的网卡被用到那个地方,无法寻址
-
网关的作用之一是可以让两个不兼容的协议实现通信
- 比如互联网邮件协议和手机邮件协议不兼容,中间就要通过网关翻译
- 比如互联网邮件协议和手机邮件协议不兼容,中间就要通过网关翻译
数据链路层
- 该层主要是在同一种数据链路的节点直接进行包传递
- 如果跨越多种数据链路,就是网络层的任务了
- 如果跨越多种数据链路,就是网络层的任务了
- MAC地址长48bit,由厂商识别码和厂内识别码组成,是全世界唯一的
- 交换机
- 交换机实现了全双工通信
- 根据目标MAC地址决定从哪个接口发送数据
- 使用转发表参考、记录发送的接口
- 以太网又被称为IEEE802.3,无限局域网又被称为IEEE802.11
IP协议
- IP协议是对不同数据链路的抽象,无论底层使用以太网还是PPP,都一视同仁
- IP协议无论接收方是否存在都会发送出去,也不验证对方是否收到
- IP协议属于无连接协议,无确认机制
- 目的在于简化和提速
- 保证可靠性的任务可以由上一层的TCP协议完成
- 如果IP和TCP合并则协议的实现会变得很复杂,目前的方式每一层的任务更加明确,也利于后续拓展和优化
- 这样做是为了提高传输速度,减少协议实现的复杂度
- IP协议属于无连接协议,无确认机制
- IP首部
IP地址
-
IP地址的组成
- IPv4地址32位,一共课链接约42亿设备
- IP地址是和网卡一一对应的,而非主机
- 地址由网络地址和主机地址组成
- IP包被路由转发时,主要依据网络地址
- 主机地址相当于局域网地址,用于区分局域网中的不同主机
- 分割网络与主机地址依靠子网掩码
- 主机地址不能全为0或1,所以下面的C类地址只有254个主机地址
-
IP地址和子网掩码是相互独立的概念,子网掩码不是IP地址的一部分!!
- 举个例子,10.10.10.1/24和10.10.10.1/25是同一个IP地址
- 子网掩码一般是路由器在构建路由表的时候使用的
-
旧的地址分类
- ABCD类地址现在只是一个历史概念,实际已经没有意义了
- 现在使用CIDR代替,就是把多个地址合并为一个更大的地址
-
CIDR地址分类
- 全局地址和私有地址
- 过去每一个主机都必须有唯一的IP地址,否则会产生地址冲突,不知道该传向哪个主机
- 但是这样会造成IP地址不足的问题
- 于是产生的私有地址
- 私有地址
- 私有地址可以重复,知道局域网内唯一即可
- 为了防止私有地址在访问外网时与全局地址冲突,我们把分配了几段地址作为私有地址,所有的私有地址应该在这一范围内
- 如果使用全局地址作为私有地址,路由器会拒绝传出外网
- 为了访问外网,我们使用了NAT技术转化私有地址和全局地址
- 过去每一个主机都必须有唯一的IP地址,否则会产生地址冲突,不知道该传向哪个主机
- NAT协议
- 第一种为静态转化,就是一一映射,但是这样没有减少全局地址的使用
- 第二种为动态转化,相当于线程池的做法,轮转使用
- 这样的缺点在于局域网内设备数量不能超过所映射的全局地址太多
- 第三种为端口转化,就是把不同的内网地址转化为同一去全局地址的不同端口
- ICMP协议
- 主要功能是确认IP包是否成功到达目标地址,IP包被丢弃的原因等
- 一般由丢弃包的路由器发送在这里插入图片描述
- PING命令就是利用ICMP协议实现的
- ICMP还能返回重定向信息,以便路由器更新路由表
- 主要功能是确认IP包是否成功到达目标地址,IP包被丢弃的原因等
- DHCP协议
- 自动设置IP地址,同一管理IP地址分配
- 用户在接入网络后无须先设置IP地址,而是在子网中架设一个DHCP服务器,计算机自动向该服务器请求可用IP地址
- 使用UDP协议请求
- 该服务器一般由路由器充当
TCP与UDP
- TCP虽然能够处理丢包,乱序等问题,但是连接和断开很复杂,导致了网络流量的浪费
- UDP不关注接收端是否收到数据,因此更快
- 视频,音频等数据适合用UDP传输
- UDP和TCP可以同时使用同一端口
- 所以五元组里有协议号
- 三次握手和四次握手
滑动窗口
- 由于滑动窗口的出现,一次可以发送不止一个数据包,因此接收方可以不用每次接收到数据就回复,可以合并回复
- 慢启动
- 滑动窗口的大小会在通信过程中从1指数比例增长
- 为了防止过快增长,设置了一个慢启动阈值,超过后线性增长
- 阈值的设定为超时重发或者重复确认应答时的窗口大小的一半
分片
- 由于链路层中不同种类的最大传输单元(MTU)大小不同,因此需要进行分片,大包分小包
- 过去的分片是由路由器进行的
- 为了提高传输效率,小包只有在目标主机才能重新合并
- 这会使得其中一个小包的丢失导致整个大包无用
- 如果中间路径上有防火墙需要完整的数据包,也是需要重组的
- 对此我们可以选择在发送端(TCP协议)就分片,这样所有片都是独立的
- 这就要我们多次尝试,找到可以被传输的大小
- 所以TCP协议一般不用IP层再分片了
- 而UDP有消息边界,一个UDP包代表一个完整信息,因此不会分片,只会在IP层分片
- 当发生IP层分片时,TCP和UDP的header都在第一个分片上
- TCP的路径MTU发现
- 发送端到接收端经过所有路径不需要分片的最大MTU大小
- 是在三次握手时确定的
首部
路由协议
- 默认路由地址
- 0.0.0.0
- 所有没有匹配项的地址都由该地址匹配
- 环路路由地址
- 127.0.0.1(localhost)
- 同一计算机上的程序之间进行网络通信是使用的默认地址
- RIP路由协议