29_互联网(The Internet)(IP数据包;UDP;TCP;DNS;OSI)
上篇介绍了计算机网络的基础知识,也提到互联网(The Internet),本篇将会详细介绍互联网(The Internet)
。
文章目录
- 1. 互联网(The Internet)组成及数据包传输过程
- 2. IP 数据包的不足
- 3. UDP(User Datagram Protocol)
- 4.TCP(Transmission Control Protocol)
- 5. DNS(Domain Name System)
- 6. OSI Model
1. 互联网(The Internet)组成及数据包传输过程
上篇介绍了你的计算机和一个巨大的分布式网络连在一起,这个网络叫互联网。
互联网由无数互联设备组成,而且日益增多,计算机为了获取视频首先要连到局域网,也叫 LAN(local area network)
,你家 WIFI 路由器连着的所有设备,组成了局域网,局域网再连到广域网,广域网也叫 WAN(Wide Area Network)
。
WAN 的路由器一般属于你的"互联网服务提供商",简称 ISP(Internet Service Provider),比如 Comcast,AT&T 和 Verizon 这样的公司。
广域网里,先连到一个区域性路由器,这路由器可能覆盖一个街区,然后连到一个更大的 WAN,可能覆盖整个城市,可能再跳几次,但最终会到达互联网主干。互联网主干由一群超大型、带宽超高路由器组成,
为了从 YouTube 获得这个视频,数据包(packet)要先到互联网主干,沿着主干到达有对应视频文件的 YouTube 服务器,数据包从你的计算机跳到 Youtube 服务器,可能要跳个10次,先跳4次到互联网主干,2次穿过主干,主干出来可能再跳4次,然后到 Youtube 服务器。
如果你在用 Windows, Mac OS 或 Linux系统,可以用 traceroute 来看跳了几次,更多详情看视频描述(YouTube原视频下)。
我们在"印第安纳波利斯"的 Chad&Stacy Emigholz 工作室,访问加州的 DFTBA 服务器,经历了11次中转,从 192.168.0.1 出发,这是我的电脑在 局域网(LAN)里的 IP 地址,然后到工作室的 WIFI 路由器,然后穿过一个个地区路由器,到达主干。然后从主干出来,又跳了几次,到达"DFTBA.com”的服务器,IP 地址是 104.24.109.186。过程可参考下图:
注:如何查询访问的网页的服务器地址-百度一下即可,这是我利用百度到的方法访问到的百度网站服务器地址
可以看到百度服务器的IP地址,其对应的端口号为80,输入浏览器中就可以连接到百度服务器了
但数据包到底是怎么过去的?如果传输时数据包被弄丢了,会发生什么?如果在浏览器里输 “DFTBA.com”,浏览器怎么知道服务器的地址多少?本篇将会讨论这些话题
2. IP 数据包的不足
上篇介绍过,互联网是一个巨型分布式网络会把数据拆成一个个数据包来传输,如果要发的数据很大,比如邮件附件数据会被拆成多个小数据包。例如,网页上所看到的视频就是一个个到达你电脑的数据包,而不是一整个大文件发过来。
数据包(packet)
想在互联网上传输要符合"互联网协议(Internet Protocol)"
的标准,简称 IP。
就像邮寄手写信一样,邮寄是有标准的,每封信需要一个地址,而且地址必须是独特的,并且大小和重量是有限制的,违反这些规定,信件就无法送达。
IP 数据包也是如此,因为 IP 是一个非常底层的协议,数据包的头部(或者说前面)只有目标地址
,头部存 "关于数据的数据"也叫元数据(meta data)
。
这意味着当数据包到达对方电脑对方不知道把包交给哪个程序,是交给 Skype 还是使命召唤?因此需要在 IP 之上,开发更高级的协议。
3. UDP(User Datagram Protocol)
这些协议里最简单最常见的叫"用户数据报协议",简称 UDP(User Datagram Protocol)
。
UDP 也有自己的头部,这个头部位于数据前面,头部里包含有用的信息,信息之一是端口号,每个想访问网络的程序都要向操作系统申请一个端口号。比如 Skype 会申请端口 3478,当一个数据包到达时接收方的操作系统会读 UDP 头部,读里面的端口号,如果看到端口号是 3478,就把数据包交给 Skype。
总结:IP 负责把数据包送到正确的计算机UDP 负责把数据包送到正确的程序
UDP 头部里还有"校验和"
,用于检查数据是否正确,正如"校验和"这个名字所暗示的检查方式是把数据求和来对比。
以下是个简单例子:
假设 UDP 数据包里原始数据是 89 111 33 32 58 41
,在发送数据包前电脑会把所有数据加在一起,算出"校验和",89+111+33+...
以此类推,得到 364
,这就是"校验和"。
UDP 中,"校验和"以 16 位形式存储 (就是16个0或1),如果算出来的和,超过了 16 位能表示的最大值高位数会被扔掉,保留低位,当接收方电脑收到这个数据包,它会重复这个步骤把所有数据加在一起,89+111+33...
以此类推,如果结果和头部中的校验和一致代表一切正常
;
如果不一致,数据肯定坏掉了,也许传输时碰到了功率波动,或电缆出故障了。
不幸的是,UDP 不提供数据修复或数据重发的机制,接收方知道数据损坏后,一般只是扔掉。而且,UDP 无法得知数据包是否到达,发送方发了之后,无法知道数据包是否到达目的地,这些特性听起来很糟糕,但是有些程序不在意这些问题,因为 UDP 又简单又快。
拿 Skype 举例:它用 UDP 来做视频通话,能处理坏数据或缺失数据,所以网速慢的时候 Skype 卡卡的,这是因为只有一部分数据包到了你的电脑,但对于其他一些数据,这个方法不适用。比如发邮件,邮件不能只有开头和结尾 没有中间,邮件要完整到达收件方,如果"所有数据必须到达"就用"传输控制协议",简称 TCP(Transmission Control Protocol)
。
4.TCP(Transmission Control Protocol)
TCP 和 UDP 一样,头部也在存数据的前面
,因此,人们叫这个组合 TCP/IP。
就像 UDP ,TCP 头部也有"端口号"和"校验和",但 TCP 有更高级的功能,我们这里只介绍重要的几个:
- TCP 数据包有序号:15号之后是16号,16号之后是17号,以此类推发上百万个数据包也是有可能的。序号使接收方可以把数据包排成正确顺序,即使到达时间不同,哪怕到达顺序是乱的,TCP 协议也能把顺序排对。
以下即为该过程的示意图:
- TCP 要求接收方的电脑收到数据包并且"校验和"检查无误后(数据没有损坏)给发送方发一个
确认码(acknowledgement,ACK)
,代表收到了。
“确认码” 简称 ACK得知上一个数据包成功抵达后,发送方会发下一个数据包,假设这次发出去之后,没收到确认码那么肯定哪里错了,如果过了一定时间还没收到确认码发送方会再发一次。
过程示意图如下:
注意:数据包可能的确到了,只是确认码延误了很久,或传输中丢失了,但这不碍事 因为收件方有序列号,如果收到重复的数据包就删掉。
- TCP 不是只能一个包一个包发, 可以同时发多个数据包,收多个确认码这大大增加了效率,不用浪费时间等确认码。
- 有趣的是,确认码的成功率和来回时间可以推测网络的拥堵程度,TCP 用这个信息,调整同时发包数量,解决拥堵问题。
简单说:TCP 可以处理乱序和丢失数据包,丢了就重发,还可以根据拥挤情况自动调整传输率
你可能会奇怪,既然 TCP 那么厉害,还有人用 UDP 吗?
TCP 最大的缺点是那些"确认码"数据包把数量翻了一倍,但并没有传输更多信息,有时候这种代价是不值得的特别是对时间要求很高的程序,比如在线射击游戏,如果你玩游戏很卡,你也会觉得这样不值!
5. DNS(Domain Name System)
当计算机访问一个网站时需要两个东西:1.IP地址 2.端口号
例如 172.217.7.238 的 80 端口这是谷歌的 IP 地址和端口号。
事实上,你可以输到浏览器里,然后你会进入谷歌首页,有了这两个东西就能访问正确的网站但记一长串数字很讨厌,google.com 比一长串数字好记,所以互联网有个特殊服务负责把域名和 IP 地址一一对应,就像专为互联网的电话簿它叫"域名系统",简称 DNS(Domain Name System)
。
它的运作原理你可能猜到了,一般 DNS 服务器是互联网供应商提供的,DNS 会查表,如果域名存在,就返回对应 IP 地址。如果你乱敲键盘加个.com 然后按回车,你很可能会看到 DNS 错误,因为那个网站不存在,所以 DNS 无法返回给你一个地址。如果你输的是有效地址,比如 youtube.com,DNS 按理会返回一个地址,然后浏览器会给这个 IP 地址发 TCP 请求。
发送youtube.com
DNS返回一个地址,然后浏览器会给这个 IP 地址发 TCP 请求
输入一个错误的网址后:
如今有三千万个注册域名,所以为了更好管理,DNS 不是存成一个超长超长的列表,而是存成树状结构。顶级域名(Top Level Domains,简称 TLD)在最顶部,比如 .com
和 .gov
,下一层是二级域名,比如 .com 下面有google.com 和 dftba.com,再下一层叫子域名,比如 images.google.com, store.dftba.com,再下一层叫子域名,比如 images.google.com, store.dftba.com,这个树超!级!大!
前面说的"三千万个域名"只是二级域名不是所有子域名,因此,这些数据散布在很多 DNS 服务器上,不同服务器负责树的不同部分。
6. OSI Model
好了 我知道你肯定在等这个:我们到了一层新抽象!
前面介绍了线路里的电信号,以及无线网络里的无线信号,这些叫"物理层(Physical Layer)"
,而"数据链路层(Data Link Layer)"
负责操控"物理层"。
数据链路层有: 媒体访问控制地址(MAC),碰撞检测,指数退避,以及其他一些底层协议
再上一层是"网络层(Network Layer)"
,负责各种报文交换和路由。
本篇我们讲了"传输层(Transport layer)"
里一大部分, 比如 UDP 和 TCP 这些协议,负责在计算机之间进行点到点的传输,而且还会检测和修复错误。
我们还讲了一点点"会话层(Session Layer)"
,"会话层"会使用 TCP 和 UDP 来创建连接,传递信息,然后关掉连接,这一整套叫"会话(session)"
。
查询 DNS 或看网页时,就会发生这一套流程,这是 开放式系统互联通信参考模型(OSI,Open System Interconnection) 的底下5层。这个概念性框架 把网络通信划分成多层,每一层处理各自的问题,如果不分层直接从上到下捏在一起实现网络通信,是完全不可能的,抽象使得科学家和工程师能分工同时改进多个层不被整体复杂度难倒。
而且惊人的是!我们还没讲完呢!OSI 模型还有两层,“表示层"和"应用程序层”,其中有浏览器、Skype、HTML解码、在线看电影等。下篇再进行介绍
7.学习视频地址:互联网(The Internet)
相关文章:

