关于Tcp,为什么一定要进行三次握手呢?
2016-04-05 09:53
489 查看
主要是防止已经失效的请求报文段突然又传送到了服务端而产生的连接的误判。
考虑如下的情况:客户端发送了一个连接请求报文段到服务端,但是在某些网络节点上长时间滞留了,而后客户端又超时重发了一个连接请求报文段该服务端,而后正常建立连接,数据传输完毕,并释放了连接。如果这时候第一次发送的请求报文段延迟了一段时间后,又到了服务端,很显然,这本是一个早已失效的报文段,但是服务端收到后会误以为客户端又发出了一次连接请求,于是向客户端发出确认报文段,并同意建立连接。假设不采用三次握手,这时服务端只要发送了确认,新的连接就建立了,但由于客户端比你更没有发出建立连接的请求,因此不会理会服务端的确认,也不会向服务端发送数据,而服务端却认为新的连接已经建立了,并在一直等待客户端发送数据,这样服务端就会一直等待下去,直到超出保活计数器的设定值,而将客户端判定为出了问题,才会关闭这个连接。这样就浪费了很多服务器的资源。而如果采用三次握手,客户端就不会向服务端发出确认,服务端由于收不到确认,就知道客户端没有要求建立连接,从而不建立该连接。
考虑如下的情况:客户端发送了一个连接请求报文段到服务端,但是在某些网络节点上长时间滞留了,而后客户端又超时重发了一个连接请求报文段该服务端,而后正常建立连接,数据传输完毕,并释放了连接。如果这时候第一次发送的请求报文段延迟了一段时间后,又到了服务端,很显然,这本是一个早已失效的报文段,但是服务端收到后会误以为客户端又发出了一次连接请求,于是向客户端发出确认报文段,并同意建立连接。假设不采用三次握手,这时服务端只要发送了确认,新的连接就建立了,但由于客户端比你更没有发出建立连接的请求,因此不会理会服务端的确认,也不会向服务端发送数据,而服务端却认为新的连接已经建立了,并在一直等待客户端发送数据,这样服务端就会一直等待下去,直到超出保活计数器的设定值,而将客户端判定为出了问题,才会关闭这个连接。这样就浪费了很多服务器的资源。而如果采用三次握手,客户端就不会向服务端发出确认,服务端由于收不到确认,就知道客户端没有要求建立连接,从而不建立该连接。
相关文章推荐
- HttpURLConnection 访问服务器,GET和POST方法.
- 1294 全排列——http://codevs.cn/problem/1294/
- TCP/IP常见问题总结(一)
- Java 利用HttpURLConnection发送http请求
- iperf+sed+gnuplotting查看无线网络速度
- HTTP协议详解
- Linux C高级编程——网络编程之UDP(4)
- Linux C高级编程——网络编程之TCP(3)
- Python自动化测试 (九)urllib2 发送HTTP Request
- tcp三次握手四次挥手详解
- hdu4292Food【拆点网络流】
- 神经网络梯度下降的三种学习方式
- C#获取本机上所有网络接口及真实IP地址信息
- C# HttpWebRequest 绝技 根据URL地址获取网页信息
- UniversalAndroidImageLoader出现异常:ImageLoader: Unable to resolve host "https": No address associated with host
- 管理聚合链路和桥接网络(多网卡绑定,redhat liunx 7.0) 基础知识
- Tomcat处理HTTP请求源码分析
- 详解https是如何确保安全的?
- BFA“瑞云科技”大视频讲堂第4期“网络视频成就影视梦想”
- 20159318 《网络攻击与防范》第5周学习总结