Loading

Network系列:数通基础(一)

数通基础

1. OSI参考模型

image-20220720212620086


2. TCP/IP参考模型

因为OSI协议栈比较复杂,且TCP和IP两大协议在业界被广泛使用,所以TCP/IP参考模型成为了互联网的主流参考模型。

image-20220720213008502


3. TCP/IP常见协议

不同层的PDU中包含有不同的信息,因此PDU在不同层被赋予了不同的名称。

image-20220720213415144


4. 应用层

应用层的PDU被称为Data(数据)。应用层为应用软件提供接口,使应用程序能够使用网络服务。应用层协议会指定使用相应的传输层协议,以及传输层所使用的端口等。

image-20220720213937376


5. 传输层

传输层协议接收来自应用层协议的数据,封装上相应的传输层头部,帮助其建立“端到端”(Port to Port)的连接。传输层的PDU被称为Segment(段)。

image-20220720214113626


5.1 TCP

5.1.1 报文格式

image-20220720214259007

Source Port:源端口,标识哪个应用程序发送。长度为16比特。

Destination Port目:的端口,标识哪个应用程序接收。长度为16比特。

Sequence Number:序号字段。TCP链接中传输的数据流每个字节都编上一个序号。序号字段的值指的是本报文段所发送数据的第一个字节的序号。长度为32比特。

Acknowledgment Number:确认序列号,是期望收到对方下一个报文段数据的第1个字节的序号,即上次已成功接收到的数据段的最后一个字节数据的序号加1。只有Ack标识为1,此字段有效。长度为32比特。

Header Length:头部长度,指出TCP报文头部长度,以32比特(4字节)为计算单位。若无选项内容,则该字段为5,即头部为20字节。

Reserved:保留,必须填0。长度为6比特。

Control bits:控制位,包含FIN、ACK、SYN等标志位,代表不同状态下的TCP数据段。

Window:窗口TCP的流量控制,这个值表明当前接收端可接受的最大的数据总数(以字节为单位)。窗口最大为65535字节。长度为16比特。

Checksum:校验字段,是一个强制性的字段,由发端计算和存储,并由收端进行验证。在计算检验和时,要包括TCP头部和TCP数据,同时在TCP报文段的前面加上12字节的伪头部。长度为16比特。

Urgent:紧急指针,只有当URG标志置1时紧急指针才有效。TCP的紧急方式是发送端向另一端发送紧急数据的一种方式。紧急指针指出在本报文段中紧急数据共有多少个字节(紧急数据放在本报文段数据的最前面)。长度为16比特。

Options:选项字段(可选),长度为0-40字节。


5.1.2 TCP的特点
  1. TCP 的全称是 Transmission Control Protocol ,它被称为是⼀种 ⾯向连接(connection-oriented) 的协议,这是因为⼀个应⽤程序开始向另⼀个应⽤程序发送数据之前,这两个进程必须先进⾏建立连接”三次握手“。

  2. TCP 连接是 全双⼯服务(full-duplex service) 的,全双⼯是什么意思?全双⼯指的是主机 A 与另外⼀个主机
    B 存在⼀条 TCP 连接,那么应⽤程数据就可以从主机 B 流向主机 A 的同时,也从主机 A 流向主机 B。

  3. TCP 只能进⾏ 点对点(point-to-point) 连接,那么所谓的 多播 ,即⼀个主机对多个接收⽅发送消息的情况
    是不存在的,TCP 连接只能连接两个⼀对主机。

  4. TCP 会将要传输的数据流分为多个 块(chunk) ,然后向每个 chunk 中添加 TCP 标头,这样就形成了⼀个 TCP
    段也就是报⽂段。每⼀个报⽂段可以传输的⻓度是有限的,不能超过 最⼤数据⻓度(Maximum Segment Size) ,俗称 MSS 。在报⽂段向下传输的过程中,会经过链路层,链路层有⼀个 Maximum Transmission Unit ,最⼤传输单元 MTU, 即数据链路层上所能通过最⼤数据包的⼤⼩,最⼤传输单元通常与通信接⼝有关。


那么 MSS 和 MTU 有啥区别呢?

因为计算机⽹络是分层考虑的,这个很重要,不同层的称呼不⼀样,对于传输层来说,称为报⽂段。⽽对⽹络层来说就叫做 IP 数据包,所以,MTU 可以认为是⽹络层能够传输的最⼤ IP 数据包,⽽ MSS可以认为是传输层的概念,也就是 TCP 数据包每次能够传输的最⼤量。

