| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> 计算机网络 -> 正文阅读 |
|
[网络协议]计算机网络 |
一、三次握手和四次挥手????????TCP处于传输层,作用是提供可靠的字节流服务,为了将数据准确无误的送到目的地,采用三次握手策略。 ? ? ? ? 1.三次握手过程: ? ? ? ? ? ? ? ? (1)发送端首先发送一个带有SYN(synchronized)标志的数据包给接收方 ? ? ? ? ? ? ? ? (2)接收方接收后 ,回传一个带有SYN/ACK标志的数据包给发送方,表明我收到了 ? ? ? ? ? ? ? ? (3)发送方接收后,回传一个带有ACK标志的数据包给接收方,表明我知道了,“握手”结束。 ? ? ? ? 2.两次握手不行吗? ? ? ? ? ? ? ? ? 不行,因为客户端和服务端都要确认连接,首先客户端发送请求,然后服务端针对请求作出回应,并同意建立连接,最后针对服务端的请求进行确认,连接完成。少一次都无法完成确认。 ? ? ? ? 3.一些三次握手的问题 ? ? ? ? ISN代表什么?意义何在? ????????ISN,发送方的字节数据编号的原点,让对方生成一个合法的接收窗口。 ????????ISN是固定不变的吗? ????????动态随机。 ????????ISN为何要动态随机? ????????增加安全性,为了避免被第三方猜测到,从而被第三方伪造的RST报文Reset。 ????????还有吗? ????????ISN动态随机使得每个tcp session的字节序列号没有重叠,如果出现tcp五元组冲突这种极小?概率情况的发生,一个session的数据也不会被误认为是另一个session的。 ????????刚才你提到第三方可以伪造RST报文,需要满足什么条件才能得逞? ????????需要sequence number 位于对方的合法接收窗口内。 而由于ISN是动态随机的,猜出对方合法接收窗口难度加大。 ????????如果ISN = 0,那么猜出的难度就大大降低。 ????????三次握手的第一次可以携带数据吗?为何? ????????不可以,三次握手还没有完成。 ????????对方难道不可以将数据缓存下来,等握手成功再提交给应用程序? ????????这样会放大SYN FLOOD攻击。 ????????如果攻击者伪造了成千上万的握手报文,携带了1K+ 字节的数据,而接收方会开辟大量的缓存来容纳这些巨大数据,内存会很容易耗尽,从而拒绝服务。 ????????第三次可以携带数据吗?为何? ????????可以。 ????????能够发出第三次握手报文的主机,肯定接收到第二次(服务器)握手报文,对吗? ????????因为伪造IP的主机是不会接收到第二次报文的。 ????????所以,能够发出第三次握手报文的,应该是合法的用户。 ????????尽管服务器侧的状态还没有“established”,接收到第三次握手的瞬间,状态就会切换为“established”,里面携带的数据按照正常流程走就好。 ????????看到有人说,只看到过TCP状态位为 ’FIN +ACK’,但从来没有看过状态位只有 ‘FIN’,你应该怎样给他解释? ????????RFC793明确规定,除了第一个握手报文SYN除外,其它所有报文必须将ACK = 1。 ????????很好,RFC规定的背后肯定有合理性的一面,能否深究一下原因? ????????TCP作为一个可靠传输协议,其可靠性就是依赖于收到对方的数据,ACK对方,这样对方就可以释放缓存的数据,因为对方确信数据已经被接收到了。 ????????但TCP报文是在IP网络上传输,丢包是家常便饭,接收方要抓住一切的机会,把消息告诉发送方。最方便的方式就是,任何我方发送的TCP报文,都要捎带着ACK状态位。 ????????ACK状态位单独能承担这个消息传递的任务吗? ????????不能!需要有 Acknowledge Number配合才行。 ????????如果我方发出的Acknowledge Number == 10001,那意味着序列号10000及之前的字节已经成功接收。 ????????如果对方占据字节序列号10000是应用层数据,那么就是确认应用层数据。 ????????如果对方占据字节序列号10000是’FIN’状态位,那么就是确认接收到对方的’FIN’。 ? ? ? ? 4.四次握手过程 ? ? ? ? 1)主动断开方(客户端/服务端)-发送一个 FIN,用来关闭主动断开方(客户端/服务端)到被动断开方(客户端/服务端)的数据传送 ? ? ? ? 2)被动断开方(客户端/服务端)-收到这个 FIN,它发回一 个 ACK,确认序号为收到的序号加1 。和 SYN 一样,一个 FIN 将占用一个序号 ? ? ? ? 3)被动点开方(客户端/服务端)-关闭与主动断开方(客户端/服务端)的连接,发送一个FIN给主动断开方(客户端/服务端) ? ? ? ? 4)主动断开方(客户端/服务端)-发回 ACK 报文确认,并将确认序号设置为收到序号加1 ? ? ? ? 5.一些概念: ? ? ? ? FIN:请求释放连接 ? ? ? ? SYN:请求连接标志 ? ? ? ? ACK:确认报文 ? ? ? ? 6.为什么握手是三次,挥手是四次? ? ? ? ?建立连接时,服务器在Listen状态下,收到建立连接的SYN报文,把ACK和SYN一起发送给客户端; ? ? ? ?释放连接时,被动方服务器,突然收到主动方客户端释放连接的请求时并不能立即释放连接,因为还有必要的数据需要处理,所以服务器先返回ACK确认收到报文,经过CLOSE-WAIT阶段准备好释放连接之后,才能返回FIN释放连接报文。 二、TCP和UDP的区别? ? ? ? (1)TCP是传输控制协议,UDP是用户数据表协议 ? ? ? ? (2)TCP长连接,UDP无连接 ? ? ? ? (3)UDP程序结构较简单,只需发送,无需接收 ? ? ? ? (4)TCP安全可靠,保证数据的正确性、顺序性;UDP不安全,可能丢失数据 ? ? ? ? (5)TCP适合少量数据,UDP适合大量数据传输 ? ? ? ? (6)TCP速度慢,UDP速度快 三、TCP粘包怎么产生的?? ? ? ? (1)发送方需要等缓冲区满才能发出去,造成粘包 ? ? ? ? (2)接收方不能及时接收缓冲区的包,造成粘包 四、什么是XSS攻击?怎么防御?? ? ? ? XSS攻击,即跨站脚本攻击。指浏览器渲染DOM的时候将文本信息解析成JS脚本从而引发JS脚本注入,引发一系列安全问题。 ? ? ? ? 防御措施:只要我们使用HTML编码将浏览器需要渲染的信息编码后,浏览器在渲染DOM元素的时候,会自动解码需要渲染的信息,将上述信息解析成字符串而不是JS脚本,就可以避免这个问题。 ? ? ? ? 手段: ????????(1)获取用户的输入,不用innerHtml,用innerText. |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 17:20:39- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |