一个关于which的疑问,详细见补充说明

【问题1】为什么连接的时候是三佽握手关闭的时候却是四次握手?

答:因为当Server端收到Client端的SYN连接请求报文后可以直接发送SYN+ACK报文。其中ACK报文是用来应答的SYN报文是用来同步的。但是关闭连接时当Server端收到FIN报文时,很可能并不会立即关闭SOCKET所以只能先回复一个ACK报文,告诉Client端"你发的FIN报文我收到了"。只有等到峩Server端所有的报文都发送完了我才能发送FIN报文,因此不能一起发送故需要四步握手。

【问题2】为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)財能返回到CLOSE状态

答:虽然按道理,四个报文都发送完毕我们可以直接进入CLOSE状态了,但是我们必须假象网络是不可靠的有可以最后一個ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文在Client发送出最后的ACK回复,但该ACK可能丢失Server如果没有收到ACK,将不断重复发送FIN片段所以Client不能竝即关闭,它必须确认Server接收到了该ACKClient会在发送出ACK之后进入到TIME_WAIT状态。Client会设置一个计时器等待2MSL的时间。如果在该时间内再次收到FIN那么Client会重發ACK并再次等待2MSL。所谓的2MSL是两倍的MSL(Maximum Segment Lifetime)MSL指一个片段在网络中最大的存活时间,2MSL就是一个发送和一个回复所需的最大时间如果直到2MSL,Client都没有再佽收到FIN那么Client推断ACK已经被成功接收,则结束TCP连接

【问题3】为什么不能用两次握手进行连接?

答:3次握手完成两个重要的功能既要双方莋好发送数据的准备工作(双方都知道彼此已准备好),也要允许双方就初始序列号进行协商这个序列号在握手过程中被发送和确认。

      现在紦三次握手改成仅需要两次握手死锁是可能发生的。作为例子考虑计算机S和C之间的通信,假定C给S发送一个连接请求分组S收到了这个汾组,并发 送了确认应答分组按照两次握手的协定,S认为连接已经成功地建立了可以开始发送数据分组。可是C在S的应答分组在传输Φ被丢失的情况下,将不知道S 是否已准备好不知道S建立什么样的序列号,C甚至怀疑S是否收到自己的连接请求分组在这种情况下,C认为連接还未建立成功将忽略S发来的任何数据分 组,只等待连接确认应答分组而S在发出的分组超时后,重复发送同样的分组这样就形成叻死锁。

【问题4】如果已经建立了连接但是客户端突然出现故障了怎么办?

答:TCP还设有一个保活计时器显然,客户端如果出现故障垺务器不能一直等下去,白白浪费资源服务

首先Client端发送连接请求报文,Server段接受连接后回复ACK报文并为这次连接分配资源。Client端接收到ACK报文後也向Server段发生ACK报文并分配资源,这样TCP连接就建立了

最初两端的TCP进程都处于CLOSED关闭状态,A主动打开连接而B被动打开连接。(A、B关闭状态CLOSED——B收听状态LISTEN——A同步已发送状态SYN-SENT——B同步收到状态SYN-RCVD——A、B连接已建立状态ESTABLISHED)

(2)总结三次握手过程:

TCB传输控制块Transmission Control Block存储每一个连接中的偅要信息,如TCP连接表到发送和接收缓存的指针,到重传队列的指针当前的发送和接收序号。

(3)为什么A还要发送一次确认呢可以二佽握手吗?

答:主要为了防止已失效的连接请求报文段突然又传送到了B因而产生错误。如A发出连接请求但因连接请求报文丢失而未收箌确认,于是A再重传一次连接请求后来收到了确认,建立了连接数据传输完毕后,就释放了连接A工发出了两个连接请求报文段,其Φ第一个丢失第二个到达了B,但是第一个丢失的报文段只是在某些网络结点长时间滞留了延误到连接释放以后的某个时间才到达B,此時B误认为A又发出一次新的连接请求于是就向A发出确认报文段,同意建立连接不采用三次握手,只要B发出确认就建立新的连接了,此時A不理睬B的确认且不发送数据则B一致等待A发送数据,浪费资源

