返回顶部
关闭软件导航
位置:首页 > 资讯 > 电商资讯>深度好文TCP碰到故障怎么办阿里技术总监细细道来
深度好文TCP碰到故障怎么办阿里技术总监细细道来

我们通过了解TCP各个状态,可以排除和定位网络或系统故障时大有帮助。

1)netstat-nat

#查看TCP各个状态的数量

2)lsof-i:port

#可以检测到打开套接字的状况

3)sar-nSOCK

#查看tcp创建的连接数

4)tcpdump-ianytcpport9000

#对tcp端口为9000的进行抓包

网络测试常用命令;

1.ping:检测网络连接的正常与否,主要是测试延时、抖动、丢包率。

但是很多服务器为了防止攻击,一般会关闭对ping的响应。所以ping一般作为测试连通性使用。

ping命令后,会接收到对方发送的回馈信息,其中记录着对方的IP地址和TTL。TTL是该字段指定IP包被路由器丢弃之前答应通过的很大网段数量。

TTL是IPv4包头的一个8bit字段。例如IP包在服务器中发送前设置的TTL是64,你使用ping命令后,得到服务器反馈的信息,其中的TTL为56,说明途中一共经过了8道路由器的转发,每经过一个路由,TTL减1。

2.traceroute:raceroute跟踪数据包到达网络主机所经过的路由工具

traceroutehostname

3.pathping:是一个路由跟踪工具,它将ping和tracert命令的功能与这两个工具所不提供的其他信息结合起来,综合了二者的功能

pathpingwww.baidu.com

有提供某种服务才会处于LISTENING状态,TCP状态变化就是某个端口的状态变化,提供一个服务就打开一个端口。

例如:提供www服务默认开的是80端口,提供ftp服务默认的端口为21,当提供的服务没有被连接时就处于LISTENING状态。

FTP服务启动后首先处于侦听(LISTENING)状态。处于侦听LISTENING状态时,该端口是开放的,等待连接,但还没有被连接。就像你房子的门已经敞开的,但还没有人进来。

SYN-SENT:客户端SYN_SENT状态:

再发送连接请求后等待匹配的连接请求:客户端通过应用程序调用connect进行activeopen.

于是客户端tcp发送一个SYN以请求建立一个连接.之后状态置为SYN_SENT.

Thesocketisactivelyattemptingtoestablishaconnection.在发送连接请求后等待匹配的连接请求

当请求连接时客户端首先要发送同步信号给要访问的机器,此时状态为SYN_SENT,假如连接成功了就变为ESTABLISHED,正常情况下SYN_SENT状态非常短暂。

例如要访问网站www.baidu.com,假如是正常连接的话,用TCPView观察IEXPLORE.EXE(IE)建立的连接会发现很快从SYN_SENT变为ESTABLISHED,表示连接成功。SYN_SENT状态快的也许看不到。

Connectionisclosed,andthesocketiswaitingforashutdownfromtheremoteend.从远程TCP等待连接中断请求

Theremoteendhasshutdown,waitingforthesockettoclose.等待从本地用户发来的连接中断请求

Bothsocketsareshutdownbutwestilldon’thaveallourdatasent.等待远程TCP对连接中断的确认

Theremoteendhasshutdown,andthesocketisclosed.Waitingforacknowledgement.等待原来发向远程TCP的连接中断请求的确认

Thesocketiswaitingafterclosetohandlepacketsstillinthenetwork.等待足够的时间以确保远程TCP接收到连接中断请求的确认

Thesocketisnotbeingused.没有任何连接状态

(1)第一次握手:Client端又调用connect函数调用,系统为Client随机分配一个端口,连同传入connect中的参数(Server的IP和端口),这就形成了一个连接四元组,客户端发送一个带SYN标志的TCP报文到服务器。

这是三次握手过程中的报文1。connect调用让Client端的socket处于SYN_SENT状态,等待服务器确认;SYN:同步序列编号(SynchronizeSequenceNumbers)。

(2)第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

(3)第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户器和客务器进入ESTABLISHED状态,完成三次握手。连接已经可以进行读写操作。

tcpdump-ianytcpport9502

深度好文TCP碰到故障怎么办阿里技术总监细细道来1

14:12:45.104687IPlocalhost.39870>localhost.9502:Flags[S],seq

#客户端IPlocalhost.39870(客户端的端口一般是自动分配的)向服务器localhost.9502发送syn包(syn=j)到服务器》

syn的seq=

14:12:45.104701IPlocalhost.9502>localhost.39870:Flags[S.],seq,ack,

14:12:45.104711IPlocalhost.39870>localhost.9502:Flags[.],ack1,

IPlocalhost.39870>localhost.9502:Flags[P.],seq1:8,ack1,win4099,options[nop,nop,TSvalecr],length7客户端向服务器发送长度为7个字节的数据,

IPlocalhost.9502>localhost.39870:Flags[.],ack8,win4096,options[nop,nop,TSvalecr],length0服务器向客户确认已经收到数据

IPlocalhost.9502>localhost.39870:Flags[P.],seq1:19,ack8,win4096,options[nop,nop,TSvalecr],length18然后服务器同时向客户端写入数据。

IPlocalhost.39870>localhost.9502:Flags[.],ack19,win4097,options[nop,nop,TSvalecr],length0客户端向服务器确认已经收到数据

全局设置可更改/etc/sysctl.conf,加上:

net.ipv4.tcp_keepalive_intvl=20

net.ipv4.tcp_keepalive_probes=3

net.ipv4.tcp_keepalive_time=60

如果您觉得 深度好文TCP碰到故障怎么办阿里技术总监细细道来 这篇文章对您有用,请分享给您的好友,谢谢
文章地址:https://www.tianxianmao.com/article/online/12167.html
解放双手无尽可能,有问题添加天线猫微信