网络学习日志(一)---TCP的三次握手、四次握手及状态图

上一篇 / 下一篇  2009-07-14 13:44:56 / 个人分类:网络

由于有个项目涉及到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.

TAG:

 

评分:0

我来说两句

Open Toolbar