目录

1.三次握手详情

2.为什么需要三次握手才能建立连接

3.首次握手的隐患---SYN超时的问题

4.建立连接之后,Client出现故障

四、TCP三次握手

1.三次握手详情

(1)一开始,客户端和服务器端都处于关闭状态(CLOSED),然后开启服务,服务端这个时候处于监听状态(LISTEN)。

(2)客户端发送一个连接请求报文,里面SYN等于1,seq可以使任意一个整数,标明这个报文段的序号。这个报文段不能传输数据。此时客户端进入同步状态(SYN-SENT)。

(3)服务端同意连接则发送一个报文段,里面SYN=1,ACK=1,seq=y,ack=x+1。大写字母是标志位ACK=1表示确认号(ack)有效,这里ack确认上一个服务器发送过来的seq为x的已经接受,确认下一个接收的编号为x+1,同时发送的报文段的序号为y。此时的报文段不能发送数据。服务端进入同步状态(SYN-RCVD)。

(4)客户端接收服务端报文段之后,回复一个报文段,里面ACK=1,seq=x+1,ack=y+1。ack确认服务器端的y编号的数据已经接受,请求ack=y+1的字段,此时客户端的报文段编号为x+1。此时可以发送数据,也可以不发送。客户端进入已建立连接状态(ESTAB-LISHED)。

(5)服务端接收之后进入已连接状态(ESTAB-LISHED)

2.为什么需要三次握手才能建立连接

  主要是初始化Sequence Number的初始值

3.首次握手的隐患---SYN超时的问题

  问题分析:Server收到Client的SYN,回复SYN-ACK的时候未收到ACK确认

  服务端解决方法:Server不断地重试直至超时,Linux系统中超时时间是63秒,即重试五次之后关闭连接1,2,4,8,16,32,第五次重试之后等待32秒后关闭。

  SYN Flood攻击:即不断的使服务端进入同步状态,使服务器的端口不可用,浪费掉

  解决方法:设置一个SYN队列,当SYN队列满了之后,服务器则会通过tcp_syncookies参数回发一个SYN Cookie,如果客户端连接正常则会回发SYN Cookie,直到建立连接

4.建立连接之后,Client出现故障

  连接具有保活机制,向对方发送保活探测报文,如果未收到响应则继续发送,常识次数达到保活探测数任未收到响应即终止连接。

计算机网络(四),TCP三次握手的更多相关文章

  1. 面试问题之计算机网络:TCP三次握手四次挥手

    转载于:https://www.cnblogs.com/Andya/p/7272462.html TCP三次握手: 起初A和B都处于CLOSED关闭状态 B创建TCB,处于LISTEN收听状态,等待A ...

  2. 从零开始学安全(四十四)●TCP三次握手四次挥手

    wireshark:Beyond Compare是一个网络封包分析软件.网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料.Wireshark使用WinPCAP作为接口,直接与 ...

  3. 计算机网络之tcp三次握手

    客户端与服务器之间数据的发送和返回的过程当中需要创建一个叫TCP connection的东西:由于TCP不存在连接的概念,只存在请求和响应,请求和响应都是数据包,它们之间都是经过由TCP创建的一个从客 ...

  4. 关于 TCP 三次握手和四次挥手,满分回答在此

    尽人事,听天命.博主东南大学研究生在读,热爱健身和篮球,正在为两年后的秋招准备中,乐于分享技术相关的所见所得,关注公众号 @ 飞天小牛肉,第一时间获取文章更新,成长的路上我们一起进步 本文已收录于 C ...

  5. TCP三次握手,数据传输,四次挥手

    TCP包结构 一个TCP包结构如下: 一个TCP包主要由TCP包头和数据部分组成,包头固定部分为20字节,选项和数据部分根据实际情况设置为4N(N可以为0)字节. 1.16bit源端口和目的端口号,它 ...

  6. 用wireshark抓包分析TCP三次握手、四次挥手以及TCP实现可靠传输的机制

    关于TCP三次握手和四次挥手大家都在<计算机网络>课程里学过,还记得当时高超老师耐心地讲解.大学里我遇到的最好的老师大概就是这位了,虽然他只给我讲过<java程序设计>和< ...

  7. 【linux】关于TCP三次握手和四次挥手

    1.TCP是什么 关于OSI的七层模型 TCP在第四层——Transport层,第四层的数据叫Segment->报文 IP在第三层——Network层,在第三层上的数据叫Packet->数 ...

  8. TCP三次握手四次断开

    今天被问到三次握手了,当时只是脑子里有印象,却忘了一些SYN细节,手动微笑. 这么下去还怎么混...赶紧复习个... 三次握手是什么? TCP是面向连接的,无论哪一方向另一方发送数据之前,都必须先在双 ...

  9. 脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手

    .引言 网络编程中TCP协议的三次握手和四次挥手的问题,在面试中是最为常见的知识点之一.很多读者都知道“三次”和“四次”,但是如果问深入一点,他们往往都无法作出准确回答. 本篇文章尝试使用动画图片的方 ...

随机推荐

  1. java 统计素数个数问题

    题目:判断101-200之间有多少个素数,并输出所有素数. 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数. package Study ...

  2. PTA(Basic Level)1057.数零壹

    给定一串长度不超过 105 的字符串,本题要求你将其中所有英文字母的序号(字母 a-z 对应序号 1-26,不分大小写)相加,得到整数 N,然后再分析一下 N 的二进制表示中有多少 0.多少 1.例如 ...

  3. PreparedStatement 以及事务的注意事项

    a).PreparedStatement 可以进行批量操作,但是与Statement有一定的区别 1. Statement可以进行不同sql语句的批量操作 即可以同时进行 crud 操作. Strin ...

  4. linux下安装php的lua扩展

    1. 进入管理员权限使用yum安装 readline(也可以使用wget下载后./configure 然后 make && make install进行安装) yum install ...

  5. spring + dubbo 学习

    新启动的项目中可能会使用到dubbo,因为之前并没有接触过,所以先小试一下 示例运行环境准备:OS X 10.10.5 + java version "1.8.0_40" zook ...

  6. uoj #46[清华集训2014]玄学

    uoj 因为询问是关于一段连续区间内的操作的,所以对操作构建线段树,这里每个点维护若干个不交的区间,每个区间\((l,r,a,b)\)表示区间\([l,r]\)内的数要变成\(ax+b\) 每次把新操 ...

  7. MySQL存储引擎知多少

    MySQL是我们经常使用的数据库处理系统(DBMS),不知小伙伴们有没有注意过其中的“存储引擎”(storage_engine)呢?有时候面试题中也会问道MySQL几种常用的存储引擎的区别.这次就简短 ...

  8. k8s弹性伸缩概念以及测试用例

    k8s弹性伸缩概念以及测试用例 本文原文出处:https://juejin.im/post/5c82367ff265da2d85330d4f 弹性伸缩式k8s中的一大亮点功能,当负载大的时候,你可以对 ...

  9. linux使用VNC服务轻松远程安装oracle

    VNC服务在远程服务器上安装oracle,新手安装oracle时总会遇到这样或者那样的问题,下面我就详细解说一下安装过程,其实oracle安装很简单,并不要把他相像的特别复杂. 本环境用:centos ...

  10. Linux 的帐号与群组:有效与初始群组、groups, newgrp

    关于群组: 有效与初始群组.groups, newgrp 认识了帐号相关的两个档案 /etc/passwd 与 /etc/shadow 之后,您或许还是会觉得奇怪, 那么群组的设定档在哪里?还有,在 ...