网络基础

Posted 九月

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络基础相关的知识,希望对你有一定的参考价值。

网络基础

协议栈 TCP/IP( Transmission Control Protocol /Internet Protocol)

  • TCP/IP模型与OSI参考模型的共同之处是:他们都采用了层次结构的概念,在传输层定义了相似的功能,但是二者在层次划分与使用的协议上是有很大差别的,也正是这种差别对两个模型的发展产生的两个截然不同的局面,OSI属于国际意义上的协议,TCI/IP属于实际人们用到的协议。
OSI参考模型与TCP/IP模型对照图
OSI参考模型 TCP/IP模型
应用层 --------> 应用层
表示层 --------> 应用层
会话层 --------> 应用层
传输层 --------> 传输层
网络层 --------> Internet层
数据链路层 --------> 数据链路层
物理层 --------> 物理层

用户发送数据时发送方每层都会依次给数据进行封装,接受方收到时会依次解封装查看数据是否完整。就好比寄快递自己要给快递封装一下,快递员也会给快递封装一层包装,收件人会依次拆开包装才能看到快递。这种封装称为“HDR=报头”

应用层:网络进程访问层,直接与人打交道,
  • 为应用程序进程 例如:电子邮件、文件传输和终端仿真,提供网络服务
  • 提供用户身份验证
表示层:数据表示
  • 确保接受系统可以读出该数据
  • 格式化数据
  • 构建数据
  • 协商用于应用层的传输语法
  • 提供加密
会话层:主机之间通信
  • 建立管理和终止在应用程序之间的会话
传输层:(单位为“段”)传输问题
  • 确保数据传输的可靠性
  • 建立、维护和终止虚拟电路
  • 通过错误检查和恢复
  • 信息流控制来保障可靠性
网络层:(单位为“包”)数据传输
  • 路由数据包
  • 选择传递数据的最佳路径
  • 支持逻辑寻址和路径选择
数据链路层:(单位为“帧”)访问介质
  • 定义如何格式化数据以便进行传输以及如何控制对网络的访问
  • 支持错误检测
物理层:(单位为“比特 bit”)二进制传输
  • 为启动、维护以及关闭物理链路定义了电气规范、机械规范、过程规范和功能规范

三次握手四次挥手

建立TCP数据传送链接需要三次握手才能建立,而断开连接则需要四次握手。(画图会比较直观,原谅我画图废柴)

三次握手 建立连接
发送方和接受方默认处于CLOSED关闭状态
  • 建立第一次握手:
    • client将标志位SYN(发起一个新链接)=1,随机产生一个值seq(序号)=x,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
  • 第二次握手:
    • Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK(确认序号有效)都置为1,ack=x+1,随机产生一个值seq(序号)=y,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
  • 第三次握手:
    • Client收到确认后,检查ack是否为x+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=y+1,并将该数据包发送给Server,Server检查ack是否为y+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。

双方此时处于EXTAB-LISHED 已建立连接模式

四次挥手 解除连接
发送方和接受方默认处ESTAB-LISHED建立连接状态
  • 第一次挥手:
    • Client发送一个FIN(释放一个连接)=1和seq=u,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1(终止等待状态)状态。
  • 第二次挥手:
    • Server收到FIN后,发送一个ACK=1给Client,确认序号ack=u+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
  • 第三次挥手:
    • Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
  • 第四次挥手:
    • Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号ack=w+1,Server进入CLOSED状态,完成四次挥手。 Client进入TLME-WAIT 时间等待2MSL 。

双方进入CLOSED状态

以上只是模拟大概挥手过程,有些情况下会有例外。

IP地址

  • 每台主机(计算机、网络设备、外围设备)它们可唯一标识网络中的每台设备,相当于每个人的身份证,必须具有唯一性。

  • IP地址由两部分组成

    • 网络ID
      • 标识网络
      • 每个网段分配一个网络ID
    • 主机ID
      • 标识单个主机
      • 由组织分配给各设备
    • 子网掩码
      • 标识网络位位数
  • IP地址为32位二进制数,可将32位二进制数划分为四组8位二进制八位数,每组二进制八位数(或字节)均可转换为十进制数,转换结果就是平时人们见到的样子。

  • 公式

    • 32位IP=网络ID+主机ID
    • 一个网络中IP数量=2^主机位ID-2
    • 网络ID值=IP “于”子网掩码
    • 子网数=2^(网络ID位数) 损失IP数=(2^n-1)*2

划分子网:将一个大网划分成多个小网,网络ID向主机ID借n位,意味着划分成2^n个子网 由于网络细分的情况太严重,为了担心路由信息过于庞大导致网络效能不佳,有的时候我们反而把网络位借给主机位

划分超网:将多个小网合并成一个大网,主机ID向网络ID借n位

IP分类
  • A:特征 0开头 前8位网络ID 1-126
  • B:特征10开头 前16位网络ID 128-191
  • C:特征110开头 前24位网络ID 192-223
子网掩码

子网掩码是一个32位的地址,它是一种用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。

IP:172.16.0.100/16  转换为二进制
二进制IP:10101100.00010000.00000000.01100100
子网掩码:11111111.11111111.00000000.00000000
网络ID:10101100.00010000.00000000.00000000
网络ID转换为十进制:172.16.0.0

二进制转换一个不麻烦的小公式

1 0 0 0 0 0 0 0 = 128

1 1 0 0 0 0 0 0 = 192

1 1 1 0 0 0 0 0 = 224

1 1 1 1 0 0 0 0 = 240

1 1 1 1 1 0 0 0 = 248

1 1 1 1 1 1 0 0 = 252

1 1 1 1 1 1 1 0 = 254

1 1 1 1 1 1 1 1 = 255

以上是关于网络基础的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段14——Vue的axios网络请求封装

[vscode]--HTML代码片段(基础版,reactvuejquery)

[Go] 通过 17 个简短代码片段,切底弄懂 channel 基础

片段和活动之间的核心区别是啥?哪些代码可以写成片段?

VsCode 代码片段-提升研发效率

201555332盛照宗—网络对抗实验1—逆向与bof基础