计算机网络基础总结

基本概念

mac地址、ip地址

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
在这里插入图片描述在这里插入图片描述

TCP/IP协议

计算机与网络设备之间如果要相互通信,双方就必须基于相同的方法.比如如何探测到通信目标.由哪一边先发起通信,使用哪种语言进行通信,怎样结束通信等规则都需要事先确定.不同的硬件,操作系统之间的通信,所有这一切都需要一种规则.而我们就将这种规则称为协议 (protocol).

在这里插入图片描述

TCP/IP 的分层管理

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与UDP的区别
TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)协议属于传输层协议,它们之间的区别包括:

  • TCP是面向连接的,UDP是无连接的;
  • TCP是可靠的,UDP是不可靠的;
  • TCP只支持点对点通信,UDP支持一对一、一对多、多对一、多对多的通信模式;
  • TCP是面向字节流的,UDP是面向报文的;
  • TCP有拥塞控制机制;UDP没有拥塞控制,适合媒体通信;
  • TCP首部开销(20个字节)比UDP的首部开销(8个字节)要大

面向报文
面向报文的传输方式是应用层交给UDP多长的报文,UDP发送多长的报文,即一次发送一个报文。因此,应用程序必须选择合适大小的报文。

面向字节流
虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序看成是一连串的无结构的字节流。TCP有一个缓冲,当应该程序传送的数据块太长,TCP就可以把它划分短一些再传送。

TCP和UDP分别对应的常见应用层协议

TCP对应的应用层协议

  • FTP:定义了文件传输协议,使用21端口。常说某某计算机开了FTP服务便是启动了文件传输服务。下载文件,上传主页,都要用到FTP服务。
  • Telnet:它是一种用于远程登陆的端口,用户可以以自己的身份远程连接到计算机上,通过这种端口可以提供一种基于DOS模式下的通信服务。如以前的BBS是-纯字符界面的,支持BBS的服务器将23端口打开,对外提供服务。
  • SMTP:定义了简单邮件传送协议,现在很多邮件服务器都用的是这个协议,用于发送邮件。如常见的免费邮件服务中用的就是这个邮件服务端口,所以在电子邮件设置-中常看到有这么SMTP端口设置这个栏,服务器开放的是25号端口。
  • POP3:它是和SMTP对应,POP3用于接收邮件。通常情况下,POP3协议所用的是110端口。也是说,只要你有相应的使用POP3协议的程序(例如Fo-xmail或Outlook),就可以不以Web方式登陆进邮箱界面,直接用邮件程序就可以收到邮件(如是163邮箱就没有必要先进入网易网站,再进入自己的邮-箱来收信)。
  • HTTP:从Web服务器传输超文本到本地浏览器的传送协议。

UDP对应的应用层协议

  • DNS:用于域名解析服务,将域名地址转换为IP地址。DNS用的是53号端口。
  • SNMP:简单网络管理协议,使用161号端口,是用来管理网络设备的。由于网络设备很多,无连接的服务就体现出其优势。
  • TFTP(Trival File Transfer Protocal):简单文件传输协议,该协议在熟知端口69上使用UDP服务。
    在这里插入图片描述

TCP的三次握手与四次挥手

具体过程如下:

  • 第一次握手:建立连接。客户端发送连接请求报文段,并将syn(标记位)设置为1,SquenceNumber(数据包序号)(seq)为x,接下来等待服务端确认,客户端进入SYN_SENT状态(请求连接);
  • 第二次握手:服务端收到客户端的 SYN 报文段,对 SYN 报文段进行确认,设置 ack(确认号)为 x+1(即seq+1) ;同时自己还要发送 SYN 请求信息,将 SYN 设置为1, seq为 y。服务端将上述所有信息放到 SYN+ACK报文段中,一并发送给客户端,此时服务器进入 SYN_RECV状态。
  • 第三次握手:客户端收到服务端的 SYN+ACK(确认符) 报文段;然后将 ACK 设置为y+1,向服务端发送ACK报文段,这个报文段发送完毕后,客户端和服务端都进入ESTABLISHED(连接成功)状态,完成TCP的三次握手。

