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

这篇具有很好参考价值的文章主要介绍了TCP/UDP/ARP/DNS/HTTP/帧的包头解析(保姆级分析)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

各种包的分析总结

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

tcp包头,网络,tcp/ip,网络协议

 

第一行: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 字节的整数倍

tcp包头,网络,tcp/ip,网络协议

 

tcp包头,网络,tcp/ip,网络协议

 

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

TCP包的flags的数据的值

tcp包头,网络,tcp/ip,网络协议

 

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

 

  • UDP包的分析

tcp包头,网络,tcp/ip,网络协议

 

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

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

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

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

tcp包头,网络,tcp/ip,网络协议

 

抓取到的UDP包

  • ARP包的分析

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

tcp包头,网络,tcp/ip,网络协议

 

第一行:硬件类型:指明了发送方想知道的硬件接口类型,以太网的值为 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个字节)

tcp包头,网络,tcp/ip,网络协议

 

抓取到的arp包的类型

  • IP包的分析

tcp包头,网络,tcp/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地址

第六层:可选项

tcp包头,网络,tcp/ip,网络协议

 

tcp包头,网络,tcp/ip,网络协议

 

抓取到的IP包的分析

后三行数据分析

  • HTTP包的分析

 HTTP请求报文格式:

tcp包头,网络,tcp/ip,网络协议

tcp包头,网络,tcp/ip,网络协议 

 

请求行:由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响应报文格式:

tcp包头,网络,tcp/ip,网络协议

tcp包头,网络,tcp/ip,网络协议 

 

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代码,如此之类

tcp包头,网络,tcp/ip,网络协议

 

tcp包头,网络,tcp/ip,网络协议

 

抓取HTTP请求包

请求包的数据

tcp包头,网络,tcp/ip,网络协议

 

tcp包头,网络,tcp/ip,网络协议

 

HTTP响应数据包

响应体

  • 帧的分析

tcp包头,网络,tcp/ip,网络协议

帧头的大小为:14个字节

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

帧尾大小为:4个字节

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

1字节=8位

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

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

0x0800:上层为IP协议

0x0806:上层为ARP协议

0x代表16进制

 

  • DNS包的分析

tcp包头,网络,tcp/ip,网络协议

 

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)。文章来源地址https://www.toymoban.com/news/detail-758391.html

到了这里,关于TCP/UDP/ARP/DNS/HTTP/帧的包头解析(保姆级分析)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 全网多种方法分析解决HTTP Status 404资源未找到的错误,TCP的3次握手,dns域名解析,发起http请求以及cookie和session的区别

    正赶上最近 ChatGPT 很火,于是借助 ChatGPT 来解释 HTTP Status 404 ,如下所示: HTTP Status 404: The HTTP Status 404 means that the requested resource was not found on the server. This is commonly used in response to a failed HTTP request and can be caused by mistyping an URL, spelling mistakes, or trying to access a file or resource that

    2023年04月08日
    浏览(37)
  • 网络协议分析(一)(C语言实现---ethernet、arp、ip、icmp、udp、tcp)

    以太网协议是一种局域网通信协议,它通过物理层和数据链路层的协同工作,使用媒体访问控制地址和载波监听/冲突检测协议来实现计算机之间的稳定数据传输。在数据传输过程中,以太网会将数据封装成数据帧,并根据目标MAC地址来识别需要接收数据的计算机。通过这种方

    2024年02月06日
    浏览(35)
  • 各种数据包头的详解(tcp,udp,ipv4,ipv6)

    Osi七层参考模型: 应用层 表示层 会话层 --------前三层控制层面 --------后四层数据层面 传输层: 区分不同的流量,定义传输方式(tcp/udp),定义端口号(区分不同的服务) 网络层: 寻址,编址(ipv4地址) 数据链路层: 定义局域网的封装, Ethernet 2 IEEE802.3 封装 物理层 Tcp/ip参

    2024年02月08日
    浏览(33)
  • Day 8.TCP包头和HTTP

    1.序号:发送端发送数据包的编号 2.确认号:已经确认接收到的数据的编号(只有当ACK为1时、确认号才有用); 1.在通信前建立三次握手 SYP SYP+ACK ACK 2.在通信过程中通过序列号和确认号和确认号保证数据的完整性 本次发送的序列号:上次收到的确认号 本次发送的确认号:上

    2024年03月12日
    浏览(27)
  • 网络协议分析-http/https/tcp/udp

    “三次握手”的目的是“为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生 错误”。主要目的防止 server 端一直等待,浪费资源。换句话说,即是为了保证服务端能收 接受到客户端的信息并能做出正确的应答而进行前两次(第一次和第二次)握手,为了保证客

    2024年02月11日
    浏览(37)
  • 第138篇:了解HTTP协议(TCP/IP协议,DNS域名解析,浏览器缓存)

    好家伙,发现自己的网络知识十分匮乏,赶紧补一下   这里先举个我生活中的例子 欸,作业不会写了,上网搜一下 用edge浏览器上bing必应搜一下(百度广告太多了,真不想用百度举例子)   假设这是我们第一次访问bing的首页 当我向浏览器中输入https://cn.bing.com/并按下回车

    2023年04月24日
    浏览(32)
  • arp欺骗(http)与dns欺骗

    win7:    ip:192.168.127.147    mac:00-0C-29-4F-1C-36 kali:    ip:192.168.127.133    mac:00:0c:29:4c:4d:92 arp -a  获取网关 网关:ip:192.168.127.0     mac:00-0c-29-4c-4d-92 fping -g 192.168.127.0/24 192.168.127.133 is alive 192.168.127.147 is alive 安装dsniff 更改sources.list源,apt-get update 更新数据源列表   更改网关

    2024年02月07日
    浏览(25)
  • 探索网络攻击:ARP断网、ARP欺骗和DNS欺骗实验解析

    目录 前言 一、ARP概述 1.1 什么是ARP 1.2 ARP协议的基本功能 1.3 ARP缓存表 1.4 ARP常用命令 二、ARP断网实验 三、ARP欺骗实验 3.1 内网截获图片 3.2 HTTP账户密码获取 四、DNS欺骗实验 总结 🌈嗨!我是Filotimo__🌈。很高兴与大家相识,希望我的博客能对你有所帮助。 💡本文由Filot

    2024年02月06日
    浏览(34)
  • 第四天 ICMP、ARP、TCP、UDP协议

    ICMP用来传递差错、控制、查询等信息。 ICMP是TCP/IP协议簇的核心协议之一,它用于在IP网络设备之间发送控制报文,传递差错、控制、查询等信息。 ICMP Echo Request和ICMP Echo Reply分别用来查询和响应某些信息,进行差错检测。 ICMP Echo消息常用于诊断源和目的地之间的网络连通性

    2024年04月16日
    浏览(27)
  • 【面试宝典】图解ARP协议、TCP协议、UDP协议

    一、ARP协议 二、TCP协议  三、UDP协议   四、TCP和UDP的区别

    2024年01月16日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包