IP地址
-
为每一个主机分配一个逻辑地址。
-
32位的二进制数 a.b.c.d。
组成
网络号+主机号 16 + 16
网络号:0~127 大型网络 128~191 中等规模网络 192~223 小型网络
格式头
-
4位版本号(version):指定IP协议的版本,对于IPv4来说,就是4。
-
4位头部长度(header length):IP头部的长度是多少个32bit,也就是 length * 4 的字节
数。4bit表示最大的数字是15,因此IP头部最大长度是60字节。
-
8位服务类型(Type Of Service):3位优先权字段(已经弃用),4位TOS字段,和1位保留
字段(必须置为0)。4位TOS分别表示:最小延时,最大吞吐量,最高可靠性,最小成本。
这四者相互冲突,只能选择一个。对于ssh/telnet这样的应用程序,最小延时比较重要;对于
ftp这样的程序,最大吞吐量比较重要。
-
16位总长度(total length):IP数据报整体占多少个字节。
-
16位标识(id):唯一的标识主机发送的报文。如果IP报文在数据链路层被分片了,那么每
一个片里面的这个id都是相同的。
-
3位标志字段:第一位保留(保留的意思是现在不用,但是还没想好说不定以后要用到)。第
二位置为 1表示禁止分片,这时候如果报文长度超过MTU,IP模块就会丢弃报文。第三位表
示"更多分片",如果分片了的话,最后一个分片置为1,其他是0。类似于一个结束标记。
-
13位分片偏移(framegament offset):是分片相对于原始IP报文开始处的偏移。其实就是
在表示当前分片在原报文中处在哪个位置。实际偏移的字节数是这个值 * 8 得到的。因此,
除了最后一个报文之外,其他报文的长度必须是8的整数倍(否则报文就不连续了)。
-
8位生存时间(Time To Live,TTL):数据报到达目的地的最大报文跳数。一般是64。每次
经过一个路由,TTL -= 1,一直减到0还没到达,那么就丢弃了。这个字段主要是用来防止出
现路由循环。
-
8位协议:表示上层协议的类型。
-
16位头部校验和:使用CRC进行校验,来鉴别头部是否损坏。
-
32位源地址和32位目标地址:表示发送端和接收端。
主机号
-
全0 网络号,代表这个局域网
-
全1 广播地址 用于给同一个链路中的所有主机发送数据包
* 本机环回测试 通常 127.0.0.1
如何解决IP地址浪费问题?
使用子网掩码来划分子网
子网掩码格式:网络位(用1表示)+主机位(用0表示)
例:255.255.128.0 11111111.11111111.10000000.0 网络号+主机号(子网号+主机号)
网络标识:网络号+子网号
如何使用IP地址和子网掩码来确定网络号+主机号?
网络号:IP 地址和 子网掩码 进行“按位与”操作
主机号:将子网掩码二进制按位取反,再与IP 地址位与计算.
判断源IP与目的IP是否在同一个网段?
使用IP地址和子网掩码来确定网络号(划分子网后的网络号)+主机号(划分子网后的主机号)
MAC地址
用于标识网络设备的硬件物理地址。描述的是路途上的每一个区间的起点和终点,即每一跳的起点和终点。
1. 每一个网卡都有一个MAC地址。
2.网络通信实质上是通过是网络硬件设备,将数据发送到网卡上,或从网卡接收数据。
3.硬件层面:只能基于MAC地址来识别网络设备的网络物理地址。
特殊的MAC地址
广播数据报的MAC地址为: FF:FF:FF:FF:FF:FF
发送一个广播数据报相当于对同网段的所有主机发送数据报。(数据报:数据链路层的数据发送名称)
设备功能
主机:有IP地址 + 不进行路由控制
路由器
网络层 有IP地址 + 进行路由控制
可划分公网和局域网 也可把局域网划分为多个子网。
路由器:路由+NAPT
作用:
1.网关:
①划分公网和局域网 局域网划分为多个子网
② 局域网主机发送数据报给公网主机时,需要将局域网主机IP+端口 -> 路由器公网IP+端口。(NAPT协议)
2.路由: 规划最优路线
主机&路由器:ARP缓存表+ARP寻址。
ARP协议
是介于网络层和数据链路层之间的协议 IP地址 <-> MAC地址
若根据ARP缓存表无法找到目的MAC地址,则发送ARP广播数据报。
集线器
物理层
复制接收到的数据并转发到所有端口
交换机
数据链路层
MAC地址转换表(MAC地址<->端口)+转发对应端口
DNS协议
应用层协议 域名 <-> IP地址 基于TCP/UCP协议传输
Windows系统的DNS缓存在C:\windows\System32\drivers\etc\hosts 文件中。
Linux/MAC系统的DNS缓存在 /etc/hosts 文件中。
NAT技术
私有IP <-> 全局IP
NAPT技术: 私有IP+端口 <-> 全局IP+端口(适用于多个局域网主机访问同一个外网服务器时)
TCP(Transmission Control Protocol)协议:传输层协议
-
对于数据传输安全和效率
安全机制:确认应答机制 超时重传机制 连接管理机制 流量控制 拥塞控制
效率机制:滑动窗口机制 延迟应答 捎带应答
-
是面向字节流的协议
-
具有发送缓冲区和接收缓冲区
-
发送数据大小具有限制。
如何避免“粘包”问题?
(TCP协议会出现 UDP不会)
包:应用层的数据包。
-
对于定长的包:
按照固定大小读取即可。
-
对于变长的包:
1、可以在包头,约定一个包总长度的字段。
2、可以在包与包之间提前明确分隔符。
适用于:可靠传输 例如:文件传输重要状态更新。
后续重点讲解
UDP协议
-
无连接 + 不可靠
-
知道IP+端口号 就可直接传输
-
无任何安全机制。
-
数据不会拆分,不会合并。
-
只有接收缓冲区(不能保准顺序一致),没有发送缓冲区。
-
传输数据大小受限,最大长度64K
适用于:高速传输和实时性要求较高的通信领域,例:视频传输 广播等。
MTU(Max Transmission Unit ): 最大传输单元
-
不同链路所对应的物理层所产生的限制。
-
由于数据链路层MTU的限制,对于较大的IP数据包要进行分包。
-
对于TCP影响
TCP的一个数据报也不能无限大,还是受制于MTU。TCP的单个数据报的最大消息长度,称
为MSS(Max Segment Size);
TCP在建立连接的过程中,通信双方会进行MSS协商。
最理想的情况下,MSS的值正好是在IP不会被分片处理的最大长度(这个长度仍然是受制于
数据链路层的MTU)。
双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值,得知双方MSS值后选择最小的MSS作为最终MSS。
-
对于UDP影响
一旦UDP携带的数据超过1472(1500 - 20(IP首部) - 8(UDP首部)),那么就会在网络层分成多个IP数据报。
这多个IP数据报有任意一个丢失,都会引起接收端网络层重组失败。那么这就意味着,如果
UDP数据报在网络层被分片,整个数据被丢失的概率就大大增加了。