Ipv4学习笔记之实践篇

2023-11-19

什么是IP

学习IP是入门网络的第一步, 要想了解网络的工作原理, 首先要了解的就是IP协议.
IP standards for Internet Protocol.
也就是说IP是Internet Protocol的缩写, 是internet通信协议.
通俗点讲, 如果接入internet的设备需要通信, 就必须要使用这个协议.
大家经常看到的IP协议有IPv4和IPv6两个版本, IPv4用的最多,本文只涉及IPv4.

IP 协议的功能

要想知道IP协议的内容, 就需要了解一下IP协议的包头定义了哪些字段.
图上0-31的数字代表bit, 也就是每个字段的长度.
比如, version这个字段是4bits, source ip address和destination ip address都是32bits.
IPv4 包头
如果从事网络管理, 需要理解以下字段.

字段 功能
TTL(Time To Live) 包的存活时间, 如果为0, 则被网络设备丢弃
Source IP address 源IP地址
Destination IP address 目的IP地址
Protocol 上层协议
Header Length 包头长度, 这个通常都是20Bytes
Total Length ip header + data length 是指包头和数据的总长度

下面通过一些实例来理解这些字段

TTL - Time To Live

TTL的值很容易通过ping这个命令来获得.
在下面的例子中, ttl=52, 每经过一个路由器, 这个值会减一.

ping www.baidu.com
PING www.a.shifen.com (36.152.44.96): 56 data bytes
64 bytes from 36.152.44.96: icmp_seq=0 ttl=52 time=59.546 ms
64 bytes from 36.152.44.96: icmp_seq=1 ttl=52 time=23.654 ms
64 bytes from 36.152.44.96: icmp_seq=2 ttl=52 time=21.083 ms

Source IP adress and Destination IP

还是用ping来做个例子, 源地址指的就是这个数据包从哪个机器发出来, 可以是你的笔记本电脑, 手机, 或者网络摄像头.

说是源地址, 其实是相对的, 当网站发数据给你时, 这个地址就是目的地址.

同样用一个实际的例子来理解:
在mac电脑上, 可以用tcpdump这个命令来查看包的具体内容.
在这个例子中,
第一行是从我的笔记本发出的icmp request包, source ip = 192.168.199.142, destination ip=36.152.44.95
第二行是从server的返回包, source ip = 36.152.44.95, destination ip = 192.168.199.142.
从实际抓取的数据包可以看到, source ip和destination ip会互换.

sudo tcpdump -vnn host 36.152.44.96
192.168.199.142 > 36.152.44.96: ICMP echo request, id 41479, seq 0, length 64
36.152.44.96 > 192.168.199.142: ICMP echo reply, id 41479, seq 0, length 64

在wireshark里, 很清楚的标出了这些地址
在这里插入图片描述

Protocol

这个协议字段是用来标识上层协议.
学过七层模型的都知道, IP协议是处于第三层的协议, 三层和四层之间的联系就是靠这个字段.
通常这个协议字段都是TCP, 现在绝大多数的应用都是基于TCP的, 当然由于TCP的一些限制, 导致传输效率不高, 很多也是基于UDP协议, 比如一些传输视频的数据包.
而在本文上面的例子中提到的ping, 则是基于ICMP协议.
下面给出一个协议号和协议的对应关系.
表中的协议号用十进制表示.

Protocol Number Protocol
6 TCP
17 UDP
1 ICMP

这个协议号, 同样可以清楚的在wireshark里看到
在这里插入图片描述

Total Length

这个字段很容易被忽略.
实际工作中, 有时候会遇到ping可以正常工作, 但是telnet或者ssh就是不行; 这种情况常见于有mtu issue的网络中.
其实使用ping这个简单的命令, 就可以发现网络中的mtu问题.
还是用文中之前的例子, 来理解这个长度字段.
这个例子中, ping没有加任何参数, 会发出默认的data length, 就是56Bytes.
一个简单的加法:

Items Length
IP header 20
ICMP header 8
data 56

ping www.baidu.com
PING www.a.shifen.com (36.152.44.96): 56 data bytes
64 bytes from 36.152.44.96: icmp_seq=0 ttl=52 time=59.546 ms
64 bytes from 36.152.44.96: icmp_seq=1 ttl=52 time=23.654 ms

所以我们在wireshark看到ip header中total length的长度是84.

可以在ping的命令中指定data的size, 用-s参数:

ping -s 1000 www.baidu.com
PING www.a.shifen.com (36.152.44.95): 1000 data bytes
1008 bytes from 36.152.44.95: icmp_seq=0 ttl=52 time=103.190 ms
1008 bytes from 36.152.44.95: icmp_seq=1 ttl=52 time=29.980 ms
1008 bytes from 36.152.44.95: icmp_seq=2 ttl=52 time=36.626 ms

ping的同时, 用wireshark抓包查看, 可以看到total length是1028.
Total Length = ip header (20) + icmp header (8) + data (1000)
在这里插入图片描述
实际测试中, 你会发现这个值不能一直增加, 增加到一定的值就ping不通了, 有兴趣可以自己做做测试.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ipv4学习笔记之实践篇 的相关文章

