window电脑在命令行模式下输入命令:
怎么进入命令行模式,按 win+R,输入cmd即可
输入ipconfig -all
其中物理地址指的就是mac地址、IPv4 地址就是ip。
mac地址也叫物理地址和局域网地址,主要用于确认网上设备的地址,类似于 身份证号 ,具有唯一标
识,每一个网卡制作完成之后就带有一个mac地址,永远都不会改变。
ip地址,类似于你的现住址,是标记你在网络中的具体位置,一个网卡的ip地址是可以改变的。
如果只是两台计算机,我能就可以使用双绞线(网线)连载一起,就能互相发送消息,组成一个小网络,相互捆在一起是因为要防止两根线之间的干扰
如果有多台计算机,可以使用hub,叫做集线器,一个电脑发送信息到集线器,集线器负责广播到其他的计算机。
由于集线器的问题,我们经常需要发送信息到特定的计算机而不是广播,所以一个新的设备就出现了叫
做交换机(switch)。
交换机可以记录每一个设备的弟子和接口的对应关系。
思考问题,交换机要将内容发送给指定的计算机,那么内部一定维护了一张表,记录了哪个电脑链接了
我的哪个口。交换机只能识别MAC地址。MAC地址是物理地址,ip地址交换机并不感兴趣。
思考一个问题:
交换机啊是怎么知道这个表的:
交换机效率比较高,而且可以进行桥接。
思考:使用交换机可以简历一个超大型的网络吗?
一般的交换机的地址表也就能存个几千个地址,当网络内的设备多起来以后,只要交换机找不到对应设
备就会广播,地址表如果满了,新地址还会覆盖就地址就会导致重新寻找效率比较低。所以有引入了一
个设备叫路由器,谁也听过的一个设备,一般家里都有。
注意:路由器不是猫,猫是调制解调器,调制解调器的作用是将进来的光信号转化为电信号
这里就有了网络的概念了。以上的几种,哪怕是交换机的桥接也没有设计ip地址这个概念,都是基于
mac地址进行数据传输。这里有了网络这个抽象概念之后ip地址就应用而生了,IP地址只要是用来表示
计算机的网络位置,他处于哪一个网络。IP地址和子网掩码共同帮助我们定位一个计算机在网络中的位
置。
ip地址和子网掩码其实是个32位的二进制数字
此时发送信息就会再包一个消息的头部
家用的路由器,有个wan口,有好几个lan口,wan口用来来接互联网端,lan用来连接家庭设备,这连
个口都有一个网卡,一个网卡属于互联网网络,ip可能是10.25.23.65,另一个属于内部网络比如
192.168.0.1。内部网络和外部互联网的数据转发由路由器内部实现。
路由器内有路由表。
网络内传输,有了网关的概念了。
ip不能直接进行传输,应为网络内的交换机不支持ip地址,所以通信要转化为mac地址,根据ip查找mac
地址。
非常重要的arp协议,要进行广播,问一问哪个mac地址的ip是192.168.0.5,他收到就会回应,
来一个栗子,192.168.100.100 发送信息到 192.168.200.101
192.168.100.100 -> 192.168.100.10
计算机与网络设备之间如果要相互通信,双方就必须基于相同的方法.比如如何探测到通信目标.由哪一边先发起通信,使用哪种语言进行通信,怎样结束通信等规则都需要事先确定.不同的硬件,操作系统之间的通信,所有这一切都需要一种规则.而我们就将这种规则称为协议 (protocol).
TCP/IP协议里最重要的一点就是分层。TCP/IP协议族按层次分别为 应用层,传输层,网络层,数据链路层,物理层。也可以是应用层,表示层,会话层,传输层,网络层,数据链路层,物理层
为什么要分层呢?
把 TCP/IP 协议分层之后,如果后期某个地方设计修改,那么就无需全部替换,只需要将变动的层替换。而且从设计上来说,也变得简单了。处于应用层上的应用可以只考虑分派给自己的任务,而不需要弄清对方在地球上哪个地方,怎样传输,如果确保到达率等问题。
物理层
参考模型的最低层,也是OSI模型的第一层,实现了相邻计算机节点之间比特流的透明传送,并尽可能地屏蔽掉具体传输介质和物理设备的差异,使其上层(数据链路层)不必关心网络的具体传输介质。
数据链路层(data link layer)
接收来自物理层的位流形式的数据,并封装成帧,传送到上一层;同样,也将来自上层的数据帧,拆装为位流形式的数据转发到物理层。这一层在物理层提供的比特流的基础上,通过差错控制、流量控制方法,使有差错的物理线路变为无差错的数据链路,即提供可靠的通过物理介质传输数据的方法。
网络层
将网络地址翻译成对应的物理地址,并通过路由选择算法为分组通过通信子网选择最适当的路径。
不难看出,TCP/IP 与 OSI 在分层模块上稍有区别。OSI 参考模型注重“通信协议必要的功能是什么”,而 TCP/IP 则更强调“在计算机上实现协议应该开发哪种程序”。
传输层(transport layer)
在源端与目的端之间提供可靠的透明数据传输,使上层服务用户不必关系通信子网的实现细节。在协议栈中,传输层位于网络层之上,传输层协议为不同主机上运行的进程提供逻辑通信,而网络层协议为不同主机提供逻辑通信,如下图所示。
实际上,网络层可以看作是传输层的一部分,其为传输层提供服务。但对于终端系统而言,网络层对它们而言是透明的,它们知道传输层的存在,也就是说,在逻辑上它们认为是传输层为它们提供了端对端的通信,这也是分层思想的妙处。
会话层(Session Layer)
会话层是OSI模型的第五层,是用户应用程序和网络之间的接口,负责在网络中的两节点之间建立、维持和终止通信。
表示层(Presentation Layer):数据的编码,压缩和解压缩,数据的加密和解密
表示层是OSI模型的第六层,它对来自应用层的命令和数据进行解释,以确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取。
应用层(Application layer):为用户的应用进程提供网络通信服务
TCP/UDP 都是传输层协议,但是两者具有不同的特效,同时也具有不同的应用场景。
TCP与UDP的区别
TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)协议属于传输层协议,它们之间的区别包括:
面向报文
面向报文的传输方式是应用层交给UDP多长的报文,UDP发送多长的报文,即一次发送一个报文。因此,应用程序必须选择合适大小的报文。
面向字节流
虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序看成是一连串的无结构的字节流。TCP有一个缓冲,当应该程序传送的数据块太长,TCP就可以把它划分短一些再传送。
TCP对应的应用层协议
UDP对应的应用层协议
具体过程如下:
SYN_RECV是指,服务端被动打开后,接收到了客户端的SYN并且发送了ACK时的状态。再进一步接收到客户端的ACK就进入ESTABLISHED状态。
当客户端和服务端通过三次握手建立了 TCP 连接以后,当数据传送完毕,断开连接就需要进行TCP的四次挥手。其四次挥手如下所示:
如果有大量的连接,每次在连接,关闭都要经历三次握手,四次挥手,这显然会造成性能低下。因此。Http 有一种叫做 长连接(keepalive connections) 的机制。它可以在传输数据后仍保持连接,当客户端需要再次获取数据时,直接使用刚刚空闲下来的连接而无需再次握手。
为了防止 已失效的链接请求报文突然又传送到了服务端,因而产生错误。
客户端发出的连接请求报文并未丢失,而是在某个网络节点长时间滞留了,以致延误到链接释放以后的某个时间才到达Server。这是,Server误以为这是Client发出的一个新的链接请求,于是就向客户端发送确认数据包,同意建立链接。若不采用“三次握手”,那么只要Server发出确认数据包,新的链接就建立了。由于client此时并未发出建立链接的请求,所以其不会理睬Server的确认,也不与Server通信;而这时Server一直在等待Client的请求,这样Server就白白浪费了一定的资源。若采用“三次握手”,在这种情况下,由于Server端没有收到来自客户端的确认,则就会知道Client并没有要求建立请求,就不会建立链接。
TCP提供一种面向连接的、可靠的字节流服务。其中,面向连接意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据之前必须先建立一个TCP连接。在一个TCP连接中,仅有两方进行彼此通信;而字节流服务意味着两个应用程序通过TCP链接交换8bit字节构成的字节流,TCP不在字节流中插入记录标识符。
SQL注入就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
SQL注入攻击的总体思路
SQL注入攻击实例
比如,在一个登录界面,要求输入用户名和密码,可以这样输入实现免帐号登录:
用户名: ‘or 1 = 1 --
密 码:
用户一旦点击登录,如若没有做特殊处理,那么这个非法用户就很得意的登陆进去了。这是为什么呢?下面我们分析一下:从理论上说,后台认证程序中会有如下的SQL语句:String sql = “select * from user_table where username=’ “+userName+” ’ and password=’ “+password+” ‘”; 因此,当输入了上面的用户名和密码,上面的SQL语句变成:SELECT * FROM user_table WHERE username=’’or 1 = 1 – and password=’’。分析上述SQL语句我们知道,
username=‘ or 1=1 这个语句一定会成功;然后后面加两个-,这意味着注释,它将后面的语句注释,让他们不起作用。这样,上述语句永远都能正确执行,用户轻易骗过系统,获取合法身份。
应对方法
使用预编译手段,绑定参数是最好的防SQL注入的方法。目前许多的ORM框架及JDBC等都实现了SQL预编译和参数绑定功能,攻击者的恶意SQL会被当做SQL的参数而不是SQL命令被执行。在mybatis的mapper文件中,对于传递的参数我们一般是使用#和KaTeX parse error: Expected 'EOF', got '#' at position 11: 来获取参数值。当使用#̲时,变量是占位符,就是一般我们…时,变量就是直接追加在sql中,一般会有sql注入问题。