29_互联网(The Internet)(IP数据包;UDP;TCP;DNS;OSI)
上篇介绍了计算机网络的基础知识,也提到互联网(The Internet),本篇将会详细介绍互联网(The Internet)。 文章目录 1. 互联网(The Internet)组成及数据包传输过程2. IP 数据包的不足3…...

xShell常用命令
xShell常用命令 一、文件夹目录1、cd-更改目录2、mkdir-建立目录3、rm-删除目录4、pwd-查看当前路径5、rmdir-删除空目录 二、文件操作1、cat-显示文件内容2、diff-比较文件内容3、查看文件的名字和后缀4、ls-列出文件5、cp-复制文件6、mv-移动和重命名文件找不同:选…...

React性能优化之Memo、useMemo
文章目录 React.memo两种方式参数应用场景 拓展useMemouseMemo(calculateValue, dependencies) 参考资料 React.memo React 的渲染机制,组件内部的 state 或者 props 一旦发生修改,整个组件树都会被重新渲染一次,即时子组件的参数没有被修改&…...

IDEA开启并配置services窗口
前言: 一般一个spring cloud项目中大大小小存在几个十几个module编写具体的微服务项目。此时,如果要调试测需要依次启动各个项目比较麻烦。 方法一: 默认第一次打开项目的时候,idea会提示是否增加这个选项卡,如果你没…...

