🌸个人主页:https://blog.csdn.net/2301_80050796?spm=1000.2115.3001.5343
🏵️热门专栏:🍕 Collection与数据结构 (92平均质量分)https://blog.csdn.net/2301_80050796/category_12621348.html?spm=1001.2014.3001.5482
🧀Java EE(96平均质量分) https://blog.csdn.net/2301_80050796/category_12643370.html?spm=1001.2014.3001.5482
🍭MySql数据库(93平均质量分)https://blog.csdn.net/2301_80050796/category_12629890.html?spm=1001.2014.3001.5482
🍬算法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12676091.html?spm=1001.2014.3001.5482
感谢点赞与关注~~~
IP协议最大的两大作用有两个,一个是路径规,也就是路由选择,第二个是地址管理.他用来帮助数据在如此复杂的网络环境中确定一个合适的路径.


类似与奥特曼变身的过程.当变身到均衡模式的时候,各项指标都比较均等,当变身到力量模式的时候,攻击力大大提升,防御力相对较弱,当变身为迅捷模式的时候,移速叫快,但其他指标中等.
问题:IP协议是否也像UDP协议那样最大64KB?
不是的,IP数据报可以自己实现拆包和组包,这样的功能如果携带的数据载荷超出长度上限,IP就会自动拆分为多个数据报,每个数据报携带一部分数据,最终发送到对方之后再拼接好.但是这种办法只使用与载荷是TCP协议类型的载荷,UDP协议不适用.
那么问题又来了,UDP协议为什么不适用呢?
如果把一个很长的UDP数据报拆分之后,发送给对方接收之后.开始合并还原.还原出的数据,要交给UDP协议进一步解析,取出8个字节为报头,身下的作为载荷,但是剩下的到底有多长?就会从报文的长度字段中读取,最多64KB,剩余的就会被视为无效数据.
下面我们提到的3个报头字段都和IP数据报的拆分有关系.
问题:64次转发够用吗?经过64次一下的转发,应该到达目的地的数据报会到达目的地吗?
当然够用,路由器转发IP的时候,每个路由器不了解网络的全貌,但是知道相邻的设备有哪些,即使通过少数几次转发,也可以涵盖大量的设备.
这个设计到一个社会科学的理论,叫做"六度空间"理论.
https://baike.baidu.com/item/%E5%B0%8F%E4%B8%96%E7%95%8C%E7%8E%B0%E8%B1%A1/56374295?fr=ge_ala
IP地址是有限的,如果有一天,IP不够用了怎么办?下面是解决IP数量问题的三种方式.
也就是在一个用户不用网络的时候,他的网络IP就会被回收,分配给需要使用网络的用户,这样做确实可以缓解一定的数量问题,但是却没有从根本上解决问题,并没有是使得IP地址的数量增加.
这种机制也叫做网络地址映射.这种机制把IP地址分为了两种,私网IP和公网IP.也叫内网IP和外网IP.
公网IP是唯一的,但是私网IP允许在不同的局域网中重复但不允许在同一个局域网下重复.


NAT确实从很大程度上缓解了IP地址缺乏的问题,但是任然没有解决使得IP地址增多的目的.这时候我们就引入了IPv6版本的协议.
IPv6并不是IPv4的升级版,这两个版本的协议并不兼容,这也是如今IPv6没有在世界上大面积普及起来的原因.IPv6使用16字节,也就是128位来表示一个IP地址.它是8个由冒号隔开的16位字段,每个字段由4个十六进制数构成,比如AA22:BB11:1122:CDEF:1234 :AA99:7654:7410.
如果计算出IPv6地址的数量的话,这个数量将非常庞大,足以给地球上每一粒沙子分配一个IP地址.
IP地址分为两个部分,网络号和主机号.一共32位.

那么,在32位的IP地址中,如何区分那几位是网络号,那几位是主机号呢?我们有两种方法来区分.


路由选择通俗一点来讲,就是数据报在网络中找路的过程.
IP数据报在传输的过程中,是一跳一跳"问路"的过程.
• 当IP数据包,到达路由器时,路由器会先查看⽬的IP;
• 路由器决定这个数据包是能直接发送给⽬标主机,还是需要发送给下⼀个路由器;直接发送给主就是直接到达了目的地,而发送给下一个路由器就是让数据找到下一个问路的人.
那么路由器如何决定是否是直接发送到目标主机的呢?
当路由器收到数据的时候,会根据目的IP查询路由表,看在目的地在路由表中是否存在,如果存在,直接发送过去,如果不存在,路由器就会在他的路由表中共挑选一个最"神通广大"的朋友,把数据交给他,让他再去转发.
• 依次反复,⼀直到达⽬标IP地址;