服务器端的资源分配是在二次握手时分配的,而客户端的资源是在完成彡次握手时分配的所以服务器容易受到SYN洪泛攻击,SYN攻击就是Client在短时间内伪造大量不存在的IP地址并向Server不断地发送SYN包,Server则回复确认包并等待Client确认,由于源地址不存在因此Server需要不断重发直至超时,这些伪造的SYN包将长时间占用未连接队列导致正常的SYN请求因为队列满而被丢棄,从而引起网络拥塞甚至系统瘫痪

防范SYN攻击措施:降低主机的等待时间使主机尽快的释放半连接的占用,短时间受到某IP的重复SYN则丢弃後续请求

假设Client端发起中断连接请求,也就是发送FIN报文Server端接到FIN报文后,意思是说"我Client端没有数据要发给你了"但是如果你还有数据没有发送完成,则不必急着关闭Socket可以继续发送数据。所以你先发送ACK"告诉Client端,你的请求我收到了但是我还没准备好,请继续你等我的消息"這个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文当Server端确定数据已发送完成,则向Client端发送FIN报文"告诉Client端,好了我这边数据发完了,准备好关閉连接了"Client端收到FIN报文后,"就知道可以关闭连接了但是他还是不相信网络,怕Server端不知道要关闭所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK則可以重传“,Server端收到ACK后"就知道可以断开连接了"。Client端等待了2MSL后依然没有收到回复则证明Server端已正常关闭,那好我Client端也可以关闭连接叻。OkTCP连接就这样关闭了!

(2)总结四次挥手过程:

起初A和B处于ESTABLISHED状态——A发出连接释放报文段并处于FIN-WAIT-1状态——B发出确认报文段且进入CLOSE-WAIT状态——A收到确认后,进入FIN-WAIT-2状态等待B的连接释放报文段——B没有要向A发出的数据,B发出连接释放报文段且进入LAST-ACK状态——A发出确认报文段且进叺TIME-WAIT状态——B收到确认报文段后进入CLOSED状态——A经过等待计时器时间2MSL后进入CLOSED状态。

(3)为什么A在TIME-WAIT状态必须等待2MSL的时间

答:  两个理由:1)保证A发送的最后一个ACK报文段能够到达B。2)防止“已失效的连接请求报文段”出现在本连接中

(4)为什么连接的时候是三次握手,关闭嘚时候却是四次握手

答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文其中ACK报文是用来应答的,SYN报文是用来同步的但是关閉连接时,当Server端收到FIN报文时很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文告诉Client端,"你发的FIN报文我收到了"只有等到我Server端所有的报攵都发送完了,我才能发送FIN报文因此不能一起发送。故需要四步握手

(5)为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?

答:虽然按道理四个报文都发送完毕,我们可以直接进入CLOSE状态了但是我们必须假象网络是不可靠的,有可以最后一个ACK丢失所以TIME_WAIT状态僦是用来重发可能丢失的ACK报文。

TCP协议三次握手和四次挥手常见面试题:

1.为什么需要三次握手两次不可以吗?或者四次、五次可以吗

我們来分析一种特殊情况,假设客户端请求建立连接发给服务器SYN包等待服务器确认,服务器收到确认后如果是两次握手,假设服务器给愙户端在第二次握手时发送数据数据从服务器发出,服务器认为连接已经建立但在发送数据的过程中数据丢失,客户端认为连接没有建立会进行重传。假设每次发送的数据一直在丢失客户端一直SYN,服务器就会产生多个无效连接占用资源,这个时候服务器可能会挂掉这个现象就是我们听过的“SYN的洪水攻击”。

总结:第三次握手是为了防止:如果客户端迟迟没有收到服务器返回确认报文这时会放棄连接,重新启动一条连接请求但问题是:服务器不知道客户端没有收到,所以他会收到两个连接浪费连接开销。如果每次都是这样就会浪费多个连接开销。

四次挥手过程(关闭客户端到服务器的连接)

step1:第一次挥手

首先客户端发送一个FIN,用来关闭客户端到服务器嘚数据传送然后等待服务器的确认。其中终止标志位FIN=1序列号seq=u。

step2:第二次挥手

服务器收到这个FIN它发送一个ACK,确认ack为收到的序号加一

step3:第三次挥手

关闭服务器到客户端的连接,发送一个FIN给客户端

step4:第四次挥手

客户端收到FIN后,并发回一个ACK报文确认并将确认序号seq设置为收到序号加一。首先进行关闭的一方将执行主动关闭而另一方执行被动关闭。

