热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【网络协议突击指南01】前言和网络基础知识

恶补前的疑问作为技术人员,平时是会经常接触网络的,也常会听到一些诸如:TCP、UDP、IP、MAC之类的词(这些常用的肯定是知道大概意思的)我是非科班出身,没有系统学习过计算机网络

恶补前的疑问

作为技术人员,平时是会经常接触网络的,也常会听到一些诸如:TCP、UDP、IP、MAC之类的词(这些常用的肯定是知道大概意思的)

我是非科班出身,没有系统学习过计算机网络组成或者原理,在认识上很难对这些松散的知识有整体的一个认识。因此时常处于"知其然不知其所以然"的状态。

于是便将自己想的一些问题罗列出来作为恶补知识的目标,以上便是前言

下面列出关心的问题【可能会有一些想当然的问题,不过没关系,我会继续学】


0、网络的构成

网络是怎么构成的?为什么通过几个协议就可以定义网络?


1、什么是网络协议?

网络协议的定义?网络协议在网络的构建中的角色是什么?


2、网络协议分类和作用

网络协议分为哪些?分别对应于七层模型的哪些层?具体的作用是什么?


3、网络协议与网络流量的关系

不同网络协议对于网络流量的影响是只体现在比如数据段的构成不同上吗?还是干脆整个数据包的结构都有区别?

这些是我目前想知道的关于网络协议的问题,之后会回来解答

总的来说,恶补是基于《图解http 第五版》进行的,每个章节的内容会以总结和讨论的方式记录,其中也会有对于网上一些优秀解答的引用(我会标注),那么开始吧


第一章 网络基础知识


网络是如何出现的?

这与计算机的发展密不可分。总结为以下阶段

批处理时代---单机使用,设备昂贵;
分时系统时代---多个终端同时连一台计算机,一机可供多人使用;(计算机之间虽然也连接,但无法通信)
计算机间通信---计算机之间通过通信线路连接实现数据交换;
计算机网络---通过路由器等设施构建的计算机之间的通信网;
互联网---不同厂商的计算机之间建立的一个成本更低的网络环境;
IP(Internet Protocol)网---以协议为支撑的网络,取代过去由电话网支持的通信网络;

什么是协议?

先说在前,TCP/IP指的是一种网络体系结构(协议集合),其中包含着许多种类的协议

TCP/IP包含:

IP,ICMP,TCP,UDP,HTTP,TELNET,SNMP,SMTP...

因此,我之前会想:“是先学TCP/IP还是先学HTTP”这种想法就是多余的了,因为TCP/IP包含有HTTP。

回到正题,什么是协议


感性理解

《图解TCP/IP》中所举的例子就很形象

协议可以理解为我们使用的语言,不同的人说不同的语言,但只有说相同语言的人才能进行沟通。(可以理解为通信)

但这只是一个有助于理解的例子,实际情况还是有不同的。

人类在使用语言交流时,可以借助表情、语气等修正自己所要表达的语义。显然计算机没有达到这种智能程度。

因此,计算机中的协议必须是充分考虑通信过程中可能遇到的各种异常之后再制定的。因此遵循相同协议的计算机之间自然可以进行通信。


分组交换协议

分组交换指将大数据分割为一个一个的小块,称为包(Packet),分组交换就是将大数据分装在多个包中交给对方的过程

image-20221105170415493


协议的标准化

为了统一不同厂商间所使用的协议,简化通信成本

【严格定义:标准化是指不同厂商所生产的易购产品之间具有兼容性以及便于使用的规范化过程】

ISO指定了国际标准OSI(开放式通信系统互联参考模型)

很不幸,OSI作为一个标准,其中的很多协议至今都没有普及,但是作为OSI指导方针的OSI参考模型(七层模型),却常被用于制定网络协议

OSI协议和OSI参考模型不是一回事


协议分层

OSI参考模型将通信协议中的必要功能分成7层以简化一些复杂的网络协议。

每个分层都接受由它下一层提供的特定服务,并负责为自己的上一层提供特定服务。

上下层之间进行交互时所遵循的约定称为"接口";

同一层之间的交互所遵循的约定叫"协议";

image-20221105192933076

还是用之前"对话语言"的例子拓展一下

若A、B两人使用同种语言交流通过电话交流,表面上看他们是直接对话,但实际上A与B都只是通过电话机的听筒听取声音,都是对着麦克风说话。

在这个场景中,他们使用的语言协议作为麦克风的音频输入,在通信设备层被转换为电信号传出去。传到对方的电话机后,又被通信设备层转换为音频输出。A与B实际上是利用电话机之间的"音频转化声音"接口实现的对话

上述过程中,

双方使用的"电话机"的协议不同,会影响通话;

若双方同时更换"电话机"为"无线电",不会影响通信;(只需学会无线电方法即可)

若双方同时更换语言为"英语",不会影响通信;(电话机不会受"语言层"的影响)

感受一下协议分层的特点


OSI参考模型中各个分层的作用

