由于有个项目涉及到TCP、HTTP、Soap的一些东西,于是回顾了一下以前曾经学过的东西,并学到了一些新东西,以此记录。根据我的逐步学习过程,分了以下5个部分。
1.由netstat查看网络情况,引出的TCP建立连接、终止连接过程,以及TCP状态分析;
2.Soap=XML+HTTP引出的HTTP协议回顾;
3.Soap(Simple Object Access Protocol)简单对象访问协议分析及应用;
4.番外一:awk的使用
5.番外二:Linux下抓包工具
-----------------------------篇二----------------------------------------------
一:HTTP协议几个要点
参考文献:http://www.cnblogs.com/gpcuster/archive/2009/05/25/1488749.html
HTTP协议,像pop3、smtp、ftp协议一样,都是应用层的一些通信规范,它运行在TCP之上,对通信数据格式、连接方式等做了一定的规范:
1.Request和Response的格式
Request格式: HTTP请求行(get还是post,协议版本) (请求)头(包括host、charset、connection等属性) 空行 消息体 |
Response格式: HTTP应答行(协议版本、返回状态码:200还是404等) (应答)头(包括content-type、encoding、length等属性) 空行 消息体 |
详细的信息请参考:RFC 2616
HTTP headers的简要介绍,请查看:Quick reference to HTTP headers
2.建立连接的方式
从应用层看,HTTP协议是无连接的,不需要connect才传输数据,直接向服务器发送Request,然后服务器返回结果。
HTTP支持2中建立连接的方式:非持久连接和持久连接(HTTP1.1默认的连接方式为持久连接)。是否持久连接,可以通过抓包看到,如果Request或者是Response的消息头中包含:Connection: Keep-Alive,表示持久连接;Connection: close表示非持久连接。
非持久连接:
举例说明:非持久连接情况下,客户端向服务器端请求一个web页面的过程:
a.客户端初始化一个与服务器主机中http服务器的TCP连接;
b.HTTP客户端经由与TCP相关联的本地套接字发出一个HTTP请求消息;
c.HTTP服务器经由与TCP相关联的本地套接字接收这个请求,再经由一个套接字发出响应消息;
d.HTTP服务器告知TCP关闭这个TCP连接;
e.HTTP客户端经由一个套接字接收到这个响应消息,TCP连接随后终止;
f.假设该响应消息中经分析封装的为一个html页面,其中包含10个jpeg对象的引用,则为每一个引用重复以上五步;
持久连接:
非持久连接的缺点:
a.客户端需要为每个请求建立并维护一个新的TCP连接,对于每个TCP连接,客户端和服务器端都需要分配TCP缓冲区,并维持TCP变量;
b.每个请求对象,都有2个RTT(Round-Trip Time)延迟,一个在建立TCP连接时发生,另一个在数据发送及应答时发生。(TCP连接建立的三次握手的前两次,是一个RTT,最后一次会与发送数据一起发送至对方服务器)。
在持久连接情况下,服务器在发出响应后让TCP连接继续打开着。同一对客户/服务器之间的后续请求和响应可以通过这个连接发送。HTTP服务器在某个连接闲置一段特定时间后关闭它,而这段时间通常是可以配置的。持久连接分为不带流水线(without pipelining)和带流水线(with pipelining)两个版本。
HTTP1.1协议中,默认使用持久连接,如果需要非持久连接,则需要在http头中设置connetion参数为:Connection: close
3.缓存机制
(略)
4.响应授权激发机制
(略)