为了达到最佳的传输效能 TCP 协议在建立连接的时候通常要协商双方的 MSS 值,当 TCP 层发现数据超过 MSS 时,则就先会进行分片,当然由它形成的 IP 包的长度也就不会大于 MTU ,自然也就不用 IP 分片了。


5.1.3 TCP的建立(三次握手)

基于TCP的各种应用,发送数据之前都要先建立TCP连接,那就是“三次握手”。

image-20220720230033453

TCP连接建立的过程:

  1. PC1为发起方,TCP头部初始Seq随机生成的数字a,然后Flag中SYN置位为1,因为没收到过来自PC2的任何报文,所以确认序列号为0。

  2. PC2为接收方,接收到合法的SYN报文后,回复TCP头部初始Seq随机生成的数字b,Flag中SYN和ACK置位为1。同时因为此报文是回复给PC1的报文,所以确认序列号为a+1。

  3. PC1接收到PC2发送的SYN和ACK置位的TCP报文后,回复一个ACK置位的报文,此时序列号为a+1,确认序列号为b+1。PC2收到之后,TCP双向连接建立。


直观感受如下:

image-20220720232854592


5.1.4 可靠传输

TCP使用序列号(Seq)和确认序列号(ACK)字段实现数据的可靠和有序传输。

image-20220724145216621

当TCP连接已经建立后,PC1、PC2互相去发数据,传输的过程如下:

  1. PC1将全部待TCP发送的数据按照字节为单位编上号。假设第一个字节的编号为“a+1”,第二个字节的序号为“a+2”,依次类推。

  2. PC1会把每一段数据的第一个字节的编号作为序列号(Sequence number),然后将TCP报文发送出去。

  3. PC2在收到PC1发送来的TCP报文后,需要给予确认同时请求下一段数据,如何确定下一段数据呢?

    Seq为PC1发来的确认序列号(ACK),确认序列号(a+1)+ 载荷长度 = 下一段数据的第一个字节的序号(a+1+12)

  4. PC1在收到PC2发送的TCP报文之后,发现确认序列号为“a+1+12” ,说明“a+1”到“a+12”这一段的数据已经被接受,需要从“a+1+12”开始发送。


为什么PC1所发报文的Ack字段没有增长?

为了提升发送效率,也可以一次性发送多段数据,由接收方统一确认,而PC2发给PC1只是确认收到,而载荷没有数据,所以PC1的ACK依然是b+1。


5.1.5 滑动窗口机制

TCP通过滑动窗口机制来控制数据的传输速率

image-20220724225422428

  1. 在TCP三次握手建立连接时,双方都会通过Window字段告诉对方本端最大能够接受的字节数(也就是缓冲区大小)。

  2. 连接建立成功之后,发送方会根据接受方宣告的Window大小发送相应字节数的数据。

  3. 接受方接受到数据之后会放在缓冲区内,等待上层应用来取走缓冲的数据。若数据被上层取走,则相应的缓冲空间将被释放。

  4. 接收方根据自身的缓存空间大小通告当前的可以接受的数据大小( Window )。

  5. 发送方根据接收方当前的Window大小发送相应数量的数据。


5.1.6 TCP的关闭(四次挥手)

当数据传输完成,TCP需要通过“四次挥手”机制断开TCP连接,释放系统资源。

image-20220724225706819

TCP支持全双工模式传输数据,这意味着同一时刻两个方向都可以进行数据的传输。在传输数据之前,TCP通过三次握手建立的实际上是两个方向的连接,因此在传输完毕后,两个方向的连接必须都关闭。如图所示:

  1. 由PC1发出一个FIN字段置”1 ”的不带数据的TCP段;

  2. PC2收到PC1发来的FIN置位的TCP报文后,会回复一个ACK置位的TCP报文。

  3. 若PC2也没有需要发送的数据,则直接发送FIN置位的TCP报文。假设此时PC2还有数据要发送,那么当PC2发送完这些数据之后会发送一个FIN置位的TCP报文去关闭连接。

  4. PC1收到FIN置位的TCP报文,回复ACK报文,TCP双向连接断开。


5.1.7 TCP通信过程

