IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> TPC/IP 协议头部说明 -> 正文阅读

[网络协议]TPC/IP 协议头部说明

本章的内容主要是将 IP 协议头部、TCP 协议头部、UPD?协议进行说明,其他的介绍将在后续的章节中进行详细介绍。

注:本章内容来自《TCP/IP?详解?卷一?协议》

IP 协议

1.IPv4 头部结构

版本

IPv4=4 / IPv6=6

IHL

头部长度,保存 IPv4 中32位字的数量(4个字节),是一个4位字段,表示最多15个32位字即60个字节,IPv6 没有这个字段,固定40个字节

TCP 头部结构

DS

区分服务 RFC2474、RFC2475、RFC3260

ECN

显示拥塞通知

总长度

IP数据包总长度,以字节为单位,65535,通过IHL可以知道数据报从哪里开始。

标识

为了避免将一个数据报分片和其他数据报分片混淆,发送主机通常在每次发送数据报时都将一个内部计数+1,计数器复制到这个标识字段

标志

RF/DF/MF

分片偏移

生存期

数据报可经路由的上限,每经过一个路由就减一,避免陷入循环

协议

协议包含一个数字,表示有效荷载部分的数据类型,最常用的为17(UPD) 和 6(TCP)

头部校验

仅计算IPv4的头部,不检查有效荷载的正确性,其他协议必须通过自己的机制进行检查重要数据。每次IP跳转都会被重新计算一次

?2.IPv6 头部结构

版本号

DS

ECN

流标签

流标签字段是 IPv6 数据报中新增的一个字段,占20位,可用来标记报文的数据流类型,以便在网络层区分不同的报文。流标签字段有源节点分配,通过流标签、源地址、目的地址三元组方式就可以唯一标识一条通信流,而不用像 IPv4 那样需要使用五元组方式(源地址、目的地址、源端口、目的端口和传输层协议号)。

负载长度

有效载荷长度字段是以字节为单位的标识 IPv6 数据报中有效载荷部分(包括所有扩展报头部分)的总长度,也就是除了 IPv6 的基本报头以外的其他部分的总长度,占20位。

下一个头部

下一个头部字段用来标识当前报头(或者扩展报头)的下一个头部类型,占8位。每种扩展报头都有其对应的值。下一个头部字段内定义的扩展报头类型与 IPv4 中的协议字段值类似,但在 IPv6 数据报中,紧接着 IPv6 报头的可能不是上层协议头部(当没有扩展报头或者为最后一个扩展报头时才是上层协议头),而是 IPv6 扩展报头。

当 IPv6 数据报文承载的是上层协议 ICMPv6、TCP、UDP等的时候,Next Header 的值分别为 58、6、17,这个时候和 IPv4 报文头部中的 Protocol 字段很类似;

当不是以上3种协议类型的时候,IPv6 报文头部紧接的是扩展头部。扩展头部是 IPv6 引入的一个新的概念,每个 IPv6 的数据报文可以承载0个或多个扩展头部,扩展头部通过链表的形式组织起来。当 IPv6 数据报文承载着扩展头部的时候,Next Header 的数值为扩展头部的类型值。

跳数限制

?

?3.IPv6 相比 IPv4

????????IPv6 去除了 IPv4 报头中的头部长度、标识、标志、段偏移、校验和、选项、填充这么多字段,却只增加了流标签这一个字段,因此 IPv6 报头处理和I Pv4 报头处理相比大大简化,提高了处理效率。另外,IPv6 为了更好地支持各种选项处理,提出了扩展头的概念,新增选项时不必修改现有的结构就能做到,理论上可以无限扩展,体现了优异的灵活性。

UDP协议

用户数据报协议 UDP(User Datagram Protocol)特点:

? ? ? ? (1)无连接。

? ? ? ? (2)尽最大努力的交付。

? ? ? ? (3)面向报文。

? ? ? ? (4)无拥塞控制。

? ? ? ? (5)支持一对一、一对多、多对一、多对多的交互通信。

? ? ? ? (6)首部开销小(只有四个字段:源端口、目的端口、长度、检验和)。UDP 是面向报文的传输方式是应用层交给 UDP 多长的报文,UDP 发送多长的报文,即一次发送一个报文,因此,应用程序必须选择合适大小的报文。

1.UDP协议头部结构

?

长度

长度是 UDP 头部和 UDP 数据的总长度。

校验和

