TCP三次握手和四次挥手

TCP三次握手

TCP三次握手和四次挥手

有两台机器,A是客户端(主动发起请求的人),B是服务器端(被动接受请求的人),客户端A刚开始没有人和他通讯,所以客户端A的状态是CLOSDE(关闭的),服务器端B刚开始的状态也是CLOSDE,但是总有人去访问他,所以服务器端B开启了LISTEN(收听)状态。
(1)假设A机器想链接B机器了,他就会向B机器发送一个建立链接的请求,这个建立链接请求叫SYN=1,因为要发送一个数据包给B,这个包在A机器里的编号为X,所以seq=x,发送过去之后,A从CLOSED状态转换为SYN-SENT(同步已发送)状态。
(2)A发送过去,B立马就会回应,也会发送一个建立链接的请求,SYN=1(因为B和A以前也没通讯过,要请求和A通讯),B同意了A的建立链接,所以ACK=1,因为B要向A发送一个数据包,这个数据包在B机器里的编号刚好是y,所以seq=y,又因为B确认收到A发送的第X个包,所以B希望收到的下一个包是第x+1个包,所以ack=x+1。发送之后B有LISTEN状态转换为SYN-RCED(同步已收到)状态。
(3)B向A发送了请求,A也会立马回应,同意了B的建立链接,所以ACK=1,A向B发送的是第x+1个包,所以seq=x+1,而A确认收到了B发送的第y个包,希望收到第y+1个包,所以ack=y+1。之后A,B就建立了连接,可以进行数据通讯了,AB的状态也都转换为ESTAB-LISHED(已建立链接)状态。
即使三次握手也有安全隐患,假如A向B发送一个请求,正常来说,B立刻回应,B回应之后并不会马上释放资源,他要等着A回第三次回应,B在等待的过程中会在计算机的内存中记录A发来的请求和自己的回应,假如A发来的是个恶意的请求,一直发第一次请求,而不去发第三次回应,结果造成B把资源都浪费在记录A发送来的第一次请求和自己的回应上面,而迟迟等不来A的第三次回应,导致最终系统所有的资源耗尽,那么B机器对外就不能进行正常访问了。

TCP四次挥手

TCP三次握手和四次挥手

客户端和服务器端通讯完之后,双方要结束通讯,这就要进行TCP的四次挥手。挥手请求,客户端和服务器端都可以发出。
(1)假如客户端A发出挥手请求(关闭连接),这个挥手请求就是FIN=1,seq=u表示A向B发送一个数据包,这个数据包在A机器里编号为u。A发送完之后就会进入FIN-WAIT1(终止等待)状态。
(2)B接收到A发送的挥手请求之后会立刻回应,确认收到A发送来的挥手请求ACK=1,seq=v表示B向A发送一个数据包,这个数据包在B机器里的编号为v。B确认收到了A发来的第u个包,希望收到的下一个包为第u+1个包,所以ack=u+1。一旦B发送了这个回应之后就马上进入CLOSE-WAIT(关闭等待)状态。而A收到了B的回应之后就会进入TIN-WAIT2(终止等待)状态。

(3)B发出回应只是说明收到了A的挥手请求并不代表同意A挥手请求,有可能B还没传完数据,接着B会传送一些后续的数据包,传送完之后,B也觉得通讯该结束了,就同意了A的挥手请求,接着B也会给A发送一个挥手请求FIN=1,并且同意了A的挥手请求ACK=1,seq=w表示B向A发送一个数据包,这个数据包在B机器里的编号为w。B确认收到了A发来的第u个包,希望收到的下一个包为第u+1个包,所以ack=u+1。B发送挥手请求之后,就会进入LAST-ACK(最后确认)状态。

(4)A收到B发送的挥手请求之后马上回应B,确认收到了B的挥手请求ACK=1,向B发送的数据包编号为u+1,确认收到了B发送的第w个包,希望收到下一个包为第w+1个包。A发送完之后就会进入TIME-WAIT(时间等待)状态,要等待2MSL(最长数据的传输时间),之后就会进入CLOSED状态。而B收到了A的回应之后就会进入CLOSED状态。

有限状态机FSM:Finite State Machine
CLOSED 没有任何连接状态
LISTEN 侦听状态,等待来自远方TCP端口的连接请求
SYN-SENT 在发送连接请求后,等待对方确认
SYN-RECEIVED 在收到和发送一个连接请求后,等待对方确认
ESTABLISHED 代表传输连接建立,双方进入数据传送状态
FIN-WAIT-1 主动关闭,主机已发送关闭连接请求,等待对方确认
FIN-WAIT-2 主动关闭,主机已收到对方关闭传输连接确认,等待对方发送关闭传输连接请求
TIME-WAIT 完成双向传输连接关闭,等待所有分组消失
CLOSE-WAIT 被动关闭,收到对方发来的关闭连接请求,并已确认
LAST-ACK 被动关闭,等待最后一个关闭传输连接确认,并等待所有分组消失
CLOSING 双方同时尝试关闭传输连接,等待对方确认

原创文章,作者:fuming,如若转载,请注明出处:http://www.178linux.com/85723

(0)
上一篇 2017-08-31 15:53
下一篇 2017-08-31 20:22

相关推荐

  • Linux上实现rsyslog+mysql+loganalyz进行日志收集

    在我们的运维工作中,常常会对系统上的日志进行收集,手动管理少量的几台服务器的日志收集没有太大难度,但是企业当中批量的管理成千上万台服务器的时候,这时候想一台台的收集日志未免太浪费时间了,这时候我们需要一个批量管理日志的系统来解决这一难题,今天我给大家带来的使用 1、syslog介绍       &n…

    Linux干货 2016-10-24
  • 以洪荒之力打开linux德·摩根定律

    德·摩根定律让学习liunx的小伙伴绕得头疼,现在我就用洪荒之力为大家理顺一下这个定律。 由图片可以看出, A=4+3 B=3+2 非A=2+1 非B=4+1 A且B就是代表既是A又是B的地方,A和B都有色块3,所以色块3代表了A且B 同时,我们再看A=4+3 ,B=3+2,我们可以推断出,且运算的结果就是两个算数式中重复的数字。 A且B=3 A或B就是代表…

    Linux干货 2016-08-15
  • linux之/home目录转移分区。

    linux之/home目录转移分区。     I,基本思路,将/home目录的数据转移到新的分区,再将/home目录挂载到新的分区。     II,添加硬盘,进行分区,添加新硬盘不重启机器识别命令echo “- – -”  /sys/class/scsi_host/host#/scan,然后进行 …

    Linux干货 2017-06-19
  • 6 文件系统权限(一):用户、组

    提纲 文件系统权限 3A 安全 Authentication    :  认证    –> 用户名&密码、指纹、人脸识别、DNA验证 Authorization    :  …

    Linux干货 2016-08-10
  • 马哥教育网络班22期+第2周课程练习

    1、Linux上文件管理命令有哪些,其常用的相关示例演示。 常见文件管理命令有:touch/stat/file/rm/cp/mv/nano 示例如下: [root@localhost week2_test]# touch newfile [root@localhost week2_test]# ls&nbsp…

    Linux干货 2016-08-22
  • RAID特性和常见级别

    简介:    RAID全称为独立磁盘冗余阵列(Redundant Array of Independent Disks),基本思想就是把多个相对便宜的硬盘组合起来,成为一个硬盘阵列组,使性能达到甚至超过一个价格昂贵、 容量巨大的硬盘。RAID通常被用在服务器电脑上,使用完全相同的硬盘组成一个逻辑扇区,因此操作系统只会把它当做一个硬盘。 R…

    Linux干货 2016-02-14