出一个专栏把通信协议搞一下吧,万物互联的根本呀。

IP

版本4位:4(二进制0100)表示IPv4,6(二进制0110)表示IPv6

报头长度(单位4byte):因为选项长度不确定,取值范围是5-15(20-60byte)

服务类型:优先级(前3位)+ToS(后5位),首先按数据紧急情况划分出优先级,然后是ToS允许按照什么方式选择传输服务,ToS第1位表示最小时延即响应时间,第2位是吞吐量,第3位是最高可靠性,第4位是最低费用,第5位保留,不需要这些服务就填0

总长度(单位1byte):IP报头+数据长度(除本层协议外的都视为数据),所以载荷是总长度-报头长度

分段标识类型:表示同一时刻最多65536个包被分段(分片)来表示包编号,这个标识用于组装时确定某个分片是属于哪个包的

标志:分片标志是确定该包是否被分片,如果分片了是不是最后一片,第1位保留,第2位DF=0表示分片,DF=1表示未分片,第3位MF=0表示是最后一片,MF=1表示还有分片,MF结合组装buf中的偏移量是否完整来判断该包是否接收组装完成

分段偏移量(单位byte):分片相对报头偏移量,用于确定组装顺序,如果分片超时丢失将回复异常并重新分片收发

TTL:包生存时间,防止数据包在网络中传输不休,以前是时间值,后来常用的是跳数递减,每经过一个路由值-1,减到0会返回相应错误,所以发起包的主机可以通过从1开始递增直到不返回错误时来测试要到达的目主机需要经过多少个路由器

报头16位校验和:计算报头长度指定数据,不包括载荷但要包含选项,无选项时为20个字节,发送计算时校验和本身要清0,然后算出校验和填充校验结果,接收方会将这20个字节用同样的方法计算出结果为0表示正确否则出错,而由于每个路由器都会对TTL-1,所以每经过一个路由都会对这个校验和重新计算填充,到达下一个路由又会再次校验,计算方法参考: https://blog.csdn.net/wswit/article/details/46822189

选项:是可选项,一般情况没有,如果有一般是时间戳、源点或路由加入的信息,用于选择松散路由(可选多条路)或严格路由(规定了路由路径)或记录路由,如果不够32位的整数倍就填0补齐

TCP

源端口目的端口:是0-65535任何数字,在收到请求时系统会为客户端动态分配,0-1023为知名端口号

报文序号:用来标识从TCP源端向TCP目标端发送的数据字节流,它表示在这个报文段中的数据编号,用sequence表示

确认序号:只有ACK标志为1时,确认号字段才有效,它包含目标端所期望收到源端的下一个数据编号,用acknowledge表示

报头长度(单位4byte):因为选项长度不确定,取值范围是5-15(20-60byte)

URG:紧急标志位,紧急指针有效,1表示有效

ACK:确认序号有效,1表示有效

PSH:推送标志位,1表示接收方应该尽快将这个报文段交给应用层,但只是整个数据的一部分并不是所有,类似收到短信提醒一样

RST:1表示重新连接

SYN:1表示发起一个新的连接

FIN:1表示释放一个连接,finish

窗口尺寸(单位byte):此字段用来进行流量控制,这个值是本机期望下一次接收的最大长度
带伪头部的TCP报头校验和:这个是伪头部(12+20+选项长度+数据长度)16位校验值

紧急指针:它是一个偏移量(也就是先发的包长度),和报文序号字段中的值相加表示紧急数据最后一个字节的序号
选项:可能包括"窗口扩大因子"、"时间戳"等选项

CRC: 从MAC到数据所有内容进行的CRC32校验结果,不论是传输层、网络层计算包长度时都不包含crc32这4个字节的长度,这是物理链路封包校验用的

大小端转换与协议字段:大小端的转换其实就是针对字段内的存储顺序转换,不能改变协议字段的先后顺序,这个先后就是从MAC层开始,MAC要放在协议开头前面,随着地址逐渐增大直到数据段以及CRC放在后面,将来收发双方才能按照这个顺序解析正确,所以针对不到一个字节的协议字段和大于1个字节的协议字段在结构体赋值和数组赋值时都不尽相同。

查看往期专栏

TCP数据包协议格式详解

UDP数据包协议详解

TCP/UDP伪头部详解

COAP数据包协议格式详解

