三次握手

20199329 2019-2020-2 《网络攻防实践》第五周作业

戏子无情 提交于 2020-03-30 16:26:07
《网络攻防实践》第五周作业 一、前言 这个作业属于哪个课程: https://edu.cnblogs.com/campus/besti/19attackdefense 这个作业的要求在哪里: https://edu.cnblogs.com/campus/besti/19attackdefense/homework/10553 我在这个课程的目标是:学习网络攻防相关知识,提升专业技能 这个作业在哪个具体方面帮助我实现目标:学习TCP/IP网络协议攻击的原理和实践 二、知识点总结 1.网络协议攻击及其基本概念 学习网络安全、信息安全首先应当铭记心中的是五大安全属性:机密性,完整性,可用性、真实性和不可抵赖性。我们所有的攻击或者防守都是围绕这五大安全属性来展开的。那么作为攻击方来说,通常有以下几种攻击模式: 截获:以嗅探与监听技术为基础的被动攻击模式,获取网络通信双方的通信信息内容。 中断:以拒绝服务技术为基础的主动攻击模式,使网络通信和会话无法进行。 伪造:以欺骗为基础的主动攻击模式,假冒网络通信方的身份,欺骗通信对方达到恶意目的。 篡改:包括数据包篡改,中间人攻等技术的击主动攻击模式,网络通信工程的信息内容进行篡改,使得通信一方或双方接收到虚假消息。 但是作为一个攻击者,我们还缺少了安全缺陷,有了安全缺陷,我们才可以实施攻击。通常有以下几种TCP/IP网络协议栈安全缺陷与攻击技术:

TCP连接之报文首部

大憨熊 提交于 2020-03-30 16:06:38
在面试时,会经常被问到TCP报文的一些细节,可以说TCP报文是不少企业用来考察面试者对网络的掌握程度的一道题目。 TCP连接作为网络传输的一个环节,是不可或缺的一部分。例如,OSI七层模型的应用层HTTP就是基于TCP连接实现的。 TCP连接的三次握手和四次挥手机制相信是每个后台开发人员耳熟能详的知识点,那么关于TCP的报文细节以及背后的原理是怎么样的呢?TCP是怎样借助报文来实现三次握手和四次挥手呢?笔者通过阅读书本和加上自己的理解。通过本文,来谈谈TCP报文首部以及报文首部背后的原理。 首先先粘上一张TCP报文图 好了,下面介绍一些基础的内容 TCP虽然是面向字节流的,但TCP传送的数据单元却是报文段,一个TCP报文段分首部和数据两部分,其中很关键的就是TCP的报文头,TCP的全部功能都体现在首部中的各个字段中。 TCP报文段首部的前20个字节(上图有标识)是固定的,后面有4n字节(如果有选项最少为4字节)是根据需要添加的选项,所以TCP首部的最小长度是20字节。 1. 源端口号和目的端口号: 各2个字节,分别写入源端口号和目的端口号。端口就是我们熟悉的65536个套接字的端口号,显然,源端口号和目的端口号跟TCP的分用功能有着密切的关系,不同的应用使用不同的端口号,这样就可以互不干扰。而通信的双方的端口号必须相同,才能保证这一条通道是连接畅通的。 2.序列号(32位)

TCP/IP 协议栈初识

白昼怎懂夜的黑 提交于 2020-03-30 14:02:42
原文: 深入浅出 TCP/IP 协议栈 0. 简介   TCP/IP 协议栈是网络通信中一系列网络协议的综合,是核心骨架。它定义了电子设备接入因特网、以及数据在它们之间的传输方式,是一份标准。TCP/IP 协议采用 4 层结构,分别是 应用层、传输层、网络层和链路层 ,每一层都呼叫它的下一层所提供的协议来完成自己的需求。我们大部分的工作是在看得见摸得着的应用层上,所以下层的事情不用太操心;其次网络协议本身是体系复杂庞大,想要精通需要花费大量时间经历,但这不妨碍简单探索一下 一个主机上的数据要经过哪些过程才能发送到对方的主机上 。 0.5 物理介质   物理介质的重要性不言而喻,就是通过光纤、双绞线、无线电波等物理手段把电脑连接起来,电信号(0和1)在其中传输。物理介质的不同决定了电信号的出传输带宽、速率、传输距离以及抗干扰性等等。   TCP/IP 协议栈分为四层,每一层都由特定的协议与对方进行通信,协议之间的通信最终会被转化成 0、1电信号通过物理介质传输才能到达对方电脑。   下图是一张 TCP/IP 协议的基本框架:   每当通过 http 发起一个请求的时候,应用层、传输层、网络层和链路层的相关协议依次对该请求进行包装并携带对应的 首部 ,最终在链路层生成 以太网数据包 ,以太网数据包通过物理介质传输给对方主机,对方接收到数据包以后,然后再一层一层采用对应的协议进行拆包