vue2企业级项目(三)
vue2企业级项目(三) 引入mockjs,i18n 1、mockjs 项目下载依赖 npm install --save-dev mock根目录创建mock文件夹,并创建mock/index.js import Mock from "mockjs";// 设置全局延时 没有延时的话有时候会检测不到数据…...

QT 在label上透明绘图
一、新建TransparentDemo工程 二、在界面上添加label,修改样式表,将底色置为红色,作为北京 三、新建一个TransparentLabel类,继承自QLabel 此时,工程包括文件 五、在transparentlabel.h中添加 头文件 #include …...

SAM(Segment Anything)大模型论文汇总
A Comprehensive Survey on Segment Anything Model for Vision and Beyond 论文:https://arxiv.org/abs/2305.08196 25页综述,198篇参考文献!52个开源项目!本文第一个全面回顾了分割一切模型(SAM)的研究和应用进展,…...

金融翻译难吗,如何做好金融翻译?
我们知道,金融翻译涉及企业经济这块的,是影响各公司发展很重要的一方面,翻译做得好,可以促进公司内外的交流,及时掌握各种信息,做好应对。那么,金融翻译难吗,如何做好金融翻译&#…...

Java面试题(Tomcat与Nginx)
Tomcat 什么是Tomcat? 简单来说是一个运行Java的网络服务器,也是jsp和serlvet的一个容器 Tomcat的缺省端口是多少,怎么修改? conf文件夹下修改server.xml文件 <Connector connectionTimeout"20000" port"8080" p…...

