文章目录
1. 为什么要有网络分层
- 为了网络数据更好的传输和工作
2. 有哪些网络分层模型
3. 客户端请求向服务器请求数据的过程
4. 分层对应的协议
5 物理层
-
5.1 物理层的工作内容
- 物理层利用传输介质为通信的两端建立、管理和释放物理链接,实现比特流的透明传输,保证比特流正确的传输到对端。 物理层定义了接口标准、线缆标准、传输速率、传输方式等 物理层中承载的是比特流单位是比特(bit)
比如你在和朋友聊天,说话内容需要由大脑编排好,然后将你要讲的内容送达到嘴巴,嘴巴通过发出声音让对方听到你说话的内容。并且你在讲话时也无需考虑声波会如何传送到对方的耳朵中的,并且你也看不到声波是如何传达到对方的耳朵中的。这里声波就可以理解为是‘比特流’,你的嘴巴就是提供了‘物理层’的服务。
嘴巴负责开始谈话(建立链接)、判断谈话的开始和结束(管理链接)、结束谈话(释放链接)。并且嘴巴也无需考虑声波是如何传达到对方的耳朵中,所以声波对于嘴巴是透明的。在网络中‘透明’=管理成本低
5.2 物理层的数据传输类型
- 在物理层的传输介质中传输的信号共分为两种,模拟信号、数字信号 。
家里的电话、有线电视就是用的模拟信号,电脑上网就用的是数字信号。 - 模拟信号:连续的信号 适合长距离传输 但是抗干扰能力差 受到干扰时波形变化很难纠正
- 数字信号 不适合长距离传呼 抗干扰能力强 受到干扰时波形失真可以修复
5.3 数据通信模型
5.4 信道
6 数据链路层
6.1 什么是链路
- 链路:从1个节点到相邻节点的一段物理线路(有线或无线),中间没有其他交换节点
6.2 链路层3个基本问题
6.2.1 封装成帧
- 数据链路层会将网络层传下来的数据包 封装成帧
- 每一种数据链路层协议都规定了所能够传送的帧的数据长度上限 以太网的MTU不能超过1500字节
6.2.2 差错校验
发送前 根据数据部分 + 首部计算得出的值填充到FCS中,网卡接受到后再进行一次计算 如果和FCS值不一致 则丢弃
6.2.3 透明传输
- 如果数据和帧开始符和帧结束符一致,那么就会填充ESC字符 接收端接收到字符号会去掉ESC字符, 也就是说,“ESC”字符的加加减减只在数据链路层中实现,其它层之后就好似都无发生过,像没加过一样,所以叫透明传输。
字节填充/字符填充
使用SOH(Start Of Header)作为帧开始符
使用EOT(End Of Transmission)作为帧结束符
数据部分一旦出现了SOH、EOT,就需要进行转义
6.3 链路层协议
6.3.1 协议分类
- 在一条链路上传输数据时,需要有对应的通信协议来控制数据的传输不同类型的数据链路,所用的通信协议可能是不同
- 广播信道:CSMA/CD协议(比如同轴电缆、集线器等组成的网络)
- 点对点信道:PPP协议(比如2个路由器之间的信道)
- CSMA/CD(Carrier Sense Multiple Access with Collision Detectio):载波侦听多路访问/冲突检测
CSMA节点在每一次发送之前先监听信道是否是空闲的,如果信道不是空闲的话,那么就不发送数据,等待一会再进行尝试。只有确保是
空闲的情况下,才可以发送数据,从而避免打断其他节点正在进行的传输过程。
6.3.2 以太网帧
-
用交换机组建的网络,已经支持全双工通信,不需要再使用CSMA/CD,但它传输的帧依然是以太网帧 所以,用交换机组建的网络,依然可以叫做以太网。
使用了CSMA/CD的网络可以称为是以太网(Ethernet,它传输的是以太网帧以太网帧的格式有:Ethernet V2标准、IEEE的802.3标准
使用最多的是:Ethernet V2标准 -
以太网帧的格式:
-
以太网帧:首部 + 数据 + FCS
-
首部:目标MAC +源MAC + 网络类型(IPV4 IPV6)
7 网络层
7.1.1 网络层数据包格式
网络层数据包(IP数据包,Packet)由首部+数据
数据:很多时候是由传输层传递下来的数据段(Segment)
7.1.2 格式详解
- 版本:占4位
IPv4 :0b0100
IPv6:0b0110
- 首部长度:占4位 二进制乘以4才是最终长度
0b0100:20(最小值)
0b1111:60(最大值)
- 区分服务:占8位
全是0 表示不区分服务 非0表示不同的服务 服务不同发送的包通过的优先级会不同,所以可以用于提高网络的服务质量。
- 总长度(16位)
首部+数据的长度之和 最大值65535字节 但是帧的长度又不能超过1500字节 所以过大的IP数据包需要分片(fragments)传输给数据链路层。每一片都有自己的网络层首部(IP首部)
- 标识(Identification)
占16位
用来标识是否属于同一个数据包。当数据包过大进行分片时,同一个数据包的所有片的标识都是一样的 有一个计数器专门管理数据包的ID,每发出一个数据包,ID就加1
- 标志
占3位
第1位(Reserved Bit):保留
第2位(Don’t Fragment):1代表不允许分片,0代表允许分片
第3位(More Fragments):1代表不是最后一片,0代表是最后一片
- 片偏移(Fragment Offset) 占13位 通过标识位+片偏移 可将多个Fragments按照正确的顺序拼接为一个完整的数据包。
片偏移乘以8:字节偏移
每一片的长度一定是8的整数倍
假如一个4000字节的数据包 那么多个片中的标识位和偏移值如下
- 生存时间(Time To Live,TTL) 占8位
每个路由器在转发之前会将TTL减1,一旦发现TTL减为0,路由器会返回错误报告
观察使用ping命令后的TTL,能够推测出对方的操作系统、中间经过了多少个路由器
- 首部校验和 占16位
检验数据报的首部收否错误
既然有了帧校验为什么还需要有首部校验呢?
首部校验是每个路由器拿到数据报都会进行校验 并不会校验帧,因为路由器工作在网络层。而且帧只有网卡才会去校验。
- 网卡接收到一个帧,首先会进行差错校验,如果校验通过则接收,否则丢弃
Wireshark抓到的帧没有FCS ,因为它抓到的是差错校验通过的帧(帧尾的FCS会被硬件去掉)