网络原理(TCP/IP)(5)

news2024/12/26 23:11:05

2.IP协议的核心功能:能够在两点之间规划出来一条合适的路径

1)地址管理:通过一系列的规则,可以把网络上设备的地址给描述出来

2)路由地址:根据当下的源IP和目的地址,规划成一条合适的路径,啥叫合适?关键是看咱们的TOS是怎么选的?是选择最大吞吐量,还是最小延时??

-------------------------------------------------------------------------------------------------------------------------- 

本来咱们的预期IP是表示网络上面的同一个位置,但是这怎么同一个内网IP可以表示不同的设备了呢?

当前咱们的IPV4协议,使用的IP地址是表示32位的整数,32为可以表示的数据的范围是42亿9千万,如果我们尝试给每一个设备都分配一个唯一的IP地址,就意味着世界上的设备不超过42亿9千万,但是实际上已经超过了,每一个设备都保证有一个唯一的IP地址,显然是根本不现实的

1)动态设备,并不是所有的设备都在连接网络,哪个设备联网了,就给他分配IP地址,没有连接网络就不分配(这种方法治标不治本),同时把这个IP地址给其他人用;---设备没有减少,IP地址没有增加

2)NAT机制:网络地址替换,本质上是使用一个外网IP地址,来表示一批主机或者设备;

1)我们把网络分成了内网(局域网)和外网(广域网),我们就要求外网IP必须表示唯一的设备,同时内网中的若干个设备,可以同时用一个外网IP

2)我现在的这个电脑是一个局域网IP,我还对应着一个外网的IP,这个外网IP不是指给我一个人用的,而是所有接入这个设备的局域网,都在共用这这同一个外网IP

3)我们的每一个外网IP都可能代表着几千个,甚至上万个设备,这时候IP地址的压力就少了很多

                                                                  

1)此时直接连接到广域网(外网)的路由器设备,就叫做外网IP,实际上这些局域网里面的设备有很多,网络结构也有可能很复杂;

2)一个局域网里面的若干设备都在使用着同一个外网IP,先通过路由器的外网IP来确定把这个数据交给哪一个局域网,再通过局域网中的内网IP来确定把这个数据交给局域网中的哪一台主机

3)一个外网IP可能就包含着,几百,几千,甚至几万个网络设备;

4)如果局域网内部的数据尝试往广域网上发送的时候,此时的路由器就会悄悄地把其中的源IP给换了;例如上面的192.168.0.10向外面发送数据,通过路由器转发,就被替换成了外网IP;

5)一个局域网中的所有设备,共同使用一个外网IP;当我们在电脑端输入IP地址的时候,所展现出来的IP地址就是我这个电脑对应的接外网的路由器设备的外网IP,这个设备具体管理多少个内网设备,不从得知;

6)我们不在意局域网里面的IP是否重复,那么只要外网IP不重复即可;

7)下面三种IP都表示局域网IP 10.*,172.16.*-172.31.*, 192.168.*;

8)NAT机制虽然解决了IP地址不够用的问题,但是也引入了新的问题,比如说我想要在自己的机器上面搭建一个服务器,此时想要让其他用户通过外网来访问你的服务器这个时候是做不到的,我们自己的机器,只是一个局域网IP,内网IP是可以进行重复的;其他主机是无法通过一个内网IP来查询到你的服务器,除非是在同一个局域网里面

问题1:但是一个路由器所控制的局域网的一台机器不可以访问另一个路由器所控制的局域网的一台机器(除非是在局域网里面),怎么办呢?

除非通过内网穿透(只是穿透某个窗口,不是把整个IP传过去了)

内网穿透:

1)现在咱们有一个内网IP,叫做192.168.0.10,咱们还有一个云服务器使用有外网IP的,内网IP访问不到,但是外网IP咱们是可以访问到的

2)咱们可以在80端口搞一个服务器,咱们把内网IP的主机和云服务器通过TCP建立连接

问题二:一个路由器的所管辖的一片局域网中的一台主机访问广域网的流程是怎么样的?

答:路由器本身是有自己固定的内网地址和外网地址,这个设备的源IP地址经过路由器后会转变成路由器的外网地址(因为这个局域网的所有设备经过路由器后都会转变成相同的路由器外网地址,所以为了区分,就用端口号进行区分)

当数据发送回来的时候,曾经路由器的外网地址会转变成具体的路由器的内网地址,此时再通过端口号来区分具体是哪台主机维护一个转换机制;

