网络层IP协议(TCP)

server/2024/12/16 12:28:33/

IP协议:

        在了解IP协议之前,我们市面上看到的"路由器"其实就是工作在网络层。如下图:

那么网络层中的IP协议究竟是如何发送数据包的呢?

IP报头:

IP协议的报头是比较复杂的,作为程序猿只需要我们重点理解几个点。

4位版本:

        当今的IP的版本有两种:IPv4和IPv6。

        现如今IPv4是主流的版本。

4位首部长度:

        IP协议报头的长度是可变的。IP报头的长度 = 0-15 * 4 KB.

        (4位的取值范围就是0-15)

8位服务类型:

        3位优先权字段(已经弃⽤), 4位TOS字段, 和1位保留字段(必须置为0) . 4位TOS分别表⽰: 最⼩延时, 最⼤吞吐量, 最⾼可靠性, 最⼩成本 . 这四者相互冲突, 只能选择⼀个。
对于ssh/telnet这样的应⽤程序, 最⼩延时⽐较重要; 对于ftp这样的程序, 最⼤吞吐量⽐较重要。

16位总⻓度(total length):

        IP数据报整体占多少个字节(64KB)

16位标识(id): 

        唯⼀的标识主机发送的报⽂. 如果IP报⽂在 数据链路层被分⽚ 了, 那么每⼀个⽚⾥⾯的这个id都是相同的.
需要注意的是IP数据报会自动完成拆包和组包。

3位标志字段:

        第⼀位保留(保留的意思是现在不⽤, 但是还没想好说不定以后要⽤到). 第⼆位置为1表⽰禁⽌分⽚, 这时候如果报⽂⻓度超过MTU, IP模块就会丢弃报⽂. 第三位表⽰"更多分⽚", 如果分⽚了的话, 最后⼀个分⽚置为1, 其他是0. 类似于⼀个结束标记.

13位分片偏移:

        13位分⽚偏移(framegament offset): 是分⽚相对于原始IP报⽂开始处的偏移. 其实就是在表⽰当前分⽚在原报⽂中处在哪个位置. 实际偏移的字节数是这个值 * 8 得到的. 因此, 除了最后⼀个报⽂之外, 其他报⽂的⻓度必须是8的整数倍(否则报⽂就不连续了).

8位⽣存时间(Time To Live, TTL):

数据报到达⽬的地的 最⼤报⽂跳数. ⼀般是64. 每次经过 ⼀个路由, TTL -= 1 , ⼀直减到0还没到达, 那么就丢弃了. 这个字段主要是⽤来防⽌出现路由循环。
可以假设构造了一个IP数据报,该数据包中的目的IP写了一个不存在的,此时这样的数据包将无限传输,但是设置了TTL,约定了传输上限,只要达到上限,数据包会自动丢弃。

8位协议:

        IP数据报传输过程中里面携带的载荷肯定是传输层的相关协议,8位协议里面的数值就代表着传输层的哪一个协议。

16位首部检验和:

        检验IP报头中数据是否出错。这里不需要检验载荷中传输层协议的正确性。

地址管理:

        路由器工作在网络层,现在的路由器都有自动分配IP的功能DHCP

       在IPv4的报头中我们也可以观察到,IP一共是32位,也就是一共42亿9千万个,但是随着时代的发展,这么多的IP地址已经不够用了,那么该如何解决以上的问题呢?


方案1:

        动态分配IP,一个设备上网就分配一个IP,不上网就不分配。

方案2:


        NAT网络地址转换。

        可不可能使用一个IP代表一大波设备?

        把IP地址分为两大类:

        1.公网IP\外网IP

        2.私网IP\内网IP  

 要求公网IP必须是唯一的,私网IP是允许重复的(在不同的局域网中是可以重复的)

一个设备在上网的时候,IP数据包中的IP地址会被NAT设备(通常是路由器)进行自动修改。

那么就会有以下几种4种情况:
1.同一个局域网内:主机A访问主机B

2.公网的设备A访问公网的设备B

3.一个局域网中的主机A,访问另一个局域网中的主机B

4.局域网中的设备A,访问公网中的设备B

一共有以上的4种访问情况,究竟哪种情况会触发NAT机制?

首先第一种:同一个局域网下的设备互相访问,不会触发NAT机制。

其次第二种:公网之间相互访问的设备,不会触发NAT机制。

再其次第三种,第三种这种访问时不被允许的,所以也谈不上NAT机制。

所以只有第四种情况才会触发NAT机制。

