【golang长途旅行第34站】网络编程

网络编程

基本介绍

  1. 核心主题:​​
    Golang面向大规模后端服务程序的设计目标中,网络通信是必不可少且至关重要的部分。

  2. ​两种网络编程方式:​​

​TCP Socket编程​
•性质:网络编程的主流
•底层协议:基于TCP/IP协议
•举例:QQ聊天

​B/S结构的HTTP编程​
•描述:浏览器访问服务器时使用的协议
•底层实现:基于TCP Socket
•范畴:属于Go Web开发
•举例:京东商城

基础知识

网线网卡
  1. 网线
    本质:网线是一根物理的线缆,是网络信号的物理传输介质
    作用:负责在设备(如电脑和路由器)之间稳定、高速地传输电信号或光信号。它决定了数据通行的“道路”质量
    常见类型:双绞线 光纤

  2. 网卡
    本质:网卡是一个硬件设备,是计算机连接网络的接口
    作用:

    1. 将计算机内部的数据(0和1)​转换成可以在网线上传输的电信号
    2. 接收来自网线(或天线)的信号,并将其转换回计算机能理解的数据
    3. ​​ 每个网卡都有一个全球唯一的物理地址,叫做 ​MAC地址

    常见类型:

    1. 有线网卡:提供RJ-45接口,用来插网线
    2. ​无线网卡 (Wireless NIC):​​ 带有天线,遵循Wi-Fi协议,用来接收和发送Wi-Fi信号。
    3. 虚拟网卡​:现代技术(如Docker、VPN)会创建虚拟网卡,其MAC地址是软件生成的。
TCP/IP协议

本质:TCP/IP不是一个单一协议,而是一个协议族​(一套规则集合),是互联网的通信标准和语言。
作用:它规定了数据如何打包、如何寻址、如何路由、如何确保安全可靠地到达,它规定了数据如何打包、如何寻址、如何路由、如何确保安全可靠地到达
TCP/IP将网络通信分为四层

  1. ​链路层(Link Layer):​​ 它包含物理层(网线、信号)和数据链路层(MAC地址、帧封装)。​网线、网卡​ 就在这一层工作,负责物理传输。

链路层从网络层接收来一个数据包。
它会在这个数据包的前后加上一个帧头和帧尾,把它包装成一个数据帧。
​帧头里最重要的信息就是:​源MAC地址​ 和 ​目标MAC地址。
​帧尾通常包含一个用于检查数据是否出错的校验码。

  1. ​网际层 (Internet Layer):​​ ​IP协议​ 在这一层工作,负责寻址和路由。还有 ​ICMP​(Ping命令)、ARP​(IP转MAC地址)等。

把数据包送到正确的“城市”(目标计算机)

  1. ​传输层 (Transport Layer):​​ ​TCP协议​ 在这一层工作,负责端到端的连接。

​确保数据包送到正确的“住户”(目标应用程序),并且确保“包裹”完整无误。

  1. ​应用层 (Application Layer):​​ 浏览器、微信等软件在这一层,使用HTTP、FTP等协议。

确认是从哪个app或者浏览器发出的

示例

假如A要给B发个信息

那么A的电脑的层级顺序是4->1。

先应用层,知道是哪个app或者浏览器发的
再传输层,确保数据传输对象准确性
之后网际层,给IP头,确认送达的地方
最后链路层,给上帧头帧尾

B电脑接收时的层级顺序则是1->4
反着来,逐步的拆解信息,找到对应的目标

MAC地址

MAC地址​ 是链路层的核心标识,但在跨网络通信(如互联网)中,IP地址才是最终寻址依据。MAC地址仅在同一局域网内有效(如家庭Wi-Fi或公司内网)。

IP

本质:Internet Protocol Address,互联网协议地址。它是设备的逻辑地址,用于在网络中定位和寻址。

格式:IPv4,IPv6

分类:
公网IP:全球唯一,可以直接在互联网上被访问。就像公司的公开地址。
私网IP:在局域网(如你家或公司的Wi-Fi)内使用,不能直接在互联网上被路由。

作用:寻址和路由。数据包在互联网上传输时,沿途的路由器会查看IP包头的目标IP地址

​NAT(网络地址转换)​​:私网IP(如192.168.1.100)通过路由器的NAT功能转换为公网IP访问互联网,这是解决IPv4地址短缺的关键技术。

特殊IP地址​:

  • 127.0.0.1(本地回环地址,用于测试本机服务)。
  • 169.254.x.x(当DHCP失败时自动分配的临时IP)。