1)实际在NAT路由器内部,有一张自动生成的,用于地址转换的表。
2)该转换表中维护的就是局域网中主机的私有IP,与其对应访问的外网当中的某个公网IP之间的映射关系。
3)局域网中的主机第一次向外网发起数据请求时,就会生成表中的映射关系。
4)比如在TCP建立连接时,会建立对应的映射关系,在TCP断开连接后,就会删除对应的映射关系。

 

咱们再进行举一个详细的例子来进行分析一下:

咱们的CCTALK现在有两个连接:

NAT机制:把IP分成了内网和外网

1)对于一个外网IP,在互联网上面的任何位置都是可以访问到的

2)对于一个内网IP,只能在当前的局域网内部进行访问,局域网1的设备,不能使用内网IP访问局域网2的设备,因为局域网1的IP和局域网2的IP都是一样的怎么办?

3)NAT的设备也是存在极限的,那就是端口号的个数是65535,,如果一个局域网里面的连接数超过了65535,这个时候NAT就不一定好使了,端口号就不够用了,用端口号保证是哪一台主机

4)我自己家里面的电脑IP,这个IP只能在我自己家里面的局域网才可以进行访问,别的地区的人想要跨越局域网想要访问我的这个IP是做不到的

5)咱们要想进行通信怎么办?我们就需要共同使用一个带有外网IP的机器,我这边的机器访问了抖音,把我自己直播的画面推送到抖音服务器上面,你们也可以访问抖音,拿到我的直播画面

6)假设没有NAT机制,所有的IP都是唯一的,那么我就可以在自己的电脑上面搭建一个直播服务器,别人直接访问我的电脑就可以了 

NAPT技术

这就是网络地址端口转换:

1)如果局域网中的多台主机同时访问同一个外网服务,当路由器收到外网发来的响应数据时,路由器无法判断该响应数据应该转发给局域网中的哪台主机,因为该局域网中所有主机的数据包都由路由器代替发送了,因此发来的响应数据包的目的IP地址都是路由器的WAN口IP地址。
2)于是NAPT在建立转换表的映射关系时,除了建立局域网中私有IP与其对应访问的公网IP之间的映射关系外,还会加上一个由NAT路由器选定的端口号。
3)此时当局域网中的多台主机同时访问同一个外网服务时,虽然外网发来的响应数据的目的IP地址都是路由器的WAN口IP,但发给局域网中不同主机的响应数据对应的目的端口号是不同的,此时路由器就能通过IP+Port的方式来区分发给不同主机的数据包。
比如局域网中的主机A和主机B都在访问同一个服务器,并且它们访问服务器时采用的端口号都是1025。

4)假设主机A发送的数据包先到达路由器,此时路由器将数据包的源IP地址替换成自己的WAN口IP地址,由于路由器用于访问该服务器的1025号端口没有被使用,因此该数据包的源端口号可以不变。
5)当主机B发来的数据包到达路由器时,路由器同样将数据包的源IP地址替换成自己的WAN口IP地址,但此时路由器用于访问该服务器的1025号端口已经被主机A使用了,因此路由器会重新选定一个端口号对数据包的源端口号进行替换。
6)此时转换表中就会建立如下两队映射关系:

此时这张转换表既能保证从左到右的唯一性,也能保证从右到左的唯一性。

7)当服务器发来的响应数据到达路由器时,虽然服务器发给主机A和主机B的数据包对应的目的IP地址是一样的。
8)但路由器是用自己的1025号端口代替主机A进行数据请求的,而用的是1026号端口代替主机B进行数据请求的。
9)因此现在路由器可以继续根据数据包的源端口号,来判断应该将该数据包转发给主机A还是主机B,进行对数据包中的目的IP地址和目的端口号进行替换,然后转发给局域网内对应的主机。

 

1)路由器是工作在网络层的一个设备,负载将数据包从一个网络转发到另一个网络,但不能狭义的认为路由器只能工作在网络层。

2)NAT路由器在进行数据转发时,不仅有能力替换数据包的源和目的IP地址,而且在必要的情况下还可能会替换数据包的源和目的端口号,而端口号实际是传输层的概念。

3)转换表的生成和销毁都需要额外开销。

4)通信过程中一旦NAT设备异常,即使存在热备,所有的TCP连接也都会断开。

NAT不能从根本上解决问题端口号成为了限制

IPV6机制