计算机网络面试题(三)

假如想象 提交于 2020-03-30 13:42:41
计算机网络之传输层 ● 请你说明一下,TCP协议的4次握手。 考察点:TCP协议 参考回答: 由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。 TCP的连接的拆除需要发送四个包,因此称为四次挥手(four-way handshake)。客户端或服务器均可主动发起挥手动作,在socket编程中,任何一方执行close()操作即可产生挥手操作。 (1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送。 (2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。 (3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A。 (4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。 ● 谈一下,为什么tcp为什么要建立连接? 考察点:TCP 参考回答: 保证可靠传输。 ● 请你解释一下TCP为什么可靠一些 考察点:TCP 参考回答: 三次握手,超时重传,滑动窗口,拥塞控制。 ● 请说明一下哪种应用场景会使用TCP协议,使用它的意义 考察点:TCP协议 参考回答:

一次 Web 请求到底发生了什么

蓝咒 提交于 2020-03-30 13:42:09
一次 Web 请求到底发生了什么 一、从输入一个网址开始 当我们在浏览器输入一个网址,然后按下回车,接下来浏览器显示了页面。网速好的话这之间可能就一秒,但在这一秒内到底发生了什么? 本文主要内容是试图记录一个完整 Web 请求的详细过程,从用户在浏览器中输入 URL 地址说起,然后浏览器如何找到服务器地址的过程,并发起请求;分析请求在达反向代理服务器内部处理过程;最后到请求在服务器端处理完成后,浏览器渲染响应页面过程。 大致过程如下: Web请求的工作原理可以简单地归纳为: 浏览器通过 DNS 把域名解析成对应的IP地址; 根据这个 IP 地址在互联网上找到对应的服务器,建立 Socket 连接; 客户端向服务器发送HTTP协议请求包,请求服务器里的资源文档; 在服务器端,实际上还有复杂的业务逻辑:服务器可能有多台,到底指定哪台服务器处理请求,这需要一个负载均衡设备来平均分配所有用户的请求; 还有请求的数据是存储在分布式缓存里还是一个静态文件中,或是在数据库里; 当数据返回浏览器时,浏览器解析数据发现还有一些静态资源(如:css,js或者图片)时又会发起另外的请求,而这些请求可能会在CDN上,那么CDN服务器又会处理这个用户的请求。 客户端与服务器断开。由客户端解释HTML文档,在客户端屏幕上渲染图形结果。 一个 HTTP 事务就是这样实现的,看起来很简单,原理其实是挺负责的

TCP的长连接与短连接

被刻印的时光 ゝ 提交于 2020-03-30 04:02:14
1.TCP连接 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接,如图所示: (1)第一次握手:建立连接,客户端A发送SYN包(SYN=j)到服务器B,并进入SYN_SEND状态,等待服务器B确认. (2)第二次握手:服务器B收到SYN包,必须确认客户A的SYN(ACK=j+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器B进入SYN_RECV状态. (3)第三次握手:客户端A收到服务器B的SYN+ACK包,向服务器B发送确认包ACK(ACK=k+1),此包发送完毕,客户端A和服务器B进入ESTABLISHED状态,完成三次握手。 图1.TCP三次握手建立连接 2.TCP断开连接 由于TCP连接时全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。 (1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送 (2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1,和SYN一样,一个FIN将占用一个序号。 (3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A. (4

LINUX 内核的优化

旧时模样 提交于 2020-03-28 07:57:06
PS:在服务器硬件资源额定有限的情况下,最大的压榨服务器的性能,提高服务器的并发处理能力,是很多运维技术人员思考的问题。要提高 Linux 系统下的负载能力,可以使用 nginx 等原生并发处理能力就很强的web服务器,如果使用Apache的可以启用其Worker模式,来提高其并发处理能力。除此之外,在考虑节省成本的情况下,可以修改 Linux 的内核相关TCP参数,来最大的提高服务器性能。当然,最基础的提高负载问题,还是升级服务器硬件了,这是最根本的。 Linux系统下,TCP连接断开后,会以TIME_WAIT状态保留一定的时间,然后才会释放端口。当并发请求过多的时候,就会产生大量的TIME_WAIT状态的连接,无法及时断开的话,会占用大量的端口资源和服务器资源。这个时候我们可以优化TCP的内核参数,来及时将TIME_WAIT状态的端口清理掉。 本文介绍的方法只对拥有大量TIME_WAIT状态的连接导致系统资源消耗有效,如果不是这种情况下,效果可能不明显。可以使用netstat命令去查TIME_WAIT状态的连接状态,输入下面的组合命令,查看当前TCP连接的状态和对应的连接数量: #netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’ 这个命令会输出类似下面的结果: LAST_ACK 16 SYN

socket通信基础内容

亡梦爱人 提交于 2020-03-26 16:55:37
对 TCP/IP、 UDP、 Socket编程这些词你不会很陌生吧?随着网络技术的发展,这些词充斥着我们的耳朵。那么我想问: 1. 什么是 TCP/IP、 UDP? 2. Socket在哪里呢? 3. Socket是什么呢? 4. 你会使用它们吗? 什么是 TCP/IP 、 UDP ? TCP/IP( Transmission Control Protocol/Internet Protocol)即传输控制协议 /网间协议,是一个工业标准的协议集,它是为广域网( WANs)设计的。 UDP( User Data Protocol,用户数据报协议)是与 TCP相对应的协议。它是属于 TCP/IP协议族中的一种。 这里有一张图,表明了这些协议的关系。 图 1 TCP/IP协议族包括运输层、网络层、链路层。现在你知道 TCP/IP与 UDP的关系了吧。 Socket 在哪里呢? 在图 1中,我们没有看到 Socket的影子,那么它到底在哪里呢?还是用图来说话,一目了然。 图 2 原来 Socket在这里。 Socket 是什么呢? Socket是应用层与 TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中, Socket其实就是一个门面模式,它把复杂的 TCP/IP协议族隐藏在 Socket接口后面,对用户来说,一组简单的接口就是全部,让 Socket去组织数据

socket通信原理

China☆狼群 提交于 2020-03-26 16:50:35
1、什么是socket 我们知道进程通信的方法有管道、命名管道、信号、消息队列、共享内存、信号量,这些方法都要求通信的两个进程位于同一个主机。但是如果通信双方不在同一个主机又该如何进行通信呢?在计算机网络中我们就学过了tcp/ip协议族,其实使用tcp/ip协议族就能达到我们想要的效果,如下图(图片来源于《tcp/ip协议详解卷一》第一章1.3)           、                            图一 各协议所处层次 当然,这样做固然是可以的,但是,当我们使用不同的协议进行通信时就得使用不同的接口,还得处理不同协议的各种细节,这就增加了开发的难度,软件也不易于扩展。于是UNIX BSD就发明了socket这种东西,socket屏蔽了各个协议的通信细节,使得程序员无需关注协议本身,直接使用socket提供的接口来进行互联的不同主机间的进程的通信。这就好比操作系统给我们提供了使用底层硬件功能的系统调用,通过系统调用我们可以方便的使用磁盘(文件操作),使用内存,而无需自己去进行磁盘读写,内存管理。socket其实也是一样的东西,就是提供了tcp/ip协议的抽象,对外提供了一套接口,同过这个接口就可以统一、方便的使用tcp/ip协议的功能了。百说不如一图,看下面这个图就能明白了。                                         

java网络

*爱你&永不变心* 提交于 2020-03-26 09:57:26
这个图很形象的展示了OSI的五层架构之间的关系。 OSI被称为开放式互联,是国际标准组织制定的网络模型,本来是七层,后来把表现层和会话层加到应用层里面了。 那么五层模型中的每一层具体都是干什么的呢? 在标准的网络模型中,每一层都有它不同的用处,而且每一层都只提供向上和向下的接口,而不会垮层去通信。 在应用层这里,主要是为特定的应用程序提供数据传输服务。这一层是和程序员关系最紧密的一层,其中的代表性协议就是http,它的数据单位是报文。 在传输层,为进程提供数据传输服务。这一层主要为应用层的各种各样的协议提供通用的传输层协议。这里主要就是两个最简单的协议:TCP协议和UDP协议。这里传输是端到端,连接的是端口号,也就是进程。 在网络层,为主机提供数据传输服务。这一层主要将传输层的数据报封装成分组。经典协议就是IP协议。 在数据链路层,为同一链路的主机提供数据传输服务。将网络层传下来的分组封装成帧,这里主要是MAC地址。 在物理层,最底层,传输的是二进制比特流。 我们从网络层说起,一般网络层下面的就不去了解了。 网络层是整个互联网的核心。网络层向上只提供简单灵活的、无连接的。尽最大努力交互的数据报服务。 IP数据报的格式: 版本:众所周知,ip现在有两个版本,ipv4和ipv6,ipv4的地址已经用光了,ipv6地址非常多。 首部长度:上面每一行是4个字节,除去可变部分,最少有五行