TCP/UDP/ARP/DNS/HTTP/帧的包头解析(保姆级分析)

2023-10-26

各种包的分析总结

  • TCP包的分析,包括使用wireshark进行抓包的分析

 

第一行:2个字节表示源端口,2个字节表示目的端口(0-65535)

第二行:序列号,保证数据的顺序

第三行:确认序号:确保自己已经收到了

第四行:首部长度(数据偏移):占 4 位,它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远.“数据偏移”的单位是 32 位字(以 4 字节为 计算单位)

保留:占6位,目前置为0

URG:URG=1,则代表后面的紧急指针有效,此数据应尽快传送

ACK:ACK=1,则代表确认序号有效

PSH:PSH=1,的报文段,就尽快地交付接收应用进程,而不再等到整个缓 存都填满了后再向上交付

RST:RST=1,释放当前链接,重新建立TCP链接

SYN:SYN=1,代表链接请求,或链接接收报文

FIN:FIN=1,释放链接的请求

窗口:决定接收方可以接收多少个包,包的数量(2个字节)

第五行:校验和:检验和字段检验的范围包括首部和数据这两部分.在计算检验 和时,要在 TCP 报文段的前面加上 12 字节的伪首部

紧急指针:占 16 位,指出在本报文段中紧急数据共有多少个字节(紧急 数据放在本报文段数据的最前面)

第六行:选项:长度可变.TCP 最初只规定了一种选项,即最大报文段长度 MSS.MSS 告诉对方 TCP:“我的缓存所能接收的报文段的数据字段的最大长 度是 MSS 个字节.” [MSS(Maximum Segment Size)是 TCP 报文段中的数据 字段的最大长度.数据字段加上 TCP 首部才等于整个的 TCP 报文段]

填充:这是为了使整个首部长度是 4 字节的整数倍

 

 

使用wireshark抓包抓到的TCP协议的前三行

TCP包的flags的数据的值

 

校验和、紧急指针、选项、填充

 

  • UDP包的分析

 

第一行:源端口:这个字段占据 UDP 报文头的前 16 位,通常包含发送数据报 的应用程序所使用的 UDP 端口。接收端的应用程序利用这个字段的值作为 发送响应的目的地址。这个字段是可选的,所以发送端的应用程序不一定会 把自己的端口号写入该字段中。如果不写入端口号,则把这个字段设置为 0。 这样,接收端的应用程序就不能发送响应了。

目的端口:接收端计算机上 UDP 软件使用的端口,占据 16 位。

第二行:长度:该字段占据 16 位,表示 UDP 数据报长度,包含 UDP 报文头和 UDP 数据长度。因为 UDP 报文头长度是 8 个字节,所以这个值最小为 8。

校验值:该字段占据 16 位,可以检验数据在传输过程中是否被损坏

 

抓取到的UDP包

  • ARP包的分析

ARP 报文总长度为 28 字节,MAC 地址长度为 6 字节,IP 地址长度为 4 字节。

 

第一行:硬件类型:指明了发送方想知道的硬件接口类型,以太网的值为 1。

协议类型:表示要映射的协议地址类型。它的值为 0x0800,表示 IP 地 址。

第二行:硬件地址长度和协议长度:分别指出硬件地址和协议的长度,以字节为 单位。对于以太网上 IP 地址的ARP请求或应答来说,它们的值分别为 6 和 4。

操作类型:用来表示这个报文的类型,ARP 请求为 1,ARP 响应为 2, RARP 请求为 3,RARP 响应为 4。

第三行:发送方 MAC 地址:发送方设备的硬件地址(6个字节)

第四行:发送方MAC地址和发送方IP地址(4个字节)

第五行:发送方IP地址和目标MAC地址(6个字节)

第六行:目标MAC地址(6个字节)

第七行:目标IP地址(4个字节)

 

抓取到的arp包的类型

  • IP包的分析

 

第一层:版本(4):0100(ipv4)、0110(ipv6)

首部长度(4):0000~1111(0~15 x4字节 = 0~60字节),IP包头的长度

优先级与服务类型(8):前4个bit代表优先级,中间3个bit代表服 务类型,最后1个bit未启用(保留,运营商可能会用到)优先级最高 为5,用于语音流量

