type
status
date
slug
summary
tags
category
icon
password
AI summary

互联网协议介绍


什么是互联网协议(Internet Protocol)

互联网协议是一组规则和标准,用于在计算机网络中实现数据的可靠传输。这些协议定义了设备如何通信、数据如何被分组和传输,以及如何处理可能的错误。
互联网协议层次划分遵循 TCP/IP 模型OSI 模型,分别由 4 层和 7 层组成。
notion image

TCP/IP 协议栈

TCP/IP 协议栈是互联网中最常用的协议模型,分为以下 4 层:

应用层

  • 功能:提供用户接口和通信服务。
  • 常见协议
    • HTTP/HTTPS:用于 Web 浏览。
    • SMTP/POP3/IMAP:用于电子邮件通信。
    • FTP/SFTP:用于文件传输。

传输层

  • 功能:提供端到端的通信服务,确保数据可靠传输。
  • 常见协议
    • TCP(传输控制协议)
      • 面向连接,提供可靠传输。
      • 使用三次握手建立连接。
      • 数据校验和重传机制。
    • UDP(用户数据报协议)
      • 面向无连接,速度快但不保证可靠性。
      • 常用于视频流、在线游戏等。

网络层

  • 功能:负责数据包的寻址和路由。
  • 核心协议
    • IP(互联网协议)
      • 定义数据包的源地址和目的地址。
      • IPv4:32 位地址,当前仍广泛使用。
      • IPv6:128 位地址,解决 IPv4 地址不足问题。
    • ICMP(互联网控制报文协议):用于诊断网络问题。
    • ARP(地址解析协议):将 IP 地址转换为 MAC 地址。

网络接口层(数据链路层和物理层)

  • 功能:定义硬件设备如何发送和接收数据。
  • 协议和技术
    • Ethernet(以太网):常见的局域网标准。
    • PPP(点对点协议):用于拨号连接。

常见互联网协议详解

HTTP/HTTPS

  • HTTP(超文本传输协议):无状态协议,用于在 Web 浏览器和服务器之间传输数据。
  • HTTPS:在 HTTP 的基础上增加了 SSL/TLS 加密,保证数据的安全性。

DNS(域名系统)

  • 功能:将人类可读的域名(如 www.example.com)解析为 IP 地址。
  • 过程
    • 客户端向 DNS 服务器发送查询请求。
    • DNS 服务器返回对应的 IP 地址。

FTP(文件传输协议)

  • 功能:用于在客户端和服务器之间传输文件。
  • 模式
    • 主动模式(Active Mode):客户端监听,服务器主动连接。
    • 被动模式(Passive Mode):服务器监听,客户端主动连接。

SMTP/POP3/IMAP

  • SMTP(简单邮件传输协议):用于发送电子邮件。
  • POP3(邮局协议 3):下载邮件到本地,不支持同步。
  • IMAP(互联网消息访问协议):支持在线访问邮件,支持同步。

IPv4 与 IPv6 的区别

特性
IPv4
IPv6
地址长度
32 位
128 位
地址数量
约 42 亿个
几乎无限
表示形式
点分十进制(192.168.1.1)
冒号十六进制(fe80::1)
网络配置
手动或使用 DHCP
自动配置
安全性
无内置加密
支持 IPsec 加密

网络诊断工具

Ping

  • 功能:检查主机是否可达,基于 ICMP。
  • 使用示例

    1. 网络编程概念

    Go语言基于完善的网络支持,提供了简单而优雅的网络编程方式。它内置的 netnet/http 包充分满足了下载、上传和构建网络服务器的需求。

    2. TCP 通信

    TCP (传输控制协议)是面向连接的网络协议,通过于点之间实现紧密且可靠的数据传输。

    2.1 TCP 服务器实现

    示例构建一个基于 TCP 的服务器

    2.2 TCP 客户端实现

    示例构建一个基于 TCP 的客户端

    2.3 TCP 黏包

    黏包示例
    服务端代码
    客户端代码如下
    先启动服务端再启动客户端,可以看到服务端输出结果如下:

    为什么会出现粘包

    主要原因就是tcp数据传递模式是流模式,在保持长连接的时候可以进行多次的收和发。“粘包"可发生在发送端也可发生在接收端:
    1. 由Nagle算法造成的发送端的粘包:Nagle算法是一种改善网络传输效率的算法。简单来说就是当我们提交一段数据给TCP发送时,TCP并不立刻发送此段数据,而是等待一小段时间看看在等待期间是否还有要发送的数据,若有则会一次把这两段数据发送出去。
    1. 接收端接收不及时造成的接收端粘包:TCP会把接收到的数据存在自己的缓冲区中,然后通知应用层取数据。当应用层由于某些原因不能及时的把TCP的数据取出来,就会造成TCP缓冲区中存放了几段数据。

    解决办法

    出现"粘包"的关键在于接收方不确定将要传输的数据包的大小,因此我们可以对数据包进行封包和拆包的操作。
    封包:封包就是给一段数据加上包头,这样一来数据包就分为包头和包体两部分内容了(过滤非法包时封包会加入"包尾"内容)。包头部分的长度是固定的,并且它存储了包体的长度,根据包头长度固定以及包头中含有包体长度的变量就能正确的拆分出一个完整的数据包。
    我们可以自己定义一个协议,比如数据包的前4个字节为包头,里面存储的是发送的数据的长度。
    服务端代码
    客户端代码

    3. HTTP 服务器

    HTTP 是应用层协议,Go 提供了完善的 net/http 包,可以实现快速构建 HTTP 服务器和客户端。

    3.1 HTTP 服务器实现

    示例构建一个基于 HTTP 的服务器

    3.2 HTTP 客户端实现

    示例构建一个 HTTP 客户端进行 GET 请求

    4. UDP 通信

    UDP (用户数据协议)是一种无连接的协议,适合于需要高效率而不越量请求可靠性的场景。

    4.1 UDP 服务器实现

    示例构建一个 UDP 服务器

    4.1 UDP 客户端

    示例客户端代码
     
    泛型并发