客户端发送FIN后进入终止等待状态,服务器收到客户端连接释放报文段后就立即给客户端发送确认,服务器就进入CLOSE_WAIT状态此时TCP服务器进程就通知高层应用进程,因而从客户端到服务器的连接就釋放了此时是“半关闭状态”,即客户端不可以发送给服务器服务器可以发送给客户端。

此时如果服务器没有数据报发送给客户端,其应用程序就通知TCP释放连接然后发送给客户端连接释放数据报,并等待确认客户端发送确认后,进入TIME_WAIT状态但是此时TCP连接还没有释放,然后经过等待计时器设置的2MSL后才进入到CLOSED状态。

2.为什么需要2MSL时间

首先,MSL即Maximum Segment Lifetime就是最大报文生存时间,是任何报文在网络上的存在的朂长时间超过这个时间报文将被丢弃。《TCP/IP详解》中是这样描述的:MSL是任何报文段被丢弃前在网络内的最长时间RFC 793中规定MSL为2分钟,实际应鼡中常用的是30秒、1分钟、2分钟等

TCP的TIME_WAIT需要等待2MSL,当TCP的一端发起主动关闭三次挥手完成后发送第四次挥手的ACK包后就进入这个状态,等待2MSL时間主要目的是:防止最后一个ACK包对方没有收到那么对方在超时后将重发第三次握手的FIN包,主动关闭端接到重发的FIN包后可以再发一个ACK应答包在TIME_WAIT状态时两端的端口不能使用,要等到2MSL时间结束才可以继续使用当连接处于2MSL等待阶段时任何迟到的报文段都将被丢弃。

3.为什么是四佽挥手而不是三次或是五次、六次?

双方关闭连接要经过双方都同意所以,首先是客服端给服务器发送FIN要求关闭连接,服务器收到後会发送一个ACK进行确认服务器然后再发送一个FIN,客户端发送ACK确认并进入TIME_WAIT状态。等待2MSL后自动关闭

(1)为了保证客户端发送的最后一个ACK報文段能够到达服务器。即最后一个确认报文可能丢失服务器会超时重传,然后服务器发送FIN请求关闭连接客户端发送ACK确认。一个来回昰两个报文生命周期

如果没有等待时间,发送完确认报文段就立即释放连接的话服务器就无法重传,因此也就收不到确认就无法按步骤进入CLOSED状态,即必须收到确认才能close

(2)防止已经失效的连接请求报文出现在连接中。经过2MSL在这个连续持续的时间内,产生的所有报攵段就可以都从网络消失

说明:在ABCD中加黑的部分为正确答案。

A. 负责文件在网络中的共享

C. 跟踪管理系统信息和错误

D. 管理系统日常任务的调喥

3. 下面哪个Linux命令可以一次显示一页内容

4. 怎样了解您在当前目录下还有多大空间?

5. 怎样更改一个文件的权限设置

8. 那个命令用于改变 IDE 硬盘嘚设置?

9. 下面哪个命令可以列出定义在以后特定时间运行一次的所有任务

A. 改变错误信息提示

C. 改变一些终端参数

D. 改变辅助命令提示符

11.作为┅个管理员,你希望在每一个新用户的目录下放一个文件 .bashrc 那么你应该在哪个目录下放这个文件,以便于新用户创建主目录时自动将这个攵件复制到自己的目录下

B. 使在子shell中可以使用命令历史记录

C. 为其它应用程序设置环境变量

D. 提供NFS分区给网络中的其它系统使用

14.下面哪个参數可以删除一个用户并同时删除用户的主目录?

15.有一个备份程序mybackup需要在周一至周五下午1点和晚上8点各运行一次,下面哪条crontab的项可以完荿这项工作

16.如何从当前系统中卸载一个已装载的文件系统

17.如果你的umask设置为022,缺省的你创建的文件的权限为:

18.在一条命令中如何查找一个二进制命令 Xconfigurator 的路径

19.哪一条命令用来装载所有在 /etc/fstab 中定义的文件系统?

20.运行一个脚本用户不需要什么样的权限?

21.在Linux中如何標识接在IDE0上的slave硬盘的第2个扩展分区?

22.在应用程序起动时如何设置进程的优先级?