可以通过ipconfig查找

端口

本质:端口不是物理硬件接口,而是操作系统中的一个16位的数字标识符​(范围0-65535)。它是网络通信的端点。

作用:区分应用程序。一台电脑可以同时运行很多网络程序。当数据到达电脑后,操作系统需要知道把这个数据交给哪个网络程序。端口号就是这个“交接暗号”。

分类:

  • 知名端口:​​ 0-1023。被预留给系统或著名的网络服务。
  • 80端口:​​ HTTP协议,用于浏览网
  • 443端口:​​ HTTPS协议,用于加密浏览网页
  • ​21端口:​​ FTP协议,用于文件传输
  • 25端口:​​ SMTP协议,用于发送邮件。
  • 注册端口:​​ 1024-49151。分配给用户安装的某些应用程序(如微软SQL数据库默认用1433)。
  • 动态/私有端口:​​ 49152-65535。通常留给客户端程序临时使用。当你用浏览器访问一个网站时,你的操作系统会随机分配一个这个范围内的端口给你这次的浏览器会话。

端口绑定冲突​:如果一个端口已被占用(如两个程序同时监听80端口),后启动的程序会报错 address already in use

​客户端端口​:客户端发起连接时,操作系统会动态分配一个临时端口(如49213),但目标端口通常是固定的(如HTTP的80)。

​端口与安全​:

  • 防火墙可以限制特定端口的访问(如只开放80/443)。
  • 恶意软件常利用高危端口(如22/SSH、3389/RDP)进行攻击。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/95063.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/95063.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hadoop(六)

目录:1.Hadoop概述2.为什么需要分布式存储3.分布式的基础架构分析4.HDFS的基础架构1.Hadoop概述2.为什么需要分布式存储3.分布式的基础架构分析4.HDFS的基础架构

Oracle 12g安装

1. 下载地址 官方网站 一般这种导向的进入的都是oracle的官方网站(先登录,如果没有就创建账号),并没有真实的12g供你下载。需要你转入Oracle的云中下载:https://edelivery.oracle.com/osdc/faces/SoftwareDelivery 。我选择的是12.1.0.2.0下…

ros2--service/服务--接口

获取service名称const char *get_service_name() const;std::string client_name client_->get_service_name();RCLCPP_INFO(this->get_logger(), "Client name: %s", client_name.c_str());

安卓开发---SimpleAdapter

概念&#xff1a;SimpleAdapter 是 Android 中比 ArrayAdapter 更强大的适配器&#xff0c;用于将复杂的数据绑定到复杂的布局&#xff0c;支持将 Map 中的数据映射到布局中的多个 View。方法签名&#xff1a;public SimpleAdapter( Context context, //上下文 List<? exte…

软考-系统架构设计师 办公自动化系统(OAS)详细讲解

个人博客&#xff1a;blogs.wurp.top 一、OAS的核心概念与演进 1. 什么是OAS&#xff1f; OAS是一个综合性的信息系统&#xff0c;它利用计算机技术、通信技术、系统科学和行为科学&#xff0c;为组织的日常办公事务、信息管理和协同工作提供支持。其本质是将传统办公流程电…

leetcode 155 官方golang标准答案错误

真是误人子弟&#xff0c;leetcode155题官网的golang答案是错误的。push方法的append操作&#xff0c;必然不能保证是o(1)的时间复杂度。就这还是官网的标准答案&#xff0c;就这水平&#xff0c;&#x1f604;leetcode误人子弟不是第一次了。光会刷算法&#xff0c;可惜水平还…

开源 python 应用 开发(十三)AI应用--百度智能云TTS语音合成

最近有个项目需要做视觉自动化处理的工具&#xff0c;最后选用的软件为python&#xff0c;刚好这个机会进行系统学习。短时间学习&#xff0c;需要快速开发&#xff0c;所以记录要点步骤&#xff0c;防止忘记。 链接&#xff1a; 开源 python 应用 开发&#xff08;一&#xf…

大白话说 AI 编程 Trae,小白进!

大家好&#xff0c;我是樱木。 一些小白用户&#xff0c;打开字节出的 AI 编程工具 Trae 时&#xff0c;可能觉得还是有点生疏&#xff0c;但是作为程序员&#xff0c;看到这样的界面分布&#xff0c;已经是在熟悉不过了&#xff0c;甚至心中窃喜&#xff0c;长得和 IDEA 等开…

主流国产数据库:文档完备性

