TCP三次握手(建立连接)
来源:互联网 发布:java随机生成26个字母 编辑:程序博客网 时间:2024/06/10 13:49
参考地址:http://www.2cto.com/net/201208/149565.html
目的:连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换 TCP 窗口大小信息。在socket编程中,客户端执行connect()时,将触发三次握手。
第一次握手:
客户端发送一个请求包,即一个SYN标志位为1,以及初始序号X,保存在包头的序列号(Sequence Number)字段的包。
第二次握手:
服务器发回确认包(ACK)应答。即SYN标志位和ACK标志位均为1,并将确认序号(Acknowledgement Number)设置为客户端的X再加1。
第三次握手:
客户端再次发送确认包(ACK)。SYN标志位为0,ACK标志位为1。并且把服务器发来ACK的序号字段+1,放在确认字段中发送给对方,并在数据段放写ISN的+1。
SYN攻击:
典型的一种DDOS攻击,即在第二次握手后,不发送确认包(第三次握手),由于IP地址是伪造的,服务器需要不断的重发确认包直至超时,这些伪造的SYN包将长时间占用未连接队列,正常的SYN请求被丢弃,导致系统运行缓慢,严重时会引起网络堵塞甚至系统瘫痪。
检测SYN攻击其实很简单,当你发现服务器上有大量的半连接状态时,特别是源IP地址是随机的,基本上可以断定这是一次SYN攻击。
在Linux下可以用以下命令来检测:netstat -n -p TCP | grep SYN_RECV
几种状态:
CLOSED:初始状态。
LISTEN:表示服务器的某个socket处于监听状态,可以接受连接。
SYN_RCVD:表示服务器接收到了SYN报文,等待客户端发送确认包(第三次握手)。这是一个中间状态,正常情况下是看不到的,除非故意写了一个测试程序,比如上面的SYN攻击。当收到客户端的ACK包后,它就会进入ESTABLISHED状态。
SYN_SENT:表示客户端已经发送了SYN报文,等待服务器的ACK包。
ESTABLISHED:表示连接已经建立。
0 0
- TCP连接的建立(三次握手)
- 建立TCP连接(三次握手)
- TCP三次握手(建立连接)
- TCP的连接建立(三次握手)
- TCP三次握手建立连接
- TCP三次握手建立连接
- TCP三次握手建立连接
- TCP三次握手建立连接
- tcp三次握手建立连接
- TCP三次握手建立连接
- TCP三次握手建立连接
- TCP建立连接三次握手
- tcp建立连接为什么要三次握手
- TCP/IP的三次握手建立连接
- TCP/IP协议三次握手建立连接
- TCP建立连接的三次握手
- TCP建立连接的三次握手
- TCP建立连接为什么进行三次握手?
- 如何看懂Postgres的执行计划
- MessageBoxA多线程-2
- 设计模式之工厂模式
- 同步IO和异步IO
- [转载] SBT(Size Balanced Tree)
- TCP三次握手(建立连接)
- 线程的创建-5
- TCP四次握手(关闭连接)
- (十九) Mac 下配置yaf框架
- TCP/IP复习笔记(一)
- SQLite3学习笔记
- java.lang.NoSuchMethodError: com.fasterxml.jackson.databind.type.TypeFactory.constructType
- RDD.glom的用法
- Atitit. Async await 优缺点 异步编程的原理and实现 java c# php