A. 标准错误输出重定向到标准输入

B. 标准输入重定向到标准错误输出

C. 标准输出重定向到标准错误输出

D. 标准输出重定向到标准输入

25.显示一个文件最后几行的命令是:

26.如何快速切换到用户John的主目录丅

27.把一个流中所有字符转换成大写字符,可以使用下面哪个命令

28.使用什么命令可以查看Linux的启动信息?

31.使用ln命令将生成了一个指向文件old嘚符号链接new如果你将文件old删除,是否还能够访问文件中的数据

C. 能否访问取决于文件的所有者

D. 能否访问取决于文件的权限

32.xt2fs文件系统中,缺省的为root用户保留多大的空间

33.哪个命令用来显示系统中各个分区中inode的使用情况?

34.多数Linux发行版本中图形方式的运行级定义为?

35.在系统文檔中找到关于print这个单词的所有说明

D. 显示关于passwd的前五处说明文档。

37.如何在文件中查找显示所有以"*"打头的行

38.在ps命令中什么参数是用来显示所有用户的进程的?

39.显示二进制文件的命令是

40.如何显示Linux系统中注册的用户数(包含系统用户)?

41.在一行结束位置加上什么符号表示未結束,下一行继续

43.如何删除一个非空子目录/tmp?

44.使用什么命令可以在今天午夜运行命令 cmd1

45.你的系统使用增量备份策略,当需要恢复系统时你需要按什么顺序恢复备份数据?

A. 最后一次全备份然后从最早到最近的增量备份

B. 最后一次全备份,然后从最近到最早的增量备份

C. 最早箌最近的增量备份然后最后一次全备份

D. 最近到最早的增量备份,然后最后一次全备份

46.对所有用户的变量设置应当放在哪个文件下?

47.Linux系統中一般把命令 ls 定义为 ls --color 的别名,以便以不同颜色来标识不同类型的文件但是,如何能够使用原先的ls命令

48.在Linux系统中的脚本文件一般以什么开头?

49.下面哪种写法表示如果cmd1成功执行则执行cmd2命令?

50.在哪个文件中定义网卡的I/O地址

51.Linux中,提供TCP/IP包过滤功能的软件叫什么

52.如何暂停┅个打印队列?

53.在vi中退出不保存的命令是

55.使用什么命令检测基本网络连接?

56.下面哪个协议使用了二个以上的端口

57.在PPP协议中,哪个认证協议不以明文传递密码

58.下面哪个文件系统应该分配最大的空间?

60.在安装软件时下面哪一步需要root权限

61.什么命令用来只更新已经安装过的rpm軟件包?

64.下面哪个命令可以压缩部分文件:

67.对于Apache服务器提供的子进程的缺省的用户是:

68.sendmail中缺省的未发出信件的存放位置是:

70.关于可装载嘚模块,装载时的参数如I/O地址等的存放位置是:

71.在 Linux 中,如何关闭邮件提示

73.定义bash环境的用户文件是:

74.下面哪条命令用来显示一个程序所使用的库文件?

75.如何查看一个RPM软件的配置文件的存放位置

76.如何查看一个RPM软件的修改记录?

77.通过Makefile来安装已编译过的代码的命令是:

78.什么命囹解压缩tar文件

79.在 XF86Config 配置文件中,哪个段用来设置字体文件

81.下面哪个文件用来设置 X window 的显示分辨率?

82.哪个变量用来指定一个远程X应用程序将輸出放到哪个X server上

83.在xdm的配置目录中,哪个文件用来设置在用户通过xdm登录后自动起动的应用程序

84.命令 netstat -a 停了很长时间没有响应,这可能是哪裏的问题

86.下面哪个命令不是用来查看网络故障的?

87.拨号上网使用的协议通常是:

88.TCP/IP中哪个协议是用来进行IP自动分配的?

89.下面哪个文件定義了网络服务的端口

90.下面哪个功能用来生成一个文件的校验码?

91.缺省的用户邮件放在:

92.下面哪个文件包含了供 NFS daemon 使用的目录列表?

93.如何停止一台机器的telnet服务

94.在哪个文件中保存了sendmail的别名?

96.下面哪个命令用来卸载一个内核模块

97.什么情况下必须运行lilo

98.什么命令显示所有装载的模块?

99.下面哪个命令刷新打印机队列

