HTTP报文(这篇讲得比较详细)

本文深入介绍了HTTP报文的结构,包括起始行(请求行与状态行)、首部(通用、请求、响应、实体及扩展首部)和实体主体。重点讲解了HTTP方法(GET、POST等)、状态码(200、401、404等)、首部字段的作用,以及实体内容的处理。通过对HTTP报文的理解,有助于更好地掌握网络通信原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载自:

HTTP报文 - 逆心 - 博客园之前写过一篇HTML报文,但是感觉写完之后还是不懂,最近终于有时间开始看《HTTP权威指南》,看完之后觉得还是比之前的理解更加深入了,提取HTTP报文出来做个记录。 HTTP报文分为请求报文(requhttps://www.cnblogs.com/kissdodog/archive/2013/04/01/2993228.html

HTTP报文 

  之前写过一篇HTML报文,但是感觉写完之后还是不懂,最近终于有时间开始看《HTTP权威指南》,看完之后觉得还是比之前的理解更加深入了,提取HTTP报文出来做个记录。

  HTTP报文分为请求报文(request message)与响应报文(response message)。

一、报文的组成部分

  一个HTTP报文由3部分组成,分别是:

  (1)、起始行(start line)

  (2)、首部(header)

  (3)、主体(body)

  示例:

HTTP/1.0 200 OK    //起始行

Content-type:text/plain    //首部
Content-length:19            //首部  

Hi I'm a message!    主体

  1.1 请求报文与响应报文的格式

  请求报文的格式:

<method> <request-UTL> <version>
<headers>

<entity-body>

  响应报文的格式:

<version> <status><reason-phrase>
<header>

<entity-body>

  留意到请求报文与响应报文只是起始行不同。

  下面是对格式中各部分的简要描述

  1、方法(method)  GET

    客户端希望服务器对资源执行的动作。是一个单独的词,比如GET、HEAD或POST。

  2、请求的URL(request-URL)  www.baidu.com

    命名了所有请求资源,或者URL路径组件的完整URL。如果直接与服务器进行对话,只要URL的路径组件是资源的绝对路径,通常就不会有什么问题--服务器可以假定   自己是URL的主机/端口。

  3、版本(version)  HTTP/1.1

    报文所使用的HTTP版本,其格式如下:

    HTTP/<major>.<minor>

    其中主要版本号(major)和次要版本号(minor)都是整数。  

  4、状态码(status)

    这三个数字描述了请求过程中所发生的情况。每个状态码的第一位数字都用于描述状态的一般类别("成功"、"出错"等)。  200

  5、原因短语(reason-phrase)

    数字状态码的可读版本,包含行终止序列之前的所有文本。原因短语只是给人类看的,它不能说明什么。客户端依然采用状态码来判断请求/响应是否成功!

    例如:HTTP/1.0 200 NOT OK 客户端依然会当请求已成功处理。因为状态码是200。而原因短语只是说明而已,这对于自定义扩展状态码还是比较有用的。

  6、首部(header)

    可以有0个或多个首部,每个首部都包含一个名字,后面跟着一个冒号(:),然后是一个可选的空格,接着是一个值,最后是一个CRLF。首部是由一个空行(CRLF)结束   的,表示了首部列表的结束和实体主体的开始。

  7、实体的主体部分(entity-body)

    实体的主体部分包含一个由任意数据组成的数据块。并不是所有的报文都包含实体的主体部分。如GET请求就不包含实体。

二、起始行

  1、请求行

  请求报文的起始行,或称为请求行。包含了一个方法和一个请求的URL。这个方法描述了服务器应该执行的操作,请求URL描述了要对哪个资源执行这个方法。请求行中还包含HTTP的版本,用来告知服务器,客户端使用的是哪种HTTP版本。如:

  GET /info/123.html HTTP/1.1    //方法为GET    URL为 /info/123.html    HTTP协议版本为1.1

  1.1方法

  下面给出请求报文中方法的列表

方法        描述                    是否包含主体
GET     从服务器获取一份文档                   否
HEAD    只从服务器获取文档的首部                    否
POST      向服务器发送需要处理的数据               是
PUT     将请求的主体部分存储在服务器上               是
TRACE    对可能经过代理服务器传送到服务器上去的报文进行跟踪     否
OPTIONS   决定可以在服务器上执行哪些方法               否
DELETE   从服务器上删除一份文档                   否

   1.2 request-URL

  跳过,不说你也知道。

  1.3 版本(version)

  版本号会以HTTP/x.y 的形式出现在请求和响应报文的起始行中。为HTTP应用程序提供了一种将自己遵循的协议版本告知对方的方式。版本号说明了应用程序支持的最高HTTP版本。注意,版本号不会被当做小数来处理。因此在比较HTTP版本时,每个数字都必须单独做比较,以便确定哪个版本更高。如HTTP/2.22就比HTTP/2.3要高,因为22比3大。

  1.4 状态码(status-code)

  方法是用来告诉服务器做什么事情,而状态码则用来告诉客户端发生了什么事情。

  下面给出状态码的常用分类

整体范围       已定义范围   分类
100-199      100-101    信息提示
200-299      200-206    成功
300-399      300-305    重定向
400-499      400-415    客户端错误
500-599      500-505    服务器错误

  下面再说几个最常见的状态码。200-OK-成功,请求的所有数据都在响应主体中。401-Unauthorized(未授权)-需要输入用户名和密码。404-Not Found(未找到)-服务器无法找到所请求URL对应的资源。

  1.5原因短语

  原因短语是响应起始行中的最后一个组件。它为状态码提供了文本形式的解释。比如在HTTP/1.0 200 OK 中,OK就是原因短语。原因短语和状态码是成对出现的。原因短语是状态码的可读版本,应用程序开发者将其传送给用户,用以说明请求期间发生了什么情况。客户端判断服务器状态依据的是状态码,与原因短语没有半毛钱关系。

三、首部

   HTTP首部字段向请求和响应报文中添加了一些附加信息。本质上来说,它们只是一些名/值对的列表。比如下面的首部行会向Content-Length首部字段赋值19:

    Content-length:19

  1、首部分类

    HTTP规范定义了几种首部字段。应用程序也可以随意发明自己所用的首部。HTTP首部可以分为以下几类。

    (1)、通用首部:既可以出现在请求报文中,也可以出现在响应报文中。

      这些是客户端和服务器都可以使用的通用首部。可以在客户端、服务器和其他应用程序之间提供一些非常有用的通用功能。他们像和事佬一样,,不论报文是何种      类型,都为其提供一些有用的信息。例如不管是构建请求报文还是响应报文,创建报文的日期时间都是同一个意思,因此提供这类信息的首部对这两种类型的报文来说      都是通用的。下面用表格的形式给出通用的信息性首部。

    通用的信息性首部:

首部           描述
Connection        允许客户端和服务器指定与请求/响应连接有关的选项
Date            提供日期和时间标志,说明报文是什么时间创建的
MIME-Version       给出了发送端使用的MIME版本
Trailer          如果报文采用了分块传输编码(chunked transfer encoding)方式,就可以用这个首部列出位于报文拖鞋 (trailer)部分的首部集合。
Transfer-Encoding     告知接收端为了保证报文的可靠传输,对报文采用了什么编码方式。
Update          给出了发送端可能想要"升级"使用的新版本或协议
Via            显示了报文经过的中间节点(代理、网关)

通用缓存首部:

首部           描述
Cache-Control       用于随报文传送缓存指示
Pragma          另一种随报文传送指示的方式,但并不专用于缓存

    (2)、请求首部:提供更多有关请求的信息。

      请求首部是在请求报文中有意义的首部。用于说明是谁或什么在发送请求,请求源自何处,或者客户端的喜好及能力。服务器可以根据请求首部给出的客户端的信      息,试着为客户端提供更好的响应。

请求的信息性首部:
首部              描述
Client-IP           提供了运行客户端的机器的IP地址
From              提供了客户端用户的E-mail地址
Host               给出了接收请求的服务器的主机名和端口号
Referer             提供了包含当前请求URI的文档的URL
UA-Color            提供了与客户端显示器的显示颜色有关的信息
UA-CPU            给出了客户端CPU的类型或制造商
US-Disp           提供了与客户端显示器(屏幕)能力有关的信息
US-OS             给出了客户端显示器的像素信息
UA-Pixels           提供了客户端显示器的像素信息
User-Agent          将发起请求的应用程序名称告知服务器(User-Agent)用户代理,其实不就是浏览器吗

  Accept首部为客户端提供了一种将其喜好和能力告知服务器的方式,包括他们想要什么,可以使用什么,以及最重要的,他们不想要什么。这样服务器就可以根据这些额外信息,对要发送的内容做出更明智的决定。Accept首部会使连接的两端都受益。客户端会得到他们想要的内容,服务器则不会浪费其时间和带宽来发送客户端无法使用的东西。

Accept首部:
首部            描述
Accept            告诉服务器能够发送哪些媒体类型
Accept-Charset       告诉服务器能够发送哪些字符集
Accept-Encoding     告诉服务器能够发送哪些编码方式
Accept-Language      告诉服务器能够发送哪些语言
TE             告诉服务器可以使用哪些扩展传输编码

  条件请求首部:

 有时客户端希望为请求加上某些限制。比如客户端已经有了一份副本,就希望只在服务器上的文档与客户端拥有的副本有所区别时,才请求服务器传输文档。通过条件请求首部,客户端就可以加上这种限制,要求服务器在对请求进行相应之前,确保某个请求为真。

条件请求首部:
首部            描述
Expect           允许客户端列出某请求所要求的服务器行为
If-Match         如果实体标记与文档当前的实体标记相匹配,就或者这份文档
If-Modified-Since     除非在某个指定的日期之后资源被修改过,否则就限制这个请求
If-Range         允许对文档的某个范围进行条件请求
If-Unmodified-Since    除非在某个指定的日期之后资源没有被修改过,否则就限制这个请求
Range          如果服务器支持范围请求,就请求资源的指定范围

安全请求首部:

HTTP本身就支持一种简单的机制,可以对请求进行质询/响应认证。这种机制要求客户端在获取特定的资源之前,先对自身进行认证,这样就可以使事务稍微安全一些。

安全请求首部:
首部            描述
Authorization        包含了客户端提供给服务器,以便对其自身进行认证的数据
Cookie           客户端用它想服务器传送一个令牌-他并不是真正的安全首部,但却是隐含了安全功能
Cookie2           用来说明请求端支持的cookie版本

代理请求首部:

随着因特网上代理的普遍应用,人们定义了几个首部来协助其更好地工作。

代理请求首部:
首部            描述
Max-Forword       在通往源端服务器的路径上,将请求转发给其他代理或网关的最大次数-与TRACE方法一同使用
Proxy-Authorization   与Authorization首部相同,但这个首部是在与代理进行认证时使用的
Proxy-Connection    与Connection首部相同,但这个首部是在于代理建立连接时使用的

    (3)、响应首部:提供更多有关响应的信息。

      响应报文由自己的响应首部集。响应首部为客户端提供了一些额外的信息,比如谁在发送响应、响应者的功能,甚至与响应相关的一些特殊指令。这些首部有助于客     户端处理响应,并在将来发起更好的请求。

响应的信息性首部:
首部          描述
Age          (从最初创建开始)响应持续时间
Public          服务器为其资源支持的请求方法列表
Retry-After       如果资源不可用的话,再次日期或时间重试
Server         服务器应用程序软件的名称和版本
Title          对HTML文档来说,就是HTML文档的源端给出的标题
Warning        比原因短语中更详细的一些警告报文

 协商首部:如果资源有多种表示方法-比如,如果服务器上有某文档的法语和德语译稿,HTTP/1.1可以为服务器和客户端提供对资源进行协商的能力。

协商首部:
首部         描述
Accept-Ranges    对此资源来说,服务器可接受的范围类型
Vary          服务器查看的其他首部的列表,可能会使响应发生变化;也就是说,这是一个首部列表,服务器会根据这些首部的内容挑选出最合适的资源版本            发送给客户端。

安全响应首部:

我们已经看到过安全请求首部了,本质上这里说的就是HTTP的质询/响应认证机制的响应侧。

安全响应首部:
首部 描述
Proxy-Authenticate 来自代理的对客户端的质询列表
Set-Cookie 不是真正的安全首部,但隐含有安全功能;可以在客户端设置一个令牌,以便服务器对客户端进行标识。
Set-Cookie2 与Set-Cookie类似。
WWW-Authenticate 来自服务器的对客户端的质询列表

    d、实体首部:描述主体的长度和内容,或者资源自身。

    有很多首部可以用来描述HTTP报文的负荷。由于请求和响应文本中都可能包含实体部分,所以在这两种类型的报文中都可能出现这些首部。实体首部提供了有关实体及    其内容的大量信息,从有关对象类型的信息,到能够对资源使用的各种有效的请求方法。总之,实体首部可以告知报文的接收者它在对什么进行处理。

实体信息性首部:
首部        描述
Allow        列出了可以对此实体执行的请求方法
Location       告知客户端实体实际上位于何处;用于将接收端定向到资源的位置上去

内容首部:

    内容首部提供了与实体内容有关的特定信息,说明了其类型、尺寸以及处理它所需的其他有用信息。比如,Web浏览器可以通过查看返回的内容类型,得知如何显示对象。

内容首部:
首部              描述
Content-Base         解析主体中的相对URL时使用的基础URL
Content-Encoding       对主体执行的任意编码方式
Content-Language      理解主体时最适宜使用的自然语言
Content-Length        主体的长度或尺寸
Content-Location      资源实际所处的位置
Content-MD5        主体的MD5校验
Content-Range       在整个资源中此实体表示的字节范围
Content-Type         这个主体的对象模型

实体缓存首部:

  通用的缓存首部说明了如何或什么时候进行缓存。实体的缓存首部提供了与被缓存实体有关的信息,比如验证已缓存的资源副本是否仍然有效所需的信息,以及更好地估计已缓存资源合适失效所需的线索。

实体缓存首部
首部        描述
ETag        与此实体有关的实体标记
Expires      实体不在有效,要从原始的源端再次获取此实体的日期和时间
Last-Modified   这个实体最后一次被修改的日期和时间

    e、扩展首部:规范中没有定义的新首部。

    每个HTTP首部都有一种简单的语法:名字后面跟着冒号(:),然后跟上可选的空格,再跟上字段值。最后是一个回车换行。

  2、首部延续行

    将长的首部行分为多行可以提高可读性,多出来的每行前面至少要有一个空格或制表符(tab)。

HTTP/1.0 200 OK
Content-Type: image/gif
Content-Length: 8572
Server: Test Server
Version 1.0

     在上面的例子中,响应报文里包含了一个Server首部,其值被划分成了多个延续行,该首部的完整值为Test Server Version 1.0。

四、实体部分

  HTTP的第三部分是可选的实体主体部分,实体的主体是HTTP报文的负荷。就是HTTP要传输的内容。

  HTTP报文可以承载很多类型的数字数据,图片、视频、HTML文档、软件应用程序、信用卡事务、电子邮件等。

  下面来实战下,我们用浏览器打开百度首页,将HTTP报文实战解析下:

  打开百度的请求报文:

复制代码

GET / HTTP/1.1                //请求方法为GET,HTTP协议为1.1
Host: www.baidu.com            //URL为www.baidu.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:19.0) Gecko/20100101 Firefox/19.0    //用户代理,也就是浏览器了,显示了浏览器的详细信息
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8        //服务器能够发送的文件类型text/html的意思是HTML文本文档类型,后面那些查文档去
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3                //服务器能够发送的语言 zh-cn为中文,后面那些查文档去
Accept-Encoding: gzip, deflate                            //服务器能够发送的编码格式为gzip,编码格式不符合浏览器会解释不了
Cookie: BAIDUID=AF6C346B14E94898933E5F858C63F889:FG=1; BDREFER=%7Burl%3A%22http%3A//news.baidu.com/%22%2Cword%3A%22%22%7D; H_PS_PSSID=2097_1464_2133_1944_1788    //cookie,服务器存储在客户端的信息,每次请求都会将服务器保存在客户端的cookie一并发送上服务器。
Connection: keep-alive    //连接,keep-alive保持状态
Cache-Control: max-age=0    //随报文传送缓存指示    cache-control max-age>0 时 直接从游览器缓存中 提取 max-age<=0 时 向server 发送http 请求确认 ,该资源是否有修改 有的话 返回200 ,无的话 返回304.

复制代码

  打开百度的响应报文:

复制代码

HTTP/1.1 200 OK        //HTTP版本 1.1    状态码200 原因短语OK
Date: Tue, 02 Apr 2013 04:27:50 GMT    //响应的时间日期
Server: BWS/1.0        //服务器应用程序软件的名称和版本 BWS/1.0
Content-Length: 4271    //响应的主体内容的长度为4271个字节
Content-Type: text/html;charset=utf-8    //响应类型为HTML文本,编码类型为utf-8
Cache-Control: private        //缓存指示
Expires: Tue, 02 Apr 2013 04:27:50 GMT    //实体不在有效,要从原始的源端再次获取此实体的日期和时间
Content-Encoding: gzip        //对主体执行的编码方式为gzip
Set-Cookie: H_PS_PSSID=2097_1464_2133_1944_1788; path=/; domain=.baidu.com    //设置cookie,path,domain都是cookie的信息(作用范围等等)
Connection: Keep-Alive    //状态为保持连接

复制代码

  响应就牛B了,就是页面的源代码:

<!DOCTYPE html><!--STATUS OK-->    <html><head>  <meta http-equiv="content-type" content="text/html;charset=utf-8">  <title>百度一下,你就知道</title> <style >html,body{height:100%}html{overflow-y:auto}#wrapper{position:relative;_position:;min-height:100%}#content{padding-bottom:100px;text-align:center}#ftCon{height:100px;position:absolute;bottom:44px;text-align:center;width:100%;margin:0 auto;z-index:0;overflow:hidden}#ftConw{width:720px;margin:0 auto}body{font:12px arial;text-align:;background:#fff}body,p,form,ul,li{margin:0;padding:0;list-style:none}body,form,#fm{position:relative}td{text-align:left}img{border:0}a{color:#00c}a:active{color:#f60}#u{color:#999;padding:4px 10px 5px 0;text-align:right}#u a{margin:0 5px}#u .reg{margin:0}#m{width:720px;margin:0 auto}#nv a,#nv b,.btn,#lk{font-size:14px}#fm{padding-left:110px;text-align:left;z-index:1}...
由于内容比较多,所以省略后面部分

  下面来看下一个需要提交表单的请求报文:打开百度的登录窗口,填写完信息后提交是的请求报文POST信息为:

复制代码

callback    parent.bdPass.api.login._postCallback
charset    utf-8
codestring    
index    0
isPhone    false
loginType    1
mem_pass    on
password    123
ppui_logintime    13905
safeflg    0
staticpage    http://www.baidu.com/cache/user/html/jump.html
token    d0de247f344d33dbb9692491dc5574cd
tpl    mn
u    
username    123@qwe.com
verifycode    

复制代码

  可以看到在表单提交的请求账号密码都在请求报文的实体里面传送上服务器了。

分类: 协议:HTTP

<think>好的,我现在需要解释用户提到的专业术语,比如SYN。首先,用户之前的问题是关于TCP三次握手和四次挥手的,而我的回答中提到了SYN、ACK、FIN等术语。用户现在希望了解这些术语的具体含义,可能是在学习过程中遇到了不理解的地方,或者想更深入理解之前的解释。 首先,我需要确定用户需要解释哪些术语。用户明确提到了SYN,但根据之前的回答,可能还有其他术语需要解释,比如ACK、FIN、Seq、MSL、TIME_WAIT等。用户可能希望逐一了解这些术语,以更好地理解整个TCP连接过程。 接下来,我需要考虑如何组织这些术语的解释。可能需要按类别或出现的顺序来排列,比如先三次握手相关的术语,再四次挥手的,最后是其他相关术语。同时,要确保每个术语的解释简明扼要,结合实际运维场景中的例子,帮助用户将理论知识与实际应用联系起来。 例如,SYN是同步序列号,用于建立连接。ACK是确认字符,用于确认接收到的数据。FIN是结束连接,用于终止连接。Seq是序列号,确保数据包顺序。MSL是最大报文段生存时间,TIME_WAIT状态等。每个术语都需要给出定义、作用,以及在运维中的具体应用或可能的问题。 此外,用户可能对某些术语的英文全称感兴趣,比如SYN是Synchronize Sequence Numbers的缩,ACK是Acknowledgment。这些全称可以帮助用户记忆和理解术语的意义。 还需要注意术语之间的关联,例如三次握手和四次挥手中各标志位的组合使用,以及它们如何共同确保连接的可靠建立和终止。例如,SYN和ACK在三次握手的不同步骤中同时出现,而FIN和ACK在四次挥手中也是如此。 在解释过程中,要避免使用过于技术化的语言,保持口语化,但也要确保准确性。例如,解释SYN洪水攻击时,可以简要说明攻击原理,并结合防御措施,如启用syncookies,这样用户不仅知道术语,还了解其实际应用。 最后,可能需要总结这些术语在运维中的重要性,以及如何通过工具(如tcpdump、netstat)来监控和诊断相关问题。这样用户可以将术语与实际操作结合起来,加深理解。 现在需要检查是否有遗漏的术语,例如在之前的回答中还提到了CLOSE_WAIT、LISTEN、ESTABLISHED等状态,这些是否也需要解释?用户的问题中虽然只提到了SYN,但可能需要全面覆盖所有相关术语,以帮助用户全面理解。因此,决定将提到的所有关键术语都进行解释,确保用户没有遗漏。 同时,考虑用户可能的背景,作为运维人员,他们可能更关注这些术语在实际故障排查中的应用,因此在解释每个术语时,结合案例或常见问题,比如CLOSE_WAIT状态过多可能意味着应用程序未正确关闭连接,需要检查代码逻辑。 最后,确保每个术语的解释清晰,结构合理,使用列表或分段来增强可读性,可能使用加粗或项目符号突出重点,但根据用户的要求,避免使用markdown格式,所以需要用中文自然表达。</think>以下是对TCP协议相关专业术语的详细解释,结合运维场景说明其实际意义: **一、报文控制标志位** 1. **SYN(Synchronize Sequence Numbers)** - *作用*:建立连接时的同步信号,携带初始序列号 - *示例*:客户端访问网站时发送SYN包,相当于敲门说"我要连接" - *运维关联*:SYN洪水攻击通过伪造大量SYN包耗尽服务器资源 2. **ACK(Acknowledgment)** - *作用*:确认已收到数据,包含确认序列号 - *特性*:除初始SYN包外,TCP通信中所有报文都携带ACK - *运维场景*:`tcpdump`抓包看到连续ACK确认,说明数据传输正常 3. **FIN(Finish)** - *作用*:请求终止连接,发送方数据已传输完毕 - *注意点*:收到FIN不意味着立即关闭,需等待数据处理完成 - *典型问题*:大量FIN_WAIT_2状态可能指示对端未关闭连接 **二、序列号机制** 1. **Seq(Sequence Number)** - *功能*:标识数据字节流的顺序(32位无符号数) - *计算规则*:三次握手时初始序列号随机生成,后续按数据长度递增 - *运维应用*:通过序列号分析数据包丢失/乱序问题 2. **ACK Number** - *含义*:期望收到的下一个字节的序列号 - *公式*:ACK = 收到的Seq + 数据长度 + 1(SYN/FIN占1序列号) - *抓包示例*:Seq=100发送20字节数据 → 有效ACK应为121 **三、连接状态** 1. **LISTEN** - *特征*:服务端等待SYN请求 - *运维命令*:`netstat -ant | grep LISTEN`查看监听端口 2. **ESTABLISHED** - *意义*:连接已建立,可正常通信 - *监控重点*:生产环境需关注该状态的连接数是否异常增长 3. **TIME_WAIT** - *持续时间*:2倍MSL(Maximum Segment Lifetime,默认60秒) - *产生原因*:主动关闭方最后发送ACK后进入此状态 - *优化方案*:调整`net.ipv4.tcp_tw_reuse`参数复用端口 4. **CLOSE_WAIT** - *隐患*:表示应用未及时调用close() - *故障案例*:Java程序未关闭数据库连接会导致此状态堆积 **四、网络参数** 1. **MSL(Maximum Segment Lifetime)** - *定义*:报文在网络中的最大存活时间(RFC建议2分钟) - *运维影响*:`TIME_WAIT`状态持续时间=2MSL 2. **MSS(Maximum Segment Size)** - *作用*:协商TCP报文段能承载的最大数据量 - *典型值*:以太网环境下通常为1460字节(1500-IP头-TCP头) **五、运维工具关联** 1. **tcpdump过滤表达式** - `tcp[tcpflags] & (tcp-syn|tcp-ack) != 0` → 抓取SYN/ACK包 - `tcp.port == 80 && tcp.flags.fin == 1` → 捕获HTTP连接的FIN包 2. **ss命令输出解析** ```bash ss -ntp state established # 显示所有已建立连接及进程信息 Recv-Q Send-Q Local:Port Peer:Port 0 0 10.0.0.1:22 10.0.0.2:54321 users:(("sshd",pid=123,fd=3)) ``` - Recv-Q:接收队列中未被应用读取的数据量 - Send-Q:发送队列中未被确认的数据量 **六、协议交互示意图** 三次握手过程: ``` 客户端 服务端 |--------SYN Seq=100--------->| |<-----SYN+ACK Seq=300 ACK=101----| |--------ACK Seq=101 ACK=301----->| ``` 四次挥手过程: ``` 主动方 被动方 |----------FIN Seq=500---------->| |<---------ACK Seq=700 ACK=501----| |<---------FIN Seq=701 ACK=501----| |----------ACK Seq=501 ACK=702--->| ``` 理解这些术语后,当遇到生产环境中的`ss -s`显示大量异常状态时,可快速定位: ```bash Total: 345 (kernel 400) TCP: 285 (estab 120, closed 100, orphaned 3, timewait 80) ``` - 若timewait过多 → 检查是否短连接频繁 - estab数量突增 → 可能遭遇CC攻击 - orphaned存在 → 需检查进程异常终止情况
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值