那么究竟是怎样出发的呢?

如下图:

那么此时一个路由器可能关联着许多设备,那么这么多设备如果同时发送QQ消息,此时发送给QQ服务器的IP地址都是一样的了。

结论:此时就相当于一个公网IP地址代表着一大波设备!!

但是此时还是有问题,此时QQ服务器给我返回响应,最后通过路由器传回客户端,那么这个端口号应该怎么填写:

例如:

此时在经过路由器的时候,路由器不仅进行了NAT,其实还将端口号进行了一个修改定制:

此时所有设备在经过路由器的时候,相当于路由器这边会自动生成一个表记录IP和端口号的键值对,最后都已新的IP和端口号发送给对端。

之后等服务器相应过来的数据,经过路由器,对应查表之后发送给不同的客户端。

方案3:

        使用IPv6解决IP不够用的问题.

        IPv4使用的是32位4个字节。

        IPv6使用的是128位16个字节. 

IPv6是16个字节,可以说,能够表示的IP数量够地球上每一粒沙子拥有一个独立的IP。

 网络号&主机号:

        那么理解完IP的协议和地址管理之后,问题又来了,IP中的数字是什么含义?

        IP地址一共是32位,可以一分为二,左半部分表示网络号,右半部分表示主机号。

        例如:

这里的一半并不代表均分,至于左半部分占的多还是右半部分占的多,就和主机上面的子网掩码有关。

网络中规定:

        同一个局域网下,网络号必须相同,但是主机号一定不同

        两个相邻的局域网,网络必须不同


http://www.ppmy.cn/server/150626.html

相关文章

Debezium OracleSnapshotChangeEventSource 分析

Debezium OracleSnapshotChangeEventSource 分析 目录 1. 概述2. 核心功能3. 实现分析4. 使用场景5. 示例分析6. 最佳实践7. 总结1. 概述 OracleSnapshotChangeEventSource 是 Debezium Oracle 连接器中负责执行数据库快照的核心组件,主要负责: 初始数据快照增量数据快照Sc…

IIC 通信协议

IIC 通信协议 参考:CSDN-Projectsauron、B站-江协科技 IIC Overview IIC协议(Inter-Integrated Circuit,可简写为 I2C),是一种用于各种电子设备之间进行通信和数据交换的串行通信协议。它是由飞利浦(Phil…

2023蓝桥杯题解 仅C、D

2023蓝桥杯题解 洛谷2023蓝桥杯C题 洛谷2023蓝桥杯D题 C题 [蓝桥杯 2023 省 A] 平方差 题目描述 给定 L , R L,R L,R,问 L ≤ x ≤ R L \leq x \leq R L≤x≤R 中有多少个数 x x x 满足存在整数 y , z y,z y,z 使得 x y 2 − z 2 xy^2-z^2 xy2−z2。 输入…

线程与进程基础

文章目录 前言一、 线程与进程1.1 什么是线程与进程?1.2 并发与并行1.3 同步调用与异步调用1.4 为什么要使用多线程? 前言 在学习juc前,需要先对进程和线程之间整体有一个认知。我们之前或多或少接触过,一些特别高大上的概念&…

Kubernetes 常用操作大全:全面掌握 K8s 基础与进阶命令

Kubernetes(简称 K8s)作为一种开源的容器编排工具,已经成为现代分布式系统中的标准。它的强大之处在于能够自动化应用程序的部署、扩展和管理。在使用 Kubernetes 的过程中,熟悉常用操作对于高效地管理集群资源至关重要。本文将详…

循环神经网络RNN笔记

《动手学深度学习》-RNN 0 引言 默认数据都来自于某种分布, 并且所有样本都是独立同分布的 (independently and identically distributed,i.i.d.)。 然而,大多数的数据并非如此。 例如,文章中的单词是按顺…

任务5 Web服务配置与管理

Web服务概述 Web服务简介 当今人们获取和传播信息的主要方式之一。 Web服务提供的资源多种多样,可能是简单的文本,也可能是图片、音频和视频等多媒体数据。 常用的浏览器有Chrome、Internet Explorer,以及Firefox等。 手机等移动设备成为…

Oracle 临时表空间管理与最佳实践

Oracle 临时表空间管理与最佳实践 内容摘要 本文深入探讨了Oracle数据库中临时表空间的管理和最佳实践。主要内容包括: 临时表空间的概述及其在Oracle 19c多租户架构中的特点临时表空间组的优势及其创建方法非临时表空间组的临时表空间日常维护操作命令临时表空间…