网络协议 -- 基础概念
2018-01-05 18:53
423 查看
一、TCP/IP协议栈
二、IP地址、子网掩码、网关
2.1 IP地址及分类
IP地址相当于互联网上的门牌号, 计算机在启动的时候可以从磁盘(无盘系统例外)上读取该主机的IP配置。IP地址由4个字节(也就是32位)的二进制码组成,包含了网络号( net-id )和
主机号( host-id )。但现实中,我们经常还需要再继续划分
“子网”,这时就需要借用主机号的一部分充任子网号,这样IP地址也就可以看成由
标准网络号、子网号、主机号3部分组成的了,即
IP地址=标准网络号+子网号+主机号。
网络号、子网号、主机号三者间的关系,形象的描述如下:假设你的住址IP是
武汉市文治街16号,那么,
IP地址 = 武汉市文治街16号
网络号 = 武汉市
子网号 = 文治街
主机号 = 16号
IP地址种类 | 二进制组成(前缀位+网络位+主机位) | IP范围 | 网络数 | 主机数/网络 |
---|---|---|---|---|
A类地址 | 0+7位网络号+24位主机号 | 1.0.0.0 - 127.255.255.255 | 27−227−2 | 224−2224−2 |
B类地址 | 10+14位网络号+16位主机号 | 128.0.0.0 - 191.255.255.255 | 214−1214−1 | 216−2216−2 |
C类地址 | 110+21位网络号+8位主机号 | 192.0.0.0 - 223.255.255.255 | 221−1221−1 | 28−228−2 |
D类地址 | 1110+多播地址(用于多播) | 224.0.0.0 - 239.255.255.255 | - | - |
E类地址 | 1111+保留位(不开放, 保留使用) | 240.0.0.0-249.255.255.255 | - | - |
0000 0000 ~ 01111 11111,转换为十进制就是
0 ~ 127,以此类推。
关于网络数的解释
网络数就是一种网络的子网数, 比如A类地址, 可以分为多少个子网。看表格可以推出网络数的计算公式为: 2网络号位数2网络号位数。规定网络地址全为
0的IP地址是保留地址,意思是“本网络”。
在A类地址中,实际上
0.0.0.0是不指派的,而可以指派的最小网络是
1.0.0.0;网络地址为
127的A类IP地址保留作为本地软件环回测试本主机的进程之间的通信(比如常用的
127.0.0.1,但实际上网络地址为
127的都可以用作本地环回地址)。所以A类地址网络数为 27−227−2。
在B类地址中,实际上
128.0.0.0是不指派的,而可以指派的最小网络是 `128.1.0.0,所以B类地址网络数是 214−1214−1。
在C类地址中,实际上
192.0.0.0是不指派的,而可以指派的最小网络是 192.0.1.0,所以C类地址网络数是 221−1221−1。
关于主机数的解释
主机数就是一个子网里面可以容纳多少台主机。看表格可以推出主机数的计算公式为:2^主机号位数-2。主机号全为0表示该网络,而主机号全为1表示广播地址,所以要排除掉这两个。比如A类地址
1.0.0.0表示主机所在的网段的网络地址,
1.255.255.255为该网段的广播地址。
2.2 私有IP地址
经常可以看到192.168.1.101这类的IP地址, 这些是私有IP地址, 专用地址, 也就是局域网内使用的的IP地址。
公网IP地址是需要向有关部门申请备案的,私有IP地址不用申请, 但是仅限内网使用, 也节约公网IP。
IP地址种类 | 私有IP范围 |
---|---|
A类地址 | 10.0.0.0 - 10.255.255.255 |
B类地址 | 172.16.0.0 - 172.31.255.255 |
C类地址 | 192.168.0.0 - 192.168.255.255 |
2.3 子网掩码
IP地址=标准网络号+子网号+主机号。从IP分类可以很容易确定“标准网络号”,
32bit的IP地址除去前面的“标准网络号”之后,剩下的就是“子网号”和“主机号”,那么怎么确定“子网号”和“主机号”了? 这就需要借助
“子网掩码”了。子网掩码也是一个32bit(
xxx.xxx.xxx.xxx)的值,其中值为1的bit留给“标准网络号”和“子网号”,为0的bit留给“主机号”。我们可以将子网掩码和IP地址进行二进制
“与运算”,通过得到的结果来确定“子网号”。
以C类IP地址为例,对于规范的C类IP地址来说,规范子网掩码为
255.255.255.0,即用32比特IP地址的前24比特标识网络号,后8比特标识主机号。因而,每个C类网络下共可容纳254台主机(28−228−2)。 如今,我们先思索借用2比特的主机号来充任子网络号的情形。
C类网络地址
210.31.233.0,我们借用2bit的主机号来充当子网号,子网的数目为22−222−2(子网号无法全为0或1,所以减2).
为了借用原来8位主机号中的前2位充任子网络号,采用了新的非规范子网掩255.255.255.192。
采用了新的子网掩码后,借用的2位子网号可以用来标识两个子网:01子网和10子网(子网号无法全为0或1,因而00、11子网无法用)。
对于上图的01子网来说,其网络号的点分十进制的方式为:
210.31.233.64,该子网的最小IP地址为:
210.31.233.65,最大IP地址为:
210.31.233.126(主机号全为1位广播地址),共可容纳62台主机。对该子网的直接广播地址为:
210.31.233.127(主机号全为1)。
经常见到像
192.168.1.0/24这样的写法,它的意思是网络号为
192.168.1.0;子网掩码为24位,即
111111111 111111111 111111111 00000000,转为点分十进制就为
255.255.255.0,没有借用主机号来充当子网号,可以拥有的主机数为2828-2.
2.3 网关的作用
你的住址IP是武汉市洪山区文治街16号,你的父母只允许你和文治街的小朋友(同一个子网)一起玩耍,如果你想要去和别的街道(别的子网)的小朋友玩耍,你就需要经过你的父母的同意,由你的父母带你过去,这时候你的父母就充当了网关的角色,没有你的父母,你就不能和其他街道(其他子网)的小朋友玩耍。
相关文章:
WebRTC – IP地址
网络地址结构、转换函数介绍
debain 配置IP和DNS
三、包的封装(encapsulation)与解封装(Demultiplexing)
当应用程序使用网络传送数据时,数据按照协议栈从上到下的顺序,逐次通过每一层。其中每一层对收到的数据都要增加一些首部信息(有时还增加尾部信息)。最终生成一串比特流通过以太网来传输,我们称这串比特流叫帧。如图:
当数据报到达链路层时,链路层也要对IP数据包封装进行包装。链路层也要对IP数据包封装的方式主要有
以太网IP数据包封装(RFC894)、
IEEE 802 IP数据报封装(RFC1042)两种,最常使用的封装格式是以太网IP数据包封装(RFC894)。下图显示了这两种不同形式的封装格式:
从图中可以看到
以太网封装限制了数据帧的最大长度为1500字节,这个限制叫做MTU,最大传输单元(详见第四节)。
接收端收到帧之后,按照和上面相反的顺序(协议栈从下到上)来解包,依次解析每一层加入的头部(或尾部),最终将原始数据传给最上层应用程序。
如图:
因为传输层的TCP、UDP、ICMP等都要向网络层IP协议传送数据,这样在IP协议层解包的时候,需要知道这个包对应的上层协议是哪一个,因此IP协议必须在生成的IP首部加入某种标识,以表明数据的上一层的具体协议。为此,IP在首部中存入了一个长度为8bit的数值,称作协议域。常见的IP协议号有:
1表示ICMP协议,2表示IGMP协议,6表示TCP协议,17表示UDP协议。
完整的IP协议号见:IP协议号列表
四、MTU
前面第三节提到了以太网封装限制了数据帧的长度为1500字节,这个限制是在链路层封装IP数据报时作的。如果IP层的数据报比链路层的这个MTU值大,那么IP层就需要分片(英文:fragmentation),把数据报分成若干片,保证每一片的大小都小于MTU值。windows系统修改MTU值
查询当前MTU值netsh interface ipv4 show subinterfaces
修改MTU值
netsh interface ipv4 set subinterface "本地连接" mtu=1480 store=persistent
文章参考:
https://m.vipcn.com/a/360973/
https://ahaochan.github.io/posts/IP_address,_subnet_mask,_gateway_Introduction.html
https://www.zhihu.com/question/20717354
《TCP/IP详解 卷1:协议》在线阅读地址:http://www.52im.net/topic-tcpipvol1.html
相关文章推荐
- 网络协议基础概念
- 基础网络概念(六)无连接的UDP协议
- 我的IM - 基础篇[3] - 基于UDP通讯的IM设计[基于XML格式的网络通讯协议 以及 包解析器和包处理器的基础概念] 【转载】
- Linux网路编程网络基础之网络‘协议的概念
- 我的IM - 基础篇[3] - 基于UDP通讯的IM设计[基于XML格式的网络通讯协议 以及 包解析器和包处理器的基础概念]
- java网络编程协议与基础1—基本网络概念
- 网络基础知识及协议
- 一、Linux网络编程-TCP/IP基础(一)ISO/OSI参考模型、TCP/IP四层模型、基本概念
- 网络基础(4)- 网络层:网络层的两大协议ICMP和ARP的工作原理
- 蜜果私塾:http协议学习和总结系列--基础概念篇
- 网络基础知识----五项协议
- 基础网络概念(二)CSMA/CD、MAC、MTU、集线器与交换机、全双工与半双工
- 网络编程基础(1)-协议概要-IP、ICMP、UDP
- 神经网络基础概念
- http协议学习和总结系列——基础概念篇
- 【计算机网络】协议--基础知识
- 网络基础概念以相关技术
- [精通WindowsSocket网络开发-基于VC++实现]第三章——WindowsSockets基础—概念
- 常用网络术语 && HTTP协议的几个重要概念 && HTTPS传输协议