IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 【计算机网络】网络原理之TCP/IP协议(二) -> 正文阅读

[网络协议]【计算机网络】网络原理之TCP/IP协议(二)


引言:

在上篇文章网络原理之TCP/IP协议中,我们一起学习了TCP的相关知识,现在让我们再一起来共同学习有关IP协议的知识吧😊😊

网络层

IP协议

IP协议处于网络层,主要完成两方面的工作:

  • 地址管理
  • 路由选择

IP协议头格式

在这里插入图片描述
8位生存时间(Time To Live,TTL): 表示一个IP数据报,在网络上还能存在多久,这里的单位不是s或者ms,而是转发次数。IP数据报被发送的时候会有一个初始的TTL (比如常见的取值128或者64)
IP数据报每次经过了一个路由器,TTL就会- 1,如果TTL减到0了,此时收到这个包的路由器就会把这个包给丢弃。
主要是因为有些包里面的IP地址,可能是永远也到不了的,像这样的包,不可能让它在网络上无休止的转发(占用硬件资源太多了),正常的IP数据报都会在既定的TTL内来到达。
8位协议: 表示我们当前传输层使用的是哪种协议,TCP或者UDP都有不同的取值
16位头部校验和: 使用CRC进行校验,来鉴别头部是否损坏。——也就是用来校验数据是否正确
32位源地址和32位目标地址: 源IP表示发件人地址,目的IP表示收件人地址;对于IPv4来说,一个IP地址本质上是32 位的整数,通常用 “点分十进制” 这样的方式来表示这个IP地址,三个点把32位整数分成4个部分(172.17.77.38),每个部分1个字节,每个部分的取值就是0 ~ 255,而给人看的通常就是点分十进制,给机器存储的IP,在底层仍然是按照4个字节整数来表示的。

地址管理

IP地址可以分成两个部分:网络号和主机号

  • 网络号:描述当前的网段信息(局域网的标识)
  • 主机号:区分了局域网内部的主机

要求同一个局域网里,主机之间的网络号是相同的,主机号不能相同;两个相邻的局域网(同一个路由器连接的),网络号也是不同的。

图解如下:
在这里插入图片描述
那么到底前多少个bit位是网络号呢?这是如何规定的?是固定3个字节嘛?

其实不是固定的??这就要引入一个“子网掩码”这样的概念了,用它来表示多少个bit位是网络号

在这里插入图片描述

特殊的IP地址

  1. 如果IP的主机号全为0,该IP就表示网络号(局域网里的一个正常设备,主机号不能设为0);
  2. 如果IP的主机号全为1,该IP就表示"广播地址",往往广播地址上发的消息,整个局域网中都能找到;
  3. IP地址是127开头的,该IP都表示"环回IP",表示自己主机;
  4. IP地址是10开头,192.168开头或172.16 - 172.31开头的,表示该IP地址是一个局域网内部的IP(内网IP);剩下的都是外网IP(直接在广域网上使用的IP)。

要求外网IP一定是唯一的,每个外网IP都会对应到唯一的一个设备,内网IP只是在当前局域网中是唯一的,不同的局域网里,可以有相同的内网IP的设备。

如何解决IP地址不够用的问题

按理说咱们预期的IP地址应该就表示一个网络上的唯一位置,结果这咋不同的局域网里,可以有相同的内网IP的设备,也就是说同一个IP咋就可以表示不同的设备了呢???

那是因为由于当前IPv4协议,使用的IP地址是32位的整数,而32位能表示的数据范围差不多为42亿9千万;如果给每个设备都分配一个唯一的IP地址,意味着世界上的设备就不能超过42亿9千万;但是
随着网络的发展,现在世界上的设备越来越多,已经超过了42亿9千万,因此让每个设备都有唯一的 IP地址已经不现实了。
那么该如何解决这个问题呢???????

动态分配IP地址

让每一个设备连上网的时候,才有IP,不连网就没有IP,让这个IP给别人用的人用。
但是这个方案不能从根本上解决问题(设备没有减少,IP也没有增加)🤔🤔

NAT机制

让多个设备共用同一个IP(外网IP)——就像我们在学校网购,学校这么多人填的收货地址都是学校的地址
把网络分成了内网(局域网)和外网(广域网),要求外网IP必须表示唯一的设备,同时内网中的若干设备,可以共用一个外网IP(就是内网IP可以重复出现,只有在当前局域网内才是唯一的)
NAT机制,把IP分成了内网和外网,也隐含了一个重要的结论:

  • 对于一个外网IP,可以在互联网的任意位置都能访问到
  • 对于一个内网IP,只能在当前局域网内部访问局域网1的设备,不能使用内网IP访问局域网2的设备

NAT也是存在极限的(端口号的个数65535),如果一个局域网里的连接超过了65535,这个时候NAT就不一定能好使了,端口号就不够用了。所以NAT也没有从根本上解决问题,只是续命了一波,那么这也就引出了IPv6

IPv6

IPv6在报头中使用了一个更长字段来表示IP地址,IPv4是4个字节—32位,而IPv6是16个字节,128位

在这里插入图片描述
每个数字都是一个十六进制的数字(4bit),每个冒号分割了两个字节。
那么既然IPv6这么香,为啥现在还是在用IPv4 + NAT呢??
这里最大的问题在于,IPv6和IPv4是不兼容的??对于一个设备来说支持IPv4和IPv6需要两个截然不同的机制,现有的大量的网络设备(路由器…很可能都是只支持IPv4,不支持IPv6)

