由于有个项目涉及到TCP、HTTP、Soap的一些东西,于是回顾了一下以前曾经学过的东西,并学到了一些新东西,以此记录。根据我的逐步学习过程,分了以下5个部分。
1.由netstat查看网络情况,引出的TCP建立连接、终止连接过程,以及TCP状态分析;
2.Soap=XML+HTTP引出的HTTP协议分析;
3.Soap(Simple Object Access Protocol)简单对象访问协议分析及应用;
4.番外一:awk的使用
5.番外二:Linux下抓包工具
-----------------------------篇一-----------------------------------------------------
引子:Linux上soap服务器在多并发、长时间运行后,客户端出现:connection reset by peer, broken pipe的错误。
在网上搜了一些结果,基本上是说,如果浏览器向服务器发送一个请求后,在还没有收到返回结果时,点击了刷新、后退、停止、关闭等操作,在服务器端就会看到该错误。这是具体到了B/S结构的系统,如果通用一点讲的话,是指pipe(管道)读数据的一端没有在读,但是写数据的一端有线程在写,就会在写数据端看到该错误。
以上问题目前还未解决。
一:TCP建立连接
文字描述:
1.客户端首先向服务器端发送一个带有SYN(Synchronize)标记的TCP报文,向服务器申请打开某个端口;
2.服务器接收到SYN后,返回一个ACK(ACKnowledge)确认收到SYN报文,并同时发送一个SYN报文(之前的SYN序号+1)向客户端确认(我已准备好数据发送,你呢?);
3.客户端最后再返回一个ACK确认收到服务器端的信息,并做好数据发送的准备。
至此,客户端、服务器均做好了数据发送准备,TCP连接的建立(三次握手)完成。
图片描述:
二:TCP连接关闭
文字描述:
由于TCP的连接是全双工的(可以同时发送和接受),因此在关闭连接时,也必须确认两端的连接均关闭。
1.客户端向服务器端发送一个带有FIN段的报文,表示客户端已终止发送,客户端close;
2.收到FIN后,服务器端返回一个ACK报文应答对方;
3.服务器端发送一个FIN报文(之前的FIN序号+1),表示服务器端已终止发送,服务器端close;
4.客户端收到FIN后,向对方发送一个ACK确认应答;
至此,双方均已相互确认终止数据发送,TCP连接的关闭(四次握手)完成。
图片描述:
三:TCP状态图
RFC 793: Transmission Control Protocol - Functional Specification
http://www.rfc-editor.org/rfc/rfc793.txt
+---------+ ---------\ active OPEN
| CLOSED | \ -----------
+---------+<---------\ \ create TCB
| ^ \ \ snd SYN
passive OPEN | | CLOSE \ \
------------ | | ---------- \ \
create TCB | | delete TCB \ \
V | \ \
+---------+ CLOSE | \
| LISTEN | ---------- | |
+---------+ delete TCB | |
rcv SYN | | SEND | |
----------- | | ------- | V
+---------+ snd SYN,ACK / \ snd SYN +---------+
| |<----------------- ------------------>| |
| SYN | rcv SYN | SYN |
| RCVD |<-----------------------------------------------| SENT |
| | snd ACK | |
| |------------------ -------------------| |
+---------+ rcv ACK of SYN \ / rcv SYN,ACK +---------+
| -------------- | | -----------
| x | | snd ACK
| V V
| CLOSE +---------+
| ------- | ESTAB |
| snd FIN +---------+
| CLOSE | | rcv FIN
V ------- | | -------
+---------+ snd FIN / \ snd ACK +---------+
| FIN |<----------------- ------------------>| CLOSE |
| WAIT-1 |------------------ | WAIT |
+---------+ rcv FIN \ +---------+
| rcv ACK of FIN ------- | CLOSE |
| -------------- snd ACK | ------- |
V x V snd FIN V
+---------+ +---------+ +---------+
|FINWAIT-2| | CLOSING | | LAST-ACK|
+---------+ +---------+ +---------+
| rcv ACK of FIN | rcv ACK of FIN |
| rcv FIN -------------- | Timeout=2MSL -------------- |
| ------- x V ------------ x V
\ snd ACK +---------+delete TCB +---------+
------------------------>|TIME WAIT|------------------>| CLOSED |
+---------+ +---------+
TCP Connection State Diagram
Figure 6.