随机推荐

  • Lua的线程和状态 及协程

    luaL loadstring L return coroutine create function end nCallResult lua pcall L 0 1 0 创建一个协程和lua newthread创建一个线程一样 不过这个创建
  • 关于mysql group_concat不得不说的事

    mysql中 group concat函数将group by产生的同一个分组中的值连接起来 返回一个字符串结果 当查询的数据过多时 group concat超出了默认值1024个字符 超过就会截断 导致group concat查询出来的数据
  • ppt怎么压缩文件大小?学会这几种方法

    ppt 用office PowerPoint 制作的幻灯片 用于编辑 播放 各种操作 简单易学 在实际的生活和办公过程中 ppt文件的应用范围非常广泛 同样的 ppt也是非常重要的工具之一 很多时候 我们需要对ppt文件进行压缩 从而满足p
  • 原理图中的电阻旁边有个”NC“,什么意思?

    NC表示此处空贴 即此处不贴任何电子器件 如果安装的话 电路会有另外的功能 或许在性能上会有变化 常用于电路板贴装技术中 电路板贴装是回流焊中的一种工艺流程 回流焊也叫再流焊 是伴随微型化电子产品的出现而发展起来的焊接技术 主要应用于各类表
  • leetcode-无重复元素的最长子串

    给定一个字符串 请你找出其中不含有重复字符的最长子串的长度 例如对于字符串 str adfhdsla 它的无重复字符的最长子串为 sub adfhdsl 很显然 首先要有一个函数用以判断当前的子串中有无重复元素 然后寻找子串的工作就要用这个
  • 闲云:unity中不能识别monobehevior关键字的问题

    有时候一些小问题很恼人 如unity中新建脚本后不能识别monobehevior关键字 在vs2017右侧的解决方案中点击刷新图标 或者把不能识别的脚本添加到vs2017右侧的解决方案中的Assets中即可 还不行就点击 排除 然后再 添加
  • QApplication和QCoreApplication

    一 QCoreApplication用于non GUI的应用程序 不需要依赖QtGui库 QApplication用于包含GUI的应用程序 需要用到QtGui库 Qt是一个开源的C 库 主要用来开发GUI程序 但同时 它也支持控制台程序的开
  • log4j使用说明

    查阅阿里的jva开发手册 我们发现在打印日志的时候有一下几条是强制的 1 应用中不可直接使用日志系统 Log4j Logback 中的API 而应依赖使用日志框架SLF4J中的API 使用门面模式的日志框架 有利于维护和各个类的日志处理方式
  • 前端自测.

    交互 宽度1200px 表单校验 长度 敏感词汇 初始化 loading 结果 空 表单重复提交 loading 请求拦截 限流 数字 大数据 千分位 文本长度 省略号 数据查询结果校验 按条件查询结果是否正确 空数据传参 xx 参数头尾有
  • go struct{} 空结构体的特点和作用

    空结构体的特点和作用 参考代码 package main import fmt unsafe func main empStruct 空结构体的实例和作用 func empStruct 空结构体的特点 1 不占用内存 2 地址不变 var
  • Input

    Unity3d的所有输入 包括键盘鼠标和智能手机触摸等都是通过这一个类来完成 Input类 见API http docs unity3d com ScriptReference Input html 输入Input类使用 建议在Updata
  • Minikube 架构及启动流程剖析

    原文作者 wzqnls 编辑 夏天 对于要学习 Kubernetes 或者需要本地开发的开发人员来说 Minikube 是一个不错的选择 通过使用 Minikube 这个工具 我们可以非常快捷地在本地部署一套单节点的 Kubernetes
  • 【Linux】线程安全

    文章目录 1 线程互斥 1 1 线程间互斥的相关概念 1 2互斥量 1 3互斥量接口 1 4互斥量实现原理 2 可重入VS线程安全 3 常见锁概念 3 1死锁 3 2常见死锁情况 3 2 1情况一 忘记释放锁 3 2 2情况二 线程重复申请
  • [机缘参悟-66]:怎样才能让别人愿意帮你:利益共享法则、“大道”、“人性”

    目录 前言 第1章 生命是利益 1 1 什么是利益 1 2 不同时期 利益展现不同的形态 1 3 利益是维系社会运行的根本力量 1 4 利益是中性词 第2章 共享利益 2 1 共享利益的形态 2 2 显性的共享利益 物质利益 2 3 利益的
  • 分享一个嘉立创封装库(内含AD和PADS两种格式)

    一直以来做封装都是令我头疼的问题 偶然发现嘉立创的封装库 真的非常好用 而且封装做得非常漂亮 这个封装做得非常好 我也打过几款板子出来 手工焊接起来也非常好 真的是非常好的一个封装库 封装库里面包含了AD Protel99和PADS三种格式
  • 给windows宿主机和wsl2的ubuntu-20.04分配固定IP,使能相互ping通

    我们知道wsl2是基于hyper v的虚拟机 每次重新启动的时候 都会重新拉一个新的hyper v虚拟机实例 然后虚拟网卡的IP是dhcp随机分配的 如果作为开发系统用 就会比较烦每次都要换一个IP 有人提供了个脚本 他写了个bat脚本在w
  • Tomcat之startup.bat启动闪退解决

    安装完了service 那个服务器 使用从官网下载的apche包 我使用的是这个包apache tomcat 8 5 81 windows x64 去bin里面启动 startup bat结果出现闪退 问题还是java环境变量的设置问题 可
  • 用户的计算机名,获取计算机名及用户名

    ifdef WINDOWS uses Windows endif ifdef UNIX uses BaseUnix endif ifdef UNIX function GetUserName String begin Result GetE
  • docker介绍

    公式 Usage docker OPTIONS COMMAND A self sufficient runtime for containers Options config string Location of client config
  • Ipv4学习笔记之实践篇

    什么是IP 学习IP是入门网络的第一步 要想了解网络的工作原理 首先要了解的就是IP协议 IP standards for Internet Protocol 也就是说IP是Internet Protocol的缩写 是internet通信协