Java每日一面(Part1:计算机网络)[19/10/14]
个人微信公众号:程序猿的月光宝盒
1.1 说一说TCP的四次挥手
"挥手",即终止TCP连接,断开一个TCP连接池.
需要客户端和服务端总共发出四个包,以确认连接断开,流程如图:
(假设客户端主动关闭,也可以是被动的)
第一次:seq=u,u(是前面ESTAB状态下,数据最后一次发送的时候,已经传送过来的数据最后一个字节的序号,再加上1),TCP规定,即使第一次不携带数据,也要消耗掉一个序号(回执是u+1)
第二次:服务器发出确认报文(ACK=1),ack也携带自己的seq=v.CLOSE-WAIT(半关闭状态,即客户端已经没有数据要发送了,但是服务器要是发送数据,客户端还是可以接收)
第三次: 由于在半关闭的状态,服务器很可能又发送了数据,假设此时的序号(seq=w),服务器进入LAST-ACK状态(最后确认)
第四次:客户端在收到服务器的连接释放报文后,必须发出确认,即ACK=1,ack = 服务器发送的seq的w+1,回发回去,自己的序号(seq)假定为u,那就是u(第一次的seq)+1,客户端进TIME-WAIT,再经过2*MSL时间进入close,MSL即最长报文段生命(Linux中是30s)
总结:
TCP采用4次挥手释放连接,
第一次挥手:客户端发送一个FIN,用来关闭客户端到服务器的数据传送,客户端进入FIN_WAIT_1状态;
第二次挥手:服务器收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),服务器进入CLOSE_WAIT状态
第三次挥手:服务器发送一个FIN数据包,用来关闭服务器到客户端的数据传送,服务器进入LAST_ACK状态
第四次挥手:客户端收到FIN后,客户端进入TIME_WAIT_2状态,接着发送一个ACK给服务器,确认序号为收到序号+1,服务器进入SLOSED状态,客户端在等待2*MSL(超时设置)后进入SLOSED,完成4次挥手.
1.2 为什么会有TIME_WAIT状态
原因:
1.确保有足够的时间让对方收到ACK包,如果被动关闭的那方没有收到ACK就会触发重发FIN包一来一去刚好2MSL
2.有足够的时间让这个链接不会和后面的链接混在一起,避免有些路由器会缓存IP数据包,如果连接混淆,就会跟新连接混在一起
1.3 为什么需要四次挥手才能断开连接
因为TCP是全双工,(同时传送数据),所以发送方和接收方都需要FIN报文和ACK报文,也就是说发送和接受方各自需要2次挥手,只是有一方是被动的,所以看上去就成了四次挥手
1.4 服务器出现大量CLOSE_WAIT的原因
原因:
对方关闭连接后,我方忙于读写,没有及时关闭连接
解决方案:
1.检查代码,特别是释放资源的代码
2.检查配置,特别处理请求的线程配置
Java每日一面(Part1:计算机网络)[19/10/14]的更多相关文章
- Java每日一面(Part1:计算机网络)[19/10/21]
作者:故事我忘了¢个人微信公众号:程序猿的月光宝盒 1.UDP简介 1.1UDP报文结构: Source Port:源端口 Destination Port:目标端口 Length:数据包长度 C ...
- Java每日一面(Part1:计算机网络)[19/10/13]
作者:晨钟暮鼓c个人微信公众号:程序猿的月光宝盒 1.说说TCP三次握手 1.0 在此之前,什么是TCP? TCP(传输控制协议) 1.面向连接的,可靠的,基于字节流的传输层通信协议 2. ...
- Java每日一面(Part1:计算机网络)[19/11/25]
作者:晨钟暮鼓c个人微信公众号:程序猿的月光宝盒 1. HTTP相关[2] 1.1Get请求和Post请求的区别 从三个层面来回答: 1.1.1 从HTTP报文层面: Get请求将请求信息放在UR ...
- Java每日一面(Part1:计算机网络)[19/11/13]
作者:晨钟暮鼓c个人微信公众号:程序猿的月光宝盒 1. HTTP相关[1] 1.1 HTTP简介 HTTP协议,即超文本传输协议,属于应用层的协议,他是基于请求和响应模式的无状态的 应用层协议. ...
- Java每日一面(Part1:计算机网络)[19/11/02]
作者:故事我忘了¢个人微信公众号:程序猿的月光宝盒 1.TCP的滑动窗口 1.1 RTT和RTO的区别 RTT:发送一个数据包到收到对应的ACK,所花费的时间 RTO:重传时间间隔,TCP在发 ...
- Java每日一面(Part2数据库)[19/11/28]
作者:故事我忘了¢个人微信公众号:程序猿的月光宝盒 1.如何设计一个关系型数据库 如上图,首先划分成两大部分: 1.存储部分:类似一个文件系统,把数据存储到一个持久化设备中,如机械硬盘,固态等 ...
- Java Web学习总结(19)——web.xml配置详解
1.启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<context-param>两个结点. 2.紧急着,容创建一个Servl ...
- 程序员的 Ubuntu 19.10 配置与优化指南
原文地址:程序员的 Ubuntu 19.10 配置与优化指南 0x00 环境 CPU: Intel Core i9-9900k GPU: GeForce RTX 2070 SUPER RAM: DDR ...
- 【Java每日一题】20161214
package Dec2016; import java.util.ArrayList; import java.util.List; public class Ques1214 { public s ...
随机推荐
- 动态代理模式_应用(Redis工具类)
本次使用动态代理的初衷是学习Redis,使用Java操作Redis时用到Jedis的JedisPool,而后对Jedis的方法进一步封装完善成为一个工具类.因为直接使用Jedis对象时,为了保证性能, ...
- CSS类的操作
CSS类的操作 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <t ...
- Linux MySQL的root无法登录数据库ERROR 1045 (28000)
Linux环境下,脚本自动安装完数据库,命令行用mysql -uroot -ppasswaord 登录却报了这么个错: ERROR 1045 (28000): Access denied for us ...
- 如何向小姐姐解释SQL和NoSQL之间的区别
最近,在Medium上出现了一个采访问题:如何向奶奶解释SQL和NoSQL之间的区别.我认为作者使用自己的结构化家谱来比较sql和nosql之间的差异.写作非常好,但是有点尴尬.面试官没有时间听你的话 ...
- JS中遍历对象属性的四种方法
Object.keys().Object.values().Object.entries().for...in.Map (1)Object.keys(): let ex1 = {c1: 'white' ...
- DUBBO: xml文件无法解析
xml是: <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http:/ ...
- java开发,入职半年。对未来迷茫,如何发展?
蛮多人私密我一些问题,关于面试,关于技术的,我只能说有些路只能靠自己去走,没人可以帮到自己,哪怕偶尔帮一到两次,但是技术的路这么长,总归需要自己独自成长的.附一张自己藏书的照片,与各位共勉 工作三年多 ...
- 对token机制的学习和分析
token,中文意思为令牌,是用户登录后会返回的一个字符串,里面包括用户信息.登录时间等,但是是加密过的密文,其加解密方式由后端决定. 在登录之后的接口请求中,前端需在请求中统一加上token,从而识 ...
- C# copy source directory files with original folder to the destination path
private static void PathCopyFilesWithOriginalFolder() { ; try { string sourceDir = @"E:\Source& ...
- ASP.NET MVC5基础-过滤器(Filters)详解
什么是过滤器? 过滤器的类型与作用 定义过滤器 授权过滤器 动作过滤器 结果过滤器 异常处理过滤器 过滤器的使用方法 总结 什么是过滤器? 通过上一篇关于Controller控制器的文章我们知道,MV ...