1)这是用16个字节来表示端口号的问题,他从本质上解决了IP地址不够用的问题,但由于我们之前使用过的是IPV4(大部分的路由器都是不支持IPV4),所以要把所有路由器改成IPV6,所以要花钱(IPV4和IPV6都是不兼容的)

2)IPV6使用了一个更长的字段来进行表示IP地址,IPV4,4个字节 32 位(2的32次方)但是IPV6是16个字节,128位(2的128次方),1B(byte)=8b(bit);

3)咱们的运营商设备支持IPV6地址,要保证你的路由器和光猫也要支持IPV6地址(需要改设备)(硬件支持+软件配置)

IP协议其他知识的补充,IP地址本质上是做两件事:

1)地址管理:

网段划分,我们在组建局域网中非常重要的要点;

1)例如在同一个局域网里面的主机,网络号要相同,主机号不可以相同;

2)两个相邻的局域网,通过同一个路由器连接的局域网,网络号必须不相同,主机号可以相同

下面的路由器1左边是一个局域网范围,右边是一个局域网范围;

那么具体从哪里来区分那部分是网络号呢 ?

子网掩码非常有特点:左面全是1,右面全是0,将子网掩码和IP地址进行按位与操作,得到的就是网络号

如果主机号是255,就表示这个IP是广播IP,如果你搞一个UDP数据报,把目的IP写成主机号为255的IP,此时这个数据包就会发给每个局域网中的设备;假设手机里面装遥控器APP,也是可以操作电视的,但是前提是手机和电视必须在同一个局域网中,手机APP发送一个UDP数据报,把目的IP改成主机号是255的IP,此时电视就会返回响应;                                

2)路由选择:此处的路由,表示的是IP地址的数据规划功能,在我们的两个设备之间要找出一个通道,能够完成传输的过程                                                                          

1)此处的路由规划指的就是IP协议中的路径规划功能,路由选择的过程,其实就是在A和B之间选择一条合适的路径,这个选择其实不要是一个容易衡量的事情,环境比较复杂,要综合考虑路径的长短,通信的速度,设备开销的大小;

2)IP协议中选择具体的过程,和地图中的路径规划还有一定的区别;地图这里是知道整体的路况,综合进行会考虑

3)事实上在数据到达某个路由器后,这个路由器并不知道网络整体的环境(这个太复杂了),这个路由器只是知道它附近的情况(它了解他邻近的设备的情况),IP协议寻路过程,其实就是一个探索式启发式的过程;

例如我想要去内蒙古工业大学,假设没有地图,但是我可以去问路

1)一出门,我就抓住一个路人去问路,我怎么去内蒙古工业大学,如果他知道,就直接告诉我具体路线了,如果不知道,就会告诉我,你先去公交站牌上面问问路

,但是唯一确定的是你必须先去坐公交,先去公交站上去问问;

2)如果到达公路牌,在抓到一个路人,继续问内蒙古工业大学怎么走;如果他知道怎么走,他就直接告诉我的具体路线,如果她不知道,他就会说,虽然我不知道工业大学怎么走,但是你得先坐车,到下一个公交站到了小吃街问问;

3)到了小吃街之后,我继续问人,在抓住一个人,他说,你再继续向东走走,应该就到了;

在这个过程的推移当中,我就逐渐靠近了内蒙古工业大学,当我逐渐靠近之后,此时我抓住一个路人,就直接知道学校在哪里,一旦他知道了路线,我就可以按照他说的路线,直接找到学校;

上面是一个最简单的情况,但是事实上,远比这更复杂,也许你问的路人啥也不知道,告诉你的方向也不是正确的方向;他有可能知道目标在哪里,但是他知道好几条路线,你必须做权衡;

这里我们举例的每一个路人,都相当于是一个路由器,每个路人都有一个自己熟悉的范围,在这个范围内,他知道自己怎么走,或者只知道一个大概的方向;这个事情就相当于是路由器中的一个核心的数据结构,路由表;

路由器的存储空间有限,不可能通过一个路由器的的路由表就知道整个互联网的环境的所有节点情况,路由表里面大致描述了啥样的IP从啥样的网络接口WAN/LAN传输;

1)咱们IP数据包的目的地址,如果路由器认识,就直接告诉你路了,如果说当前路由器不认识,那么就会告诉你一个大致的方向,让你走到下一个路由器的时候再问问

2)依次往后走,其实本质上也是和目标越来越近,在此过程中,我们总会遇到一个认识这个地址的路由器,就可以具体的转发过去了

