IP协议详解:从数据包到网络通信
目录
1.基本概念
2.IP协议头格式
3.IP地址不够用问题
4.网段划分
5.路由选择
6.数据链路层
6.1认识以太网
6.2以太网帧格式
6.3认识MTU
6.4MTU对上层协议的具体影响
7.ARP协议
8.DNS应用层协议
1.基本概念
主机:配有IP地址,但是不进行路由控制的设备
路由器:既配有IP地址又能进行路由控制
节点:主机和路由器的统称
2.IP协议头格式
IP协议头是IP数据包的头部信息,包含了数据包传输所需的关键控制信息
4位版本号(version):实际上只有两个取值 4->IPv4 6->IPv6
4位首部长度:决定IP协议头的长度,以4字节为单位;IP协议是变长的,0->15(4 位能表示的最大值是 1111(二进制),转换为十进制即为 15),实际报头长度*4,最大值为 15,因此首部最大长度 = 15×4 = 60 字节
8位服务类型(TOS):3位优先权字段(已经弃用),4位TOS字段和1位保留字段(必须置为0) ①最小延时:数据从A到B的时间消耗最短 ②最大吞吐量:数据从A到B单位时间内,传输的数量更多 ③最高可靠性:IP协议并不像TCP那样有严格的可靠性,但是IP一些机制也是会影响到丢包的概率 ④最小成本:设备上消耗的资源较少 这四者相互冲突,只能选择一个,对于ssh/telnet这样的应用程序,最小延时比较重要;对于ftp这样的程序,最大吞吐量比较重要.
16位总长度:IP数据报整体占多少字节,包括头部和数据部分 IP协议,内置了拆包组包机制 单个IP数据报确实没法超过64KB,但是不代表IP协议不能传输超过64KB的数据 IP协议会自动把大的数据包,拆成多个IP数据报携带传输,在接收方再进行拼装
16位标识:给同一个原始数据报的所有分片分配一个唯一编号,表示主机发送的报文,如果IP报文在数据链路层被分片了,那么每一个片里的这个id都是相同的
3位标志字段:第一位保留(保留的意思是现在不用,但是还没想好说不定以后要用到),第二位置为1表示禁止分片,这时候如果报文长度超过MTU,IP模块就会丢弃报文. 第三位表示"更多分片",如果分片了的话,最后一个分片置为1,其他是0.类似于一个结束标记。
13位片偏移:决定组包后的先后顺序.13位分片偏移(framegamentoffset):是分片相对于原始IP报文开始处的偏移.其实就是在表示当前分片在原报文中处在哪个位置,实际偏移的字节数是这个值*8得到的.因此,除了最后一个报文之外,其他报文的长度必须是8的整数倍(否则报文就不连续了).
8位生存时间:一个数据包在网络中最多存活多长时间 假设构造一个IP数据报,目的IP写错了~~写成不存在的IP 如果让这样的数据包,无限传输,就会消耗很多网络的资源 TTL约定了传输时间的上限,达到上限之后,数据包就会自动被丢弃掉 TTL的单位不是s或者min,而是"次数" 指的是经过路由器转发的次数 Windows默认128,Linux默认64 发送一个IP数据报的时候,会有一个初始的TTL的值(32,64,128...) 数据报每次经过一个路由器转发,TTL就会-1(经过交换机,不减的) 一旦TTL减到0了,此时这个数据包就会被当前的路由器直接丢弃掉
8位协议:IP数据报中,携带的载荷,是哪种传输层协议的数据报,通过不同的数值感知到接下来要把数据交给TCP解析(6)还是UDP协议(17)还是其他协议
16位首部检验和:使用CRC进行校验,来鉴别头部是否损坏.验证数据在传输中是否出错(只针对首部,IP报头),载荷部分TCP/UDP都有自己的校验和了
32位源IP地址/32位目的IP地址:数据报从哪来,到哪里去,32位整数,通过三个圆点分开,每部分是一个字节,范围0~255,点分十进制写法
TCP 和 UDP 报文段作为传输层数据,确实会被封装在 IP 数据报的数据部分(payload)中,通过 IP 协议进行跨网络传输。这一过程是 TCP/IP 协议栈分层封装机制的核心体现,具体流程和特点如下:
应用层数据传递给传输层:应用程序(如浏览器、邮件客户端)将数据(如 HTTP 请求、邮件内容)交给 TCP 或 UDP 协议处理。
传