image-20220724224747003


5.2 UDP

5.2.1 报文格式

image-20220720214757383

Source Port:源端口,标识哪个应用程序发送。长度为16比特。

Destination Port:目的端口,标识哪个应用程序接收。长度为16比特。

Length:该字段指定UDP报头和数据总共占用的长度。可能的最小长度是8字节,因为UDP报头已经占用了8字节。由于这个字段的存在,UDP报文总长不可能超过65535字节(包括8字节的报头,和65527字节的数据)。

Checksum:覆盖UDP头部和UDP数据的校验和,长度为16比特。


5.2.2 UDP的特点
  1. 采⽤ UDP 协议时,只要应⽤进程将数据传给 UDP,UDP 就会将此数据打包进 UDP 报⽂段并⽴刻传递给⽹络层。

  2. ⽆须建⽴连接 ,TCP 在数据传输之前需要经过三次握⼿的操作,⽽ UDP 则⽆须任何准备即可进⾏数据传输。

  3. ⽆连接状态 ,TCP 需要在端系统中维护 连接状态 ,连接状态包括接收和发送缓存、拥塞控制参数以及序号和确认号的参数,在 UDP 中没有这些参数,也没有发送缓存和接受缓存。

  4. 分组⾸部开销⼩ ,每个 TCP 报⽂段都有 20 - 60(选项字段最⼤占⽤ 40 字节) 字节的⾸部开销,⽽ UDP 仅仅只有 8 字节的开销。

这⾥需要注意⼀点,并不是所有使⽤ UDP 协议的应⽤层都是 不可靠 的,应⽤程序可以⾃⼰实现可靠的数据传输,通过增加确认和重传机制。所以使⽤ UDP 协议最⼤的特点就是速度快。


6. 网络层

传输层负责建立主机之间进程与进程之间的连接,而网络层则负责数据从一台主机到另外一台主机之间的传递。网络层的PDU被称为Packet(包)。

image-20220724231059469


6.1 网络层协议工作过程

image-20220724231449830

IP数据包的封装与转发:

  1. 网络层收到上层(如传输层)协议传来的数据时候,会封装一个IP报文头部,并且把源和目的IP地址都添加到该头部中。

  2. 中间经过的网络设备(如路由器),会维护一张指导IP报文转发的“地图”——路由表,通过读取IP数据包的目的地址,查找本地路由表后转发IP数据包。

  3. IP数据包最终到达目的主机,目的主机通过读取目的IP地址确定是否接受并做下一步处理。

  4. 除了IP协议外,网络层中还有如OSPF、IS-IS、BGP等各种路由协议帮助路由器建立路由表,ICMP帮忙进行网络的控制和状态诊断。


7. 数据链路层

数据链路层位于网络层和物理层之间,可以向网络层的IP、IPv6等协议提供服务。数据链路层的PDU被称为Frame(帧)。以太网(Ethernet)是最常见的数据链路层协议。

image-20220725212339996


7.1 以太网与MAC地址

image-20220725212544085

image-20220725212604982


7.2 ARP

ARP (Address Resolution Protocol)地址解析协议:根据已知的IP地址解析获得其对应的MAC地址。

image-20220725212735445

ARP主要功能:

  1. 将IP地址解析为MAC地址;

  2. 维护IP地址与MAC地址的映射关系的缓存,即ARP表项;

  3. 实现网段内重复IP地址的检测。


7.3 ARP工作原理
1. 发送数据前操作

image-20220725213408381

学习到的IP地址和MAC地址的映射关系会被放入ARP缓存表中存放一段时间。在有效期内(缺省:180s),设备可以直接从这个表中查找目的MAC地址来进行数据封装,而无需进行ARP查询。过了这段有效期,ARP表项会被自动删除。


如果数据是要发往其他网络的呢?

答:则源设备会在ARP缓存表中查找网关的MAC地址。然后将数据发送给网关。最后网关再把数据转发给目的设备。


2. ARP请求封装过程和原则

image-20220725220105898

  1. Host 1的ARP缓存表中不存在Host 2的MAC地址,所以Host 1会发送ARP Request来获取目的MAC地址。

  2. ARP Request报文封装在以太帧里。帧头中的源MAC地址为发送端主机1的MAC地址。此时,由于Host 1不知道Host 2的MAC地址,所以目的MAC地址为广播地址FF-FF-FF-FF-FF-FF

  3. ARP Request报文中包含发送端MAC地址、发送端IP地址、目的端MAC地址、目的端IP地址,其中目的端MAC地址的值为0。ARP Request报文会在整个网络上传播,该网络中所有主机包括网关都会接收到此ARP Request报文