优先级应用:大公司的专线,

服务类型:低延迟、多通道

总长度(16): 3层+4层+5层(未分片时的长度,不是IP数据包长度)

第二层:标识符(16):相当于id,是发送方随机生成的,同一数据包的分片id 相同,不同数据包的分片标识符不同

标志(3):第1个bit保留;第2个bit若为0代表数据包进行了分片, 为1未分片;第3bit代表是非为最后一个分片(0是,1不是)

段偏移量(13):0,1480,2960,···1480*n,决定ip分片的先后顺序

泪滴攻击TearDrop:构造一个段偏移量不为1480*n的分片,让受害者 重组数据包失败,然后一直重组直到死机,也是ddos攻击的一种。

防御方法:防火墙拦截—>请运营做清洗流量

防火墙可以不然分片的IP包头通过,让应用层去分片,现在防火墙基本都开启可这种防御,只有标志010才能通过;

第三层:TTL(8):Time To Live 0~255单位不是秒,是跳。经过一个路由器-1, 默认255,主要用于防环。

协议号(8):为上层提供服务TCP:6、UDP:17、ICMP:1、IGMP:88还有 很多(网关选择协议,被路由器的hsrp技术替代了,vrrp)

首部校验和(16):校验IP包头部

第四层:源IP地址

第五层:目标IP地址

第六层:可选项

 

 

抓取到的IP包的分析

后三行数据分析

  • HTTP包的分析

 HTTP请求报文格式:

 

 

请求行:由3部分组成,分别为:请求方法、URL(见备注1)以及协议版本,之间由空格分隔,请求方法包括GET、POST等。协议版本的格式为:HTTP/主版本号.次版本号,常用的有HTTP/1.0和HTTP/1.1。

请求头部包含很多客户端环境以及请求正文的有用信息。请求头部由“关键字:值”对组成,每行一堆,关键字和值之间使用英文“:”分隔。

Accept: 浏览器可接受的MIME类型。

Accept-Charset:浏览器可接受的字符集。

Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip。Servlet能够向支持gzip的浏览器返回经gzip编码的HTML页面。许多情形下这可以减少5到10倍的下载时间。

Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。

Authorization:授权信息,通常出现在对服务器发送的WWW-Authenticate头的应答中。

Content-Length:表示请求消息正文的长度。

Host: 客户机通过这个头告诉服务器,想访问的主机名。Host头域指定请求资源的Intenet主机和端口号,必须表示请求url的原始服务器或网关的位置。HTTP/1.1请求必须包含主机头域,否则系统会以400状态码返回。

If-Modified-Since:客户机通过这个头告诉服务器,资源的缓存时间。只有当所请求的内容在指定的时间后又经过修改才返回它,否则返回304“Not Modified”应答。

Referer:客户机通过这个头告诉服务器,它是从哪个资源来访问服务器的(防盗链)。包含一个URL,用户从该URL代表的页面出发访问当前请求的页面。

User-Agent:User-Agent头域的内容包含发出请求的用户信息。浏览器类型,如果Servlet返回的内容与浏览器类型有关则该值非常有用。

Cookie:客户机通过这个头可以向服务器带数据,这是最重要的请求头信息之一。

Pragma:指定“no-cache”值表示服务器必须返回一个刷新后的文档,即使它是代理服务器而且已经有了页面的本地拷贝。

From:请求发送者的email地址,由一些特殊的Web客户程序使用,浏览器不会用到它。

Connection:处理完这次请求后是否断开连接还是继续保持连接。如果Servlet看到这里的值为“Keep- Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。要实现这一点,Servlet需要在应答中发送一个Content-Length头,最简单的实现方法是:先把内容写入 ByteArrayOutputStream,然后在正式写出内容之前计算它的大小。

Range:Range头域可以请求实体的一个或者多个子范围。例如,

表示头500个字节:bytes=0-499

表示第二个500字节:bytes=500-999

表示最后500个字节:bytes=-500

表示500字节以后的范围:bytes=500-

第一个和最后一个字节:bytes=0-0,-1

同时指定几个范围:bytes=500-600,601-999

但是服务器可以忽略此请求头,如果无条件GET包含Range请求头,响应会以状态码206(PartialContent)返回而不是以200 (OK)。