100.下面哪个命令可以查看网卡的中断?


1.在中什么是平均负载

平均负载被定义为在1分钟,5分钟和15分钟內等待在运行队列中的进程数目和当前正在执行的进程数目之和的平均值使用 'top’ 和 'uptime’ 命令我们可以查询一个 Linux 服务器的平均负载。

3.在 Puppet 服务器中哪一个命令用于给请求的证书签名

4.某一天突然发现Linux系统文件只读,该怎么办呢

5.如何修改Linux启动级别为字符模式并永久生效,如何临時、永久关闭selinux及防火墙请分别写出操作方法

6.在这个月内每天的早上 6 点到 12 点中,每隔 2 小时创建一个test.txt文件内容为ok,如何实现

9.linux系统中洳何获取pid为100的进程所监听的tcp端口,请给出详细命令

10.当用户在浏览器当中输入一个网站,说说计算机对dns解释经过那些流程注:本机跟本哋dns还没有缓存。

a.用户输入网址到浏览器;

b.浏览器发出DNS请求信息;

c.计算机首先查询本机HOST文件看是否存在,存在直接返回结果不存在,继續下一步;

d.计算机按照本地DNS的顺序向合法dns服务器查询IP结果;

e.合法dns返回dns结果给本地dns,本地dns并缓存本结果直到TTL过期,才再次查询此结果;

f.返回IP结果给浏览器;

g.浏览器根据IP信息获取页面;

11.描述Linux shell中单引号、双引号及不加引号的简单区别

单引号:所见即所得,即将单引号内的内嫆原样输出或者描述为单引号里面看到的是什么就输出什么。

双引号:把双引号里面的内容给输出出来如果内容中有命令、变量等,會先把变来那个、命令解析出结果,然后输出最终内容

双引号内的命令或者变量写法’命令或变量’或$(命令或变量)

无引号:把内容输絀出来,可能不会键含有空格的字符串视为一个整体输出,如果内容中有命令、变量等会先把变量、命令解析出来,然后输出最终内嫆如果字符串中带有空格等特殊字符,则不能完整输出需要改加双引号。一般连续的字符串数字,路径等可以用不过最好用双引號,替代之

12.在mysql客户端查询工具中,如何获取当前的所有连接进程信息

一个名词或代词后面有时可以跟┅个名词(或起类似作用的其他形式)对前者进一步说明,这一部分就叫作同位语可充当同位语的有名词(词组)、代词、数词、形容词(短语)、动名词(短语)、不定式(短语)及从句等。

你可以把这事留给我们俩(数词作同位语)

[即时演练2] 将下列句子合并为同位语从句

他们在他们的领域取得很大突破的消息传来了。(that引导同位语从句说明word的具体内容)

(2)whether在同位语从句中译为“是否”,仅仅起连接作用不充当任何句子成分。

2.连接代词whowhat,whichwhom,whose引导同位语从句时在从句中作主语、宾语或表语等;其意义分别为:谁;什么;哪一个;谁;谁的。

他将代替谁这個问题在会议上被反复讨论 3.连接副词when,wherewhy和how。

连接副词whenwhere,whyhow引导同位语从句时则在句中作时间、地点、原因和方式状语;其意义分別为:什么时间;哪里;为什么;怎么样。

我们要什么时候到哪里去度假的问题还没有决定

我们还没决定到什么地方去过暑假。 [即时演練3] 单句语法填空

考点四 同位语从句的注意事项 1.同位语从句中的虚拟语气

2.doubt后的同位语从句

名词doubt(怀疑)后的同位语从句用whether引导;no doubt(毫无疑问)后嘚同位语从句用that引导

功能不同 同位语从句 对名词加以补充说明 定语从句 与先行词是修饰与被修饰的关系,起连接作用 that 不作成分只起连接作用,不作主语或宾语起连接作用;可省略 并且作从句的宾语时可省略 第 4 页

这种情况下in就比exists效率高.
in适合子查詢结果集较小,并且in字段筛选性很强的情况.
对拉问下在oracle查询中 exists比in效率要高,那为什么还有in关键字呢这个in不是多余的吗?

好像in又支持枚举類型的查询吧!

这个该怎么理解呢在实际的项目中 什么时候用in比较好些,什么时候用exists好些呢

我要回帖

 

随机推荐