============================================
7.应用层
针对特定应用的协议【例如电子邮件、文件传输等】
============================================
6.表示层
设备固有数据格式和网络标准数据格式的转换
【接收文字流、图像、声音等】
实际应用中用于保证异构机型之间的数据一致性
例如:从网易邮箱发往QQ邮箱的数据,在表示层中转换为各自软件的专属数据格式,而在表示层之下则使用统一的网络数据格式进行传输
============================================
5.会话层
通信管理。负责建立和断开通信连接,是数据流动的逻辑通路。管理传输层以下的分层【何时建立\断开连接,连多久】
还是用发邮件举例,该层决定邮件应该怎么发,在其收到的数据前端附加首部或标签信息,这些部分记录着数据传送顺序的信息
============================================
===========以下层负责具体数据的传输=============
4.传输层
管理两个节点(互联的网络终端设备)之间的数据传输,负责传输的可靠性,确保数据传送至目的地
【判断数据是否有丢失】
若传输过程中出现异常导致目的机器未收到数据,目的机器会再次询问发送方,发送方会将剩余部分重新发送并再次确认是否送达。
=================↑=协作=↓===================
3.网络层
地址管理和路由选择【选择经过哪个路由传递到目标地址】
实际将数据从A送到B
============================================
2.数据链路层
互联设备之间传送和识别数据帧【数据帧与比特流(如0101)之间的转换,数->比->数】

通过传输介质互联的设备,进行数据处理
============================================
1.物理层
以0、1代表高低电平和灯光的亮灭,界定连接器和网线的规格【比特流与电子信号(模拟信号)之间的切换,比->电->比】
直连设备之间采用地址实现传输,这种地址称为MAC地址,目的是为了识别连接到同一个传输介质上的设备。

补充知识:路由

https://zhuanlan.zhihu.com/p/149243461

路由是指路由器从一个接口上收到数据包,根据数据包的目的地址进行定向并转发到另一个接口的过程。

image-20221107100355842

问题:一台计算机在收发信息时会独占线路,其他计算机只能等待。


分组交换

image-20221107100445159

分组交换机(路由器,也叫3层交换机)负责连接通信线路

发送端计算机将数据分组发送给路由器,路由器接收到分组数据并缓存后发送给目标。顺序是先进先出

image-20221107100516414

问题:由于线路中传输速度的不同,可能出现拥堵、阻塞甚至分组数据丢失的情况



推荐阅读
  • 本文探讨了如何通过Service Locator模式来简化和优化在B/S架构中的服务命名访问,特别是对于需要频繁访问的服务,如JNDI和XMLNS。该模式通过缓存机制减少了重复查找的成本,并提供了对多种服务的统一访问接口。 ... [详细]
  • 函子(Functor)是函数式编程中的一个重要概念,它不仅是一个特殊的容器,还提供了一种优雅的方式来处理值和函数。本文将详细介绍函子的基本概念及其在函数式编程中的应用,包括如何通过函子控制副作用、处理异常以及进行异步操作。 ... [详细]
  • 在使用 Nginx 作为服务器时,发现 Chrome 能正确从缓存中读取 CSS 和 JS 文件,而 Firefox 却无法有效利用缓存,导致加载速度显著变慢。 ... [详细]
  • CSS Border 属性:solid 边框的使用详解
    本文详细介绍了如何在CSS中使用solid边框属性,包括其基本语法、应用场景及高级技巧,适合初学者和进阶用户参考。 ... [详细]
  • 问题描述现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能;在实际开发过程中 ... [详细]
  • 本文详细探讨了在使用 Python 的 pip 工具安装包时遇到的 ReadTimeoutError 错误,并提供了有效的解决方案。 ... [详细]
  • Requests库的基本使用方法
    本文介绍了Python中Requests库的基础用法,包括如何安装、GET和POST请求的实现、如何处理Cookies和Headers,以及如何解析JSON响应。相比urllib库,Requests库提供了更为简洁高效的接口来处理HTTP请求。 ... [详细]
  • 入门指南:使用FastRPC技术连接Qualcomm Hexagon DSP
    本文旨在为初学者提供关于如何使用FastRPC技术连接Qualcomm Hexagon DSP的基础知识。FastRPC技术允许开发者在本地客户端实现远程调用,从而简化Hexagon DSP的开发和调试过程。 ... [详细]
  • Web动态服务器Python基本实现
    Web动态服务器Python基本实现 ... [详细]
  • 本文详细介绍了如何正确设置Shadowsocks公共代理,包括调整超时设置、检查系统限制、防止滥用及遵守DMCA法规等关键步骤。 ... [详细]
  • 本文介绍了在Linux环境下如何有效返回命令行状态、上一级目录及快速查找头文件和函数定义的方法。包括处理长时间运行命令、编辑器退出技巧、目录导航以及文件搜索策略。 ... [详细]
  • 利用 Calcurse 在 Linux 终端高效管理日程与任务
    对于喜爱使用 Linux 终端进行日常操作的系统管理员来说,Calcurse 提供了一种强大的方式来管理日程安排、待办事项及会议。本文将详细介绍如何在 Linux 上安装和使用 Calcurse,帮助用户更有效地组织工作。 ... [详细]
  • 本文介绍了如何通过命令行有效地终止所有 Node.js 进程实例,以解决因端口冲突或其他服务冲突导致的问题。 ... [详细]
  • 问题场景用Java进行web开发过程当中,当遇到很多很多个字段的实体时,最苦恼的莫过于编辑字段的查看和修改界面,发现2个页面存在很多重复信息,能不能写一遍?有没有轮子用都不如自己造。解决方式笔者根据自 ... [详细]
  • 回顾两年前春节期间的一个个人项目,该项目原本计划参加竞赛,但最终作为练习项目完成。独自完成了从编码到UI设计的全部工作,尽管代码量不大,但仍有一定的参考价值。本文将详细介绍该项目的背景、功能及技术实现。 ... [详细]
author-avatar
小梅LMY
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有