UA-Pixels,UA-Color,UA-OS,UA-CPU:由某些版本的IE浏览器所发送的非标准的请求头,表示屏幕大小、颜色深度、操作系统和CPU类型。

空行,这一行非常重要,必不可少。表示请求头部结束,下面就是请求正文。

请求正文:可选部分,比如GET请求就没有请求正文;POST比如以提交表单数据方式为请求正文。

 HTTP响应报文格式:

 

 

1.响应行

响应行一般由协议版本、状态码及其描述组成 比如 HTTP/1.1 200 OK

其中协议版本HTTP/1.1或者HTTP/1.0,200就是它的状态码,OK则为它的描述。

//常见状态码:

100~199:表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程。

200~299:表示成功接收请求并已完成整个处理过程。常用200

300~399:为完成请求,客户需进一步细化请求。例如:请求的资源已经移动一个新地址、常用302(意味着你请求我,我让你去找别人),307和304(我不给你这个资源,自己拿缓存)

400~499:客户端的请求有错误,常用404(意味着你请求的资源在web服务器中没有)403(服务器拒绝访问,权限不够)

500~599:服务器端出现错误,常用500

更详细的状态码信息

2.响应头

响应头用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理等一会儿它回送的数据。

设置HTTP响应头往往和状态码结合起来。例如,有好几个表示“文档位置已经改变”的状态代码都伴随着一个Location头,而401(Unauthorized)状态代码则必须伴随一个WWW-Authenticate头。然而,即使在没有设置特殊含义的状态代码时,指定应答头也是很有用的。应答头可以用来完成:设置Cookie,指定修改日期,指示浏览器按照指定的间隔刷新页面,声明文档的长度以便利用持久HTTP连接,……等等许多其他任务。

常见的响应头字段含义:

Allow:服务器支持哪些请求方法(如GET、POST等)。

Content-Encoding:文档的编码(Encode)方法。只有在解码之后才可以得到Content-Type头指定的内容类型。利用gzip压缩文档能够显著地减少HTML文档的下载时间。Java的GZIPOutputStream可以很方便地进行gzip压缩,但只有Unix上的Netscape和Windows上的IE4、IE5才支持它。因此,Servlet应该通过查看Accept-Encoding头(即request.getHeader(“Accept- Encoding”))检查浏览器是否支持gzip,为支持gzip的浏览器返回经gzip压缩的HTML页面,为其他浏览器返回普通页面。

