“阅读陶辉大师的《nginx》有感,捡一捡计算机网络的知识,那么就从三次握手开始。”

小知识:

网络模型实际使用时分五层:物理层、数据链路层、网络层、传输层、应用层。

我们常用的命令 ping 处于中间层,也就是网络层,如果能ping通,下三层没有问题。

ping使用的协议ICMP,全称是 Internet Control Message Protocol(网络层的一个子协议)

tcp/udp协议属于传输层协议,

参考自:https://blog.csdn.net/htyurencaotang/article/details/11569905

传输控制协议(Transmission Control Protocol,TCP)是一种面向连接的、可靠的、基于字节流的运输层(Transport layer)通信协议。是专门为了在不可靠的互联网络上提供一个可靠的端到端字节流而设计的。每一次TCP连接都需要三个阶段:连接建立、数据传送和连接释放。“三次握手”就发生在连接建立阶段。

1. TCP连接建立过程中为什么需要“三次握手” (站在服务端考虑问题)

目的是为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。

“已失效的连接请求报文段”的产生在这样一种情况下:

client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。若不采用“三次握手”,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。采用“三次握手”的办法可以防止上述现象发生。例如刚才那种情况,client不会向server的确认发出确认。server由于收不到确认,就知道client并没有要求建立连接。”

2. TCP三次握手

三次握手(Three-way Handshake)是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。

图中包含了客户端和服务端,发送完数据包后的状态变化。【很重要,对于理解linux网络连接状态】

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

(2)第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。

(3)第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了

3. SYN攻击

在三次握手过程中,服务器发送SYN-ACK之后,收到客户端的ACK之前的TCP连接称为半连接(half-open connect).此时服务器处于Syn_RECV状态. 当收到ACK后,服务器转入ESTABLISHED状态.

Syn攻击就是 攻击客户端 在短时间内伪造大量不存在的IP地址,向服务器不断地发送syn包,服务器回复确认包,并等待客户的确认,由于源地址是不存在的,服务器需要不断的重发直至超时,这些伪造的SYN包将长时间占用未连接队列,正常的SYN请求被丢弃,目标系统运行缓慢,严重者引起网络堵塞甚至系统瘫痪。

Syn攻击是一个典型的DDOS攻击。检测SYN攻击非常的方便,当你在服务器上看到大量的半连接状态时,特别是源IP地址是随机的,基本上可以断定这是一次SYN攻击.在Linux下可以如下命令检测是否被Syn攻击

netstat -n -p TCP | grep SYN_RECV

一般较新的TCP/IP协议栈都对这一过程进行修正来防范Syn攻击,修改tcp协议实现。主要方法有SynAttackProtect保护机制、SYN cookies技术、增加最大半连接和缩短超时时间等.但是不能完全防范syn攻击。

