TCP 协议之三次握手(一)
(声明:本文是阅读此文的总结笔记)
面试中对于该知识点的考察频繁,一般作为面试的暖场问题,你能够答出多少,答得多深刻,条理多清晰,给面试官的印象真的很重要。
三次握手的过程

TCP是面向连接的,全双工的,可靠的协议。无论哪一方要发送数据,必须双方先建立一条连接。建立连接的过程就是三次握手。三次握手过程中双方进入ESTABLISHED状态,并且交换了连接双方的序列号和TCP窗口的大小信息。
三次握手哪三次呢
- 第一次握手: 建立连接, 客户端发送请求报文段,将SYN位置为1,Sequence Number 为x,然后客户端进入SYN_SENT状态,等待服务器的确认
- 第二次握手:服务端收到SYN报文段,从LISTEN状态进入到SYN_RECEV状态,然后需要回应客户端的请求,并且发送自己的SYN请求信息,讲SYN设为1,Sequence Number 是 y; 服务器端将上述所有信息放到一个报文(SYN + ACK)一并发送给客户端。
- 第三次握手:客户端收到服务端的SYN+ACK报文段,然后将ACknowledge Number 设置为y+1 , 向服务发送ACK报文段,这个报文段发送完毕后且服务端成功接收数据,客户端和服务端同时进入ESTABLISHED状态。
过程中说清楚状态转换过程非常的重要。
为什么需要三次握手
为了防止已失效的连接请求报文段又传送到了服务端,因而产生错误。
同时书中举例子:
失效的连接请求报文段是这种情况,他并没有在线路中丢失,而是在某个网络节点长期滞留了,以致延误到达,但是接收方并不知道这个报文的有效性与否,如果接收方在这第二次握手此时建立连接,接收方已经建立连接,显然是单方的,所以必须并进行第二次握手,然而这将是不会再收到回应了,也就避免在这种异常情况下建立连接。
同时发起连接请求怎么办
这种情况可能性较小,但不是不可能发生,双方使用对方熟知的端口作为本地端口,且同时发起连接请求,最终建立一条连接而不是两条。双方同时发送SYN数据包,同时进入SYN_SEND状态。当每一方收到SYN时候,双方又进入SYN_RECEV状态.并且发送SYN进行确认。双方都收到确认报文的时候又同时进入ESTABLISHED状态。这时候交换的是四个报文而不是三个。这是同时打开的情况。
三次握手是否完美
肯定不是完美的,有一种攻击叫做SYN攻击。我们可以不断的利用伪造的IP数据包向服务器发送TCP连接请求并且把自己隐藏好,服务器根据IP来寻找客户端,所以TCP的第二次握手会失败。伪造大量IP数据包会让服务忙于处理队列中的连接,系统资源被大量的小号。 SYN攻击是TCP协议的一个bug,无法避免。
后续思考
连接过程中有哪些异常的情况。建立连接后的流量控制,超时重传,数据包重排等功能。
TCP 协议之三次握手(一)的更多相关文章
- TCP协议之三次握手与四次挥手
TCP协议是TCP/IP体系中核心一个协议,该协议比起IP协议,ICMP协议,UDP协议都更复杂,因此这篇文章主要分析TCP协议在建立连接和断开连接的时候,状态转移以及报文段的内容. 下面,先放一张T ...
- 软件开发架构介绍||OSI七层协议之物理层、数据链路层、网络层、传输层(mac地址、ip协议、断开协议、tcp协议之三次握手四次挥手)
一.网络编程 软件开发架构 C/S架构 C:客户端 想体验服务的时候才会去找服务端体验服务 S:服务端 24小时不间断的提供服务,即时监听,随时待命 B/S架构 B:浏览器 想体验服务的时候 ...
- TCP协议之三次握手四次挥手
一.TCP协议简述 TCP协议位于传输层用来建立传输数据的通道以及传输数据,那么在这一层的tcp协议就涉及到客户端与服务端通信的连接,数据的传输.关闭连接. 通信的连接使用的就是客户端与服务端的三次握 ...
- TCP协议三次握手
TCP协议三次握手过程分析 TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: ...
- TCP 协议三次握手过程分析
TCP 协议三次握手过程分析 TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: ...
- TCP协议三次握手和四次挥手
http://www.cnblogs.com/rootq/articles/1377355.html TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对 ...
- TCP协议三次握手过程分析【图解,简单清晰】
转自:http://www.cnblogs.com/rootq/articles/1377355.html TCP(Transmission Control Protocol) 传输控制协议 TCP是 ...
- TCP 协议三次握手过程解析带实例
TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有6种标 ...
- TCP协议三次握手过程分析
TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有6种标 ...
- TCP/IP之三次握手、四次挥手
参照:http://www.cnblogs.com/hnrainll/archive/2011/10/14/2212415.html 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建 ...
随机推荐
- Java面向对象之内部类
内部类 内部类:在一个类的内部再定义一个类,比如,A类中定义一个B类,那么B类相对A类来说就称为内部类,而A类相对于B类来说就是外部类了. 1.成员内部类 2.静态内部类 3.局部内部类 4.匿名内部 ...
- xxx.app 已损坏,无法打开,你应该将它移到废纸篓/打不开 xxx,因为它来自身份不明的开发者解决方法
xxx已损坏,无法打开,你应该将它移到废纸篓解决办法 打不开 xxx,因为它来自身份不明的开发者 打不开xxxx,因为 Apple 无法检查其是否包含恶意软件 在安装的时候提示加载失败! 解决: 打开 ...
- pycharm安装appium,通过国内的镜像源安装python包,注意每次都要添加信任选项 --trusted-host mirrors.aliyun.com
1.更改阿里源 或者清华源 1.file - - settings - - project - - project interpreter - - 右侧+ - - manage rep ...
- CTF学习笔记(三)php部分
三.常见PHP用法与漏洞 (〇)php的备份文件与phps php的备份文件一般是*.php.bak,在根目录下输入/index.php.bak, 下载 备份文件. phps文件就是php的源代码文件 ...
- locust 检查点、集合点、参数化设置。
1.参数化 方式1:循环取数据,数据可以重复使用. 所有并发虚拟用户共享同一份测试数据,各虚拟用户在数据列表中循环取值. 例如,模拟10个用户并发请求网页,总共有4个URL地址,每个虚拟用户都会依次循 ...
- Java笔记_变量作用域
变量作用域 在Java中主要的变量就是属性(成员变量)和局部变量. 局部变量一般是指在成员方法中定义的变量. 全局变量作用域:整个类体.局部变量(除属性意以外的其他变量)作用域:为定义它的代码块中! ...
- jsp 格式化日期
第一步,引入工具包: <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %&g ...
- VUE3+VITE 常见问题解决
reactive解构最深的一层,失去响应性问题 pinia创建的store,使用结构失去响应性 reactive包裹后的对象 重新赋值失去响应性 无法动态引入图片 在computed中传参数 vue3 ...
- (原创)odoo计算字段报CacheMiss异常
在odoo计算字段获取值的中的过程中报出odoo.exceptions.CacheMiss异常,常见的原因为是在计算字段方法中没有为该计算字段赋值.如图 方法"_compute_test&q ...
- linux 动态库、静态库
库:可执行的二进制代码,不可以独立执行(没有main函数入口) 库是否兼容:取决于编译器.汇编器.链接器 linux链接静态库(.a):将库中用到的函数的代码指令,写入到可执行文件中.运行时无依赖 l ...