Java每日一面(Part1:计算机网络)[19/10/13]
个人微信公众号:程序猿的月光宝盒
1.说说TCP三次握手
1.0 在此之前,什么是TCP?
TCP(传输控制协议)
1.面向连接的,可靠的,基于字节流的传输层通信协议
2.将应用层的数据流分割成报文段并发送给目标节点的TCP层
3.数据包都有序号,对方收到则发送ACK确认,未收到则重传
4.使用校验和来检验数据在传输过程中是否有误
**注: ACK--确认序号标志,即接收端实体对已成功收到的包的确认,(确认后+1)
SYN--同步序号,用于建立连接过程
在连接请求中,SYN=1,ACK=0-->该数据段没有使用捎带的确认域,SYN=1,ACK=1-->连接应答捎带一个确认域
FIN:finish标志,用于释放连接,等于1时,表示发送方已经没有数据发送,即关闭数据流
Sequence Numbe:数据包的序号,用来保证不丢包
1.1 "握手"是为了连接,TCP三次握手如上图所示
**图注:第一次握手,seq-->初始序号,x是任意正整数.发送的不能携带数据,但是,要消耗掉一个序号.
第二次握手,如果同意连接,就发出确认报文,ack=x+1(第一次握手中seq=x,1即上一个报文消耗的序列),同时,为自己的缓存初始化序列号,即seq=y,SYN-RCVD:同步收到状态.(也不能携带数据,并且也要消耗一个序号)
第三次握手,当TCP客户进程收到确认报文之后,还要向服务器给出确认,ack=y+1(上一次seq=y,1是小号的序号),seq=x+1(先前告知客户端序号+1),此时,客户端连接建立,ESTAB-LESHED(已建立连接状态),TCP规定,第三次握手的时候可以(也不是必须,如果不携带数据,就不会消耗序号)携带数据
当服务器接收到后,也进入,ESTAB-LESHED(已建立连接状态),,双方开始通信
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接
第1次握手:建立连接时,客户端发送SYN包(syn=j)到服务器,并进入 SYN_SENT(同步已发送)状态,等待服务器确认
第2次握手:服务器收到SYN包,必须确认客户的SYN(ack=j+1),同时,自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RCVD状态;
第3次握手:客户端接收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTAB-LISHED状态,完成三次握手.
1.2 为什么需要三次握手才能建立连接
为了初始化Sequence Number的初始值,通信的双方要互相通知对方,自己的初始化的Sequence Number,也就是上图中的x和y,这个Number要作为以后的数据通信的序,以保证接收到的数据不会因为网络的问题而乱序,即TCP会用这个序号来拼接数据,因此,在服务器回发他的Sequence Number(第二次握手之后),还需要发送确认报文给服务器,告知服务器,客户端已接收到你发的初始化的Sequence Number了.
1.3 首次捂手的隐患---SYN超时
问题起因:
Server收到Client的SYN,回复SYN-ACK时没有收到ACK确认
Server不断重试直到超时,linux默认重试次数为5次,时间从一秒开始,每次翻倍. 5次总共31s,在第五次发出去之后还需要等待32s才能被判定为超时,总共31+32=63s,此时TCP断开连接.
后果:
可能会让服务器遭到SYN Flood的风险.
解决方案:
linux下,SYN队列满后,通过tcp_syncookies(Sequence Number的简称)参数回发SYN Cookie
若正常连接则Client会回发SYN Cookie,直接建立连接
1.4 建立连接后,Client出故障怎么办
TCP的保活机制
1.向对方发送保活探测报文,如果未收到响应则继续发送
2.尝试次数达到保活探测数仍未收到响应则中断连接
Java每日一面(Part1:计算机网络)[19/10/13]的更多相关文章
- Java每日一面(Part1:计算机网络)[19/11/13]
作者:晨钟暮鼓c个人微信公众号:程序猿的月光宝盒 1. HTTP相关[1] 1.1 HTTP简介 HTTP协议,即超文本传输协议,属于应用层的协议,他是基于请求和响应模式的无状态的 应用层协议. ...
- Java每日一面(Part1:计算机网络)[19/10/21]
作者:故事我忘了¢个人微信公众号:程序猿的月光宝盒 1.UDP简介 1.1UDP报文结构: Source Port:源端口 Destination Port:目标端口 Length:数据包长度 C ...
- Java每日一面(Part1:计算机网络)[19/10/14]
作者:故事我忘了¢个人微信公众号:程序猿的月光宝盒 1.1 说一说TCP的四次挥手 "挥手",即终止TCP连接,断开一个TCP连接池. 需要客户端和服务端总共发出四个包,以 ...
- Java每日一面(Part1:计算机网络)[19/11/25]
作者:晨钟暮鼓c个人微信公众号:程序猿的月光宝盒 1. HTTP相关[2] 1.1Get请求和Post请求的区别 从三个层面来回答: 1.1.1 从HTTP报文层面: Get请求将请求信息放在UR ...
- Java每日一面(Part1:计算机网络)[19/11/02]
作者:故事我忘了¢个人微信公众号:程序猿的月光宝盒 1.TCP的滑动窗口 1.1 RTT和RTO的区别 RTT:发送一个数据包到收到对应的ACK,所花费的时间 RTO:重传时间间隔,TCP在发 ...
- Java每日一面(Part2数据库)[19/11/28]
作者:故事我忘了¢个人微信公众号:程序猿的月光宝盒 1.如何设计一个关系型数据库 如上图,首先划分成两大部分: 1.存储部分:类似一个文件系统,把数据存储到一个持久化设备中,如机械硬盘,固态等 ...
- macOs升级到10.13.1Beta || JAVA升级到最新版之后PhpStorm菜单栏问题
macOs升级到10.13.1Beta || JAVA升级到最新版之后PhpStorm菜单栏会消失,估计不止出现在PhpStorm,一系列jetbrains的产品可能都会有这个问题,包括eclipis ...
- Java Web学习总结(19)——web.xml配置详解
1.启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<context-param>两个结点. 2.紧急着,容创建一个Servl ...
- 【Java每日一题】20161214
package Dec2016; import java.util.ArrayList; import java.util.List; public class Ques1214 { public s ...
随机推荐
- Web基础了解版05-Servlet
Servlet Servlet? 从广义上来讲,Servlet规范是Sun公司制定的一套技术标准,包含与Web应用相关的一系列接口,是Web应用实现方式的宏观解决方案.而具体的Servlet容器负责提 ...
- Github挂载大文件解决方案
正常情况下,我们上传代码之类的文本文件,都不会太大,可以直接通过[Upload Files]选项直接上传. 但是这样的操作仅限文件大小在25MB以内. 如果你选择的文件超过25MB,那么Github会 ...
- linux环境下zookeeper下载安装
步骤一:安装配置jdk环境 1.下载解压jdk-8u221-linux-x64.tar.gz 2.打开 配置文件,vim /etc/profile,添加如下配置,添加完成记得source /etc/p ...
- 网易极客战记官方攻略-地牢-Kithgard 图书管理员
关卡连接: https://codecombat.163.com/play/level/kithgard-librarian 向友好的图书馆管理员求助! 简介 大多数关卡都有提示,在你卡关时挺有用. ...
- Centos7脚本一键优化
我把优化centos7的脚本分享给大家,建议刚安装完服务器的朋友执行如下优化脚本 [root@test2 yum.repos.d]# cat centos7.sh #!/bin/bash #autho ...
- k8s采坑记 - 解决二进制安装环境下证书过期问题
前言 上一篇k8s采坑记 - 证书过期之kubeadm重新生成证书阐述了如何使用kubeadm解决k8s证书过期问题. 本篇阐述使用二进制安装的kubernetes环境,如何升级过期证书? k8s配置 ...
- C语言程序设计100例之(11):求质数
例11 求质数 问题描述 质数是指除了有1和自身作为约数外,不再有其他约数的数.比如:3.5.7是质数.而9不是质数,因为它还有约数3. 编写程序求给定区间中的所有质数. 输入格式 两个整数a和b, ...
- IPFS学习-分布式哈希表DHT
Distributed Hash Tables(DHT) 分布式哈希表是一个分布式的键值对存储结构.在IPFS网络中,每一个节点都维护一个DHT的子集.当节点接受到一个请求.该节点要么直接回复,要么通 ...
- swiper 轮播中常用的效果,持续更新
swiper一款非常好用的轮播插件,支持移动端和PC端,用过很多次了,这次简单的总结一下.方便以后查找使用,说明一下,下面的例子是基于swiper 4.0+版本的,如果你是其他的版本,请自行前往官网查 ...
- Redis Python(二)
Infi-chu: http://www.cnblogs.com/Infi-chu/ 一.NoSQL(Not only SQL)1.泛指非关系数据库2.不支持SQL语法3.存储结构与传统的关系型数据库 ...