当前位置: 首页 > news >正文

网络编程基础知识

文章目录

  • 1、网络概念
  • 2、协议
  • 3、网络分层
  • 4、网络传输流程
  • 5、端口号

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相关

相关文章:

  • 【用户画像】应用场景
  • 表白墙(前端+后端+数据库)
  • AI 预测世界杯比赛结果,惊掉下巴
  • 一个完整的项目流程
  • 嵌入式学习笔记(1)基本知识、C语言常用关键字、OLED
  • 用Python采集球员信息,成功预测到了球赛胜负?
  • OpenCV图像处理——(实战)答题卡识别试卷
  • 2022亚太数学杯数学建模竞赛A题(思路分析......)
  • 为了提前预测比赛结果,于是我用Python获取比赛球员数据进行分析,结果...
  • 机器学习之特征提取
  • 第 46 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(南京),签到题5题
  • 线代——求逆矩阵的快捷方法
  • 分布式存储之 etcd 的集群管理
  • std::unique_ptr(基础和仿写)
  • UG旋钮盖模具设计与加工
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • CAP理论的例子讲解
  • MySQL数据库运维之数据恢复
  • Python连接Oracle
  • Redash本地开发环境搭建
  • Sass 快速入门教程
  • select2 取值 遍历 设置默认值
  • vagrant 添加本地 box 安装 laravel homestead
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 从零搭建Koa2 Server
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 对JS继承的一点思考
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 三分钟教你同步 Visual Studio Code 设置
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 用Visual Studio开发以太坊智能合约
  • 说说我为什么看好Spring Cloud Alibaba
  • ​决定德拉瓦州地区版图的关键历史事件
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #WEB前端(HTML属性)
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • $.ajax()方法详解
  • (12)Hive调优——count distinct去重优化
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (八)Spring源码解析:Spring MVC
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (接口自动化)Python3操作MySQL数据库
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (一)认识微服务
  • (译)计算距离、方位和更多经纬度之间的点
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • .NET 动态调用WebService + WSE + UsernameToken
  • .NET 依赖注入和配置系统
  • .NET下ASPX编程的几个小问题