Content-Length:表示内容长度。只有当浏览器使用持久HTTP连接时才需要这个数据。如果你想要利用持久连接的优势,可以把输出文档写入 ByteArrayOutputStram,完成后查看其大小,然后把该值放入Content-Length头,最后通过byteArrayStream.writeTo(response.getOutputStream()发送内容。

Content- Type:表示后面的文档属于什么MIME类型。Servlet默认为text/plain,但通常需要显式地指定为text/html。由于经常要设置 Content-Type,因此HttpServletResponse提供了一个专用的方法setContentType。

Date:当前的GMT时间,例如,Date:Mon,31Dec200104:25:57GMT。Date描述的时间表示世界标准时,换算成本地时间,需要知道用户所在的时区。你可以用setDateHeader来设置这个头以避免转换时间格式的麻烦。

Expires:告诉浏览器把回送的资源缓存多长时间,-1或0则是不缓存。

Last-Modified:文档的最后改动时间。客户可以通过If-Modified-Since请求头提供一个日期,该请求将被视为一个条件GET,只有改动时间迟于指定时间的文档才会返回,否则返回一个304(Not Modified)状态。Last-Modified也可用setDateHeader方法来设置。

Location:这个头配合302状态码使用,用于重定向接收者到一个新URI地址。表示客户应当到哪里去提取文档。Location通常不是直接设置的,而是通过HttpServletResponse的sendRedirect方法,该方法同时设置状态代码为302。

Refresh:告诉浏览器隔多久刷新一次,以秒计。

Server:服务器通过这个头告诉浏览器服务器的类型。Server响应头包含处理请求的原始服务器的软件信息。此域能包含多个产品标识和注释,产品标识一般按照重要性排序。Servlet一般不设置这个值,而是由Web服务器自己设置。

Set-Cookie:设置和页面关联的Cookie。Servlet不应使用response.setHeader(“Set-Cookie”, …),而是应使用HttpServletResponse提供的专用方法addCookie。

Transfer-Encoding:告诉浏览器数据的传送格式。

WWW-Authenticate:客户应该在Authorization头中提供什么类型的授权信息?在包含401(Unauthorized)状态行的应答中这个头是必需的。例如,response.setHeader(“WWW-Authenticate”, “BASIC realm=\”executives\”“)。注意Servlet一般不进行这方面的处理,而是让Web服务器的专门机制来控制受密码保护页面的访问。

注:设置应答头最常用的方法是HttpServletResponse的setHeader,该方法有两个参数,分别表示应答头的名字和值。和设置状态代码相似,设置应答头应该在发送任何文档内容之前进行。

setDateHeader方法和setIntHeadr方法专门用来设置包含日期和整数值的应答头,前者避免了把Java时间转换为GMT时间字符串的麻烦,后者则避免了把整数转换为字符串的麻烦。

HttpServletResponse还提供了许多设置

setContentType:设置Content-Type头。大多数Servlet都要用到这个方法。

setContentLength:设置Content-Length头。对于支持持久HTTP连接的浏览器来说,这个函数是很有用的。

addCookie:设置一个Cookie(Servlet API中没有setCookie方法,因为应答往往包含多个Set-Cookie头)。

3.响应体

响应体就是响应的消息体,如果是纯数据就是返回纯数据,如果请求的是HTML页面,那么返回的就是HTML代码,如果是JS就是JS代码,如此之类

 

 

抓取HTTP请求包

请求包的数据

 

 

HTTP响应数据包

响应体

  • 帧的分析

帧头的大小为:14个字节

MTU大小为:1500个字节(中国地区)

帧尾大小为:4个字节

一个帧的大小位:1518个字节

1字节=8位

帧头内的内容包括:目标MAC,源MAC,类型

类型的作用:识别上层协议(IP或ARP)

0x0800:上层为IP协议

0x0806:上层为ARP协议

0x代表16进制

 

  • DNS包的分析

 

Length:占用两个字节,表示整个DNS数据的长度(不包含length占用的两个字节),这个标志只在TCP请求数据包中存在

Transaction ID:占用两个字节,请求的ID号,应答数据包中的ID号会与请求中的ID号一一对应,理论上此ID号应该是随机的,但是在测试中发现win中使用nslookup查询时此ID号是递增1的,属于特殊情况

Flags:占用两个字节,表示多个标志

Q/R:第一位表示请求(1)/应答(0);

Opcode:操作码。其中,0 表示标准查询;1 表示反向查询;2 表示服务器状态请求。

Truncated:表示应答包是否有被截断。请求中会带有一个UDP payload size字段,当应答数据包中DNS数据长度超过该值时,应答则会被截断;只有UDP应答会被截断,TCP请求中,UDP payload size不生效;当客户端收到被截断的数据包时,应转而发送一个TCP-DNS的数据包来获取完整的应答

Recursion desired:为1时表示期望递归查询,为0时表示可以接受迭代查询

Z:保留字段,一般置为0

AD bit:当服务器返回的资源记录已被的本地DNS服务器认证通过时,会将此位置为1,否则置为0

reply-code:应答响应码,表示查询结果

Questions、Answer RRss、Authority RRs、Additonal RRs:标志域名数与资源记录数;一般会根据这里提取到的数值去获取后面的RRs;当数值比实际RRs数要大时,就会解析失败,而当数值比实际的RRs数小时则可能可以解析成功,多出来的RRs数会被放置到下一个区域中去解析(e.g.,answer区域中多出来的RRs数会被放置到authority区域中),末尾多出来的则会被忽略。

先从含义上看,请求中携带的是请求域名、请求记录类型、还有记录类;服务器会跟着请求记录类型来判断需要返回哪种记录类型的数据;记录类(class)表示网络类型,目前只有互联网,所以都是IN。

       type和class都是固定占用了两个字节,而域名占用的则有不同;首先域名被分成了3段,即图中的Label Count;域名总长度为13字节(Name Length)。但是在数据包中实际上是占用了15个字节,因为在解析DNS数据包时,会按段提取解析并在每段前面加上每段的长度值,例如第一段是www,长度是3,w对应的ascall码值为77,则会用03 77 77 77来表示www;最终域名的结尾还会加上00来表示

在应答区域中出现了请求的域名名称,因为不是第一次出现,所以用了c0 0c表示;在DNS数据包中,c0 0c会是比较常见的,因为请求区域中的域名都是在第12个字节中出现。(ID:2字节+flags:2字节+ Questions:2字节+Answer RRss:2字节+Authority RRs:2字节+Additonal RRs:2字节 = 12)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TCP/UDP/ARP/DNS/HTTP/帧的包头解析(保姆级分析) 的相关文章

  • 三.树莓派4B-无线登录

    无线登录 无线登录是指通过树莓派的SSH服务连接树莓派 这种方式最常用 SSH服务开启后 就相当于串口登录时配置config txt和cmdline txt文件一样 使得系统数据往wifi模块进行发送 再由软件接收 呈现系统终端界面 SSH
  • 如何使用Anaconda创建python3.9环境

    如何使用Anaconda创建python3 9环境 首先查看python版本 然后退出 你可以输入conda h查看基本的语法 下面进行创建仓库 即输入conda create 创建一个新的环境要给它一个名字 你可以用 n 表示你后面要起的
  • 微信小程序发布上线全流程(注册/开发/上传审核)

    以下是微信小程序发布上线的详细流程 确认小程序信息 在微信公众平台注册并登录后 进入小程序管理后台 在 开发 gt 开发设置 中填写小程序基本信息和配置 包括小程序名称 图标设计 类目选择等 此外 需要在小程序管理后台中配置小程序服务类目和
  • c++如何求任意多边形的面积

    由于项目需要 求解任意不规则多边形的面积 想了很久 也不知道怎么叙述 直接代码展示吧 include

随机推荐

  • vue中使用canvas添加各类水印

    vue使用canvas绘制文字水印背景 1 写watermarker js文件 水印添加方法 const setWatermark str1 str2 gt const id 1 23452384164 123412415 if docum
  • 老毛桃电脑重装linux系统,如何简单快速用U盘装Win10系统,小白也能变装系统达人...

    原标题 如何简单快速用U盘装Win10系统 小白也能变装系统达人 飚王出品 必属精品 电脑作为家庭必备 虽然大部分时候都不需要我们自己装系统 但万一遇到电脑中毒系统崩溃或者买回一台笔记本预装linux系统但想换Win10 除了花钱找人装外
  • 数据挖掘技术的来源、历史、研究内容及常用技术

    数据挖掘技术的来源 历史 研究内容及常用技术 1 数据挖掘技术的由来 1 1网络之后的下一个技术热点 我们现在已经生活在一个网络化的时代 通信 计算机和网络技术正改变着整个人类和社会 如果用芯片集成度来衡量微电子技术 用CPU处理速度来衡量
  • 第18章_JDK8-17新特性(上)

    文章目录 第18章 JDK8 17新特性 上 本章专题与脉络 1 Java版本迭代概述 1 1 发布特点 小步快跑 快速迭代 1 2 名词解释 名词解释 Oracle JDK和Open JDK 名词解释 JEP 名词解释 LTS 1 3 各
  • 数字孪生-第二章、数字孪生技术

    第二章 数字孪生技术 2 1 数字孪生的相关领域 想要厘清数字孪生技术的内涵和体系架构 就需要数字如下10个部分的数字孪生的相关领域 2 1 1 数字孪生与计算机辅助设计 计算机辅助设计 Computer Aided Design CAD
  • 万元礼品奖池 玩转「Lighthouse」有奖征文来袭

    疫情之下 居家办公的你被远程会议邀请吵醒 孩子正在网课课堂中跟老师斗智斗勇 家人们在直播间里频频下单 这一切都在说明 我们已经进入了一个 万物皆可在云上 的时代 轻量应用服务器Lighthouse作为新一代开箱即用 面向轻量应用场景的云服务
  • 微信小程序Demo 优惠券展示 / 领取 / 赠送 / 口令优惠券

    前言 本教程是基于 apifm wxapi 模块 教你快速实现小程序开发 所以你可能需要先了解以下知识点 创建 HelloWorld 项目 使用 apifm wxapi 快速开发小程序 免费注册开通后台 获得专属域名 功能说明 后台发布优惠
  • Python2的安装

    Python2的安装 介绍 Python2 是当前 Python 开发的主流版本 是课程学习内容之一 安装 打开安装包 选择安装方式 选择安装路径 修改安装内容 修改后的效果 等待安装结束 安装结束 进入安装路径 复制python为pyth
  • 计算,条件[5993] 将找到的值乘以 2

    public class Solution 提前定义辅助数组大小 private const int AUX SIZE 1001 public int FindFinalValue int nums int ori 辅助数组 int aux
  • brute force/BF 暴力法查找子字符串

    暴力匹配算法 BF法就是brute force暴力法 就是在主串里面一个一个字符向后移去查找是否存在需要查找的子字符串 如果用暴力匹配的思路 并假设现在文本串S匹配到 i 位置 模式串P匹配到 j 位置 则有 如果当前字符匹配成功 即S i
  • QT 等待对话框/进度--

    用QT的 加载的一张gif图片 记录下来以后免得忘记 cpp view plain copy ifndef DIALOG H define DIALOG H include
  • gcc的基本用法及命令

    1 gcc E hello c 仅仅是预处理 即对代码中以 开头进行预处理 其他的地方没有改变 执行完后信息打印在终端 如果需要用文件存放 则应该在命令的后面加上重定向 既是 gt gt hello i 后缀必须为 i的文件 因为这个命令生
  • qt设置渐变色

    概述 此文只作为设置渐变色的一种方式 QDialog ImDialog background color qlineargradient x1 0 y1 0 x2 1 y2 1 stop 0 0e1d2e stop 1 141824 以上为
  • 从2013.7.8的项目会议看近期学习方向

    目前实验室学习的东西有 1 首先对于某些成品需要了解 对其代码等也要做深入的分析 看看人家是如何实现的代表是Lustre GPFS Ceph三种 2 热点问题 所谓热点问题 其实就是如何处理负载均衡的问题 也就是选择一个可以使系统更充分的利
  • 问题解决:VS Code环境调试多文件C++程序

    在VS code环境下默认可以调试单文件的C 程序 只要按调试按钮 环境自动编译该文件 并进入调试模式 如果一个程序由多个文件组成 则无法对直接进行调试 会出现编译不通过的错误 主要原因为调试工具默认只对当前文件进行编译 所以程序由多文件组
  • react-redux@7.1用于hooks的API

    React redux 7 1发版啦 因为在新的项目中用到了hooks 但是用的时候react redux还处于alpha x版本的状态 用不了最新的API 感觉不是很美妙 好在 这两天发布了7 1版本 现在来看看怎么用这个新的API us
  • BES2300x笔记(2) -- 如何区分左右耳

    哈喽大家好 这是该系列博文的第二篇 篇 lt lt 系列博文索引 快速通道 gt gt 一 前言 我们知道 TWS耳机有左耳和右耳两种角色 因此可以被定义不同的UI交互功能 常见的 区分左右耳的方法有硬件IO区分和软件蓝牙地址奇偶区分 比如
  • 【毕业设计】深度学习车辆颜色识别检测系统 - python opencv YOLOv5

    文章目录 1 前言 2 实现效果 3 CNN卷积神经网络 4 Yolov5 5 数据集处理及模型训练 6 最后 1 前言 Hi 大家好 这里是丹成学长的毕设系列文章 对毕设有任何疑问都可以问学长哦 这两年开始 各个学校对毕设的要求越来越高
  • Redis系列之客户端Redisson

    概述 官方推荐的客户端 支持Redis单实例 Redis哨兵 Redis Cluster Redis master slave等各种部署架构 GitHub 功能 分布式锁 分布式锁 使用Redisson提供的分布式锁的一个最常见场景 应用部
  • TCP/UDP/ARP/DNS/HTTP/帧的包头解析(保姆级分析)

    各种包的分析总结 TCP包的分析 包括使用wireshark进行抓包的分析 第一行 2个字节表示源端口 2个字节表示目的端口 0 65535 第二行 序列号 保证数据的顺序 第三行 确认序号 确保自己已经收到了 第四行 首部长度 数据偏移