网络协议四:物理层、链路层、网络层
网络分层
物理层
- 物理层定义了接口标准、线缆标准、传输速率、传输方式等
数字信号、模拟信号
- 模拟信号(Analog Signal)
- 连续的信号,适合长距离传输
- 抗干扰能力差,受到干扰时波形变形很难纠正
- 数字信号(Digital Signal)
- 离散的信号,不适合长距离传输
- 抗干扰能力强,受到干扰时波形失真可以修复
- 离散的信号,不适合长距离传输
数据通信模型
- 注意:网线不能超过100米
数据通信模型
- 信道:信息传输的通道,一条传输介质上(比如网线)上可以有多条信道
- 单工通信
- 信号只能往一个方向传输,任何时候都不能改变信号的传输方向
- 比如无线电广播、有线电视广播
- 半双工通信
- 信号可以双向传输,但必须是交替进行,同一时间只能往一个方向传输
- 比如对讲机
- 全双工通信
- 信号可以同时双向传输
- 比如手机(打电话,听说同时进行)
数据链路层(Data Link)
- 链路:从1个节点到相邻节点的一段物理线路(有线或无线),中间没有其他交换节点
- 数据链路:在一条链路上传输数据时,需要有对应的通信协议来控制数据的传输
- 不同类型的数据链路,所用的通信协议可能是不同的
- 广播信道:CSMA/CD协议(比如同轴电缆、集线器等组成的网络)
- 点对点信道:PPP协议(比如2个路由器之间的信道)
- 不同类型的数据链路,所用的通信协议可能是不同的
- 数据链路层的3个基本问题
- 封装成帧
- 透明传输
- 差错检验
封装成帧
- 帧(Frame)的数据部分
- 就是网络层传递下来的数据包(IP数据包,Packet)
- 最大传输单元MTU(Maximum Transfer Unit)
- 每一种数据链路层协议都规定了所能够传送的帧的数据长度上限
- 以太网的MTU为1500个字节
透明传输
- 使用SOH(Start Of Header)作为帧开始符
- 使用EOT(End Of Transmission)作为帧结束符
- 但是如果数据中间部分出现了EOT,那么就会造成数据丢失,因此为了防止这种现象:数据部分一旦出现了SOH、EOT,就需要进行转义-填充一个字节ESC
差错检验
- FCS是根据数据部分 + 首部计算得出的一个值
- 传输到目的地时也会计算一次,然后与传输过来的FCS进行比较,查看是否一致
CSMA/CD协议
- CSMA/CD(Carrier Sense Multiple Access with Collision Detectio)
- 载波侦听多路访问/冲突检测
- 使用了CSMA/CD的网络可以称为是以太网(Ethernet),它传输的是以太网帧
- 以太网帧的格式有:Ethernet V2标准、IEEE的802.3标准
- 使用最多的是:Ethernet V2标准
- 为了能够检测正在发送的帧是否产生了冲突,以太网的帧至少要64字节
- 用交换机组建的网络,已经支持全双工通信,不需要再使用CSMA/CD,但它传输的帧依然是以太网帧
- 所以,用交换机组建的网络,依然可以叫做以太网
Ethernet V2帧的格式
- 首部:目标MAC +源MAC + 网络类型
- 以太网帧:首部 + 数据 + FCS
- 数据的长度至少是:64 – 6 – 6 – 2 – 4 = 46字节
Ethernet V2标准
- 当数据部分的长度小于46字节时
- 数据链路层会在数据的后面加入一些字节填充
- 接收端会将添加的字节去掉
- 长度总结
- 以太网帧的数据长度:46~1500字节
- 以太网帧的长度:64~1518字节(目标MAC +源MAC + 网络类型 + 数据 + FCS)
网卡
- 网卡接收到一个帧,首先会进行差错校验,如果校验通过则接收,否则丢弃
- 网卡工作在数据链路层、物理层
- Wireshark抓到的帧没有FCS ,因为它抓到的是差错校验通过的帧(帧尾的FCS会被硬件去掉)
- Wireshark抓不到差错校验失败的帧
网络层(Network)
- 网络层数据包(IP数据包,Packet)由首部、数据2部分组成
- 数据:很多时候是由传输层传递下来的数据段(Segment)
版本、首部长度、区分服务
- 版本(Version)
- 占4位
- 0b0100:IPv4
- 0b0110:IPv6
- 首部长度(Header Length)
- 占4位,二进制乘以4才是最终长度
- 0b0101:20(最小值)
- 0b1111:60(最大值)
- 整个首部的长度,包含可变部分
- 区分服务(Differentiated Services Field)
- 占8位
- 可以用于提高网络的服务质量(QoS,Quality of Service)
- 就是针对某些特殊数据加以设置值区分,这样路由器可以优先通过该数据
总长度
- 总长度(Total Length)
- 占16位
- 首部 + 数据的长度之和,最大值是65535
- 由于帧的数据不能超过1500字节,所以过大的IP数据包,需要分成片(fragments)传输给数据链路层
- 每一片都有自己的网络层首部(IP首部)
标识、标志、片偏移
- 标识(Identification)
- 占16位
- 数据包的ID,当数据包过大进行分片时,同一个数据包的所有片的标识都是一样的
- 有一个计数器专门管理数据包的ID,每发出一个数据包,ID就加1
- 标志(Flags)
- 占3位
- 第1位(Reserved Bit):保留
- 第2位(Don’t Fragment):1代表不允许分片,0代表允许分片
- 第3位(More Fragments):1代表不是最后一片,0代表是最后一片
- 片偏移(Fragment Offset)
- 占13位
- 片偏移乘以8:字节偏移
- 每一片的长度一定是8的整数倍
- 片偏移就是:一个大数据包分割成n段,用来记录每段的分割顺序,以便于接收方拼接
- 举例:向腾讯课堂发送一个数据包:
ping ke.qq.com -l 4000
生存时间、协议、首部校验和
- 生存时间(Time To Live,TTL)
- 占8位
- 每个路由器在转发之前会将TTL减1,一旦发现TTL减为0,路由器会返回错误报告
- 观察使用ping命令后的TTL,能够推测出对方的操作系统、中间经过了多少个路由器
- 可以推算出百度服务器应该部署在linux上,64-52=12,大概经过了12个路由器
- 注意:通过tracert、pathping命令,可以跟踪数据包经过了哪些路由器,比如:
tracert baidu.com
- 协议(Protocol)
- 占8位
- 表明所封装的数据是使用了什么协议
- 首部校验和(Header Checksum)
- 用于检查首部是否有错误
ping几个用法
ping /?
查看ping的用法
ping ip地址 -l 数据包大小
发送指定大小的数据包
ping ip地址 -f
不允许网络层分片
ping ip地址 -i TTL
设置TTL的值
通过tracert、pathping命令,可以跟踪数据包经过了哪些路由器
抓包工具Wireshark
- 软件安装之后,打开可以看到列表展示的所有的连接方式
- 点击本机连接网络的连接方式(WiFi、以太网、USB等),就可以自动抓取了
- 该抓包工具可以抓取本机正在访问的任何网络,数据包每个字节的内容,非常详细
- 点击某个请求,可以看到:链路层、网络层、传输层__等每个位的详细情况
-
搜索功能:
搜索某个IP地址: ip.addr == 192.168.133.1