React-使用mobx
React 中使用 mobx 配置开发环境 安装mobx和中间件工具 mobx-react-lite 只能函数组件中使用 yarn add mobx mobx-react-lite初始化 mobx 定义数据状态 state在构造器中实现数据响应式处理 makeAutoObservble定义修改数据的函数 action实例化 store 并导出 import { compute…...

LeetCode ACM模式——哈希表篇(一)
刷题顺序及部分思路来源于代码随想录,网站地址:https://programmercarl.com 部分思路来源于力扣官方题解,作者主页:https://leetcode.cn/u/leetcode-solution/ 242. 有效的字母异位词 给定两个字符串 s 和 t ,编写一个…...

WPF实战学习笔记31-登录界面全局通知
UI添加消息聚合器 <md:Snackbarx:Name"LoginSnakeBar"Grid.ColumnSpan"2"Panel.ZIndex"1"MessageQueue"{md:MessageQueue}" />注册提示消息 文件:Mytodo.Views.LoginView.cs构造函数添加内容 //注册提示消息 aggre…...

通用商城项目(中)
金山编译器出问题了。下面段落标号全出问题了,排版也出问题了。懒得改了。 使用对象存储OSS,保存品牌logo 新建Module,提供上传、显示服务 有些不明所以的,按照steinliving-commodity配置了一通pom.xml 新建application.yml&…...

谨慎使用JSON.stringify
谨慎使用JSON.stringify 为了避免因为对象是引用类型而造成的数据源污染,我们通常使用 JSON.stringify 将其转换为字符串,而后通过JSON.parse方法将字符串转化一个新对象来实现深拷贝。但是在这个过程中也会存在一些问题,本文就介绍一下使用…...

驱动开发day8
编写LED灯的驱动,使用GPIO子系统,里面添加按键的中断处理 1.应用程序发送指令控制LED亮灭 2.按键1 按下,led1电位反转 按键2按下,led2电位反转 按键3 按下,led3电位反转 驱动程序 #include <linux/init.h> #i…...

CAS 机制
问题分析与思考: CAS 是 Java 中 Unsafe 类里面的方法,它的全称是 CompareAndSwap,比较并交换 的意思。 它的主要功能是能够保证在多线程环境下,对于共享变量的修改的原子性。 举个例子,比如说有这样一个场景ÿ…...

#P1003. [NOIP2009普及组] 道路游戏
题目描述 小新正在玩一个简单的电脑游戏。 游戏中有一条环形马路,马路上有 nn 个机器人工厂,两个相邻机器人工厂之间由一小段马路连接。小新以某个机器人工厂为起点,按顺时针顺序依次将这 nn 个机器人工厂编号为 1\sim n1∼n,因…...

python-网络爬虫.regular
regular 正则表达式 (regular expression) 正则表达式(regular expression)描述了一种字符串匹配的模式 (pattern), 可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串 中取出符合某个条件的子串等。 正则表达式是由普通…...

手动搭建gateway,项目集成gateway实现Token效果
目录 背景步骤1、首先创建springboot项目2、引入依赖3、配置文件!!!!!(超级重要!!!根据自己的需要进行配置)4、相关类我们在服务中进行的白名单中接口的操作如…...

linux下SVN服务器搭建
在本教程中,我们将介绍如何在Linux系统下搭建Subversion(SVN)服务器。Subversion是一种流行的版本控制系统,它允许多个人在同一项目上进行协作,同时避免了他们各自的更改发生冲突。 安装SVN 在大多数Linux发行版中&am…...

技术等级 TRL 定义
“不同环境、不同目标下TRL表述不一样” 技术等级 TRL 定义 TRL1 基本原理提出和发现 TRL2 技术应用研究 TRL3 完成概念验证,如叶栅试验、燃烧室头部试验等 TRL4 完成模拟部件试验.如压气机性能试验,燃烧室扇形试验 TRL5 完…...

DHorse v1.3.0 发布,基于k8s的发布平台
综述 DHorse是一个简单易用、以应用为中心的云原生DevOps系统,具有持续集成、持续部署、微服务治理等功能,无需安装依赖Docker、Maven、Node等环境即可发布Java、Vue、React应用,主要特点:部署简单、操作简洁、功能快速。 新增特…...

Redis - 缓存的双写一致性
概念: 当修改了数据库的数据也要同时更新缓存的数据,缓存和数据库的数据要保持一致 那为什么会有不一致的情况呢? 如果不追求一致性,正常有两种做法 先修改数据库 后删除旧的缓存先删除旧的缓存 再修改数据库 我们以先删除旧的…...

opencv03-Mat矩阵API的使用
opencv03-Mat矩阵API的使用 构造方法(具体介绍看API文档) int main() {Mat m1 Mat(200, 100, CV_8UC1);imshow("o1", m1);Mat m2 Mat(Size(100, 200), CV_8UC1);imshow("o2", m2);Mat m3 Mat(200, 100, CV_8UC3, Scalar(255, 0, 0));imshow("o3&…...

2023届浙江大学MPA提面A资格经验总结分享
本人是去年报考的浙大MPA项目,并通过提面获得了A资格,新一年浙大MPA项目提前批面试已经开始了,受达立易考周老师邀请来分享下我的提面经验,希望我的经验能对还在迷茫中的小伙伴有所帮助。 点开提面通知,首先看到…...

BugKu CTF(杂项篇MISC)—想要种子吗
BugKu CTF(杂项篇MISC)—想要种子吗 提 示: 描 述:flag{} 题目下载后是一张图片,打开如下。 一、工具 十六进制编辑器010 editor kali系统文件分离工具binwalk或者foremost 维吉尼亚密码 STEGHIDE图片隐写工具 文章所需的软件下载地址 ARCHPR压缩包密码破解…...

类之间的关系
1、类关系 继承、实现、依赖、组合、聚合 继承:一个类继承另一个类; 实现:一个类实现另一个接口; 依赖:一个类作为另一个的局部变量,方法的参数,临时对象等; 组合:一个类…...

【蓝图】p40-p43对象引用、变量有效性、实现键盘控制物体自转、简单点名系统
p40-p43对象引用、变量有效性、实现键盘控制物体自转、简单点名系统 p40对象引用、变量有效性p41实现键盘控制物体自转创建bool值控制旋转实现通过键盘控制自转 p42p43简单点名系统Get All Actors Of Class(获得场景中所有该类的actor演员)getFor Each L…...

vscode设置远程登录和免密登录
首先,我们去官网下载VScode 安装过程比较简单,大家自行安装即可,注意建议安装在除C盘外的其他盘中。 安装完成后,打开我们下载好的VScode,点击左侧的Extensions选项,搜索Remote,Install第一项R…...

今日头条面试真题及答案,软件测试工程师面试秘籍
试题1.在浏览器地址栏里输入一个网址,接下来会发生什么? 答案:发生的操作如下。 (1)浏览器查找该网址的IP地址。 (2)浏览器根据解析得到的IP地址向Web服务器发送一个HTTP请求。 &am…...