linux系统之IP、TCP封包格式
一、IP封包格式说明
前言
IP 协议用 IP 报文头封装传输层报文,IP 报文头包含了如下的信息:这个
报文从哪个传输层协议过来,它准备被发送到哪台机器,它从哪儿来以及一些
其他有用的信息.
IP 协议是一个非面向连接的协议,也就是说 IP 不需要协商一个连接。面
向连接的协议需要协商一个连接,然后在这个连接上面收发数据,最后关闭这
个连接。TCP 就是这样的协议,但是它建立在 IP 基础之上的。IP 不是面向连接
的原因有很多种,其中一个原因就是它不会为很多应用增加不必要的开销。对
于报文丢失的情况,通过简单的重传就可以解决问题,而不需新建连接,等待
对端确认等等额外开销。
1、IP报文格式
上面图中每一行所占用的位数为32bits,各个表头的内容分别介绍如下
版本(Version)
第 0 到 3bit。版本字段是二进制表示的,IPV4 为 0100,而
IPV6 为 0110.这个字段在报文过滤中很少用到。
网络报文头长(Internet Header Length)
第 4-7bit,它表示以 4 字节为单位的报文头长,例如没有选项的报文长度为 20byte,这样这个字段就为 5
TOS 字段
第 8 到 15bit,这个字段是 IP 报文头里面最复杂的部分之一,这个字段已经被更新 3 次了。他们的基本含义没有发生变化,但是他们 的具体实现却改变了。最初,这个字段被称为服务类别(type of
service)
标识 | 项目 | 说明 |
XXX_____ | Routine | 设定IP顺序,预设为0,否则数值越高越优先 |
___X____ | Delay | 延迟要求,0 为正常值,如果为1表示低延迟 |
____X___ | Throughput | 通讯量要求,0为正常值,1为高传输量 |
_____X__ | Reliabiltity | 可靠性要求,0为正常值,1为高要求 |
______XX | Not Used | 未使用 |
0-2bit 称为优先权字段;
第 3bit 表示时延;
第 4bit 表示吞吐量;
第5bit表示对可靠性的要求级别;
最后两个 bit 预留 .
例如:
以太网络的种种相关规格可以让这个ip封包加速且降低延迟,某些特殊的标志就是在这里说明的。
注:
这种实现方式在很多老的硬件里面还能够看到。但是在后 来更新的 ECN 版本里面,第 6-7bit 被使用了,这样他们就被设置了值而不是原 先的预留值 0.但是很多老的防火墙和路由器在检查报文时候,发现这些字段是 1 就会把这个报文丢掉。
封包总长(TL)
通常以byte做单位来表示该封包的总长度﹐此数值包括标头和数据的总和,最大可达65535bytes
识别码(ID)
每一个IP封包都有一个16bit的唯一识别码。 当程序产生的数据要通过网路传送时﹐都会在传送层被拆散成封包形式发送﹐当封包要进行重组的时候﹐就是依据这个ID 。
Flags(特殊标识)
这是当封包在传输过程中进行最佳组合时使用的3个bit来标识
X__:R:当此值为0的时候﹐表示目前未被使用
_X_:DF:若为0表示可以分段,若为1表示不可分段
__X:MF:若为0表示此IP为最后分段,若为1表示非最后分段
FragmentOffset(分段偏移)--13bits
当一个大封包在经过一些传输单位(MTU)较小的路径时,会被被切割成碎片(fragment)再进行传送(这个切割和传送层的打包有所不同,它是由网路层决定的)。 由于网路情况或其它因素影响﹐其抵达顺序并不会和当初切割顺序一致的。 所以当封包进行切割的时候﹐会为各片段做好定位记录,如果封包没有被切割﹐那么FO的值为“0”
Time To Live(TTL,存活时间)--8bits
当一个封包被赋予TTL值,TTL是以hop为单位,每经过一个router就减一﹐如果封包TTL值被降为0的时候﹐就会被丢弃。 这样﹐当封包在传递过程中由于某些原因而未能抵达目的地的时候﹐就可以避免其一直充斥在网络上面,之所以不返回响应,是因为响应也是点用网络资源的,所以直接就丢弃了
Protocol Number(协议代码)-8bits
来自传输层与网络层本身的其他数据都放置在ip封包当中的,我们可以在IP表头记载这个IP封包内的数据是什么,在这个字段就是记载每种数据封包的内容啦,在这个字段记载的代码与相关的封包协议名称如下所示:
当然啦,我们比较常见到的还是TCP、UDP、ICMP
这个数值主要用来检错用的﹐用以确保封包被正确无误的接收到。 如果一切无误﹐就会发出确认信息﹐表示接收正常。
Source Address(SA)
来源的IP地址,从这里我们知道IP是32位。
Destination Address(DA)
有来源还需要目标才能传送,这里就是目标的IP地址
Options(其它参数)
这个是额外的功能,提供包括安全处理机制、路由纪录、时间戳,严格与宽松之来源路由等 。
Padding(补齐项目)& Padding
Options栏位长度不定, 可用来扩充功能。
Padding栏位是为了让表头(包含Options 栏位) 刚好是4 Bytes 的倍数。
二、TCP封包格式
1、TCP作用
TCP 协议位于 IP 协议层之上,TCP 是一个有状态的协议,并且通过内部机
制能够确认报文是否被对方正确的接收。TCP 主要有如下几个作用:
最主要就是确认双方的的可靠数据收发
数据在网络层和应用层之间正确传输
数据报文能够正确的被应用层接收
报文在传输过程中不会乱序
2、TCP报文格式
3、参数说明
属性 | 说明 |
Source Port(16bit) |
表示这个报文的发送端口,这个源端口最初和发送进程进行了直接绑定,但是现在我们的实现,通过 IP 地址,源端口和目的端口进行 hash,然后映射到相应的应用程序。 |
Destination Port(16bit) |
这个是 TCP 报文的远端目的端口。这个和源端口一样,原来是和应用直接绑定的,现在也是通过 hash 映射到应用程序,这样容许系统能够打开更多的连接。 |
Sequence Number(32bit) |
序列号主要被赋予每一个报文,这样可以对报文进行排序。最后这个序列号在回应报文的 ACK 字段予以确认。 |
Acknowledge Number(32bit) |
当我们确认一个报文被接收的时候,我们就发送 ACK 确认这个报文。例如,我们接收到一个带有序列号的报文,而且这个报文是一个正常报文,那么我们就回应一个 ACK 报文,在 ACK 字段里面填写的正是过来的序列号。 |
数据偏移(Data Offset) |
这个字段表明 TCP 的报文头有多长,或者说数据从哪儿开始。它也是以 4 字节为单位的,这样即使不是 4 字节对齐,也可以通过尾部的填充字段来添加。 |
预留(Reserved)(6) |
这些 bits 暂时预留,在 RFC793 里面,这也宝航接下来哦 |
Contral Flag (6) |
控制标记 |
紧急指针(URG) | 当URG被设定为1的时候就表示这是一个携有紧急资料的封包。 |
确认(ACK) |
这个位置表明这个报文是对我们收到报文的一个回应,我们确认一个报文表明我们不仅仅收到报文,而且这个报文没有错误。发送方收到 ACK之后就知道哪个报文已经被确认了,从而从发送缓冲释放该报文。 |
上送(PSH) |
“推”标志位表示立刻把数据上送给用户程序,不管用户窗口情 |
重置(RST) |
重置标志告诉对端关闭这个链接。这个标志主要有着几个作用。例如这个连接因为某些原因已经不能工作了,或者说这个连接不存在甚至可能是报文走错了路径。 |
同步序列号(SYN) | 如果SYN为1时表示要求双方进行同步沟通 |
完成(FIN) | 如果封包的FIN为1的时候就表示传送结束然後双方发出结束回应进而正式终止一个TCP传送过程 |
滑动窗口(windows size 16bit) |
窗口大小常常被接收者用来告诉发送者还有多少空闲缓冲可以 |
校验和(Checksum) | 这个是整个 TCP 报文头的校验和。 |
紧急指针(Urgent Pointer) |
这个指针指向紧急数据的尾部,如果这个连接内有紧急数据需要处理,那么发送方会设置 URG 标志以及把紧急指针指向紧急数据的尾部。 |
选项字段(Options) |
这个可选字段简单的来说,总是包含三方面内容。一个 是初始域,通过它我们可以知道可选项的长度。第二是可选项的类别,让我们知道是那个可选项。最后就是实际的可选项数据。可选项的完全列表可以通过文末的TCP options链接找到。 |
填充(Padding) |
填充字段确保整个 TCP 报文头是 4 字节对齐的。填充字段总 是用全 0 来填充。 |
三、UDP报文
1、前言
UDP 可以看作一个叫简化的 TCP 报文头,它主要包括源/目的端口,报文头
长以及校验和。
2、报文格式
3、参数说明
属性 | 说明 |
源地址(Source port) | 源端口表明这个报文是从哪儿发送出来的,但是假如你不需要对端的回复的话,这个字段也可以设置为全 0,但是在大部分实现里面,这个字段都是填充合理值。 |
目的端口(Destination port) | 这个表明报文的目的端口,这是必选项,和源端口不同。 |
报文长度(Length) | 这个长度是整个报文的长度,包括报文头和数据区。 |
校验和(Checksum) | 和 TCP 的校验和一样。 |
五、总结
TCP协议和UDP协议的区别
1,TCP协议面向连接,UDP协议面向非连接
2,TCP协议传输速度慢,UDP协议传输速度快
3,TCP协议保证数据顺序,UDP协议不保证
4,TCP协议保证数据正确性,UDP协议可能丢包
5,TCP协议对系统资源要求多,UDP协议要求少
转载于:https://blog.51cto.com/essun/1385641
linux系统之IP、TCP封包格式相关推荐
- Windows 和 Linux 系统查询 IP 地址命令
Windows 和 Linux 系统查询 IP 地址命令 Windows 系统 : ipconfig Linux 系统: ifconfig 或 ip addr (CentOS 7 可用)
- 如何配置Linux系统的IP地址?
如何配置Linux系统的IP地址,使其能够连接局域网甚至外网.其实这并不难,Linux系统网络配置的方法有多种. 下面,以VMware虚拟机中的Linux系统为例,进行讲解. 我的真实机是Window ...
- linux系统如何解gz文件,Linux 系统 压缩和解压 gz 格式文件
Linux 系统 压缩和解压 gz 格式文件 引言 前面我们说了在 Linux 系统上比较常用的打包压缩解压 tar 及 zip 文件 的命令,那 Linux 上还有什么使用比较广泛的压缩解压文 ...
- TCP/IP网络编程---Linux系统下的TCP套接字编程
目录 第一章 理解网络编程和套接字 1.1 网络编程和套接字概要 1.2 基于Linux的文件操作 1.2.1 底层文件访问和文件描述符 1.2.2 打开文件 1.2.3 关闭文件 1.2.4 将数据 ...
- 查看linux系统的ip
背景 最近学习网络协议,有一篇文章讲解怎么查看机器的ip地址,由于现在用linux比较多,所以重点记录下linux系统怎么查看ip地址. 正文 查看linux ip的命令:ifconfig ifcon ...
- linux系统修改ip地址教程。
在Linux系统中,修改IP地址的方法会略有不同,下面为大家介绍两种常用的方法. 方法一:通过命令行修改IP地址 步骤一:打开终端,并使用root用户登录系统. 步骤二:输入命令 ifconfig , ...
- linux系统查看IP地址,不显示IP地址或者只显示127.0.0.1
目录 一.正常情况 二.异常显示,及解决办法 2.1.异常情况1:查看当前linux的IP地址时,找不到IP地址: 2.2.异常情况2:查看当前linux的IP地址时,IP地址显示为127.0.0.1 ...
- Linux 系统的IP与域名解析文件[局域网的DNS]
系统的IP与域名解析文件[局域网的DNS] 局域网的DNS: 域名和主机名对应的工具,服务器直接通过域名,方便迁移 # 修改配置 vim /etc/hosts直接添加: 192.138.25.129 ...
- linux系统改ip地址 永久生效,Linux修改IP永久生效
修改IP永久生效按以下方法: 1)修改配置文件 vi /etc/sysconfig/network-scripts/ifcfg-eth0(eth0,第一块网卡,如果是第二块则为eth1) 按如下修改i ...
- 查看linux不显示ip,linux系统查看IP地址,不显示IP地址或者只显示127.0.0.1
LUA学习笔记三·时间等操作系统库 1.构造时间 2.时间制定格式输出 3.计时器(闭包)os.difftime (t2, t1) 返回以秒计算的时刻 t1 到 t2 的差值. (这 ...
最新文章
- 目标检测中的特征冲突与不对齐问题
- 第十五周程序阅读-范型程序设计(6)
- 解决 js ajax跨域访问报“No 'Access-Control-Allow-Origin' header is present on the requested resource.”错误
- Spring Boot 项目的 API 接口防刷
- ai包装插件_找AI插件很费劲,一次给你66款AI插件合集!每一款都是设计师常用...
- 知识管理中的矛盾分析
- LeetCode 298. 二叉树最长连续序列(自顶向下)
- Linux下启动程序常见问题,linux系统启动流程及常见故障解决方式
- EDA风格与Reactor模式
- 韩顺平php视频笔记71 面向对象编程的三大特征2 访问修饰符 继承
- 8 | Spatial-based GNN/convolution模型之GAT(受欢迎)
- linux中的root命令,在linux终端中执行root命令
- 微信小程序组件开发——可视化电影选座
- 台式计算机和台式机,台式电脑i5和i7的区别_台式机i5和i7的区别有多大
- Wp8开发环境搭建总结
- 集合collection
- 凸优化、轨迹优化、最优控制
- Presto 0.224个人笔记
- 用计算机模拟掷骰子实验,实验一古典概型及其模拟(6页)-原创力文档
- 关于使用深度学习进行三维点云几何压缩