网络分层
Contents
网络分层
网络互连模型
- 为了更好的促进互联网的研究和发展,国际标准组织 ISO 在1985年制定了网络互连模型
- OSI (Open System Interconnect Reference Model), 具有7层结构
- 应用层
- 协议 : FTP,HTTP,SMTP,DNS,DHCP
- 报文,用户数据
- 传输层
- 协议:TCP,UDP
- 段(Segments)
- 网络层
- IP,ARP,ICMP
- 包(Packets)
- 数据链路层
- CSMA,CD,PPP
- 帧(Frames)
- 物理层
- 比特流
物理层
- 物理层定义了接口标准,线缆标准,传输速率,传输方式等
数字信号,模拟信号
模拟信号(Analog Signal)
- 连续的信号,适合长距离传输
- 抗干扰能力差,受到干扰时波形变形很难纠正
数字信号(Digital Signal)
- 离散的信号,不适合长距离传输
- 抗干扰能力强,受到干扰时波形失真可以修复
数据通信模型
- 局域网通信模型
- PC 通过网线传输数字信号与集线器/交换机通信
- 另一台PC同样通过这种方式与集线器/交换机通信。 进而实现两台计算机通信
- 注意网线不能超过100米
- 广域网通信模型
- PC 通过网线与调制解调器(猫)通信 (传输数字信号)
- 调制解调器通过电话线与另外一个调制解调器通信 (传输模拟信号)
- 再由调制解调器将模拟信号转换问数字信号
- 注意光纤的使用光电调制解调器
信道(Channel)
- 信道:信息传输的通道,一个传输介质上(比如网线) 上可以有多条信道
- 单工通信
- 信号只能往一个方向传输,任何时候都不能改变信号的传输方向
- 比如无线电广播,有线电视广播
- 半双工通信
- 信号可以双向传输,但必须交替进行,同一时间只能往一个方向传输
- 比如对讲机
- 全双工通信
- 信号可以同时双向传输
- 比如手机(听,说同时进行)
数据链路层
- 链路:从1个节点到相邻节点的一个段物理线路(有线或无线),中间没有其他转换节点
- 数据链路: 在一条链路上传输数据时,需要有对应的通信协议来控制数据的传输
- 不同类型的数据链路,所用的通信协议可能是不同的
- 广播信道: CSMA/CD协议 (比如同轴电缆,集线器等组成的网络)
- 点对点信道: PPP协议(比如2个路由器之间的信道)
- 不同类型的数据链路,所用的通信协议可能是不同的
- 数据链路的3个基本问题
- 封装成帧
- 透明传输
- 差错检验
数据链路层 - 封装成帧
- 帧(Frame) 的数据部分
- 就是网络层传递下来的数据包(IP数据包,Packet)
- 最大传输单元MTU (Maximum Transferr Unit)
- 每一种数据链路层协议都规定了所能够传送的帧的数据长度上限
- 以太网的MTU为1500个字节
数据链路层 - 透明传输
- 使用SOH(Start Of Header) 作为帧开始符
- 使用EOT(End Of Transmission) 作为帧结束符
会出现如下问题 :
当数据部分出现EOT时,部分数据会被当作无效帧而丢弃
所以,数据部分一旦出现了SOH,EOT,就需要进行转义
数据链路层 - 差错校验
- FCS是根据数据部分 + 首部计算得出的
CSMA/CD协议
- CSMA/CD (Carrier Sense Multiple Access with Collision Detection)
- 载波侦听多路访问 / 冲突检测
- 使用了 CSMA/CD的的网络可以成为以太网(Ethenet), 它传输的是以太网帧
- 以太网帧的格式有: Ethernet V2标准,以太网的帧至少64字节
- 用交换机组建呢的网络,现在已经支持全双工通信,不再需要使用CSMA/CD,但它传输的帧依然是以太网帧
- 所以,用交换机组建的网络,依然可以称为以太网
Ethernet V2帧的格式
- 首部 : 目标MAC + 源MAC
- 以太网帧 : 首部 + 数据 + FCS
- 数据的长度至少是: 64 -6 -6 -2 - 4 = 46字节
- 当数据部分的长度小于46字节时
- 数据链路层会在数据的后面加入一些字节填充
- 接收端会将添加的字节去掉
- 长度总结
- 以太网帧的数据长度 : 46 - 1500字节
- 以太网帧的长度 : 64 - 1518字节(目标MAC + 源MAC + 网络类型 + 数据 + FCS)
网卡
- 网卡接收到一个帧,首先会进行差错校验,如果校验通过则接收,否则丢弃
- Wireshark抓到的帧没有FCS,因为它抓到的是差错校验通过的帧(帧尾的FCS会被硬件去掉)
- Wireshark抓不到差错校验的帧
PPP协议(Point to Point Protocol)
- Address字段 : 图中的值都是 0xFF, 形同虚设,点到点信道不需要源MAC,目标MAC地址
- Control字段 :图中的值都是 0x03,目前没什么用
- Protocol字段 : 内部用到的协议类型
- 帧开始符,帧结束符: 0x7E
PPP协议 - 字节填充
网络层
-
网络层数据包(IP数据包,Packet) 由首部,数据两部分组成
- 数据 : 很多时候由传输层传递下来的数据段(Segment)
网络层首部 - 版本,首部长度,区分服务
- 版本(Version)
- 占4位
- 0b0100 : IPv4
- 0b0110 : IPv6
- 占4位
- 首部长度(Header Length)
- 占4位,二进制乘以4才是最终长度
- 0b0101 : 20(最大值)
- 0b1111 : 60(最大值)
- 区分服务(Differentiated Services Field)
- 占8位
- 可用于提高网络的服务质量(QoS, Quality of Service)
- 总长度
- 占16位
- 首部 + 数据的长度之和,最大值是65535
- 由于帧的数据不能超过1500字节,所以过大的IP数据包,需要分成片(fragments) 传输给数据链路层
- 每一篇都有自己的网络层首部(IP首部)
- 标识(Identification)
- 占16位
- 数据包的ID,当你数据包过大进行拆分时,同一个数据包的所有片的标识都是一样的
- 有一个计数器专门管理数据包的ID,每发出一个数据包,ID就加1
- 标识(Flags)
- 占3位
- 第一位 : 保留
- 第二位 :1代表不允许分片,0代表允许分片
- 第三位 : 1代表不是最后一片,0代表是最后一片
ping - 几个用法
- ping /?
- 查看 ping 的用法
- ping ip地址 -l 数据包大小
- 发送指定大小的数据包
- ping ip地址 -f
- 不允许网络层分页
- pinng ip地址 -i TTL
- 设置TTL的值
- 通过tracert, pathping 命令,可以跟踪数据包经过了那些路由器
网络层首部 - 片偏移
- 片偏移 (Fragment Offset)
- 占13位
- 片偏移乘以8 : 字节偏移
- 每一片的长度一定是8的整数倍
-
生存时间
-
占8位
-
每个路由器在转发之前会将TTL减1,一旦发现TTL减为0,路由器会返回错误报告
-
观察使用ping命令后的TTL,能够推测出对方的操作系统,中间经过了多少个路由器
-
-
协议(Protocol)
-
占8位
-
表明所封装的数据是使用了什么协议
-
首部校验和(Header Checksum)
- 用于检查首部是否有错误
-
传输层(Transport)
-
传输层有2个协议
-
TCP(Transmission Control Protocol), 传输控制协议
-
UDP(User Datagram Protocol), 用户数据报协议
TCP UDP 连接性 面向连接 无连接 可靠性 可靠传输,不丢包 不可靠传输,尽最大努力交付,可能丢包 首部占用空间 大 小 传输速率 慢 快 资源消耗 大 小 应用场景 浏览器,文件传输,邮件发送 音视频通话,直播 应用层协议 HTTP,HTTPS,FTP,SSMTP,DNS DNS
-
UDP - 数据格式
- UDP 是无连接的,减少了建立和释放连接的开销
- UDP尽最大努力交付,不保证可靠交付
- 因此不需要维护一些复杂的参数,首部只有8个字节(TCP的首部至少20个字节)
- UDP长度(Length)
- 占16位,首部的长度 + 数据的长度
UDP - 检验和(Checksum)
-
检验和的计算内容 : 伪首部 + 首部 + 数据
- 伪首部 : 仅在计算检验和时起作用,并不会传递给网络层
端口(Port)
- UDP首部中端口是占用2字节
- 可以推测出端口号的取值范围是 0-65535
- 客户端的源端口号是临时开启的随机端口
- 防火墙可以设置开启/关闭某些端口来提高安全性
- 常用命令行
- netstat -an : 查看被占用的端口
- netstat -anb : 查看被占用的端口,占用端口的应用程序
- telnet 主机 端口: 查看是否可以访问某些主机的某个端口
TCP - 数据格式
Author 飞熊
LastMod Sep 06