路由选择

也就是规划路径,两个设备之间要找出一条通道能够完成传输的过程,要想找出通道,前提是得先认识路。
IP协议的路由选择也是类似的,IP数据报中的目的地址,就表示了这个包要发到哪里去,如果当前路由器直接认识就直接告诉你路了;如果当前路由器不认识就会告诉你一个大概的方向,让你走到下
一个路由器的时候再来问问,依次往后走,其实也是在离目标越来越近。这个时候就总会遇到一个认识这个地址的路由器,于是就可以具体的转发过去了;有的时候,不光遇到了一个认识这个地址的路由器,并且他还认识多个路,那么就可以选一个更合适的路 了。
那么什么叫路由器"认识"这个IP地址呢?

在路由器内部维护了一个数据结构——路由表,路由表里面就记录了一些网段信息 (网络号) , (目的IP就在这些网络号中匹配)以及每个网络号对应的网络接口(网络接口其实就对应到路由器里面具体的端口)

数据链路层

在这里插入图片描述
已经有IP地址了为啥还要物理地址??
这是由于当年网络层协议和数据链路层协议,是各自独立研发出来的,导致mac地址和IP地址就有点重复了。 按理来说,一套地址就够了,现在的现状,就是当前mac地址和IP地址同时使用,表示不同的功能:

  • IP用来表示一次传输过程中的起点和终点(不考虑NAT的情况,一个IP数据报中的源IP和目的IP是固定的)
  • mac用来表示传输过程中,任意两个相邻节点之间的地址 (一个以太网数据帧,在每次转发过程中,源mac和目的mac都会改变)

MTU

就是一个以太网数据帧能够承载的数据范围,这个范围取决于硬件设备。
以太网和硬件也是密切相关的,其他硬件设备,对应的数据链路层协议,可能就又不一样了,那么MTU也不相同了。
数据链路层考虑的是相邻节点之间的数据传输,考虑这个细节的时候要关注交通工具是啥,那么如果数据报超过了MTU咋办??

IP层不是可以分包嘛,而IP层的分包,其实不是给IP的报头64k准备,更多的是为了适应数据链路层的MTU。

MTU对IP协议的影响

由于数据链路层MTU的限制,对于较大的IP数据包要进行分包。

  • 将较大的IP包分成多个小包,并给每个小包打上标签;
  • 每个小包IP协议头的 16位标识(id) 都是相同的;
  • 每个小包的IP协议头的3位标志字段中,第2位置为0,表示允许分片,第3位来表示结束标记(当前是否是最后一个小包,是的话置为1,否则置为0);
  • 到达对端时再将这些小包,会按顺序重组,拼装到一起返回给传输层;
  • 一旦这些小包中任意一个小包丢失,接收端的重组就会失败。但是IP层不会负责重新传输数
    据;

MTU对UDP协议的影响

  • 一旦UDP携带的数据超过1472(1500 - 20(IP首部) - 8(UDP首部)),那么就会在网络层分成多个IP数据报。
  • 这多个IP数据报有任意一个丢失,都会引起接收端网络层重组失败。那么这就意味着,如果
    UDP数据报在网络层被分片,整个数据被丢失的概率就大大增加了。

MTU对于TCP协议的影响

  • TCP的一个数据报也不能无限大,还是受制于MTU。TCP的单个数据报的最大消息长度,称为MSS—TCP中在IP不分包的前提下,最多搭载多少载荷(Max Segment Size);
  • TCP在建立连接的过程中,通信双方会进行MSS协商。
  • 最理想的情况下,MSS的值正好是在IP不会被分片处理的最大长度(这个长度仍然是受制于数据链路层的MTU)。
  • 双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值。
  • 然后双方得知对方的MSS值之后,选择较小的作为最终MSS。
  • MSS的值就是在TCP首部的40字节变长选项中(kind=2);

ARP协议

ARP不是一个单纯的数据链路层的协议,而是一个介于数据链路层和网络层之间的协议;

ARP协议的作用

ARP报文并不是用来传输数据的,只是起到一个辅助的效果

路由器这样的设备在转发数据的时候首先拿到的是一个IP地址(目的IP) ,通过IP地址来决定接下来这个数据咋走(从哪个端口出去,发到哪个设备上),因此就得决定,接下来封装的以太网数据帧,目的mac是啥,需要根据ARP协议建立起IP -> mac这样的映射关系。这类似于hash表这样的键值对结构,但是这个表不一定是在内存里, 也可能是直接在硬件中存储。

当设备启动的时候就会向局域网中,广播ARP报文,每个设备收到之后,都会给出一个应答,应答的信息中就包含了自己的IP和mac发起广播的那一方, 就可以根据这些回应,建立起这个映射表了。

DNS协议(补充)

DNS,即Domain Name System,域名系统,是一个应用层协议。

由于IP地址不好记,即使写成了点分十进制,但是仍然对于人类来说不太友好,所以就可以使用一串英文单词来表示这个IP地址。这串英文单词,就称为域名。
在这里插入图片描述

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-05-08 08:27:36  更:2022-05-08 08:29:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/29 10:39:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计