计算机网络基本原理

计算机网络基本原理

写该文章的目的是为了了解网络结构、熟知ICMP,TCP/IP等协议。主要内容为探究和学习TCP
内容有两部分,第一部分为网络模型介绍,TCP/IP协议讲解。第二部分为与ICMP、TCP/IP有关的实验验证。

简介

该文章内容为网络通识课作业的副产物,水平有限,如有不正确的地方请见谅.

OSI网络模型

OSI模型

  • 物理层
    解决两个硬件之间怎么通信的问题,常见的物理媒介有光纤、电缆、中继器等。它主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。
    它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后在转化为1、0,也就是我们常说的数模转换与模数转换)。这一层的数据叫做比特。

  • 数据链路层
    在计算机网络中由于各种干扰的存在,物理链路是不可靠的。该层的主要功能就是:通过各种控制协议,将有差错的物理信道变为无差错的、能可靠传输数据帧的数据链路。
    它的具体工作是接收来自物理层的位流形式的数据,并封装成帧,传送到上一层;同样,也将来自上层的数据帧,拆装为位流形式的数据转发到物理层。这一层的数据叫做帧。

  • 网络层
    计算机网络中如果有多台计算机,怎么找到要发的那台?如果中间有多个节点,怎么选择路径?这就是路由要做的事。
    该层的主要任务就是:通过路由选择算法,为报文(该层的数据单位,由上一层数据打包而来)通过通信子网选择最适当的路径。这一层定义的是IP地址,通过IP地址寻址,所以产生了IP协议。

  • 传输层
    当发送大量数据时,很可能会出现丢包的情况,另一台电脑要告诉是否完整接收到全部的包。如果缺了,就告诉丢了哪些包,然后再发一次,直至全部接收为止。
    简单来说,传输层的主要功能就是:监控数据传输服务的质量,保证报文的正确传输。

  • 会话层
    虽然已经可以实现给正确的计算机,发送正确的封装过后的信息了。但我们总不可能每次都要调用传输层协议去打包,然后再调用IP协议去找路由,所以我们要建立一个自动收发包,自动寻址的功能。于是会话层出现了:它的作用就是建立和管理应用程序之间的通信。

  • 表示层
    表示层负责数据格式的转换,将应用处理的信息转换为适合网络传输的格式,或者将来自下一层的数据转换为上层能处理的格式。

  • 应用层
    应用层是计算机用户,以及各种应用程序和网络之间的接口,其功能是直接向用户提供服务,完成用户希望在网络上完成的各种工作。

ICMP协议

ICMP协议的功能

ICMP协议的功能主要有:

  1. 确认IP包是否成功到达目标地址
  2. 通知在发送过程中IP包被丢弃的原因

ICMP报文格式

CMP报文包含在IP数据报中,IP报头在ICMP报文的最前面。一个ICMP报文包括IP报头(至
少20字节)、ICMP报头(至少八字节)和ICMP报文(属于ICMP报文的数据部分)。当IP报
头中的协议字段值为1时,就说明这是一个ICMP报文。ICMP报头如下图所示。

ICMP报头

  • 类型:一个8位类型字段,表示 ICMP 数据包类型。

  • 代码:一个8位代码域,表示指定类型中的一个功能,如果一个类型中只有一种功能,代码域置为
    0。

  • 检验和:数据包中 ICMP 部分上的一个16位检验和。

  • ICMP数据部分:包含了所有接受到的数据报的IP报头,还包含IP数据报中前8个字节的数据。

