网络编程(六) ———— IP协议(IPV4IPV6)
接上一篇博客 万字详解TCP协议
文章目录
- IPV4首部
- (1) 4位版本号(4个比特位)
- (2) 4位首部长度
- (3) 8位服务类型(TOS)
- (4) 16位总长度
- (5) 8位生存时间(TTL)
- (6) 8位协议
- (7) 16位首部校验和
- (8) 32位源IP地址+32位目的IP地址
- IP协议
- 1.地址管理
- 2.路由算法(路由选择)
- 3.特殊的IP地址
- NAT
- 1. 动态分配IP
- 2.NAT机制(网络地址替换)
- IPv6
IPV4首部
(1) 4位版本号(4个比特位)
4位能表示的范围是 0-15 ,指定IP协议的版本,对于IPV4来说就为4
(2) 4位首部长度
首部长度也是4位(0-15),单位为4个字节,4个比特位能表示的最大数字是15,因此IP头部最大长度是4*15,也就是60个字节
(3) 8位服务类型(TOS)
TOS:Type Of Service,由8个比特位构成。
前3个比特位(0到2)为优先度权字段(已经弃用)
3到6分别为最小延迟,最大吞吐量,最高可靠性,最小成本。
这四个bit位中,必须只有一个为1,其他的得是0,不能有多个同时是1,因为不能同时保证最低延迟、最大吞吐量、最高可靠性、最小成本,这4个之间是发送冲突的
最后一位则为保留位,暂时没有定义
但实际开发中,很少涉及到这里。
列如你想要最小延迟时,还是得在应用层(应用程序中),通过一些巧妙地算法、数据结构来提高这里的效率
(4) 16位总长度
和UDP一样IPV4首部也有64K长度的字段
虽然IP协议看起来也是有个最大64K的限制,但是实际上,IP协议内置了分包组包功能
如果一个数据太长了,IP协议就会自动的拆成多个数据报,然后进行传输,然后进行传输,然后接收方就会重新进行组包
16位标识,相当于IP数据报的身份标识,把一个数据拆成多个IP数据报的时候,这三个IP数据报的标识是相同的
13位片偏移,就描述了当前这个包的顺序
3位标志:第一位暂未使用默认必须需是0,第二位表示"禁止分片"为0表示可以分片,为1表示不能分片,第三位表示"更多分片",如果第三位为1表示当前这个分片就是最后一个分片了。如果第三位0表示当前这个分片不是最后一个分片,后面还有分片
如果要在应用层,基于UDP实现拆包组包,就可以照着IP协议的方式抄作业
(5) 8位生存时间(TTL)
这个字段表示一个IP数据报最多在网络上存活多久,这个TTL不是一个"时间"概念,而是一个"次数"。由8个bit构成
TTL是指可以中转多少个路由器的意思,每经过一个路由器,TTL会减少1,直到变成0则丢弃该包。如果默认的TTL是64,经过24个路由器后,那么TTL就剩40了
为啥要有TTL?
主要防止这个IP数据报出现环路转发的情况
主机A => 主机B => 主机C => 主机A
(6) 8位协议
8位协议指的是当前的数据被接收方收到之后,分用的时候,要把载荷(数据)内容交给传输层的哪个协议
分用的时候就需要保证,载荷数据内容得和接下来交给的协议相匹配
这个IP报头中就会通过8位协议来制定传输层使用哪个协议来解析数据,具体就需要去查RFC文档
(7) 16位首部校验和
这个 校验和其实也就是一个类似于crc这样的东西
但是此处只需要校验首部即可,载荷部分(就是一个完整的TCP/UDP数据报)其实已经由TCP或者UDP自己进行校验了
(8) 32位源IP地址+32位目的IP地址
源IP就表示"发件人地址",目的IP就表示"收件人地址",IP协议最重要做的事情就是这个事情
IP协议
IP协议核心功能:
- 地址管理:能通过一系列的规则,把网络上的设备的地址给描述出来
- 路由选择:根据当下的源地址和目的地址,规划出一条合适的路径
IPV4协议中,主要通过一个32位整数来表示
更常见的做法是把这个32位整数表示成"点分十进制",使用3个点,把一个32位的数字分成4份,每一份就是8bit(一个字节),每一份就是[0-255]
比如 192.168.0.1
192 = 1100 0000
168 = 1010 1000
0 = 0000 0000
1 = 0000 0001
点分十进制存粹是给人看的,而计算机内部仍然是通过32位整数来表示的
1.地址管理
网段划分(组建局域网的时候非常关键)
要求一个局域网里的主机,网络号要相同,主机号不能相同
两个相邻的局域网(通过同一个路由器连接的局域网),网络号必须不相同
把IP地址一分为2,前半部分叫网络号,后半部分叫主机号
如何划分从哪到哪是网络号,可以通过子网掩码来区分
子网掩码非常有特点,左半部分都是1,右半部分都是0
然后把子网掩码和ip地址进行按位与运算,得到的结果就是网络号
子网掩码不一定非得是255.255.255.0,但是这个是最常见的
2.路由算法(路由选择)
此处的路由选择的过程其实就是A到B之间选择一条合适的路径来选择一条路线
这个路径会综合考虑,路径的长短,通信的速度,设备开销的大小
3.特殊的IP地址
如果是主机号为全0,这个IP就表示网络号,表示当前这个网段
如果是主机号为1,这个IP通常表示当前网段的“网关”(就是路由器,这个网络的出入口)
如果是主机号为255,这个IP表示"广播IP"
如果搞一个UDP数据报,然后把目的IP写成主机号为 255 的IP,此时这个数据就能在当前局域网中广播(会发给每一个局域网中的设备)
127.*,典型的就是127.0.0.1 环回IP表示自己
NAT
32位的IP地址,其实最多能表示42亿9千万,在当下互联网42亿是不够用的
那么如何解决IP地址不够用的问题呢?
1. 动态分配IP
一个设备接入网络,就分配,没接入网咯就不分配,因为并不是所有设备都在同时联网。但是这种办法并不是很好,因为设备毕竟这么多,并不能保证这些设备一些联网,一些不联网
2.NAT机制(网络地址替换)
使用一个IP地址,来代表一批主机
举个列子
上网买衣服填地址
收件人地址:XX省XX市XX区XX大学
收件人电话:通过电话再来具体区分收件人是谁
这个地址就能表示大学的所有学生的收货地址
一个局域网的中设备的IP是局域网中的IP,局域网的IP就只能在局域网内部来使用
类似于 192.168.xxx.xxx这样的IP,一定是一个局域网内部的IP
局域网内部的IP在同一个局域网内部不能重复,但是两个不同的局域网可以使用重复的局域网IP
此时直接连接到广域网(外网)的路由器设备就会有一个”外网IP“
实际上,这样的局域网里面的设备可能有很多,网络结构可能也很复杂。一个外网IP可能代表着几百,几千甚至几万个网络设备
当局域网内部的数据往广域网上发送的时候,此时路由器就会自动的把其中的源IP替换了**
NAT机制是当下咱们互联网中的典型情况
三类IP都表示局域网
- 10.*****
- 172.16.-172.31.
- 192.168.*
NAT机制虽热解决了IP地址不够用的问题,但是也引入了其它的问题
比如在自己的机器上搭建了一个服务器,此时想让其它用户通过外网来访问你的服务器,这个时候做不到
自己的机器,只有局域网IP(内网IP),内网IP是可以重复的
其它主机没法就根据一个内网IP找到你的服务器(除非是在同一个局域网里)
IPv6
IPV6相当于IPV4的升级版
IPv4是使用4个字节(32位)表示IP地址,IPv6使用16个字节(128位)表示IP地址。
IPv6从根本上解决了IP地址不够用的问题,IPv6和IPv4是不兼容的,所以升级IPv6是一件成本比较高的事情
当下主流还是IPV4,也可能几年后会慢慢普及
下一篇网络知识即将更新
网络编程(六) ———— IP协议(IPV4IPV6)相关推荐
- WinSock API网络编程——TCP/IP协议详解
WinSock API网络编程--TCP/IP协议(http://www.impcas.ac.cn/usr/lujun/browse.asp?id=winsock_tcp) ...
- 编写tcp服务器发送hex格式_Android网络编程-TCP/IP协议
在Android网络编程-计算机网络基础一文中得知,IP协议属于网络层,TCP.UDP协议属于传输层. IP协议是TCP/IP协议族的动力,它为上层协议提供无状态.无连接.不可靠的服务. TCP协议是 ...
- 网络编程--TCP/IP协议(一)
目录 前言 一丶网络基础 <1>认识IP地址 1>具体格式 2>组成 3>分类 4>子网掩码 <2>认识MAC地址 二丶网络设备及相关技术 <1& ...
- 网络编程--TCP/IP协议
参考:https://lijie.blog.csdn.net/article/details/105297532 https://blog.csdn.net/qq_20785973/article/d ...
- 网络编程--TCP/IP协议(二)
目录 前言 一丶TCP协议格式 端口号 序列号 确认号 首部长度 保留字段 标志位字段 窗口大小 检验位 紧急指针 可选项字段 二丶TCP协议的特性 <1>TCP协议的特点 <2&g ...
- java socket ip_JAVA 网络编程 TCP/IP、Socket 和协议设计
[JAVA 网络编程 TCP/IP.Socket 和协议设计] TCP/IP 协议简介 IP 首先我们看 IP(Internet Protocol)协议.IP 协议提供了主机和主机间的通信. 为了完成 ...
- 网络编程-TCP/IP协议栈-TCP协议
TCP协议 TCP协议作用 TCP协议位于协议栈的传输层.当应用层向TCP层发送用于网间传输的,用8字节表示的数据流,TCP则吧数据流分割成适当长度的报文段,最大传输段大小(MSS)通常受到改计算机连 ...
- 网络编程-TCP/IP协议栈-IP协议
协议 协议就是约定的一种规则,例如扑克游戏中约定好的各种规则,2<3<4<5<-等,以此作为游戏规则.当所有人都遵循这个规则,那么久可以不需要任何多余的交流就可以进行游戏,这个 ...
- 网络编程——基于TCP协议的通讯录【课程设计】
网络编程--基于TCP协议的通讯录[课程设计] 本文目录 网络编程--基于TCP协议的通讯录[课程设计] 一.设计题目和要求 设计目标: 课程设计系统组成及模块功能: 二.设计内容 服务端 客户端 S ...
最新文章
- 深度学习先驱Bengio:AI顶会论文的Deadline是时候取消了
- (linux) Firefox is already running, but is not responding解决方法
- 利用 Pandas 将数据集中的某列文本拆分为多行
- 做网页需要学哪些计算机知识,网页美工设计需要掌握的电脑常识
- p2657 windy数
- 【Core Spring】二、装配beans
- Android Studio 代码自动提示无效
- CentOS修改主机名(hostname)
- MATLAB课程表分配问题,求助matlab大神,学校的课程安排太骚了,我们压根就不用学matlab...
- 为什么现在好多年轻人连1万都掏不出来,却觉得100万很少?
- linux 用户管理和帮助命令
- 【转】java.util.ResourceBundle使用详解
- 232接口针脚定义_VGA接口定义,详细图文资料
- visual studio code Python终端运行_微软常用运行库合集 v2020.5.20 装机必备神器静默整合免费版...
- 陌陌探探真人头像过网图,探探真实头像蓝V怎么弄?
- Delphi中使用ReportMachine 6.5中汇总行不进行汇总的设置问题
- word怎么恢复自动保存_如何使用自动恢复自动保存Word文档并恢复丢失的更改
- win7计算机管理打开超慢,大师解答win7系统打开资源管理器窗口速度很慢的恢复技巧...
- 暖一壶秋色,与你共清欢
- 自动生成课堂分析报告写后感想
热门文章
- PPT中绘制图形如何导入VISIO编辑
- python合并视频和音频_Python做图像处理及视频音频文件分离和合成功能
- appium ios自动化环境搭建
- 服务器重启oracle数据库服务器,oracle数据库怎么重启_网站服务器运行维护,oracle,数据库,重启...
- 组装多媒体计算机步骤及配件,组装计算机实习报告
- android spinner自定义样式,android自定义Spinner下拉菜单(下拉列表框)样式
- 常见的web服务器软件
- web的一些基本名词概念
- “鬼影”病毒疑“躲猫猫”避风,金山发专杀工具施救
- 图神经网络_task03