网络 TCP三次握手,四次挥手详解
三次握手,四次挥手可以说是炙手可热的面试题了,来看看它究竟长什么样子吧!
我们先把流程图贴上来 :

为什么这么复杂? 因为TCP是可靠性传输。
确认可靠传输的前提: TCP连接管理机制
用TCP首部控制的字段来管理TCP连接 :
三次握手(建立连接) : 两次连接请求(SYN)+两次应答(ACK)
流程 : 服务端进入LISTEN状态后,客户端向服务端发送SYN连接请求,服务端收到后会发送ACK应答和SYN连接请求,客户端收到后再向服务端发送ACK应答,此时连接建立成功。
四次挥手(断开连接) : 两次断开请求(FIN)+两次应答(ACK)
流程 : 主动断开方不确定,主动断开方发送FIN断开请求,被动方回复ACK应答进入CLOSE_WAIT状态,被动方关闭连接后再发送FIN断开请求,主动断开方回复ACK应答进入TIME_WAIT状态,被动方收到ACK后关闭,2MSL后主动方关闭,此时连接断开成功。
Q1: 为什么服务端要先进入LISTEN状态?
A1: 在应用层就是调用listen函数,使socket变为被动状态,允许其他客户端和服务器建立连接。
Q2: 怎么才算建立连接成功?断开连接成功?
A2: 两端都进入ESTABLISHED状态,都进入COLSED状态。
Q3: 为什么要有TIME_WAIT状态,直接关闭不好吗?
A3: 重传控制 , 为了保证最后一个ACK丢了还能重传,确定对方确认。客户端进程已经没有了,但是TCP连接还存在,如果被动方没收到ACK,就会超时重传FIN,这样
Q4: 为什么是2MSL?
A4: 连接存在就会占用内存,所以不可能一直存在,等2MSL就会强制中断。
1.保证被动方可以超时重传FIN
2.MSL是一个数据报从一端走到另一端所消耗的最长时间,2MSL能保证两个传输中未被接收或者迟到的报文段消失(否则如果服务器立刻重启,会收到上一进程的数据,此时信息可能错误)
Q5: 为什么是三次握手,四次挥手?
A5: 三次握手是因为服务端接收到SYN后,可以直接发送SYN和ACK应答用来同步。
服务器收到FIN后,内核主动回应ACK,应用层调用了close才会发送FIN。也可以是三次挥手,用捎带应答。
Q6: 如果客户端突然出现故障怎么办?
A6: TCP处理异常设有保活定时器: 如果一定时间内没有收到任何发送方的数据,此时就发一个心跳包,发若干次后,如果没回应就断开连接。
Q7: 为什么不能用两次握手或者四次握手?
A7: 三次能确保对方具有收发数据的能力。
如果是两次,客户端给服务器发消息,服务器收到后再给客户端发消息,不能确保客户端是否能收到消息。所以需要客户端再回复给服务器表示我能收到消息。
四次也就多余了。
网络 TCP三次握手,四次挥手详解的更多相关文章
- [转]Linux服务器上11种网络连接状态 和 TCP三次握手/四次挥手详解
一.Linux服务器上11种网络连接状态: 图:TCP的状态机 通常情况下:一个正常的TCP连接,都会有三个阶段:1.TCP三次握手;2.数据传送;3.TCP四次挥手. 注:以下说明最好能结合”图:T ...
- TCP三次握手/四次挥手详解
一. TCP/IP协议族 TCP/IP是一个协议族,通常分不同层次进行开发,每个层次负责不同的通信功能.包含以下四个层次: 1. 链路层,也称作数据链路层或者网络接口层,通常包括操作系统中的设备驱动程 ...
- TCP三次握手四次挥手详解
转载 http://www.cnblogs.com/zmlctt/p/3690998.html 相对于SOCKET开发者,TCP创建过程和链接折除过程是由TCP/IP协议栈自动创建的.因此开发者并不需 ...
- wireshark抓包直观图解 TCP三次握手/四次挥手详解
转http://www.seanyxie.com/category/linux/ 作者:seanyxie | 一. TCP/IP协议族 TCP/IP是一个协议族,通常分不同层次进行开发,每个层次负 ...
- TCP三次握手四次挥手详解2
相对应socket开发者,TCP创建过程和连接拆除过程是由TCP/IP协议栈自动创建的,因此开发者并不需要控制这个过程,但是对于理解TCP底层运作机制,相当有帮助 TCP三次握手 所谓三次握手,是指建 ...
- wireshark抓包图解 TCP三次握手/四次挥手详解[转]
原文链接:http://www.seanyxie.com/wireshark%E6%8A%93%E5%8C%85%E5%9B%BE%E8%A7%A3-tcp%E4%B8%89%E6%AC%A1%E6% ...
- wireshark抓包图解 TCP三次握手/四次挥手详解
http://www.seanyxie.com/wireshark%E6%8A%93%E5%8C%85%E5%9B%BE%E8%A7%A3-tcp%E4%B8%89%E6%AC%A1%E6%8F%A1 ...
- tcp协议:三次握手四次挥手详解-转
https://www.cnblogs.com/welan/p/9925119.html
- tcp三次握手四次挥手那些事
建立TCP需要三次握手才能建立,而断开连接则需要四次挥手.三次握手,四次挥手流程图如下: 一.首先看下如何通过三次挥手----------建立连接 首先客户端发送连接请求报文,服务端接受连接后回复AC ...
随机推荐
- php之大文件分段上传、断点续传
前段时间做视频上传业务,通过网页上传视频到服务器. 视频大小 小则几十M,大则 1G+,以一般的HTTP请求发送数据的方式的话,会遇到的问题:1,文件过大,超出服务端的请求大小限制:2,请求时间过长, ...
- 初版javascript的思维导图
- Visual C++ 里的 Classes, Methods and RTTI
类的基本布局 为了说明以下内容,让我们考虑这个简单的例子: class A { int a1; public: virtual int A_virt1(); virtual int A_virt2() ...
- 括号匹配(POJ2955)题解
原题地址:http://poj.org/problem?id=2955 题目大意:给出一串括号,求其中的最大匹配数. 我这么一说题目大意估计很多人就蒙了,其实我看到最开始的时候也是很蒙的.这里就来解释 ...
- Painting The Fence(贪心+优先队列)
Painting The Fence(贪心+优先队列) 题目大意:给 m 种数字,一共 n 个,从前往后填,相同的数字最多 k 个在一起,输出构造方案,没有则输出"-1". 解题思 ...
- 【洛谷】P5024 保卫王国 (倍增)
前言 传送门 很多人写了题解了,我就懒得写了,推荐一篇博客 那就分享一下我的理解吧(说得好像有人看一样 对于每个点都只有选与不选两种情况,所以直接用倍增预处理出来两种情况的子树之内,子树之外的最值,最 ...
- 爬虫urllib2 的异常错误处理URLError和HTTPError
urllib2 的异常错误处理 在我们用urlopen或opener.open方法发出一个请求时,如果urlopen或opener.open不能处理这个response,就产生错误. 这里主要说的是U ...
- linux环境中,openssl升级及openresty中nginx基于新版本openssl重新编译
需求说明: 最近在对系统进行安全扫描的时候,出现了openssl版本的问题,建议对openssl版本进行升级,在此记录下升级过程. 环境说明: 操作系统:RHEL 6.6 升级操作过程: 1.下载最新 ...
- easyui datagrid 中序列化后的日期格式化
1.在easyui datagrid 中序列化后的日期显示为:/Date(1433377800000)/ 2.格式化后的显示为: 2015-06-04 08:30:00 3.使用代码如下: 3.1. ...
- [LeetCode] 117. Populating Next Right Pointers in Each Node II 每个节点的右向指针 II
Follow up for problem "Populating Next Right Pointers in Each Node". What if the given tre ...