端到端的传输层校验和。它覆盖 UDP 头部、UDP 数据和一个伪头部

?2.UDP 伪头部

?

3.UDP/IP分片?

例如:前置条件 MTU=1500?? Data Lenght= 2992。

说明:

一个数据包包含了2992字节的应用数据,和8个 UDP头部,结果产生一个总长度为3020数据报(包含 Ipv4 头部)。当数据报被分成三组时,额外产生了40个额外字节,因此总发生字节为3060

偏移 以8个字节为单位:

185*8

370*8

重组:

当 MF=0 的分片被接收到时,重组程序才能确认原始数据的长度,它等于分片偏移的值(乘以8) 加上 IPv4 总长度的值(减去IPv4头部长度)。(370*8+40==3000)

因为每个偏移字段都是相对原始数据报的,重组进程可以处理非顺序到达的分片。

重组超时:

一个数据报的任何一个分片首先到达,IP 层就得启动一个计时器,如果不这样做的话,不能达到的分片,可能会最终导致接收方用尽缓存。留下攻击的机会。

分片是透明的,但如果一个分片丢失,整个数据报就丢失。要知道IP自身没有差错纠正。所以要么程序自己实现超时和重传。要么尽量避免分片

4. UDP SOCKET 连接流程图

TCP 协议?

传输控制协议 TCP(Transmission Control Protocol)特点:

? ? ? ? (1)面向连接,每一个 TCP 连接只能是点对点的(一对一)。

? ? ? ? (2)提供可靠交付服务。

? ? ? ? (3)提供全双工通信。

? ? ? ? (4)面向字节流。

? ? ? ? (5)应用程序和 TCP 的交互是一次一个数据块(大小不等),但 TCP 把应用程序看成是一连串的无结构的字节流。TCP 有一个缓冲,当应该程序传送的数据块太长,TCP 就可以把它划分短一些再传送。

1.TCP头部结构

头部字段:

序列号

标识了 TCP 发送端到 TCP 接收端的数据流的一个字节,该字节代表着包含该序列号的报文段的数据中的第一个字节。

确认号

包含的值是该确认号的发送方期待收到的下一个序列号,即最后被成功接收的数据字节的序列号加1.

SYN

建立新连接时发送的第一个报文。序列号字段包含了在本次连接的这个方向上要使用的第一个序列号,后续序列号和返回的 ACK 号,也在这个方向上。注意,初始化序列号是随机选择的。

头部长度

头部的长度,4位,限定最多60个字节(带选项)。不带选项20个字节

CWR

拥塞窗口减(发送方降低它的发送速率)

ECE

ECN 回显(发送方接收到了一个更早的拥塞通告)

URG

紧急

ACK

确认(确认号字段有效,一般建立连接之后启用)

PSH

推送(接收方应尽快给应用程序传送这个数据)

RST

重置连接(连接取消),相当 Ctl+C

FIN

该报文段的发送方已经结束向对方发送数据。

TCP校验和

覆盖了 TPC 的头部和数据以及头部中的一些字段

紧急指针

只有在 URG 位字段被设置时才有效,这个“指针”是一个必须要加到报文段的序列号字段上的正偏移,以产生紧急数据的最后一个字节的序列好

选项字段:

MSS

最大段大小指 TCP 协议所允许的从对方接收到的最大报文段(不包括 TCP 与 IP 头部),没有指明的情况下,默认536字节

SACK

确认选项,由于 TCP 采取的是累计 ACK 确认,TCP 不能正确地确认之前已经接收到数据。由于接收的数据也是无序的,所以接收到数据的序列号也是不连续的,会出现很多空洞,TCP接收方,需要防止应用程序使用超出空洞的数据。当接收到乱序的数据时,它能提供一个SACK 选项来描述这些乱序数据,从而帮助对方有效的重传。

WSOPT

窗口缩放因子

UTO

用户超时

TCP-AO

认证选项

TSOPT

时间戳选项

NOP

无操作

2.TCP SOCKET 连接流程图

?UDP 和 TCP 区别

TCP 与 UDP 的一个基本区别, TCP 是可靠通信协议, 而 UDP 是不可靠通信协议。

TCP 的可靠性含义: 接收方收到的数据是完整, 有序, 无差错的。

UDP 不可靠性含义: 接收方接收到的数据可能存在部分丢失, 顺序也不一定能保证。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-09 10:33:55  更:2021-08-09 10:35:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 19:38:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码