前言
前面我们对OS做完了详细的介绍,本期开始我们开始学习网络的只知识!本篇博客介绍网络基础的概念和理解!
目录
1、网络的发展
1.1 背景
1945 年,二战结束,世界恢复和平,并出现了 美国、苏联 两个超级大国;1947 年,杜鲁门主义 的出台,标志着以两个超级大国为代表的 冷战 正式开始;1957 年,苏联 发射了人类第一颗人造地球卫星,令 美国 大为震惊;1958 年,美国 组建高级研究计划局(ARPA),简称 阿帕,负责研发用于军事用途的高新科技
在 阿帕 中,信息技术处 属于核心机构,主要研究方向是计算机,网络通讯等方面,1968 年,拉里·罗伯茨 提交了一份题为 《资源共享的电脑网络》 报告,报告中提出 让阿帕的计算机相互连接,以达到信息共享的目的,而这就是最早的网络:阿帕网
1969 年 10 月 29 日,进行第一次 阿帕网 的连接实验,起点为 加州大学洛杉矶分校,终点则是 500km 之外的 斯坦福研究所,第一次连接实验想传输单词 login,最终因连接中断,只成功传输了字母 l 和 o,但这次连接实验成功开启了网络世界的大门;最初 阿帕网 的节点只有四个,到了 1981 年,节点增加至 213 个
1974 年,温顿·瑟夫 和 罗伯特·卡恩 提出的 TCP/IP 协议 正式发表,TCP/IP 协议 突破了不同硬件间的限制,允许不同的计算机之间进行高效可靠的数据传输,经过数十年的完善,TCP/IP 协议 成为使用最广泛的网络协议,这也为网络快速发展奠定了基础;1986 年,美国国家科学基金会网络(NSFNET) 成立,阿帕网 只能用于军事研究,而 NSFNET 则是鼓励大学和研究机构加入到自己的互联网中,服务于学术研究,NSFNET 快速发展,并逐渐替代了 阿帕网
随着互联网在 军事 和 学术 领域的不断发展,商业 领域对于网络的需求变得越来越迫切,因为这是一个全新的市场,具有不可估量的发展前景;世界上第一家商业互联网服务提供商 The World 很快就成立了,并于 1989 年开始提供互联网的接入服务,目前这家公司的官网仍可访问,随后越来越多的商业互联网服务商开始诞生;1995 年,NSFNET 将自己的经营权转给了美国的私有电信公司,至此互联网正式进入商业时代
尽管商业互联网早在 1989 年就已经开始,但想要通过互联网获取信息仍存在门槛,这对于普通人是很不友好的,导致互联网无法普及;同年,互联网中教父级的人物 蒂姆·伯纳斯-李 发明了 万维网 www,并于第二年开发出了 第一个网页服务器 和 第一个网页浏览器,至此,普通人只需要打开浏览器,就能轻松查阅到互联网中的所有信息,信息变得触手可得,互联网也因此快速发展,进入了网页时代。互联网在 1990-2000 年这十年间的发展令所有人吃惊,这期间也诞生了很多互联网传奇
• 1993 年1 月,马克.安德森 开发了马赛克(Mosaic)浏览器,支持显示图片,并于第二年成立 网景公司,推出了新一代 网景浏览器,1995 年 网景公司 在纽约上市,一夜之间公司市值就突破了 20 亿美元
• 1995 年 3 月,斯坦福大学的两名电气工程系的研究生共同创建了 雅虎公司
• 1995 年 7 月,杰夫·贝索斯 创建 亚马逊,全新的电子商务模式使其创始人一跃成为世界首富
• 1995 年 微软为了回应 网景浏览器,推出了经典浏览器 Internet Explorer
• 1997 年 丁磊 在广州创建了 网易公司,并推出了强大且免费的 163 邮箱
• 1998 年 2 月,从美国麻省理工学院毕业回国的 张朝阳 创建了 搜狐
• 1998 年 11 月,马化腾 在深圳创建 腾讯公司,腾讯帝国正式拉开了帷幕
• 1998 年 12 月,王志东 创建了 新浪网站,才有了后来的 新浪微博
• 1998 年 2 月,谷歌 成立,曾想将自己的网络爬虫项目出售给 雅虎,惨遭拒绝,多年之后,谷歌 成为全球最大的搜索引擎公司
• 1999 年 9 月,马云 带着他的十八罗汉在杭州的公寓中创建了 阿里巴巴集团,如今的 淘宝、支付宝 等阿里系产品已经深刻改变了人们的生活方式
• 2000 年,李彦宏 带着他的 “超链分析” 技术专利创建了 百度,“百度一下,你就知道” 的观念深入人心
…
上述内容摘录自知乎文章<<可能谦虚的说,这是一篇最全的互联网发展史>>
互联网 仍在快速发展,web2.0
和 移动互联网 时代同样诞生了无数传奇,即将到来的 web3.0
也同样令人期待。
上述的发展来看,计算机是人的工具,人是协同工作的,这就注定了网络的产生是必然的!
1.2 类型
网络的类型可以按照不同的标准划分为不同的类型!我们这里就以 地理位置 划分
按照地理位置可以将网络划分为:局域网 LAN 、城域网 MAN 和 广域网 WAN
局域网 LAN :覆盖的范围比较小。一般是通过双绞线、同轴电缆等连接介质,将一个区域内(一个建筑/学校)的多台计算机互相连接
城域网 MAN :覆盖的范围在局域网和城域网中间。一般是用路由器/光纤连接一个城市或者地区的所有局域网
广域网 WAN :覆盖范围最广可以跨国家!通常也是由路由器将远在千里的计算机连接在一起
值的注意的是 所谓的 局域网 和 广域网 仅仅是一个相对的概念,比如看似很大的广域网实则也就是一个局域网
2、网络协议
2.1 初识协议
协议 是一种约定
1、就像打游戏约定,我给你发一个表情包代表今天管的严不敢上号!发两个代表可以上号
2、你是广东的,我是天水的。我们都遵循使用汉语来交流,你说的粤语、我说的天水话,此时我们不知道对方在说啥~!所以,上述的协议需要完善、需要更多的细致规定,并让所有参与的人都遵守!此时,就需要有人站出来,规定一个共同协议标准,大家遵循这个标准,就可以解决!
例如,国家规定普通话,参与双方都遵守协议 使用普通话就也可以交流了
而计算机的产商家有很多、OS也有很多、网络设备也有很多、如何让不同厂商生产的计算机间可以进行连接通信呢?
同理,此时就需要有人站出来,规定一个共同协议标准,大家遵循这个标准,就可以完成通信了,这就是 网络协议
当这个共同的标准被定制出来,有了一定的用户基础后,后续的各个厂商推出的软硬件设施都必须遵守这个标准,否则就会被市场淘汰!这也就解决了不同的计算机设备的网络通信问题!
一般 具有定制协议或者标准资格的公司/组织 都是业界公认或者具有江湖地位的组织/公司
例如我们以前学习的:IEE754 就规定了浮点数如何在内存中存储;再比如通信领域 我国的 华为 就担任了 5G 标准的定制
一流企业定标准,二流企业做品牌,三流企业做产品
2.1.1 协议分层
网络在通信过程中,依然存在很多的问题:
1、数据如何组织,如何解析
2、长距离传输数据丢包问题
3、如何在众多的主机中定位目标主机
4、如何进行数据的转发、路径选择
5、01序列的硬件之间的协议问题
如何解决这些问题呢?
将问题分类,逐个击破 --- 高内聚
这些问题之间都是存在先后关系的,比如把信息组织好了,才需要考虑数据的传输丢包,丢包结局后才考虑定位目标主机和选择路径,最后硬件发送
基于 解耦、可维护性、可扩展性 这三点出发,采用协议分层的解决方案,将不同的问题解决策略归入到具体的模块中,各个模块之间互不影响 --- 低耦合
在进行分层后,上层无需关心下层的具体实现,只需要使用下层提供的功能即可,分层思想就很好的体现了计算机的设计哲学:"任何计算机问题都可以通过添加一层软件层解决"
其实,在编程语言中,分层思想早已有所体现,其中继承和多态是两个典型的例子。
继承 使得子类能够复用父类的代码,无需重新编写相同的逻辑,从而简化了开发过程。子类只需继承父类,即可获得其属性和方法,而无需关心父类的具体实现细节。
多态 则进一步增强了这种灵活性,它允许我们使用父类的指针或引用来调用不同子类的方法,而无需关心这些子类之间的具体差异。这种机制使得代码更加通用和可维护,因为我们可以基于接口或抽象类来编写代码,而无需关注具体的实现类
拿个栗子说明:假设A给B打电话,只需要拿起电话拨通B的电话号码,待B接通之后,双方就可以通话,在通话的过程中,A与B都认为自己直接在与对方通话
这是因为A和B同处于 语言层,任务是 进行通话;而通话的具体实现属于 通信设备,语言层是依赖通信设备层提供的功能的,但是并不关心具体的实现,因为没必要
假设哪一天通信设备层的电话机坏了,我换成无线电,提供上层同样的电话服务,此时也是可以的
同理,不仅可以换掉设备通信层,我也可以把语言层给换掉!可以把A和B换成Tom和Peter使用英语来通话
上述的例子就很好的体现了 分层 的好处:分层之后,每一层都只关注自己层的功能,使用下层提供的接口,任何一层出问题,都不会直接影响其他层
分层 是解决大量问题的最优解,主要体现的是 高内聚、低耦合!
实际开发中也是采用的分层开发:会话层、业务逻辑层、数据访问层
2.1.2 OSI七层模型
基于 网络分层 的设计思想,诞生了著名的 OSI 七层模型
OSI
(Open System Interconnect
),即开放系统互联,一般叫做 OSI 参考模型,是 ISO 组织在 1985年研究的网络互联模型,该模型将网络从逻辑上分成了 七层 , 每一层都有对应的 协议 或者物理设备
OSI 参考模型 最大的优点是将 服务、接口 和 协议这三个的概念明确的区分出来,通过七个层次的结构模型,使不同的系统、不同网络之间实现可靠的通讯
自定向上,OSI 参考模型 中不同层级实现的功能如下:
在网络角度,OSI 定的协议7层模型其实非常完善,但是在实际操作的过程中,会话层、表示层是不可能接入到OS中的,所以实际工程落地时只有5层,他就是著名的TCP/IP五层模型
2.1.3 TCP/IP五层模型
上面刚说完,由于 OSI 七层模型中的会话、表示层无法接入到OS中,所以实际将应用、会话、表示层合成了应用层!然后在加上剩下的四层就变成了五层模型
为什么叫做TCP/IP 层模型?
因为其中的 TCP/IP 协议非常经典,非常重要(TCP是传输层、IP是网络层都属于OS内核),具有代表意义,于是就命名成了 TCP/IP五层模型
注意: TCP/IP 是一组协议的代名词,其中包含了许多的协议,他们共同组成了 TCP/IP协议
TCP/IP 五层模型 也称为 TCP/IP 四层模型,这是因为 物理层 我们一般的开发并不咋关心
TCP/IP 五层模型,不同分层的功能如下(自定向上)
物理层
负责光电信号的传递方式,以太网 中采用 同轴电缆、双绞线、光纤、电磁波 等传递信号,不同材质决定了信号最大传输速率、传输距离、抗干扰性等,如果信号传递过程中出现衰减,还可以使用 集线器 进行信号增强
数据链路层
负责设备之间的数据帧的传送和识别,比如网卡设备的驱动、帧同步、冲突检测、差错校验等工作, 数据链路层 中有很多不同的实现标准:以太网、令牌环、无线 LAN
等,具体是什么标准,取决于网卡,用于连接多台设备,实现网络数据传输与交换的 交换机 就工作在 数据链路层
网络层
负责地址管理和路由选择,比如在 IP
协议 中,通过 IP
地址来标识主机,可以通过查询路由表的方式规划出源主机与目标主机之间的传输路线,这正是 路由器 的工作职责
传输层
负责两台主机之间的数据传输,通过诸如 TCP
协议 等传输协议,实现高效、可靠的数据传输,数据传输不一定成功,可以通过 重传 相关机制重新传输数据
应用层
负责应用程序间沟通,比如 简单电子邮件传输(SMTP
)、文件传输协议(FTP
)、网络远程访问协议(Telnet
) 等,在进行网络编程时,主要针对的就是 应用层
一般而言,硬件除了工作在某一层外,还需要具备自己下层的功能
• 对于一台主机,它的操作系统内核实现了从「传输层」到「物理层」的内容
• 对于一台路由器,它实现了从「网络层」到「物理层」
• 对于一台交换机,它实现了从「数据链路层」到「物理层」
• 对于集线器,它只实现了「物理层」
但这并不是绝对的,某些硬件也可以工作在上层,比如 路由器 可以实现传输层的部分功能,交换机 也可以实现网络层的转发
2.2 再识协议
上面我们对一些概念做了介绍,下面我们再次来理解协议!
2.2.1 为什么要有TCP/IP协议
首先,即便是单机内部其实都是存在协议的,比如:其他设备和内存的通信,会有内存协议。其他设备和磁盘通信,会有磁盘协议,比如:SATA、IDE、SCSI等。只不过我们对这些感知不到罢了,这些协议都是在本地主机各自的硬件中,距离近通信的成本低,问题少。
而网络通信最大的特点就是主机之间距离变远了。任何通信的特征的变化,一定会带来新的问题,有问题就得解决,所以就需要新的协议!
1、我要发送数据给主机C,得先发到路由器吧,怎么发?
2、网上这么多的主机,怎么定位并找到主机C呢?怎么办?
3、如果我的数据发出去丢失了,怎么办?
4、发送数据不是目的,只是手段,用数据才是目的吧?
5、主机C收到数据,如何知道我的数据该被怎么处理和使用呢?
上述的这些问题,都是有前后关系的,解决了一个才会有下一个,如何解决?采用高内聚、低耦合的网络分层的手段,即TCP/IP五层模型!
所以,为什么要有TCP/IP协议呢?
本质是由于通信主机之间的距离变长了,TCP/IP协议的本质是一种解决方案,TCP/IP协议能分层前提是因为问题本身能分层!
2.2.2 网络与系统的关系
系统、网络 不分家,看似设计复杂的网络标准模型其实和系统设计有着千丝万缕的联系,比如 物理层、数据链层、网络层、传输层 这四层 属于 操作系统,剩下的 应用层 属于 用户层。因为我们最终需要通过操作系统来进行网络通信,所以网络标准模型必然会被融入到操作系统中
应用层中的应用、表示、会话不属于系统体系结构,也不能属于系统结构,因为他们由用户定义实现,由于实现方式不固定,也就称为 应用层,网络变成就是在应用层中进行的
网络标准模型融入操作系统后,为了让用户能使用网络,操作系统就为网络相关操作提供了一批 系统调用接口,也就是后面学习的 socket
套接字编程
操作系统有四大管理模块:内存管理、进程管理、文件管理、驱动管理 压根就没有 网络管理, 那么操作系统是如何进行对网络做管理的呢?
Linux 下一切皆文件,网络通信需要借助网卡通信,而网卡在操作系统看来就是一个 进行 I/O 的硬件设备,和其他的 I/O 设备无区别,所以直接使用 文件管理 的那一套就可以对网络进行管理了
其实 socket 本质上就是一个文件描述符,一个专门对于网络资源(文件)进行操作的句柄而已,所以这就意味着,OS提供的网络相关的系统调用接口必然与文件的类型
网络本质是挂接至文件系统中的一个重要子功能
网络与系统也有一些区别:系统可以有很多种,但网络中的核心协议栈必须一致,无论是哪种系统,如果核心协议栈不一致,就无法进行网络通信
所有主流操作系统都必须实现基于
TPC
、IP
实现的核心协议栈(工作在操作系统层中)
总结就是,网络通信是基于OS架构的,所以不同的,而网络是由标准协议的,即使不同的OS的主机,但是大家都遵守共同的标准,就可以通信!
2.2.3 朴素理解协议
截至目前,我们没有接触过任何的协议,但是如何朴素的理解协议,我们可以试一下!而OS的源代码都是由 C/C++语言写的,所以,可以借助下面这个图朴素理解:
现在的问题是:右边的主机能否识别 data ,并且准确提取 a = 10, b = 20, c = 30 呢?
答案是:肯定能!以为双方都有同样的结构体类型 struct protocal 也就是说,用同样的代码实现的协议(简单理解),用同样的自定义数据类型,本身就具有天然的 共识, 能够识别对方发来的数据,这就是 约定(协议)!
所以,关于协议朴素的理解:所谓的协议,就是通信双方都能认识的结构化的数据类型
因为协议栈是分层的,所以,每层双方都有协议,同层之间可以认识对方的协议!
举个例子
张三今天买了个键盘,过了几天快递到了,张三收到快递后发现不止是有一个键盘,还有个快递单!上面有寄件人、收件人等信息!
现在的问题是:张三怎么知道这个快递就是给他的呢?
答案是:快递单上写着收件人是张三,所以张三就知道是给他的!这里张三知道收件人是他的前提是,他得认识寄件人填写的这个单上的内容!此时快递单子不就是一种约定(协议)吗!
如果张三想退货,那只需要再要一张同样的单子,将自己填写为寄件人,对方填写为收件人即可!
3、网络传输基本流程
3.1 前置知识
处于同一局域网中的主机之间是可以直接通信的
比如部分游戏的本地连接对战功能(CS 1.6
、魔兽世界、求生之路等),这些游戏在进行本地多人对战时,只需要构建一个局域网,主机相连后即可直接进行通信
再比如 快牙、QQ
互传、快传 等传输文件的方式,也是通过局域网连接实现的,本质上就是通过热点构建一个子网(局域网),其他手机(主机)连接后,可以直接通信,传输文件
这些日常生活中接触过的操作都在证明 处于同一个局域网中的主机是可以直接通信的
现在的问题是:在一个局域网中的那么多的主机中我怎么确定目标主机呢?
其实每台主机在局域网上,都有唯一的标识来保证主机的唯一性,他就是 mac 地址
所以,当我的主机给局域网中目标主机发送信息时,就可以通过 mac 地址确定!这就和我们平时上课是一样的:
假设蛋哥今天上课进来说:张三,你在没交作业?此时你们一个教室的同学都是可以听到的,但是只有张三起来解释!为什么?因为大家知道此时蛋哥问的是张三!此时,名字就是mac地址,而教室就是局域网,在座的同学就是不同主机!
下面我们就来正式的认识一下 mac 地址!
3.2 MAC 地址和局域网通信原理
MAC 地址 用来识别数据链路层中相连的节点
MAC 地址 是长度为 48 位(6个字节),一般使用 16 进制数字加上冒号的形式表示(例如:08:00:27:03:fb:19)
MAC 地址 在网卡出厂的时候就确定了,不能修改。MAC 地址通常是唯一的(虚拟机中的 mac 地 址不是真实的 mac地址, 可能会冲突; 也有些网卡支持用户配置 mac 地址)
这里我们只是做一个简单的了解,后面 数据链路层 的那里会详谈 mac 帧协议!
以太网 局域网通信原理 大致流程图如下:
他就是一个个在局域网中按照目标主机的Mac地址找到!
• 在以太网中,任何时刻,只允许一台主机像网络中发送数据
• 如果有多台主机同时发送,会发生数据干扰,我们称为 数据碰撞
• 所有发送数据的主机要进行 碰撞检测 和 碰撞避免(比如碰撞了其中一个随眠一下)
• 没有交换机的情况下,一个以太网就是一个 碰撞域
• 局域网通信的过程中,主机对收到的报文确定是否是发给自己的,是由 Mac 地址判定的
从系统角度理解局域网通信原理
先来说 以太网,以太网的特点就是任何时候只允许一台主机往局域网中发送数据,如果多台主机同时发送就会发生碰撞!这个我们在系统部分学过的临界资源很像!此时的局域网就是一个临界资源,局域网中的不同主机就是不同的执行流!系统部分为了处理这种并发访问临界资源的问题一般是加锁,但是网络这里没有,他是 碰撞检测 和 碰撞避免!
令牌环网,我们没有介绍过,他的特点是 在局域网中哪个主机持有令牌谁就可以,往局域网中发送消息,结合系统这不就是加了互斥锁吗?任何时刻只允许持有锁的执行流访问临界资源,这里是任何时刻允许持有令牌的主机向局域网中发送数据!惊人的相似,所以系统、网络不分家!
OK,简单了解了局域网的通信原理,在来看看同一个网段内的两台主机进行发送消息的过程:
同一网段的两主机之间通信,首先源主机会在应用层将 数据 先交给 传输层,然后传输层加上传输层的字段之后,交给网络层,网络层也是会在传输层的基础上添加上自己的字段,继续交给数据链路层,数据链路层收到网络层的数据后,也加上自己的字段,交给物理层的硬件,然后通过网卡发送给另一台主机!另一台主机的网卡接收到之后,获取当前数据的首部字段,如果是给自己的就向上交付,直到就给应用层处理!
上述的过程如下:
下面我们来明确一下概念:
• 报文部分,就是对应协议层的结构体字段,我们一般叫做 报头
• 除了报头,剩下的叫做 有效载荷
• 报文 = 报头 + 有效载荷
注意:有效载荷只是一个相对的概念!
下面我们再明确一下不同层的完整报文的叫法:
在 应用层 叫做 请求和响应(Requests and Responses)
在 传输层 叫做 段(segment)
在 网络层 叫做 数据报(datagram)
在 数据链路层 叫做 帧(frame)
在一个报文的首部信息中包含了一些类似于首部有多长,载荷有多长,上层协议是啥等信息
最后复盘一下,两台计算机通过TCP/IP协议通信的过程如下:
需要注意的是,每一层逻辑上是直接将数据交给对方层的,实际上并不是直接给对方主机的,而是先要自顶向下将当前层的报文给下层协议,最后由底层发送,然后有对方主机底层进行接收,在自顶向上,逐层解包交付,所以每一层和对方层拿到的东西是一样的,即逻辑上是直接给对方层的!
3.3 数据包的封装和分用
数据包的封装,我们前面已经介绍过了,当不同主机通信时,会将用户的数据从应用层逐层一直交给到硬件,该过程中每一层都会基于上一层加上自己的报头组成新的数据报!这就是数据报文的封装
数据报文的解包 就是当目标主机收到报文后向上交付的过程!
现在的问题是:目标主机在某一层解包完了,是把有效载荷交给上一层的哪一种协议呢?
此时就是数据报文的 分用 了!
分用的实现是通过查找当前报文的报头信息,因为在发送的主机发送封装的时候就已经填好了!所以直接查找,然后交给上层的对应协议即可~!
总结:我们以后学习任何协议,首先要建立这样的宏观认识:
1、如何做到解包的?明确了解包,封包也就懂了
2、如何做到将自己的有效载荷交付给上层的?
4、IP地址于端口号
4.1 认识 IP 地址
IP 协议 有两个版本, IPV4 和 IPV6 ;IPV4是最常用的,所以我们以后介绍的默认就是 IPV4
IP 地址是在 IP 协议中,用来标识网络中不同主机的地址,朴素的认为IP标识网络中的唯一台主机
对于 IPV4 来说,IP 地址是一个4字节,32 位的整数
我们通常使用 "点分十进制" 的字符串表示 IP 地址(为了用户方便看)例如:192.168.0.1
用点分割的每一个数字表示一个字节,范围值: 0-255
跨网段的主机数据传输,数据从一台主机到另一台主机进行传输的过程中,需要经过一个或者多个路由器
这里就有个问题:为什么要去目标主机,先要去路由器?
因为目标当封包的时候到网络层进行 路由 的时候,发现你要去的目标IP不是在当前的局域网,所以只能交给 路由器!
结合封装和解包,体现路由器解包和重新封装的特点:
路由器只有两层,IP和数据链路层!
4.2 IP地址和Mac地址的对比
IP 地址在成哥路由过程中,一直不变(目前先这样认为,后面了在修正)
MAC 地址一直在变(他要经过路由器解包和重新封装)
目的IP 是一种长远目标, Mac 是下一阶段目标,目的IP是路径选择的重要依据, MAC地址是局域网转发的重要依据
IP 网络层存在的意义:提供网络虚拟层,让世界上的所有网络都是 IP 网络,屏蔽底层的网络差异
也就是说,IP层及以上看到的所有的报文都是一样的,至少都是IP报文!
4.3 理解源IP地址和目的IP地址
IP 在网络中,用来标识主机的唯一性(IP的分类后面介绍IP协议的时候详谈)
但是这里有个问题:数据传输到目的主机是目的吗?
显然不是的!因为数据是给人用的,比如:聊天、下载、刷视频等!
但是人聊天、下载、刷视频都是通过启动软件进行的,而启动的这些软件本质就是进程!换句话说,进程在系统中就代表人,只要把数据交给对应的进程就相当于交给了用户!
所以,数据传输到目的主机不是目的,而是手段。到达主机内部,交给主机内的进程才是目的!
但是在OS中,同时会存在很多的进程,当数据到达目标主机后,怎么转发给目标进程呢?这就是在网络的背景下,在OS中标识主机的唯一性!
4.4 认识端口号
端口号(port) 是传输协议的内容, 是一个2字节16位的整数
• 端口号用来标识一个进程,告诉操作系统当前的这个数据要交给那一个进程处理
• IP地址标识网络中的唯一主机,端口号标识主机中的唯一进程,所以IP+端口号可以标识网络中的唯一一个进程!
• 一个端口号只能被一个进程占用
端口范围的划分
• 0 -- 1023:知名端口号,HTTP、FTP、SSH等这些广泛使用的应用层协议,他们的端口号是固定的
• 1024 -- 65535:操作系统动态分配的端口号,客户端程序端口号,就是由操作系统从这里划分的
例如:MySQL 的端口号 3306
理解端口号与进程PID
这里不就是想在主机中标识唯一的一个进程吗?那我直接进程PID就可以啊!为啥还要单独搞一个端口号呢?
直接说原因:为了解耦!如果直接用进程PID标识网络中的唯一进程的话,网络和系统的耦合度太高!如果后续,万一系统做了更变,网络直接会受到影响!所以,设计网络的大佬就采取了使用端口号标识网络中的唯一进程!
其实这种设计思路很常见,例如:你上大学为啥使用学号标识你,不直接使用你的身份证号码标识你呢?是不是一样的道理,如果使用身份证标识,就不好管理,且耦合度太大!万一后面政策变了身份证变一点点,那整个学校的管理就麻了!在例如:各种平台的账号等!
另外,端口号和PID的关系是:一个进程可以绑定多个端口号,但是一个端口号不能被多个进程绑定!
理解源端口好和目的端口号
传输层协议(TCP 和 UDP)的数据段中有两个端口号, 分别叫做源端口号和目的端口号. 就是在描述 "数据是谁发的, 要发给谁"
总结:
1、IP 地址用来标识互联网中唯一的一台主机,port 用来标识该主机上唯一的一个网络进
2、IP+Port 就能表示互联网中唯一的一个进程
3、网络通信的本质,也是进程间通信
我们把 ip+port 叫做套接字 socket
OK,本期分享就到这里,我是 cp 我们下期再见!