Linux高性能服务器编程-游双——第二章 IP协议详解

  • IP头部信息,IP数据报的路由和转发。

2.1 IP服务的特点

  • 为上层提供无状态、无连接、不可靠的服务。
  • 无状态:无上下文关系,不同步传输数据的状态信息,每条数据都是互相独立的。
  • 无状态的优点,简单高效。
  • 无连接:通信双方不长久维持对方地址信息,每次发送数据都得明确指定对方的IP地址。
  • 不可靠:IP协议不保证数据报的准确传达。所以为了保证数据传输的准确,这部分功能需要其他层来负责。

2.2 IPv4头部信息

2.2.1 IPv4头部结构

  • 在这里插入图片描述

2.2.2 使用tcpdump观察IPv4头部结构

  • tcpdump -ntx -i lo抓取本地回路上的数据包,x代表二进制输出
  • telnet 127.0.0.1
  • 抓取到的数据
IP 127.0.0.1.43866 > 127.0.0.1.23: Flags [S], seq 1519816004, win 65495, options [mss 65495,sackOK,TS val 2307846140 ecr 0,nop,wscale 7], length 0
	0x0000:  4510 003c cf1c 4000 4006 6d8d 7f00 0001
	0x0010:  7f00 0001 ab5a 0017 5a96 8d44 0000 0000
	0x0020:  a002 ffd7 fe30 0000 0204 ffd7 0402 080a
	0x0030:  898e effc 0000 0000 0103 0307

2.2.3 IP分片

  • 当IP数据报的长度超过帧的MTU时,将会被分片传输。
  • 分片可能发生在发送端,也可能在中转路由器上。
  • 通过ifconfig命令可以查看MTU大小为1500字节
          inet 地址:192.168.139.131  广播:192.168.139.255  掩码:255.255.255.0
          inet6 地址: fe80::3bfc:8600:1107:9530/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  跃点数:1
          接收数据包:19766 错误:0 丢弃:0 过载:0 帧数:0
          发送数据包:8991 错误:0 丢弃:0 过载:0 载波:0
          碰撞:0 发送队列长度:1000 
          接收字节:17383361 (17.3 MB)  发送字节:2082843 (2.0 MB)
  • sudo tcpdump -ntv -i ens33 icmp抓取icmp报文
  • 由于本文使用linux虚拟机,使用windows主机向虚拟机发送报文,ping xxx.xxx.xxx.xxx -l 1473
  • 从id可以知道,这两个报文是同一个IP数据报的分片,第一个的长度是1500,第二个是21,其中头部20字节。
IP (tos 0x0, ttl 64, id 49520, offset 0, flags [+], proto ICMP (1), length 1500)
    192.168.139.1 > 192.168.139.131: ICMP echo request, id 1, seq 4, length 1480
IP (tos 0x0, ttl 64, id 49520, offset 1480, flags [none], proto ICMP (1), length 21)
    192.168.139.1 > 192.168.139.131: ip-proto-1

2.4 路由

  • 路由是IP协议的核心任务,也就是控制IP数据包的传输路径。
  • CRC校验:循环冗余校验(Cyclic Redundancy Check, CRC)是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种信道编码技术,主要用来检测或校验数据传输或者保存后可能出现的错误。它是利用除法及余数的原理来作错误侦测的。

IP模块工作流程

在这里插入图片描述
主要功能:

  • 检查报文是否错误
  • 判断是不是发给本机,不是发给本机需要判断本机是否允许转发。
  • 计算下一跳的路由。

2.4.2 路由机制

  • 使用route命令和netstat命令查看路由表。
  • 步骤:先找目标中的主机IP。无匹配找网关对应IP,无匹配。发往默认地址。

2.4.3 路由表更新

2.5 IP转发

  • 不是发送给本机的IP数据包酱油数据包转发子模块处理。
  • 主机一般不负责转发,只负责接收和发送,路由器能执行数据报的转发.
  • 修改主机上的/proc/sys/net/ipv4/ip_forward内核参数, 参数默认0, 也就是不可转发, 修改为1就是可转发.

2.6 重定向

  • 路由重定向表示将你原来在转发列表中发向一台路由的路径改成另外一条路径,也就相当于让你的数据走另外一条路到服务器。

2.7 IPv6头部结构

2.7.1 IPv6固定头部结构

在这里插入图片描述

2.7.1 IPv6扩展头部

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值