本章的内容主要是将 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 不可靠性含义: 接收方接收到的数据可能存在部分丢失, 顺序也不一定能保证。

TPC/IP 协议头部说明相关推荐

  1. TPC/IP协议中与IP相关的知识点简介

    TPC/IP协议中与IP相关的知识点简介 简介 TCP/IP参考模型作为实现网络连接性和互操作性的关键,它使得网络上不同的计算机具有互操作能力,并且在较差的网络环境下可维持主机之间的连接 其协议结构分 ...

  2. IP协议 — IP协议头部

    什么是 IP 协议 IP 作为整个 TCP/IP 协议族中至关重要的协议,主要负责将数据包发送给最终的目标计算机,为上层协议提供无状态.无连接.不可靠的服务. 无状态:无状态是指 IP 通信双方是不同 ...

  3. TCP/IP协议头部结构与解析

    参考  http://blog.sina.com.cn/s/blog_634d74310102vmfn.html IP协议 IP协议(Internet Protocol)是网络层协议,用在因特网上,T ...

  4. TCP/IP协议头部结构

    一 TCP/IP协议族体系结构 数据链路层:数据链路层主要使用ARP(地址解析协议) RARP(逆地址解析协议)网络层使用IP进行寻址.而数据链路层使用物理地址.网络层必须将目标及其的IP转换为物理地 ...

  5. html头部协议,TCP/IP协议头部结构体

    //Mac头部,总长度14字节 typedef struct _eth_hdr { unsigned char dstmac[6]; //目标mac地址 unsigned char srcmac[6] ...

  6. TCP/IP协议、HTTP协议

    面试时,我们可能会被问到TCP/IP相关问题,比如: 什么是TCP/IP协议? TCP建立连接为什么要进行三次握手? TCP断开连接为什么要进行四次挥手? 一.TCP/IP协议模型 (TCP协议)传输 ...

  7. http、TCP/IP协议与socket之间的区别

    网络由下往上分为:  www.2cto.com   物理层--                       数据链路层-- 网络层--                       IP协议 传输层-- ...

  8. TCP/IP协议与Http协议的区别详解

    TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据. 关于TCP/IP和HTTP协议的关系,网络有一段比较容易理解的介绍:"我们在传输数 ...

  9. Linux TCP/IP网络协议栈:IP协议源码分析

    目录 IP协议简介 IP头部 IP数据包的发送 IP数据包的接收 https://mp.weixin.qq.com/s/8WNcTxtD4DBcNtcrR8nz4Q IP协议 是网络的最重要部分,毫不 ...

最新文章

  1. SAP S/4HANA生产订单创建时使用的工厂数据是从什么地方带出来的
  2. 邪恶改装2:用单片机实现一次简单的wifi密码欺骗
  3. Machine Vision 浅谈
  4. echart x轴 倾斜_1次加工28个零件,这就是为什么5轴机床这么牛:
  5. poj 2411 2663 3420 点头1033
  6. PYTHON自动化Day4-交换变量,字符串方法,拷贝,集合,文件,文件指针
  7. matplotlib 第二次执行报错在 django web服务中
  8. 团队第二次冲刺第三天
  9. 蛮力写算法_蛮力算法解释
  10. 比亚迪后续车都会搭在鸿蒙系统吗_华为鸿蒙系统上车,比亚迪汉发布!我告诉你华为鸿蒙到底是什么...
  11. staruml java_非常详细的StarUML使用教程,推荐阅读!
  12. [Usaco2014 Open]Gold Fair Photography(hash)
  13. 《面向对象分析与设计》一1.4面向对象方法的主要优点
  14. JavaMail 发送邮件的实例
  15. 图文介绍进程和线程的区别
  16. python 线程池 锁_python 线程池和锁
  17. 物联网 毕业设计——方案选择
  18. 发邮件向论文作者卑微求代码模板
  19. UE4基础知识总结(一)
  20. php array =%3e变,https ipcrs.pbccrc.org.cn php的json和数组转换

热门文章

  1. ResNet实战:单机多卡DDP方式、混合精度训练
  2. 3分钟带你彻底弄懂数码管的段选与位选
  3. 高分1(GF1)、高分2(GF2)卫星数据大气校正
  4. FTP手机和PC互传文件
  5. getElementsByTagName用法详解
  6. Springboot使用Actuator健康监控以及可视化界面
  7. 解决Windows Firewall/Internet Connection Sharing (ICS)服务无法启动(ping通IP,但不能浏览网页)
  8. R数据分析:跟随top期刊手把手教你做一个临床预测模型
  9. outlook电子邮件解析_在Outlook中按会话对电子邮件进行排序
  10. python爬虫疫情可视化