TCP/IP协议

  • TCP/IP详解
    TCP (Transmission Control Protocol)和UDP(User Datagram
    Protocol)协议属于传输层协议。其中TCP提供IP环境下的数据可靠传输,它
    提供的服务包括数据流传送、可靠性、有效流控、全双工操作和多路复
    用。通过面向连接、端到端和可靠的数据包发送。通俗说,它是事先为所
    发送的数据开辟出连接好的通道,然后再进行数据发送;而UDP则不为IP提供可靠性、
    流控或差错恢复功能。一般来说,TCP对应的是可靠性要求
    高的应用,而UDP对应的则是可靠性要求低、传输经济的应用。
    TCP支持的应用协议主要有:Telnet、FTP、SMTP等;
    UDP支持的应用层协议主要
    有:NFS(网络文件系统)、SNMP(简单网络管理协议)、DNS(主域名称系统)、TFTP(通用文件传输协议)等。
    TCP/IP协议与低层的数据链路 层和物理层无关,这也是TCP/IP的重要特点。\

    TCP/IP相关协议组件

  • TCP报文

  • TCP 首部各字段的意义和作用
    TCP首部最小为20字节,这20字节分为5行,每行4个字节也就是32个位。

  • 源端口和目的端口 Port
    源端口号:16位的源端口中包含初始化通信的端口。源端口和源IP地址的作用是标识报文的返回地址。
    目的端口号:16位的目的端口域定义传输的目的。这个端口指明报文接收计算机上的应用程序地址接口。
    计算机通过端口号识别访问哪个服务,比如http服务或ftp服务,发送方端口号是进行随机端口,目标端
    口号决定了接收方哪个程序来接收
    分别占用16位,也就是端口号最大是65536,所以端口号的范围是0到65536。

  • 序号 Sequence Number
    TCP用序列号对数据包进行标记,以便在到达目的地后重新重装,假设当前的序列号为
    s,发送数据长度为 l, 则下次发送数据时的序列号为 s +
    l。在建立连接时通常由计算机生成一个随机数作为序列号的初始值。

  • 确认号 Acknowledgemt Number
    占 4 个字节,表示期望收到对方下一个报文段的序号值。 TCP
    的可靠性,是建立在「每一个数据报文都需要确认收到」的基础之上的。
    就是说,通讯的任何一方在收到对方的一个报文之后,都要发送一个相对应的「确认报文」,来表达确认收到。
    那么,确认报文,就会包含 确认号。 例如,通讯的一方收到了第一个 25kb
    的报文,该报文的 序号值=0,那么就需要回复一个确认报文,其中的确认号
    = 25600。

  • 数据偏移 Offset
    占 0.5 个字节 (4 位)。 这个字段实际上是指出了 TCP 报文段的首部长度
    ,它指出了 TCP报文段的数据起始处 距离 TCP报文的起始处 有多远。(注意
    数据起始处 和 报文起始处 的意思) 一个数据偏移量 = 4 byte,由于 4
    位二进制数能表示的最大十进制数字是 15,因此数据偏移的最大值是 60
    byte,这也侧面限制了 TCP 首部的最大长度。

  • 标志位 TCP Flags
    标志位,一共有 6 个,分别占 1 位,共 6 位 。 每一位的值只有 0 和
    1,分别表达不同意思。

    • ACK:确认序号有效

    • RST:重置连接

    • SYN:发起了一个新连接

    • FIN:释放一个连接

  • 校验和 TCP Checksum
    占 2 个字节。 由发送端填充,接收端对 TCP 报文段执行 CRC 算法,以检验
    TCP 报文段在传输过程中是否损坏,如果损坏这丢弃。
    检验范围包括首部和数据两部分,这也是 TCP 可靠传输的一个重要保障。

抓包实验

实验环境及准备

  • 实验平台:windows 11H vrsion:10.0.22621 Build 22621

  • 网卡:Intel(R) Ethernet Connection (16) I219-LM

  • Wireshark version:4.0.5.0

ICMP抓包分析实验

实验目的

探究ICMP报文在实际数据传输中的存在形式

抓包操作

  • 第一步:确定目标地址,选择www.baidu.com为目标地址。

  • 第二步:启动Wireshark,选择网卡,配置挂虑器为ICMP。

  • 第三步:开始抓包,并在命令提示符下输入ping www.baidu.com

    image

  • 第四步:停止抓包,截获数据。

    image

    可看到windows下ping默认执行四次,因此,Wireshark中抓到8个ICMP
    报文查询。

数据分析

因windows下ping默认执行8次,我们只分析其中的一次。

  • 报文由IP首部和ICMP报文组成
    蓝色为IP首部,共20字节。

    image

    蓝色部分为ICMP报文,共40字节
    ICMP报头为前8个字节

    image

  • Type和Code查询
    通过查询ICMP报文类型可知,Type为8的包为回射请求(Ping请求)

    image

    使用相同的方法,查看Echo (ping) reply包,得到type类型为0
    通过查询ICMP报文类型可知,Type为0的包为回射应答(Ping应答)

    image