3. 各主机接收ARP请求报文后的处理

image-20220725220436483

所有的主机接收到该ARP Request报文后,都会检查它的目的端IP地址字段与自身的IP地址是否匹配。

  1. 如果不匹配,则该主机将不会响应该ARP Request报文。

  2. 如果匹配,则该主机会将ARP请求报文中的发送端MAC地址和发送端IP地址信息记录到自己的ARP缓存表中,然后通过ARP Reply报文进行响应


4. 目的主机回复

image-20220725221134368

Host 2会向Host 1回应ARP Reply报文。ARP Reply报文中的发送端IP地址是Host 2自己的IP地址,目的端IP地址是Host 1的IP地址,目的端MAC地址是Host 1的MAC地址,发送端MAC地址是自己的MAC地址,同时操作类型被设置为Reply。ARP Reply报文通过单播传送。


5. 源主机处理目的主机的回复

image-20220725221523338

Host 1收到ARP Reply以后,会检查ARP报文中目的端IP地址字段与自身的IP地址是否匹配。如果匹配,ARP报文中的发送端MAC地址和发送端IP地址会被记录到Host 1的ARP缓存表中。


8. 物理层

数据到达物理层之后,物理层会根据物理介质的不同,将数字信号转换成光信号、电信号或者是电磁波信号。物理层的PDU被称为比特流(Bitstream)。

image-20220725221721655


9. 数据通信过程

9.1 发送方数据封装过程

image-20220725221935146

•假设你正在通过网页浏览器访问华为官网,当你输入完网址,敲下回车后,计算机内部会发生下列事情:

  1. 浏览器(应用程序)调用HTTP(应用层协议),完成应用层数据的封装(图中DATA还应包括HTTP头部,此处省略) 。

  2. HTTP依靠传输层的TCP进行数据的可靠性传输,将封装好的数据传递到TCP模块。

  3. TCP模块给应用层传递下来的Data添加上相应的TCP头部信息(源端口、目的端口等)。此时的PDU被称作Segment(段)。

  4. 在IPv4网络中,TCP模块会将封装好的Segment传递给网络层的IPv4模块(若在IPv6环境,会交给IPv6模块进行处理)。

  5. IPv4模块在收到TCP模块传递来的Segment之后,完成IPv4头部的封装,此时的PDU被称为Packet(包)。

  6. 由于使用了Ethernet作为数据链路层协议,故在IPv4模块完成封装之后,会将Packet交由数据链路层的Ethernet模块(例如以太网卡)处理。

  7. Ethernet模块在收到IPv4模块传递来的Packet之后,添加上相应的Ethernet头部信息和FCS帧尾,此时的PDU被称为Frame(帧)。

  8. 在Ethernet模块封装完毕之后,会将数据传递到物理层。

  9. 根据物理介质的不同,物理层负责将数字信号转换成电信号,光信号,电磁波(无线)信号等。

  10. 转换完成的信号在网络中开始传递。


9.2 中间网络数据传输

image-20220725222221788

一般情况下:

网络中的二层设备(如以太网交换机)只会解封装数据的二层头部,根据二层头部的信息进行相应的“交换”操作。

网络中的三层设备(如路由器)只会解封装到三层头部,并且根据三层头部的信息进行相应的“路由”操作。


9.3 接收方数据解封装过程

image-20220725222334547

经过中间网络传递之后,数据最终到达目的服务器。根据不同的协议头部的信息,数据将被一层层的解封装并做相应的处理和传递,最终交由WEB服务器上的应用程序进行处理。


10. 一些参考学习文献

TCP/IP详解--TCP网络传输数据包1460MSS和1448负载 http://t.zoukankan.com/zy09-p-14956592.html

网络UDP,TCP数据包的最大传输长度分析 https://blog.csdn.net/flybirddizi/article/details/73065667

IP分片技术 https://baike.baidu.com/item/IP分片技术/422762

posted @ 2023-09-17 10:56  YinJayChen  阅读(112)  评论(0编辑  收藏  举报