IP首部

IP首部字段图

IP首部字段详情

4位版本:
协议版本号,IPv4是0100,IPv6是0110,目前基本都是IPv4版本。

4位首部长度:
指首部占32bit字的数目,包括选项区,也就是说单位是4个字节,如图1-1首部是20个字节,那首部字段值为5,即0101,首部最大值是1111,也就是说首部长度字段最大可表示15(1111)*4 = 60字节长度(包含选项段)。普通IP数据报(没有任何选项),该字段的值是5,即160比特=20字节。

8位服务类型(TOS):
TOS字段包含一个3bit的优先权字段(现已被忽略),4bit的TOS字段和1bit未用但必须置0。4bit的TOS分别代表:最小时延、最大吞吐量、最高可靠性和最小费用。4bit中只能置其中1bit,如果所有4bit均为0,表示一般服务。

16位总长度:
总长度字段是指整个IP数据报的长度,以字节为单位。通过首部长度字段和总长度字段,就可以知道IP数据报中数据内容的起始位置和长度。由于该字段长16bit,所以IP数据报最长可达65535字节,当数据报被分片时,该字段的值也随着变化。

16位标识:
标识字段唯一地标识主机发送的每一份数据报。通常每发送一份报文它的值就会加1。如果IP数据报要分片,则每个分片之后的IP数据报的标识是一样的。

3位标志:
3位标志,目前只有2位有意义;最低位为MF,MF=1代表后面还有分片的数据报,MF=0代表当前数据报已是最后的数据报。次低位为DF,DF=1代表不能分片,DF=0代表可以分片。

13位偏移:
此字段是和3位标志中的最低位MF配合使用的。表示某个分片在原始数据中的相对位置。举个例子,假如发送1473字节的UDP数据报,UDP数据报被分成两份,第一份UDP数据报大小则为1480字节(1472+8字节UDP报头),第一份数据报偏移位为0,第二份UDP数据报偏移位字段值则是1480。

8位生存时间(TTL):
生存时间字段设置了数据报可以经过的最多路由器数,它指定了数据报的生存时间。TTL的初始值由源主机设置(通常是32或64),一旦经过一个处理它的路由器,它的值就减去1,当该字段的值为0时,数据报就被丢弃,并发送ICMP报文通知源主机。

8位协议:
指明IP层所封装的上层协议类型,如ICMP(1)、IGMP(2) 、TCP(6)、UDP(17)等。