小结

由实验验证了:ICMP 报文包含在 IP 数据报中,IP 报头在 ICMP
报文的最前面。一个 ICMP 报文包括 IP 报头(至 少 20 字节)、ICMP
报头(至少八字节)和 ICMP 报文(属于 ICMP 报文的数据部分)。\

TCP/IP抓包分析实验

实验目的

探究TCP/IP协议连接过程及原理,深入理解协议封装,协议控制过程及数据承载过程

注意事项

经实际抓包发现,各个网站的主页服务器不会主动断开连接且不严格安装TCP/IP的四处挥手断开,因此只讨论三次握手

抓包操作

  • 第一步:确定目标地址,选择www.baidu.com为目标地址。

  • 第二步:通过ping命令确定域名解析出的ip地址。

    image

  • 第三步:启动Wireshark,选择网卡,配置挂虑器为 ip.addr == 目标ip

    image

  • 第四步:启动抓包,并在浏览器中访问www.baidu.com

  • 第五步:停止抓包,截获数据

    image

数据分析

为建立可靠联系,浏览器会同时建立两TCP连接,我们之分析其中的一个

  • 第一次握手:客户端4133端口向服务器443端口发送连接请求包,
    标志位SYN置为1,Seq(初始序列号)为一个随机数3399769215,为方便理解,我们将
    用这个随机数记为client_isn, 此时Seq = client_sin

    image

  • 第二次握手:服务器收到客户端发过来报文,由SYN=1知道客户端要求
    建立联机。向客户端发送一个SYN=1和ACK(确认应答号)=cilent_ins+1的TCP
    报文,设置初始序号Seq为一个随机数3336902631,为方便理解我们将其记
    为server_ins,此时Seq=srever_ins

    image

  • 客户端收到服务器发来的包后检查确认序号(ACK)是否正确,
    即第一次发送的序号加1(cilent+1)。以及标志位ACK是否为1。若正确,
    客户端再次发送确认包,ACK标志位为1,SYN标志位为0。确认应答号
    ACK=server_ins+1,发送序号Seq=cilent_ins+1。服务器收到后确认应答号ACK=server_ins+1则
    连接建立成功,可以传送数据了。

    image

小结

TCP 三次握手过程
TCP 是面向连接的协议,所以使用 TCP 前必须
先建立连接,而建立连接是通过三次握手来进行的。三次握手的过程如下图:

image

  • 一开始,客户端和服务端都处于 CLOSE
    状态。先是服务端主动监听某个端口,处于 LISTEN 状态

    image

    客户端会随机初始化序号(client_isn),将此序号置于 TCP
    首部的「序号」字段中,同时把 SYN 标志位置为 1,表示 SYN
    报文。接着把第一个 SYN 报文发送给服务端,表示向服务端发起
    连接,该报文不包含应用层数据,之后客户端处于 SYN-SENT 状态。

  • image

    服务端收到客户端的 SYN
    报文后,首先服务端也随机初始化自己的序号(server_isn),将
    此序号填入 TCP 首部的「序号」字段中,其次把 TCP
    首部的「确认应答号」字段填入 client_isn + 1, 接着把 SYN 和 ACK
    标志位置为 1。最后把该报文发给客户端,该报文也不包含应用层数据,
    之后服务端处于 SYN-RCVD 状态。

  • image

    客户端收到服务端报文后,还要向服务端回应最后一个应答报文,首先该应答报文
    TCP 首部 ACK 标志 位置为 1 ,其次「确认应答号」字段填入 server_isn +
    1 ,最后把报文发送给服务端,这次报文可
    以携带客户到服务端的数据,之后客户端处于 ESTABLISHED 状态。
    服务端收到客户端的应答报文后,也进入 ESTABLISHED 状态。
    从上面的过程可以发现第三次握手是可以携带数据的,前两次握手是不可以携带数据的。
    一旦完成三次握手,双方都处于 ESTABLISHED
    状态,此时连接就已建立完成,客户端和服务端就可以相互发送数据了。

尾言

部分内容引用自小林coding