[注意]
举例说明:问路
假如现在没有导航和地图,只能靠问路的方式从北京的天安门东到达西二旗.
- 从北京地铁的天安门东站出发,在天安门东站,开始问路人A:你知道西二旗怎么做地铁吗?路人A回答道:我不知道,但是我只知道,你需要坐福寿岭站方向的地铁,做到复兴门之后再看看,于是你便坐到了那里.
- 到达复兴门之后,你又开始问路人B:你知道西二旗怎么坐地铁吗?路人B回答到:我不知道,但我知道你需要换乘2号线,坐到西直门站再看看.
- 到达西直门后,你又开始问路人C:你知道西二旗怎么坐地铁吗?路人C回答到:你需要换乘13号线,坐那么4,5站地就可以到达西二旗.
这其中,你问路的路人就像一个个路由器,给你指路,而你就是一个数据报,需要从起点到达目的地.
在以太网中,既包含数据链层的内容,也包含一些物理层的内容.以太网不是一种具体的网络,而是一种技术标准.

什么是mac地址.
在前面的IP地址中,IP地址进行选择时候,IP层决定下一个路由器要找谁,到了数据链路层,就要决定具体要怎么找到下一个路由器.即数据报要从路由器中的哪个接口发送出去.
路由器在数据链路层也维护了一张表,这个表中就记录的是每个网口以及网口对端设备mac地址的关联关系.
举例说明:从太原到哈尔滨
从太原到哈尔滨的路线假设是: 太原—>北京—>沈阳—>哈尔滨
假如我们取出北京—>沈阳这一段:
- 源IP: 太原
- 目的IP:哈尔滨
- 源mac:北京
- 目的mac:沈阳
它们之间的传输作用其实就对应的是我们之前在网络初步的时候提到的TCP/IP五层模型中网络层与数据链层的传输作用.当时我们使用送快递的例子来说明了.这里我们再重复一次.
https://blog.csdn.net/2301_80050796/article/details/138972120?spm=1001.2014.3001.5501
举例说明: 网上购物
某人在淘宝上买了一箱面包.商家接到订单.
- 应用层: 他买来这箱面包是用来吃的,绝对不是其他的什么用途~~.就像我们通过网络拿到数据之后,来干嘛用.
- 传输层: 商家从仓库出库商品之后,寄到快递驿站,驿站揽收之后,快递单就会打印收货的地址.这时候就是只关注寄件地址和收件地址.也就是通信双方的"起点"的"终点".
- 网络层: 揽收之后,商家就要对运输的路径进行规划,比如要从深圳市寄到北京市.可以是在深圳发件之后,在保定中转,之后到达北京,也可以在天津中转,最后到达北京.
- 数据链层: 运输途中,两个结点之间该用什么样的交通方式,比如从深圳到北京比较远,可以采用铁路运输,从天津到北京比较近,可以采用大卡车运输.
MTU相当于发快递时对包裹尺寸的限制.这个限制是不同的数据链路对应的物理层,产生的限制.
• 以太网帧中的数据长度规定最小46字节,最大1500字节,ARP数据包的长度不够46字节,要在后面补填
充位;
• 最大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU;
• 如果⼀个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进
行分片(fragmentation);
• 不同的数据链路层标准的MTU是不同的;
DNS,全称Domain Name System,叫做域名解析系统.
当我们在使用IP地址查找一个主机的时候,IP地址过于复杂,没有任何规律,很不好记,这时候我们便引入了域名解析系统.通过DNS系统把一个IP地址转换成一个域名,这个域名是一个字符串.
举例说明:比如百度,www.baidu.com,这是百度的域名,但是百度广域服务器的IP地址不是这个东西,它的IP地址依然是一个点分十进制数字:202.108.22.5,只不过为了方便用户访问到百度,把这个点分十进制的数字用一个带有汉语拼音的域名代替掉了.

DNS服务器在查询域名对应的IP地址的时候,是按照一级一级的查询的.
比如www.baidu.com,其中com是一级域名.baidu是二级域名,在DNS服务器查询的时候,首先查询一级域名,再查询二级域名,以此类推…
在我们前面的语法部分讲到包的时候,我们通常也使用公司域名的反向域名对包进行命名.