计算机网络教程三次握手,计算机网络(二) TCP协议的三次握手
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协议的三次握手相关推荐
- JavaSE(二十二)——TCP协议的三次握手
文章目录 1. TCP协议 2. TCP的三次握手 3. 为什么一定是三次握手? 1. TCP协议 TCP协议:传输控制协议,是可靠连接,类似于打电话,只有等待对方接通的时候才可以交流,也就是确认了对 ...
- 计算机网络【UDP与TCP协议(三次握手、四次挥手)】
计算机网络[UDP与TCP协议(三次握手.四次挥手)]
- 用wireshark抓包分析TCP协议的三次握手连接、四次握手断开
用wireshark抓包分析TCP协议的三次握手连接.四次握手断开 一.TCP三次握手图解 二.TCP得四次挥手过程 三.用Fiddler抓包,分析验证一个HTTPS网站的TCP连接过程 一.TCP三 ...
- TCP协议的三次握手和四次挥手
转自:http://uule.iteye.com/blog/2213562 TCP协议的三次握手和四次挥手 博客分类: http/tcp TCP/IP协议三次握手与四次握手流程解析 Http协议三次握 ...
- TCP协议的三次握手与四次挥手
tcp协议的三次握手和四次挥手 三次握手: 第一次握手: 客户端发起一个链接(SYN) 第二次握手: 服务端就会返回一条(ACK)确认信息,同时服务端也会向客户端发起一个链接请求(SYN),此二者可合 ...
- TCP协议中三次握手
TCP/IP是互联网相关的各类协议族的总称 TCP/IP协议族分为:应用层,传输层,网络层,数据链路层 应用层:向用户提供应用服务时的通讯的活动 传输层:提供处于网络连接中的两台计算机之间的数据传输 ...
- TCP协议及三次握手的过程
在这里插入代码片@TOC TCP协议以及三次握手 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 TCP协议以及三次握手 1.TCP协议是什么? 2.TCP协议的作用 3. ...
- (转)理论经典:TCP协议的3次握手与4次挥手过程详解
摘要: 本文将分别讲解经典的TCP协议建立连接(所谓的"3次握手")和断开连接(所谓的"4次挥手")的过程. 1.前言 尽管TCP和UDP都使用相同的网络层(I ...
- 理论经典:TCP协议的3次握手与4次挥手过程详解
理论经典:TCP协议的3次握手与4次挥手过程详解 https://blog.csdn.net/omnispace/article/details/52701752 转载于:https://www.cn ...
最新文章
- github 视觉测量_教你如何提高双目立体视觉系统的精度
- python二维数组初始化
- go检测出json中的duplicate object key_精读《如何比较 Object 对象》
- 1.1 sikuli 安装
- pyqt5使用按钮跳转界面
- 【leetcode】Majority Element
- LFS6.3安装全过程(一)
- JAX-WS(三)构建简单webservice部署到tomcat上
- java文件处理:文件流、上传、下载
- JFrame真正全屏
- ① 数据库介绍 及 关系型数据库的关系代数表达式
- html+css基础教程入门学习之CSS表格
- 阿里 P7 前端高级工程师,都需要掌握哪些技术栈?
- CSS 3D动态立体图形
- unity调用高德地图
- android源码结构分析
- 做自媒体如何获得更多的流量?
- 安装CPython解释器
- 低功耗蓝牙BLE之广播
- HTTP请求响应基础介绍
热门文章
- Python 3.8 已发布,现在是切换至新版本的好时机吗?
- selenium 处理cookie及switch的使用
- [Ubuntu] MySQL服务启动停止与用户登录
- Python回调函数的实现
- Python中的线程及用法
- python包的管理(添加的3种方式 删除包)
- Invoke and BeginInvoke BeginInvoke和EndInvoke方法 (转)
- linux创建sftp服务器,Linux Centos 6.6搭建SFTP服务器
- 交换机配置工具_Soce在FPGA上为任务关键型应用量身定制的IEEE 1588感知以太网交换机...
- leetcode —— 39. 组合总和