TCP握手过程

来源:互联网 发布:逆战网络初始化 编辑:程序博客网 时间:2024/05/18 02:08

封装: 将上层交给自己的数据包(泛指各种PDU)放进一个或多个本层能理解的数据包的Data部分,并为这些数据包填充适当的头部字段信息,然后将装配好的数据包交给下一层。解封装:从下层接过本层能理解的数据包,然后去掉本层的数据包头部字段,将Data 部分传给上一层。

 

)TCP 协议三次握手过程的描述:

过程简述:

1)服务器应用启动,建立相应的TCB,进入LISTEN状态;

2)客户端向服务器端发送一个TCP段,该段设置SYN标识,请求跟服务器端应用同步,之后进入SYN-SENT状态,等待服务器端的响应;

3)服务器端应用收到客户端的SYN 段之后,发送一个TCP段响应客户端,该段设置SYN和ACK标识,告知客户端自己接受它的同步请求,同时请求跟客户端同步。之后进入SYN-RECEIVED状态;

4)客户端收到服务器端的SYN+ACK段之后,发送一个TCP段,该段设置ACK标识,告知服务器端自己接受它的同步请求。之后,进入ESTABLISHED状态;

5)服务器端应用收到客户端的ACK段之后,进入ESTABLISHED状态。

到此,客户端跟服务器端的TCP连接就建立起来了。

解释:

TCP 连接建立的两种方式:

A)常规的三次握手方式:见5)TCP 协议三次握手过程的描述

B)同步开放方式:

1) 服务器应用启动,建立相应的TCB,进入LISTEN状态;

2)客户端向服务器端发送一个TCP段,该段设置SYN标识,请求跟服务器端应用同步,之后进入SYN-SENT状态,等待服务器端的响应;

3)服务器端应用收到客户端的SYN 段之后,发送一个TCP段响应客户端,该段设置SYN,告知客户端自己请求跟它同步。之后进入SYN-RECEIVED状态;

4)客户端收到服务器端的SYN段之后,发送一个TCP段,该段设置ACK标识,告知服务器端自己接受它的同步请求。之后进入SYN-RECEIVED状态;

5)服务器端应用收到客户端的ACK段之后,向客户端发送一个TCP段,该段设置ACK标识,告知客户端自己接受它的同步请求,进入ESTABLISHED状态。

6)客户端收到服务器端的ACK段之后,进入ESTABLISHED状态。

到此,客户端跟服务器端的TCP连接就建立起来了。

使用这种方式建立TCP连接的应用比较少。

注意:

1)对于服务器端来说,不管使用方式A还是方式B建立连接,它都经历3个状态:LISTENà SYN-RECEIVEDà ESTABLISHED;而对于客户端来说,就不一样了。对于方式A,客户端经历2个状态:SYN-SENTà ESTABLISHED, 对于方式B,客户端要经历3个状态:SYN-SENTà SYN-RECEIVED à ESTABLISHED。

2)对于服务器端来说,当它收到客户端的SYN段之后,不管它是发送SYN+ACK段响应客户端,还是发送SYN段响应客户端,它都进入到SYN-RECEIVED状态。

TCP 关闭连接的两种方式:

方式一:

(1)客户端向服务器端发送一个FIN段,请求关闭连接。之后进入FIN_WAIT_1状态;
(2)服务器端收到客户端的FIN段之后,发送一个ACK段,响应客户端。之后,进入CLOSE_WAIT状态;
(3)客户端收到服务器端的ACK段之后,进入FIN_WAIT_2状态。等待服务器端的FIN段。
(4)服务器端等待应用关闭后,发送一个FIN段给客户端。进入LAST_ACK状态。
(5)客户端收到服务器端的FIN段之后,发送一个ACK段响应服务器端。之后进入TIME_WAIT状态。一旦time_wait计时器超时后,连接就关闭了。 (6)服务器端收到客户端的ACK段之后,连接关闭了。

方式二:

(1)客户端向服务器端发送一个FIN段,请求关闭连接。之后进入FIN_WAIT_1状态;
(2)服务器端收到客户端的FIN段之后,发送一个FIN段,响应客户端。之后,进入CLOSE_WAIT状态;
(3)客户端收到服务器端的FIN段之后,发送一个ACK段响应服务器端。之后进入CLOSING状态。
(4)服务器端收到客户端的ACK段之后,发送一个ACK段相应客户端。之后关闭连接。
(5)客户端收到服务器端的ACK段之后,进入TIME_WAIT状态。一旦time_wait计时器超时后,连接就关闭了。

还有其它关闭连接的方式,本文未列出。

8)推荐阅读:The TCP/IP Guide (http://www.tcpipguide.com/free/index.htm)

2.网络抓包(客户机(ethereal),服务器(tcpdump),网络设备(debug))

3.故障/异常诊断:

1)PING 不通,不能完成三次握手:

a.检查路由:route print/ip route list/sh ip route

b.如果路由OK,ping 网关

c.如果网关能ping通,tracert/traceroute/traceroute <远程地址>,找出故障位置

2)完成了三次握手,但是不能正常使用服务

a.检查服务是否起来了

b.检查服务是否在你试图连接的地址上监听

c.检查连接是否被防火墙(网络防火墙,主机防火墙,应用防火墙)干掉了

3)网络中充斥着大量的SYN 包:

a.在linux下抓取SYN 包进行分析:tcpdump ‘tcp[tcpflags] & (tcp-syn) != 0’ and ‘tcp[tcpflags] & (tcp-ack) = 0′

b.如果可以上65的交换机或者路由器,可以启用TCP 拦截进行跟踪

 

 

网络命令包括 :ping netstat 

系统命令包括 ps kill top 等。

 

进程,线程的概念。

原创粉丝点击