1. 先来说说TCP协议:

我们来看看百度百科怎么说?

"TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,用户数据报协议(UDP)是同一层内另一个重要的传输协议。在因特网协议族(Internet protocol suite)中,TCP层是位于IP层之上,应用层之下的中间层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。"

简而言之就是TCP协议是在IP协议之上的,但是IP协议不可靠,所以TCP协议就得实现一些可靠性相关的功能。

2. TCP协议特点:

①面向连接的、可靠的、基于字节流的传输层通信协议;

②将应用层的数据流分割成报文段发送给目标节点的TCP层;

③为保证数据正确性和安全性,使用计算校验来检验数据在传输过程中是否有错误,还可以使用MD5对数据进行加密;

④为保证可靠性,每个数据包都有序号,对方收到则发送ACK确认,超过往返时延未收到则重传;

⑤流量控制上,使用滑动窗口协议,协议中规定,对于窗口内未经确认的分组需要重传;

3.三次握手协议:

要了解三次握手协议,TCP报文头中的标志位必须了解一下:

共有6种标志位,URG(紧急指针标志)、ACK(确认序号标志)、PSH(push标志)、RST(重置连接标志)、SYN(同步序号,用于建立连接过程)、FIN(finish标志,用于释放连接),重要的我们需要了解其中3种:ACK、SYN、FIN 。

如果有同学对报文头中还有其他什么信息感兴趣,可以自行去了解学习。

下面说说三次握手的流程:

第一次握手:Client将标志位SYN置为1,随机产生一个序列值seq=x,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认;

第二次握手:Server接收到该数据包,由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=x+1,再随机产生一个序列值seq = y,并将该数据包发送给Client以确认连接请求,Server进入SYN_REVD状态;

第三次握手:Client收到确认后,检查ack是否为x+1,ACK是否为1,如果正确则发送ACK=1 seq=x+1 (因为在第一次握手已经消耗了一个序列号) ack=y+1 至Server端,Client进入ESTABLISHED状态,Server收到ACK=1 和ack=y+1,Server进入ESTABLISHED状态,则连接建立成功,完成三次握手,随后Client和Server之间就可以传输数据了。

4.三次握手协议需要注意的地方:SYN攻击/DOS攻击

在客户发送SYN到服务端,服务端返回ACK包后,如果此时并未得到客户端的ACK确认,会重试直到超时,此时连接处于半连接状态,存放在服务器的半连接队列中(超过最大超时时间后会删除该半连接状态的连接),不法分子正是利用这点,短时间内伪造大量ip进行请求,一直不进行第三次握手,导致服务器半连接队列资源耗尽,导致其他正常用户无法正常访问;

怎么防范呢?syn cookie技术是服务器在收到syn包时并不马上分配储存连接的数据区,而是根据这个syn包计算出一个cookie,把这个cookie放入syn+ack包发送,等对方回应ack包时检查cookie的合法性,如果合法再分配专门的数据区。

如何开启syn cookie:sysctl -a | grep syn 查看

net.ipv4.tcp_syncookies=1 为打开

如果为0 ,需要打开怎么办呢?

sysctl -w net.ipv4.tcp_syncookies=1

但是这种方法貌似不是完美的,如果需要完美抵御SYN攻击,需要再学习研究!

参考资料:

1.百度百科;

2.前辈们的博客;

感谢您的阅读,本博客旨在记录学习点滴,欢迎互相学习交流!!

计算机网络教程三次握手,计算机网络(二) TCP协议的三次握手相关推荐

  1. JavaSE(二十二)——TCP协议的三次握手

    文章目录 1. TCP协议 2. TCP的三次握手 3. 为什么一定是三次握手? 1. TCP协议 TCP协议:传输控制协议,是可靠连接,类似于打电话,只有等待对方接通的时候才可以交流,也就是确认了对 ...

  2. 计算机网络【UDP与TCP协议(三次握手、四次挥手)】

    计算机网络[UDP与TCP协议(三次握手.四次挥手)]

  3. 用wireshark抓包分析TCP协议的三次握手连接、四次握手断开

    用wireshark抓包分析TCP协议的三次握手连接.四次握手断开 一.TCP三次握手图解 二.TCP得四次挥手过程 三.用Fiddler抓包,分析验证一个HTTPS网站的TCP连接过程 一.TCP三 ...

  4. TCP协议的三次握手和四次挥手

    转自:http://uule.iteye.com/blog/2213562 TCP协议的三次握手和四次挥手 博客分类: http/tcp TCP/IP协议三次握手与四次握手流程解析 Http协议三次握 ...

  5. TCP协议的三次握手与四次挥手

    tcp协议的三次握手和四次挥手 三次握手: 第一次握手: 客户端发起一个链接(SYN) 第二次握手: 服务端就会返回一条(ACK)确认信息,同时服务端也会向客户端发起一个链接请求(SYN),此二者可合 ...

  6. TCP协议中三次握手

    TCP/IP是互联网相关的各类协议族的总称 TCP/IP协议族分为:应用层,传输层,网络层,数据链路层 应用层:向用户提供应用服务时的通讯的活动 传输层:提供处于网络连接中的两台计算机之间的数据传输 ...

  7. TCP协议及三次握手的过程

    在这里插入代码片@TOC TCP协议以及三次握手 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 TCP协议以及三次握手 1.TCP协议是什么? 2.TCP协议的作用 3. ...

  8. (转)理论经典:TCP协议的3次握手与4次挥手过程详解

    摘要: 本文将分别讲解经典的TCP协议建立连接(所谓的"3次握手")和断开连接(所谓的"4次挥手")的过程. 1.前言 尽管TCP和UDP都使用相同的网络层(I ...

  9. 理论经典:TCP协议的3次握手与4次挥手过程详解

    理论经典:TCP协议的3次握手与4次挥手过程详解 https://blog.csdn.net/omnispace/article/details/52701752 转载于:https://www.cn ...

最新文章

  1. github 视觉测量_教你如何提高双目立体视觉系统的精度
  2. python二维数组初始化
  3. go检测出json中的duplicate object key_精读《如何比较 Object 对象》
  4. 1.1 sikuli 安装
  5. pyqt5使用按钮跳转界面
  6. 【leetcode】Majority Element
  7. LFS6.3安装全过程(一)
  8. JAX-WS(三)构建简单webservice部署到tomcat上
  9. java文件处理:文件流、上传、下载
  10. JFrame真正全屏
  11. ① 数据库介绍 及 关系型数据库的关系代数表达式
  12. html+css基础教程入门学习之CSS表格
  13. 阿里 P7 前端高级工程师,都需要掌握哪些技术栈?
  14. CSS 3D动态立体图形
  15. unity调用高德地图
  16. android源码结构分析
  17. 做自媒体如何获得更多的流量?
  18. 安装CPython解释器
  19. 低功耗蓝牙BLE之广播
  20. HTTP请求响应基础介绍

热门文章

  1. Python 3.8 已发布,现在是切换至新版本的好时机吗?
  2. selenium 处理cookie及switch的使用
  3. [Ubuntu] MySQL服务启动停止与用户登录
  4. Python回调函数的实现
  5. Python中的线程及用法
  6. python包的管理(添加的3种方式 删除包)
  7. Invoke and BeginInvoke BeginInvoke和EndInvoke方法 (转)
  8. linux创建sftp服务器,Linux Centos 6.6搭建SFTP服务器
  9. 交换机配置工具_Soce在FPGA上为任务关键型应用量身定制的IEEE 1588感知以太网交换机...
  10. leetcode —— 39. 组合总和