• 网络编程基础知识


    1、网络概念

    先有计算机还是先有网络呢?

    答案是先有计算机,为了数据研究和沟通的需求产生的网络,网络的产生是为了提升效率的。

    那什么是网络呢?

    网络指的是网络协议栈,它是一个软件属于操作系统的一部分,贯穿整个体系结构。如图:
    在这里插入图片描述
    独立模式: 计算机之间相互独立;
    局域网LAN: 计算机数量更多了, 通过交换机和路由器连接在一起;
    在这里插入图片描述

    广域网WAN: 将远隔千里的计算机都连在一起;
    在这里插入图片描述

    2、协议

    所谓计算机协议,本质就是约定,约定是由编码程序员自己根据标准文档,或者自己喜好定的协议。

    计算机之间的传输媒介是光信号和电信号. 通过 “频率” 和 “强弱” 来表示 0 和 1 这样的信息. 要想传递各种不同的信息, 就需要约定好双方的数据格式.

    3、网络分层

    OSI七层模型

    • OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范;
    • 把网络从逻辑上分为了7层. 每一层都有相关、相对应的物理设备,比如路由器,交换机;
    • OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输;
    • 它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整. 通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯;
      但是, 它既复杂又不实用; 所以我重点看下TCP/IP四层模型;
      下面找了张图看下七层分别的功能:
      在这里插入图片描述

    TCP/IP五层(或四层)模型

    • 物理层: 负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层.
    • 数据链路层: 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层.
    • 网络层: 负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层.
    • 传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机.
    • 应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等. 我们的网络编程主要就是针对应用层

    分层的好处

    • 各层独立(某一层不需要知道下一层如何实现)
    • 灵活性好(一层发生变化,保持接口关系不变这层以上或以下均不受影响)
    • 结构上可以分割开,易于实现和维护,能促进标准化工作

    4、网络传输流程

    两台计算机通过TCP/IP协议通讯的过程如下:
    在这里插入图片描述

    数据包封装和分用

    • 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在链路层叫做帧(frame).
    • 应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation)。
    • 首部信息中包含了一些类似于首部有多长, 载荷(payload)有多长, 上层协议是什么等信息.
    • 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部, 根据首部中的 “上层协议字段” 将数据交给对应的上层协议处理。

    什么是报头?

    为什么要有报头? 因为需要报头中的数据,来指导当前层进行某种协议决策。

    • 从生活角度来理解: 像我们平时寄快递快递盒子上面都会有快递单(格式 + 数据),快递单就是为了确定改快递如何派发。
    • 从OS角度理解:报头就是一种结构化的数据。

    几乎每一层的报头中都要包含两种字段。

    • 当前报文的有效载荷要交付给上层的那个协议。
    • 明确报头和有效载荷的边界。

    跨网段的主机的文件传输. 数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器.

    在这里插入图片描述

    认识IP地址

    • IP地址是在IP协议中, 用来标识网络中不同主机的地址;
    • 对于IPv4来说, IP地址是一个4字节, 32位的整数;
    • 我们通常也使用 “点分十进制” 的字符串表示IP地址, 例如 192.168.0.1 ; 用点分割的每一个数字表示一个字节, 范围是 0 - 255;
    • IP地址(公网IP)唯一的标识互联网中的主机。

    如何理解源IP和目的IP?
    表示发送端和接收端,对于一个报文来讲,代表的就是从哪里来到哪里去。
    最大意义:指导一个报文如何进行路径选择。
    目的IP:下一跳设备(mac地址的变化)。

    认识MAC地址

    • MAC地址用来识别数据链路层中相连的节点;
    • 长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
    • 在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡支持用户配置mac地址)

    5、端口号

    端口号用来标识一台机器上唯一 一个进程;

    • 端口号(port)是传输层协议的内容;
    • 端口号是一个2字节16位的整数;
    • 端口号用来标识一个进程, 告诉操作系统, 当前的这个数据要交给哪一个进程来处理;
    • IP地址 + 端口号能够标识互联网中唯一的一个进程;
    • 一个进程可以绑定多个端口号,但是一个端口号不能被多个进程绑定;

    传输层协议(TCP和UDP)的数据段中有两个端口号, 分别叫做源端口号和目的端口号. 就是在描述 “数据是谁发的, 要发给谁”;

    端口号划分

    • 0 - 1023: 知名端口号, HTTP, FTP, SSH等这些广为使用的应用层协议, 他们的端口号都是固定的.
    • 1024 - 65535: 操作系统动态分配的端口号. 客户端程序的端口号, 就是由操作系统从这个范围分配的

    知名端口号

    • ssh服务器, 使用22端口
    • ftp服务器, 使用21端口
    • telnet服务器, 使用23端口
    • http服务器, 使用80端口
    • https服务器, 使用443

    执行下面的命令, 可以看到知名端口号 cat /etc/services

    我们自己写一个程序使用端口号时, 要避开这些知名端口号。

    netstat

    netstat是一个用来查看网络状态的重要工具
    在TCP/IP协议中, 用 “源IP”, “源端口号”, “目的IP”, “目的端口号”, “协议号” 这样一个五元组来标识一个通信(可以通过netstat -n查看);

    语法:netstat [选项] (常用组合-nltp)
    功能:查看网络状态
    常用选项:

    • n 拒绝显示别名,能显示数字的全部转化成数字
    • l 仅列出有在 Listen (监听) 的服務状态
    • p 显示建立相关链接的程序名
    • t (tcp)仅显示tcp相关选项
    • u (udp)仅显示udp相关选项
    • a (all)显示所有选项,默认不显示LISTEN相关
  • 相关阅读:
    借助reCAPTCHA实现JavaScript验证码功能
    详细介绍Webpack5中的Plugin
    xss过waf的小姿势
    SpringBoot中常用注解的含义
    私有云OpenStack保姆级教学
    编码规约对于多线程的使用解读
    Linux 基础IO(2)磁盘文件
    【元宇宙欧米说】元宇宙场景应用和营销新模式
    java-php-python-ssm基于学科竞赛管理系统计算机毕业设计
    阿里云物联网平台之极速体验
  • 原文地址:https://blog.csdn.net/C_Trip/article/details/127954058