TCP建立连接为什么是三次握手,为什么不是两次或四次?
来源:互联网 发布:淘宝发优惠怎么拿提成 编辑:程序博客网 时间:2024/05/21 22:42
什么是三次握手
学过网络编程的人,应该都知道TCP建立连接的三次握手,下面简单描述一下这个过程。
如图所示
第一次握手:客户端发送TCP包,置SYN标志位为1,将初始序号X,保存在包头的序列号(Seq)里。
第二次握手:服务端回应确认包,置SYN标志位为1,置ACK为X+1,将初始序列号Y,保存在包头的序列号里。
第三次握手:客户端对服务端的确认包进行确认,置SYN标志位为0,置ACK为Y+1,置序列号为Z。
为什么不是两次
我们先来将三次握手这个过程捋一遍。(S-服务端,C-客户端)
第一次握手后,S可以确认自己收报文与C发报文的功能都正常,而C呢,它什么都不能确认。
第二次握手后,C可以确认自己的收发报文与S的收发报文功能都正常,也就是认为连接已建立。
那么第三次呢,S也可以确认双方能够正常通信。
假想一下,如果我们去掉了第三次呢?
因为我们不进行第三次握手,所以在S对C的请求进行回应(第二次握手)后,就会理所当然的认为连接已建立,而如果C并没有收到S的回应呢?此时,C仍认为连接未建立,S会对已建立的连接保存必要的资源,如果大量的这种情况,S会崩溃。
因此第三次握手是必要的。
为什么不是四次
首先,如果乐于思考的同学应该会对上面有这样的疑问:
既然没法确认第二次的握手,C是否可以收到,那么怎么确定第三次握手S就可以收到呢?
不错,这根本没法确定,因为完全可靠的通信协议是根本不存在的,我们任何的通信协议都是在接受这样的现实情况之上进行的。
而三次握手后,C和S至少可以确认之前的通信情况,但无法确认之后的情况。
在这个道理上说,无论是四次还是五次或是更多次都是徒劳的。
1 0
- TCP建立连接为什么是三次握手,为什么不是两次或四次?
- TCP 为什么是三次握手,为什么不是两次或四次?
- TCP 为什么是三次握手,为什么不是两次或四次?
- TCP 为什么是三次握手,为什么不是两次或四次?
- TCP 为什么是三次握手,为什么不是两次或四次?
- TCP为什么是三次握手不是两次四次呢?
- TCP建立连接为什么是三次握手而不是两次握手
- 为什么tcp建立连接是三次握手而不是两次握手或者四次握手?(笔试面试常考)
- TCP为什么要三次握手,不是两次四次
- TCP为什么要三次握手,不是两次四次
- TCP为什么要三次握手,不是两次四次?
- TCP为什么要三次握手,不是两次四次?
- TCP为什么要三次握手,不是两次四次?
- TCP为什么要三次握手,不是两次四次
- TCP为什么要三次握手,不是两次四次?
- (转) TCP为什么要三次握手,不是两次四次?
- TCP为什么要三次握手,不是两次四次?
- TCP为什么要三次握手,不是两次四次
- [07]项目实战-PC 端固定布局(7)
- CGLib动态代理
- Synchronized(对象锁)和Static Synchronized(类锁)的区别
- 1720 (错误)
- codeforce 698B Fix a Tree
- TCP建立连接为什么是三次握手,为什么不是两次或四次?
- SWIFT 函数参数 3.0 改动--Boolan
- C语言中realloc,malloc,calloc区别
- SystemBarTint实现沉浸模式
- Shaders for Game Programmers and Artists(8) - Fog
- [LeetCode] Longest Increasing Subsequence
- poj 2449 Remmarguts' Date(K短路)
- 解决tmux下vim背景颜色无法刷新问题
- struct和typedef struct彻底明白了