TCP数据包协议格式详解相关推荐

  1. UDP数据包协议格式详解

    源端口目的端口:是0-65535任何数字,在收到请求时系统会为客户端动态分配,0-1023为知名端口号 报文长度(单位4byte):表示udp报头+udp数据总长度,有别于tcp,也没有选项 UDP报 ...

  2. COAP数据包协议格式详解

    Ver:版本编号,占2bit,固定01 T:报文类型,占2bit,CON=00,NON=01,ACK=10,RST=11 CON--需要被确认的请求,如果CON请求被发送,那么对方必须做出响应. NO ...

  3. Pcap 数据包捕获格式详解

    Pcap 是 Packet Capture 的英文缩写,是一种行业标准的网络数据包捕获格式.如果你是网络开发人员,那么通常会使用 Wireshark.Tcpdump 或 WinDump 等网络分析器捕 ...

  4. TCP丢包检测技术详解

    TCP丢包检测技术详解 http://www.cctime.com/html/2007-12-6/20071261023151210.htm           2007年12月6日 10:23  中 ...

  5. 通信协议——以太网数据包协议格式

    以太网数据包协议格式 MAC层 ARP层 IP层 ICMP UDP TCP.UDP数据包大小的限制 MAC层 帧格式: 帧介绍: 帧间隙(IFG): 网络设备和组件在接收一个帧之后,需要一段短暂的时间 ...

  6. HTTP响应协议格式详解

    文章目录 响应协议格式 1. 首行 状态码详解 2. 响应头header 响应协议格式 HTTP请求协议由首行.响应头(header).空行.正文(body)组成.通过空行来区别header和body ...

  7. 数据帧、IP数据包、TCP、UDP报文格式详解----网络通信原理

    数据链路层.网络层.传输层----网络通信原理 物理层 数据链路层 eNSP抓包实验 网络层 ICMP协议概述 eNSP抓包实验 ARP协议概述 eNSP抓包实验 传输层 TCP协议 eNSP抓包 三 ...

  8. TCP报文段首部格式详解

    TCP首部格式 格式字段详解 源端口.目标端口:计算机上的进程要和其他进程通信是要通过计算机端口的,而一个计算机端口某个时刻只能被一个进程占用,所以通过指定源端口和目标端口,就可以知道是哪两个进程需要 ...

  9. 网络数据包转发过程详解

    本片文章详解了两台终端跨网段通信时数据包转发的过程,包含第一次转发数据包ARP工作的过程以及详细配置,下面是本次实验的拓扑图,在华为ENSP模拟器上实现. 简单介绍一下实验环境,在本次实验中包含两个区 ...

最新文章

  1. 目标检测--Enhancement of SSD by concatenating feature maps for object detection
  2. python条件表达式有哪几个_python条件表达式:多项分支,双向分支
  3. DM368开发 -- uboot 使用
  4. Actionbarsherlock Demo 浅析 :Overlay
  5. Python之OS模块进程管理介绍--os.fork()
  6. [六字真言]1.唵.遁入佛门之异常.md
  7. 【java笔记】of方法 JDK9对集合添加方法的优化
  8. 第1节 kafka消息队列:5、javaAPI操作
  9. FRR BGP协议分析13 -- ZEBRA路由的处理2
  10. 计算机类科技论文发表,计算机类科技论文
  11. 身份证前六位对应代码
  12. 2021 天勤率辉计算机考研(附408)
  13. 河南初中计算机考试2028,沾沾喜气!河南28名考生被清北提前录取,竟有27人来自一所中学...
  14. “删库跑路”,这背后的数据安全你悟到了吗?
  15. 应聘总经理的答卷,供大家打分!(一)
  16. python特殊函数_SciPyTutorial-特殊函数
  17. JVM中的Xms和Xmx
  18. Salesforce chatter:userPhotoUpload Component 使用
  19. 宽带IPTV单线复用
  20. 如何把FLAC音频转换成MP3格式

热门文章

  1. docker安装redis(镜像安装)
  2. es6 freeze
  3. 弱符号实现 iOS 组件化解耦
  4. 有限鼠标和无线鼠标有什么区别 玩游戏鼠标有线好还是无线好
  5. 不要让等待成为一种伤害
  6. 游戏笔记本计算机购买,2021年4月|游戏笔记本电脑选购,个人主观推荐
  7. PPT也能制作滚动字幕,原来制作滚动字幕效果这么简单
  8. IE下面双击checkbox反应延迟的问题
  9. js--内置对象学习
  10. 慢雾科技:2020年Staking、DeFi 将出现更多不同形态的产品 | FBEC 2019专访