3)有的时候,你甚至不光遇到了一个认识这个地址的路由器,而且还认识多个路,这个时候就可以选择一个更合适的路了

啥叫路由器认识这个IP地址?

1)在路由器内部我们维护了一个数据结构叫做路由表,路由表里面就记录了一些网段信息(网络号,目的IP就是在这些网络号中进行匹配),以及每一个网络号对应的网络接口(网络接口其实本质上就是对应着路由器里面具体的端口,是接下来走LAN口还是WAN口?)

2)思路上就是某一个路由器上线之后(接入网络之后),就会和相邻的设备进行通信,认识一下,路由器就来构造一下路由表了(把这个LAN口对应一个网段,那个LAN口对应哪一个网段),路由器是可以更多的设备的设备,就可以更快的找的路了

3)咱们的路由表中的一个默认表项起到的效果就是当前咱们的IP地址在所有的表项都匹配不上的时候,此时就会告诉IP数据包,你问问别的路由器

为什么说TCP面向字节流?UDP面向数据包?

1)UDP:
发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付IP层。UDP对由应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。也就是说,无论应用层交给UDP的报文有多长,UDP都会照样发送,即一次发送一个报文。

2)TCP:
不论应用层发送的报文长度如何,到了传输层后,TCP总是把收到的报文看作一串字节流,并且把每一个字节都进行编号。TCP会根据当前网络的拥塞程度和对方接收缓存的大小,决定现在应当发送多长的报文段。TCP关心的是:必须保证每一个字节都正确无误的传输给对方,并不关心传输了多少个报文段,和每个报文段有多少个字节。这就表明了TCP是面向字节流的。

