网络

TCP/IP 基本原理解析

2017-01-04  本文已影响69人  骑驴上塔楼

日常开发,测试过程中,特别是在压力测试过程中,用netstat -nat查看,发现客户端出现大量SYN_SENT状态, 服务端出现大量SYN_RCVD状态连接,下面我们一起看下

TCP协议模型

1.png

IP和端口

解决了文章最开始提到的定位的问题。
IP在互联网中能唯一标识一台计算机,是每一台计算机的唯一标识(身份证);网络编程是和远程计算机的通信,所以必须先能定位到远程计算机;IP帮助解决此问题;一台计算机中可能有很多进程,具体和哪一个进程进行通信,这就得靠端口来识别;

TCP和UDP协议

TCP状态机

2.jpg

TCP状态图

3.png

TCP状态

通讯类型

什么时候用长连接,短连接?
长连接主要用于在少数客户端与服务端的频繁通信,因为这时候如果用短连接频繁通信常会发生Socket出错,并且频繁创建Socket连接也是对资源的浪费。�
但是对于服务端来说,长连接也会耗费一定的资源,需要专门的线程来负责维护连接状态。

日常应用

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

linux查看tcp的状态命令:

  1. netstat -nat 查看TCP各个状态的数量
  2. lsof -i:port 可以检测到打开套接字的状况
  3. tcpdump -iany tcp port 9000 对tcp端口为9000的进行抓包

故障排查

通过端口监听判断服务启动是否正常
netstat –an| grep 8080

  1. 例如:提供www服务默认开的是80端口,提供ftp服务默认的端口为21,当提供的服务没有被连接时就处于LISTENING状态。FTP服务启动后首先处于侦听(LISTENING)状态。处于侦听LISTENING状态时,该端口是开放的,等待连接
  2. 客户端出现大量SYN_SENT状态
    • 当请求连接时客户端首先要发送同步信号给要访问的机器,此时状态为SYN_SENT,如果连接成功了就变为ESTABLISHED,正常情况下SYN_SENT状态非常短暂
    • 如果发现有很多SYN_SENT出现,那一般有这么几种情况,一是你要访问的服务器网络不好,二是服务端无法建立连接返回ack
  3. 服务端出现大量SYN_RCVD状态连接
    • 同理SYN_RCVD状态也是非常短暂的,如果大量出现说明有可能遭到了攻击,或者是客户端网络限制
  4. 大量的CLOSE-WAIT状态
    • 被动关闭(passive close)端TCP接到FIN后,就发出ACK以回应FIN请求(它的接收也作为文件结束符传递给上层应用程序),并进CLOSE_WAIT.如果连接不关闭CLOSE_WAIT持续时间会非常长,如果长时间积累,可能会导致系统资源耗尽
  5. 发现系统存在大量TIME_WAIT状态的连接,可以修改内核参数解决,修改TIME_WAIT持续时间
上一篇下一篇

猜你喜欢

热点阅读