SYN_RECV是指,服务端被动打开后,接收到了客户端的SYN并且发送了ACK时的状态。再进一步接收到客户端的ACK就进入ESTABLISHED状态。

在这里插入图片描述
当客户端和服务端通过三次握手建立了 TCP 连接以后,当数据传送完毕,断开连接就需要进行TCP的四次挥手。其四次挥手如下所示:

  • 第一次挥手:客户端设置seq和 ACK ,向服务器发送一个 FIN(终结)报文段。此时,客户端进入 FIN_WAIT_1状态,表示客户端没有数据要发送给服务端了。
  • 第二次挥手:服务端收到了客户端发送的 FIN 报文段,向客户端回了一个 ACK 报文段。
  • 第三次挥手:服务端向客户端发送FIN 报文段,请求关闭连接,同时服务端进入 LAST_ACK 状态。
  • 第四次挥手:客户端收到服务端发送的 FIN 报文段后,向服务端发送 ACK 报文段,然后客户端进入 TIME_WAIT 状态。服务端收到客户端的 ACK 报文段以后,就关闭连接。此时,客户端等待2MSL(指一个片段在网络中最大的存活时间)后依然没有收到回复,则说明服务端已经正常关闭,这样客户端就可以关闭连接了。
    在这里插入图片描述

如果有大量的连接,每次在连接,关闭都要经历三次握手,四次挥手,这显然会造成性能低下。因此。Http 有一种叫做 长连接(keepalive connections) 的机制。它可以在传输数据后仍保持连接,当客户端需要再次获取数据时,直接使用刚刚空闲下来的连接而无需再次握手。

在这里插入图片描述

为什么TCP链接需要三次握手,两次不可以么,为什么?

为了防止 已失效的链接请求报文突然又传送到了服务端,因而产生错误。
客户端发出的连接请求报文并未丢失,而是在某个网络节点长时间滞留了,以致延误到链接释放以后的某个时间才到达Server。这是,Server误以为这是Client发出的一个新的链接请求,于是就向客户端发送确认数据包,同意建立链接。若不采用“三次握手”,那么只要Server发出确认数据包,新的链接就建立了。由于client此时并未发出建立链接的请求,所以其不会理睬Server的确认,也不与Server通信;而这时Server一直在等待Client的请求,这样Server就白白浪费了一定的资源。若采用“三次握手”,在这种情况下,由于Server端没有收到来自客户端的确认,则就会知道Client并没有要求建立请求,就不会建立链接。

TCP协议如何来保证传输的可靠性

TCP提供一种面向连接的、可靠的字节流服务。其中,面向连接意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据之前必须先建立一个TCP连接。在一个TCP连接中,仅有两方进行彼此通信;而字节流服务意味着两个应用程序通过TCP链接交换8bit字节构成的字节流,TCP不在字节流中插入记录标识符。

Session 与 Cookie 的对比

  • 实现机制:Session的实现常常依赖于Cookie机制,通过Cookie机制回传SessionID;
  • 大小限制:Cookie有大小限制并且浏览器对每个站点也有cookie的个数限制,Session没有大小限制,理论上只与服务器的内存大小有关;
  • 安全性:Cookie存在安全隐患,通过拦截或本地文件找得到cookie后可以进行攻击,而Session由于保存在服务器端,相对更加安全;
  • 服务器资源消耗:Session是保存在服务器端上会存在一段时间才会消失,如果session过多会增加服务器的压力。
  • Application(ServletContext):与一个Web应用程序相对应,为应用程序提供了一个全局的状态,所有客户都可以使用该状态。

SQL 注入

SQL注入就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

SQL注入攻击的总体思路

  • 寻找到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注入问题。

  • 使用正则表达式过滤传入的参数
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Code_BinBin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值