TCP(传输控制协议,Transport Control Protocol、UDP(用户数据报协议,User Data Protocol)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/187175.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【IoT】项目管理:做好敏捷管理,从敏捷看板开始

随着移动互联网、软件即服务(SaaS)和基于云计算的快速发展,你需要加快你的产品开发周期,将重点工作放在定义核心功能集的前端。 你可以从敏捷软件开发思想中借鉴一些最佳实践,并将这些实践应用于团队管理中。 敏捷思想…

React+eggjs+mysql实现多文件上传

文章目录一、开发环境二、数据库准备files表【视项目需求不同可略过,一般小项目可忽略】1.数据库准备files表的目的2.表结构三、后端接口准备1.配置config2.router.ts中配置路由3.创建controller4.创建service①为什么做这步②创建service/common文件③service/comm…

IronWebScraper for .NET 2023.1 Crack

用于从 HTML Web 应用程序中提取干净的结构化数据的 C# 框架。 IronWebScraper for .NET 2023 :Adds support for Microsoft .NET 6 and .NET 7.January 27, 2023 - 17:25 New Version ::: Added support for Microsoft .NET 6 an…

【Java】SpringCloud使用

SpringCloud使用 发起远程调用 根据订单id查询订单的同时,把订单所属的用户信息一起返回,但订单信息和用户信息分属两个不同的模块。 本质上是订单模块向用户模块发起请求,在spring中使用resttemplate发起。 MapperScan("cn.itcast.o…

电脑配置怎么看?这3种方法就可以轻松查看

在我们的日常生活和工作中,我们越来越离不开计算机。对于一台好的电脑,首先,我们需要了解它的配置,以便更好地选择它。电脑配置怎么看?可能还有很多人不知道。别担心,本篇文章就是来教会你如何查看电脑的配…

Android studio集成flutter

1.获取Flutter SDK 视窗安装|扑动 (flutter.dev) 2.配置环境变量 3.Android Studio安装Flutter插件 4.打开管理窗口cmd,输入flutter doctor。 5.因为第二步是感叹号(如下图),需要run: flutter doctor --android-licenses&#xf…

基础课程7:多线程与Pad可获得性

目标 GStreamer自动处理多线程,但在某些情况下,您可能需要手动解耦线程。本教程展示了如何做到这一点,此外,还完成了关于Pad可用性的阐述。更准确地说,本文档解释了: 如何为管道的某些部分创建新的执行线程Pad的可用…

SpringCloud之消息总线

spring CloudBus 将分布式的节点和轻量的消息代理连接起来。这可以用于广播配置文件的更改或者其他的管理工作。一个关键的思想就是,消息总线可以为微服务做监控,也可以作为应用程序之间相互通讯。 一、准备工作 本文还是基于上一篇文章来实现。按照官…

MySQL运维(二)MySQL分库分表概念及实战、读取分离详解

MySQL运维(二)MySQL分库分表详解、读取分离详解 1、MySQL分库分表相关概念 1.1 分库分表概念 1.1.1 分库的原因 分库:就是一个数据库分成多个数据库,部署到不同机器。 如果业务量剧增,数据库可能会出现性能瓶颈,这时候我们就需…

盘点那些免费好用的高清录屏软件,7款宝藏软件(2023年新版)

有不少的小伙伴私信小编,希望小编能够分享一些好用的高清录屏软件。那么今天,小编就给大家盘点一下那些免费好用的高清录屏软件吧!这些都是小编亲自体验过的,有需要的小伙伴赶紧码住收藏,这些宝藏软件错过就难找了&…

即时通讯开发之详解TCP/IP中的ICMP 协议、ping 和 Traceroute

前面讲到了,IP 协议并不是一个可靠的协议,它不保证数据被送达,那么,自然的,保证数据送达的工作应该由其他的模块来完 成。其中一个重要的模块就是 ICMP(网络控制报文)协议。当传送 IP 数据包发生错误--比如主机不可达,路由不可达等等,ICMP 协议将会把错误信息封包,然后传送回给…

拉伯证券|兔年资本市场三大重点

近来,承受《证券日报》采访的多位专家展望兔年资本商场,称深化推动股票发行注册制变革、稳步扩展准则型敞开以及防备化解严重危险是三大重点工作。 申万宏源证券首席经济学家杨生长对记者表明,本年是我国经济康复到常态性增加的要害一年&…

硬件系列(1)-电阻、电容、电感三大件

下面是目录电阻电阻参数(1)**SIZE 尺寸**(2)**TOLERANCE 误差**(3)PACKAGING TYPE 外包装(4)TEMPERATURE COEFFICIENT OF RESISTANCE 温度(5)**TAPING REEL & POWER 功率**(6)**RESISTANCE VALUE 电阻值**三位的四位的查表的(7) DEFAULT CODE 缺省编码电阻的分类碳膜电阻金…

leetcode63 不同路径二

题目描述 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。 现在考虑网格中有障碍物。那么从左上…

Elasticsearch7.3.2通俗易懂

文章目录一、安装1.步骤2.报错(1) can not run elasticsearch as root(2) could not find java in JAVA_HOME or bundled at ...(3) Error: Could not find or load main class XXX.JavaVersionChecker(4)BindTransportException[Failed to bind to [9300-9400]](5)max virtual…

如何在高压系统中实现电源和信号线的电气隔离

介绍 在一系列高压应用中存在电源和信号线的情况下,需要为设备和用户提供强大的保护,包括工厂自动化和电机驱动器等工业 4.0 系统。这延伸到汽车和电动汽车 (EV)、医疗系统、测试和测量应用以及光伏系统和电网基础设施等绿色能源…

ChatGPT API调用python和脚本实现

Chat GPT 由于其独特、近乎准确且类似人类的响应,如今在互联网上引起了过多的讨论。本文讨论如何通过 Python 代码连接到 Chat GPT API。 如果需要用website访问chatGPT, 请参考保姆级教程 火爆全球的网红OpenAI ChatGPT注册教程 文章目录第 1 步&#x…

随笔记——线程池

文章目录1 概览2 核心点2.1 使用线程池的好处2.2 如何创建线程池2.3 线程池的参数2.4 如何处理任务流程?2.5 如何关闭线程池2.6 拒绝策略2.7 线程池满了,会怎样?1 概览 2 核心点 2.1 使用线程池的好处 降低资源消耗:通过重复利用…

Servlet程序创建步骤

1. 创建项目 使用 IDEA 创建一个 Maven 项目. 1) 菜单 -> 文件 -> 新建项目 -> Maven 2. 引入依赖 Maven 项目创建完毕后, 会自动生成一个 pom.xml 文件. 我们需要在 pom.xml 中引入 Servlet API 依赖的 jar 包. 1) 在 中央仓库 中搜索 "servlet", 一般…

android 系统安全内容总结

部分android系统安全内容网上已经存在,这里的android系统安全内容还是以经验总结为主,夹带不少引用,并形成个人的理解。 android安全内容学习需要一定基础,没接触安全的开发可以认识一下,接触过安全的可以对比安全上的理解。组建android系统安全讨论群进行维护更新android…