一、三次握手【绿皮书很重要】相关推荐

  1. 淘宝二面,面试官居然把TCP三次握手问的这么详细

    TCP 的三次握手和四次挥手,可以说是老生常谈的经典问题了,通常也作为各大公司常见的面试考题,具有一定的水平区分度.看似是简单的面试问题,如果你的回答不符合面试官期待的水准,有可能就直接凉凉了. 本文 ...

  2. 一些通讯知识、TCP/IP、三次握手四次分手(正确的图,网上很多错了)、HTTP\HTTPS、DNS、UDP

    总述 这里会按照一个浏览器(客户端)是向服务器请求资源的路径来分享知识点 有些内容在之前的博客有,您可以自取 浏览器(客户端)是如何向服务器请求资源的呢? 见下图: 客户端输入网址(输入搜索内容也是一 ...

  3. 通俗大白话来理解TCP协议的三次握手和四次分手

    最近在恶补计算机网络方面的知识,之前对于TCP的三次握手和四次分手也是模模糊糊,对于其中的细节更是浑然不知,最近看了很多这方面的知识,也在系统的学习计算机网络,加深自己的CS功底,就把看过的一些比较好 ...

  4. 第五章 运输层(UDP和TCP三次握手,四次挥手分析)

    序言   通过这章,可以知道其实三次握手和四次挥手其实真的好简单,通过这章的学习,我相信你也会同样的认为,以后在也不需要听到别人问三次握手的过程而自己一脸懵逼了,觉得人家好屌,其实也就是他懂你不懂,仅 ...

  5. 通俗理解tcp/ip的三次握手和四次分手

    转载地址:https://github.com/jawil/blog/issues/14 最近在恶补计算机网络方面的知识,之前对于TCP的三次握手和四次分手也是模模糊糊,对于其中的细节更是浑然不知,最 ...

  6. TCP三次握手详解及面试题

    为什么必须是三次握手?   大家都知道传输层(点击这里去传输层)中的TCP协议是面向连接的,提供可靠的连接服务,其中最出名的就是三次握手和四次挥手,今天先讲解三次握手(四次挥手点这里),如下图   喜 ...

  7. 深入理解TCP三次握手

    一.TCP 包头格式 首先,TCP报文是TCP层传输的数据单元,也称为报文段,下面就是TCP包头格式: 接下来我们来看看每个字段的含义: 源端口和端口字号: TCP源端口:源计算机上应用程序端的端口号 ...

  8. 为什么TCP握手是三次握手而不是两次

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 简介 1. 三次握手 2. 两次握手 3. 两次握手的问题 总结 简介 TCP连接需要三次握手,旨在通过同步两方之间交换的消 ...

  9. TCP的三次握手与四次挥手理解及面试题(很全面)

    本文经过借鉴书籍资料.他人博客总结出的知识点,欢迎提问 序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生:给字节编上序号后 ...

最新文章

  1. window路径和linux路径变换,从linux样式路径转换时,Docker装入的卷将; C添加到Windows路径的末尾...
  2. 清华数为DWF低代码平台亮相2021全球数字经济大会
  3. Nginx配置中一个不起眼字符/的巨大作用,失之毫厘谬以千里
  4. 网络推广费用浅析网站具备哪些特点能更受蜘蛛的青睐?
  5. Redis 和 I/O 多路复用
  6. mybatis.net mysql_ADO.NET与ORM的比较(5):MyBatis实现CRUD
  7. java通过commons-fileupload实现多张图片的上传(jsp页面)
  8. [中英对照]The sysfs Filesystem | sysfs文件系统
  9. 台达plc读取变频器电流案例_PLC模拟量信号数据转换过程
  10. laravel5.5 尝试使用laravel安装器安装(失败) 最后还是用的composer。。。
  11. 潍坊首个小学“教育创客空间”落户呼家庄小学 萝卜(创客)教育走进小学课堂...
  12. 从零基础入门Tensorflow2.0 ----二、4.2 wide deep 模型(子类API)
  13. Lua学习小记——语言
  14. Meanshift and Camshift
  15. 2022年上半年软件设计师下午真题及答案解析
  16. 谈如何归纳和分类美术风格比较合理
  17. echarts常见图形-时间轴(五)
  18. 笔记20210518正则表达式和面向对象
  19. 详解电商订单逻辑流程图
  20. 【渝粤教育】电大中专门店销售与服务技巧 (3)作业 题库

热门文章

  1. 深度linux系统软件卸载在哪,LinuxDeepin/apt软件升级、安装、卸载与系统升级的好帮手...
  2. REST 架构指导方案
  3. 温湿度DHT10读写例程
  4. 明确一下哪些是---编程语言、脚本语言、标记语言
  5. VS2015 通过Shockwave Flash Object 播放flash
  6. Python for i in range复杂用法
  7. HP StorageWorks MSA SAN 存储阵列 - MSA2000 vdisk 和 volume 的扩容
  8. 《浪漫樱花之旅——日本樱花拍摄游感》
  9. 金融信创与云化转型|保险超融合架构转型与场景探索合集
  10. 安卓USB绑定RNDIS驱动的详细安装教程