(声明:本文是阅读此文的总结笔记)

面试中对于该知识点的考察频繁,一般作为面试的暖场问题,你能够答出多少,答得多深刻,条理多清晰,给面试官的印象真的很重要。

三次握手的过程

TCP是面向连接的,全双工的,可靠的协议。无论哪一方要发送数据,必须双方先建立一条连接。建立连接的过程就是三次握手。三次握手过程中双方进入ESTABLISHED状态,并且交换了连接双方的序列号和TCP窗口的大小信息。

三次握手哪三次呢

  1. 第一次握手: 建立连接, 客户端发送请求报文段,将SYN位置为1,Sequence Number 为x,然后客户端进入SYN_SENT状态,等待服务器的确认
  2. 第二次握手:服务端收到SYN报文段,从LISTEN状态进入到SYN_RECEV状态,然后需要回应客户端的请求,并且发送自己的SYN请求信息,讲SYN设为1,Sequence Number 是 y; 服务器端将上述所有信息放到一个报文(SYN + ACK)一并发送给客户端。
  3. 第三次握手:客户端收到服务端的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 协议之三次握手(一)的更多相关文章

  1. TCP协议之三次握手与四次挥手

    TCP协议是TCP/IP体系中核心一个协议,该协议比起IP协议,ICMP协议,UDP协议都更复杂,因此这篇文章主要分析TCP协议在建立连接和断开连接的时候,状态转移以及报文段的内容. 下面,先放一张T ...

  2. 软件开发架构介绍||OSI七层协议之物理层、数据链路层、网络层、传输层(mac地址、ip协议、断开协议、tcp协议之三次握手四次挥手)

    一.网络编程 软件开发架构 C/S架构 C:客户端 想体验服务的时候才会去找服务端体验服务 S:服务端   24小时不间断的提供服务,即时监听,随时待命 B/S架构 B:浏览器    想体验服务的时候 ...

  3. TCP协议之三次握手四次挥手

    一.TCP协议简述 TCP协议位于传输层用来建立传输数据的通道以及传输数据,那么在这一层的tcp协议就涉及到客户端与服务端通信的连接,数据的传输.关闭连接. 通信的连接使用的就是客户端与服务端的三次握 ...

  4. TCP协议三次握手

    TCP协议三次握手过程分析 TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: ...

  5. TCP 协议三次握手过程分析

    TCP 协议三次握手过程分析 TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: ...

  6. TCP协议三次握手和四次挥手

    http://www.cnblogs.com/rootq/articles/1377355.html TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对 ...

  7. TCP协议三次握手过程分析【图解,简单清晰】

    转自:http://www.cnblogs.com/rootq/articles/1377355.html TCP(Transmission Control Protocol) 传输控制协议 TCP是 ...

  8. TCP 协议三次握手过程解析带实例

    TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有6种标 ...

  9. TCP协议三次握手过程分析

    TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有6种标 ...

  10. TCP/IP之三次握手、四次挥手

    参照:http://www.cnblogs.com/hnrainll/archive/2011/10/14/2212415.html 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建 ...

随机推荐

  1. ALBERT论文简读

    问题描述 预训练自然语言表征时,增加模型的参数量通常可以是模型在下有任务中性能提升.但是这种做法对硬件设备的要求较高(当下的各种SOTA模型动辄数亿甚至数十亿个参数,倘若要扩大模型规模,这个内存问题是 ...

  2. 有关谷歌下载PDF文件而不是直接打开预览的问题

    找了很多帖子,都不行, 解决方法把链接处理成blob文件再调用下载. 但是仍然不行,最终原因找到: 缺少了这一部创建,需要把二进制数据重新用 Blob对象申明下 let data = new Blob ...

  3. Docker之Elastic Search&Kibana保姆级别安装

    Docker之Elastic Search&Kibana保姆级别安装: 如果觉得样式不好:跳转即可 http://www.lifengying.site/(md文件复制过来有些样式会不一样) ...

  4. 关于pytest生成测试报告

    之前用pytest集成allure,记录的很清楚确实很好,但是我不知道怎么把生成的所有结果通过邮箱发送 可以使用pytest-html生成的html是这样的 也很清楚 但是!!!!!!!!!!!!!! ...

  5. JavaSE——构造方法

    package com.zhao.test3; public class Student { private String name; private int age; //如果我们自己没有写任何的构 ...

  6. 【Frida】调试js代码

    方法一attach启动 js代码动态注入app,app需要保持运行状态 # coding: utf-8 import sys import frida app_name = "猿人学APP& ...

  7. C语言利用union 和 struct 进行位拆分

    #include <stdlib.h> typedef unsigned char uint8_t; union wate_temp{ struct { uint8_t wate_temp ...

  8. Qt 中文编译错误和运行显示乱码

    Qt 中文编译错误 Qt error: C2001: 常量中有换行符 解决方法:菜单 --> 编辑 --> 选择编码(select Encoding)--> 文本编码 --> ...

  9. 判断python socket服务端有没有关闭的方法

    通过 getattr(socket, '_closed') 的返回值可以判断服务端的运行状态. True 是关闭状态,False 是运行中. import socket ip = 'localhost ...

  10. FileZilla链接centos虚拟机不显示问题

    这段时间因为不是很忙,一直想学习一下网络安全方面的技术,准备考个信安中级,网络安全方面经常用到虚拟机,所以及用vm新建虚拟机后,一直发现连不上FileZilla,于是就在网上搜了一下,有一些参考问题, ...