16位首部检验和:
首部检验和字段是根据IP首部计算的检验和码,用于验证数据的完整性,它不对首部后面的数据进行计算。ICMP、IGMP、UDP和TCP在它们各自的首部中均含有同时覆盖首部和数据的检验和码,而IP不对头部后面的数据进行检验。计算方法可参考此篇文章(https://www.cnblogs.com/furenjian/p/5022103.html)。

32位源IP地址和目的IP地址:
用来标明发送IP数据报文的源主机地址和接收IP报文的目标主机地址。

32位选项:
用来定义一些任选项:如记录路径、时间戳等。这些选项很少被使用,同时并不是所有主机和路由器都支持这些选项。可选项字段的长度必须是32比特的整数倍,如果不足,必须填充0以达到此长度要求,这样可以保证IP首部始终是32bit的整数倍(这是首部长度字段所要求的)。

TCP首部

封装TCP数据的IP数据报(途中TCP首部应该为10字节,特此说明)

TCP首部字段图

TCP首部字段详情

16位源端口、目的端口:
每个TCP段都包含源端口和目的端端口号,用于寻找发端和收端应用进程。这两个值加上IP首部中的源端IP地址和目的IP地址就唯一确定一个TCP连接。

32位序列号:
用来标识从TCP发端向TCP收端发送的数据字节流,它表示当前报文段的第一个数据字节占整个字节流的相对位置。序号是32bit的无符号数,序号到达2^32 - 1后又从0开始。

32位确认号:
表示接收端希望接收的数据序号,为上次接收到数据报的序号+1,当ACK标志位为1时才生效。

4位首部长度:
指出首部中32bit字的数目。需要这个值是因为选项字段的长度是可变的。这个字段占4bit,因此TCP最多有60字节的首部,通常情况下没有选项字段,TCP的首部长度是20个字节。

6位标志位:
URG:紧急指针有效,当URG=1时生效。
ACK:确认序号有效,当ACK=1时生效。
PSH:接受方应该尽快将这个报文段交给应用层,而不是等待缓冲区满。
RST:重建链接。
SYN:同步序号,用来发起一个连接。
FIN:发端完成发送任务。

16位窗口大小:
TCP的流量控制由连接的每一端通过声明的窗口大小来控制。它表示接收方可接受数据字节数。窗口大小是一个16bit字段,因而窗口大小最大为65535字节。

16位TCP校验和:
校验和覆盖了整个TCP报文段包括TCP首部和TCP数据。这是一个强制性的字段,一定是由发端计算和存储,并由收端进行验证。

16位紧急指针:
只有当URG标志置1时紧急指针才有效。紧急指针是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号,用于TCP紧急数据发送。

选项:
最常见的可选字段是最长报文大小,又称为MSS。每个连接方通常在通信的第一个报文段(为建立连接而设置SYN标志的那个段)中指明这个选项。它指明本端所有接收的最大长度的报文段。

数据:
TCP中的数据部分也是可选的。在一个TCP连接的建立和终止时,双发交换的报文段仅有TCP首部。

UDP首部

封装UDP数据报的IP数据报

UDP首部字段图

UDP首部字段详情

16位源端口、目的端口:
用来标识源端和目标端的应用进程。

16位UDP长度:
该字段表示UDP首部和UDP数据的字节长度。该字段的最小值为8字节(发送0字节的UDP数据报是OK的)。

16位UDP校验和:
UDP校验和覆盖了UDP首部和UDP数据。UDP的校验和是可选的,而TCP的校验和是必需的。

IP、TCP、UDP首部详解相关推荐

  1. 计算机网络(HTTP、TCP/IP、UDP)详解-面试篇

    文章目录 1.实现会话跟踪 2.什么是HTTP协议 3.什么是Web 4.TCP/IP协议 5.TCP/IP协议族分层 6.HTTP数据传输过程 7.传输层-TCP三次握手 8.DNS 9.HTTP事 ...

  2. 传输层 - TCP / UDP 协议详解

    我是目录: 1.UDP协议: 2.TCP协议: (1)TCP协议段格式: (2)确认应答(ACK)机制 (3)超时重传机制: (4)连接管理机制(三次握手.四次挥手) (5)滑动窗口: (6)流量控制 ...

  3. UDP和TCP的报文详解

    TCP和UDP报文详解 一.先说说端口号 TCP和UDP都是位于传输层的协议,传输层负责将数据从发送端传输到接收端. 端口号(Port)标识了一台主机上正在进行通信的一个具体的应用程序,在TCP/IP ...

  4. java udp 协议_网络协议 - UDP 协议详解

    ¶ 网络协议 - UDP 协议详解 基于TCP和UDP的协议非常广泛,所以也有必要对UDP协议进行详解.@pdai ¶ UDP概述 UDP(User Datagram Protocol)即用户数据报协 ...

  5. 计算机网络知识详解之:TCP连接原理详解

    网络知识详解之:TCP连接原理详解 计算机网络相关知识体系详解 网络知识详解之:TCP连接原理详解 网络知识详解之:HTTP协议基础 网络知识详解之:HTTPS通信原理剖析(对称.非对称加密.数字签名 ...

  6. 4-4:TCP协议之TCP头部格式详解

    文章目录 一:TCP头部格式详解 (1)4位首部长度 (2)序列号和确认应答号 A:可靠性问题 B:32位序号和确认号 (3)窗口大小 (4)标志位 (5)紧急指针 A:带外数据(out_of _ba ...

  7. Hadoop入门(二)——VMware虚拟网络设置+Windows10的IP地址配置+CentOS7静态IP设置(图文详解步骤2021)

    Hadoop入门(二)--VMware虚拟网络设置+Windows10的IP地址配置+CentOS7静态IP设置(图文详解步骤2021) 之前在上一篇文章中讲述了 CentOS7下载+VM上安装(手动 ...

  8. 《深入浅出DPDK》读书笔记(十):硬件加速与功能卸载(VLAN、IEEE1588、IP TCP/UDP/SCTP checksum、Tunnel)

    Table of Contents 109.硬件卸载简介 110.网卡硬件卸载功能 111.DPDK软件接口 接收侧: 发送侧: 112.硬件与软件功能实现 113.VLAN硬件卸载 1. 收包时VL ...

  9. 网络编程培训之一 编程实现IP/TCP/UDP报文

    系列博客参考:http://blog.csdn.net/zy416548283/article/category/1108400 代码以编号对应放在Github上:https://github.com ...

最新文章

  1. 判断一个IP区间(或IP)是否被另一个IP区间所包含
  2. 教程 | 算法太多挑花眼?教你如何选择正确的机器学习算法
  3. 给你的博客添加个看电影的频道
  4. 追梦童年,80后记忆中的Gameboy,教你怎么用模拟器去重温旧梦!
  5. python读文件和写文件-python开发--从文件中读取数据和写入文件
  6. Mysql数据库有两种安装方法
  7. 【LiveVideoStack线上分享】— 视频生产环境下的音视频解决方案
  8. 由获取子元素的方法find和children所获
  9. 橙白oj18训练作业1-题解、代码
  10. Python3 调用 Node.js 解析 MathJax 公式
  11. ubuntu20.04 下查看(改变)本地端口开放情况,开启和关闭防火墙
  12. 让VB6 IDE“认识”鼠标滚轮
  13. 人生成功的十大说话技巧
  14. 如何将一个完整项目推到码云_「码云下载项目」如何通过Git将本地项目提交到码云或GitHub...
  15. 整车车辆七自由度垂向动力学模型
  16. 怎么把高清图片导入到CAD图纸文件中?
  17. Mountain Lion 系统配置 Apache+Mysql+PHP 详细教程
  18. 笔记随笔(ing):计算机视觉部分
  19. 2021-10-074号靶场转自y神的学习笔记(net渗透,sockcap,msf多重网段渗透,os-shell,验证码重放,C#解密,wfuzz穷举subdomain)
  20. cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies

热门文章

  1. u深度u盘安装服务器系统,u深度u盘装win7系统详细步骤
  2. 终于知道韩熙美白祛斑霜
  3. 秒杀助手 - 秒杀神器 2018 双11 特别版
  4. replaceAll() 方法
  5. GPURT 1.1.0 --一个开源的基于GPU的光线追踪渲染软件
  6. Linux下的Vlan子接口(逻辑子接口)
  7. 北京尚学堂:献给奋斗在一线的“码农”
  8. 未雨绸缪-变化是永恒的
  9. javax.servlet.ServletException: Servlet execution threw an exception org.apache.tomcat.websocket.se
  10. 用python自己写一个翻译软件