官方文档通常是用户获取数据库产品相关信息最权威的渠道&#xff0c;文档的完备性&#xff08;准确、全面、易用&#xff09;直接影响着开发者的学习成本、项目实施的效率以及后期的运维便利性。 例如&#xff0c;Oracle 数据库的官方文档被广泛认为是行业的黄金标准&#xff…

现今流行的操作系统及其应用场景

2025 年主流操作系统及其应用场景&#xff0c;结合技术趋势与行业实践&#xff0c;涵盖从个人设备到关键基础设施的全场景覆盖&#xff1a;一、桌面与生产力领域1. Windows 11/12&#xff08;微软&#xff09;市场地位&#xff1a;全球桌面市场占比 71%&#xff0c;企业级场景市…

IP v 6

相关概念地址长度128bit&#xff0c;采用冒号划分为8段&#xff0c;并用16进制标识&#xff0c;其容量大到能为地球上的每一粒沙子分配一个地址&#xff0c;通常情况下其网络前缀为64位&#xff0c;接口标识为64位&#xff0c;依照写法可分为首选格式&#xff0c;即完整书写&am…

Elasticsearch冷热架构:性能与成本完美平衡

Elasticsearch 的冷热架构&#xff08;Hot-Warm-Cold Architecture&#xff09;是一种针对时序数据&#xff08;如日志、指标等&#xff09;的成本与性能优化方案&#xff0c;通过将数据在不同生命周期的存储需求分层处理&#xff0c;兼顾性能、容量和成本。其核心思想是&#…

【MFC自动生成的文件详解:YoloClassMFC.cpp 的逐行解释、作用及是否能删除】

大家好&#xff0c;欢迎来到我的MFC编程入门系列。上次我们聊了MFC项目创建后的核心文件区别&#xff08;项目名.cpp、.h、Dlg.cpp 和 Dlg.h&#xff09;&#xff0c;今天针对读者的反馈&#xff0c;专门来拆解其中最重要的一个文件&#xff1a;项目名.cpp&#xff08;这里以用…

玄机靶场 | 冰蝎3.0-jsp流量分析

文章目录一、冰蝎3.0流量特征二、索引三、题目列表步骤#1黑客IP是什么&#xff1f;步骤#2黑客上传的Webshell名是什么&#xff1f;步骤#3黑客上传WebShell的时间是多少&#xff1f;&#xff08;格式如&#xff1a;flag{YYYY-MM-DD HH:MM:SS}&#xff09;步骤#4木马的解密key是什…

基于物理信息神经网络(Physics-Informed Neural Network, PINN)的三维热传导方程求解器MATLAB

代码实现了一个基于物理信息神经网络&#xff08;Physics-Informed Neural Network, PINN&#xff09;的三维热传导方程求解器。以下是详细分析&#xff1a;&#x1f9e0; 一、主要功能 main.m&#xff1a; 构建一个全连接神经网络用于近似三维热传导方程的解 ( u(x, y, z, t) …

按钮计数器:jQuery / AngularJS / Vue / React / dagger.js 实现对比与技术解读

代码来源&#xff1a;https://codepen.io/dagger8224/pen/myeKgVQ 任务&#xff1a;实现“按钮点击 1”计数器&#xff0c;对比不同框架的写法与特性&#xff0c;并给出选型建议。 目录 代码解读&#xff08;逐框架&#xff09; jQuery&#xff08;命令式 DOM&#xff09;Angu…

useEffect中直接使用 await报错

在 useEffect 中直接使用 await 会报错&#xff0c;因为 useEffect 的回调函数不能是 async 函数。有几种正确的方式来处理异步操作&#xff1a; 方法一&#xff1a;在 useEffect 内部创建 async 函数并立即调用 这是最常用的方式。 import React, { useEffect } from react;co…

卷积神经网络为什么要填充(Padding)

填充&#xff08;Padding&#xff09;是卷积神经网络中一个至关重要且巧妙的设计。它的核心目的可以概括为&#xff1a;为了解决卷积操作导致的特征图尺寸缩小和边缘信息丢失问题。

C++ 并发编程:全面解析主流锁管理类

在 C 的并发世界里&#xff0c;管理共享资源就像是在一个繁忙的十字路口指挥交通。如果指挥不当&#xff0c;就会发生混乱甚至致命的“死锁”。C 标准库提供的各种锁管理工具&#xff0c;就是我们手中的“交通信号灯”&#xff0c;它们各自拥有独特的职能&#xff0c;帮助我们编…

Spring boot 启用第二数据源

1. 数据源配置代码&#xff1a;import com.alibaba.druid.pool.DruidDataSource; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilde…