计算机网络

TCP/IP协议
TCP/IP协议不是“一个”协议,而是一个协议群的统称。里面包括了IP协议,IMCP协议,TCP协议,以及我们更加熟悉的http、ftp、pop3协议等。互联网进行通信时,需要相应的网络协议,TCP/IP就是为使用互联网而开发制定的协议族,是一系列互联网协议的统称,因为TCP和IP在这一系列协议中比较重要,所以就以它们来命名了。

TCP/IP协议为什么分层?
TCP/IP协议族包含了很多协议,比如管文件打包的、管网络传输的,管接收的等,按照他们的作用不同,也为了彼此间更好的分工协作,从而把问题简单化,划分为了4大类,而这4类之间也不是简单的分类,而是后者利用前者提供的服务的基础上,同时向其后的类别提供服务,就像楼房一样是分层的,但是本层内部的更改不会影响到其他层,所以更一般意义上,更形象的说TCP/IP协议分为4层协议,而不说分为4类协议。

TCP/IP协议的4层(从上到下)
应用层
应用层处于TCP/IP协议的最上层,有http,ftp等协议,是离用户最近的层。
应用层的任务是通过应用进程间的交互来完成特定网络应用。应用层协议定义的是应用进程(进程:主机中正在运行的程序)间的通信和交互的规则。
应用层决定了向用户提供应用服务时通信的活动,接收传输层传送过来的TCP数据包加以处理。TCP/IP 协议族内预存了各类通用的应用服务。比如,FTP(FileTransfer
Protocol,文件传输协议)和 DNS(Domain Name System,域名系统)服务就是其中两类。HTTP 协议也处于该层。
我们把应用层交互的数据单元称为报文。


传输层
传输层提供处于网络连接中的两台计算机进程之间的数据传输服务。在传输层有两个性质不同的协议:TCP(Transmission ControlProtocol,传输控制协议)和UDP(User Data Protocol,用户数据报协议)。


网络层(又名网络互连层)
网络层用来处理在网络上流动的数据包,包含重要的IP协议,它负责对数据加上IP地址和其他的信息以确定传输的目标,提供两台计算机主机之间的数据传输服务。数据包是网络传输的最小数据单位。
网络层规定了通过怎样的路径(所谓的传输路线)到达对方计算机,并把数据包传送给对方。与对方计算机之间通过多台计算机或网络设备进行传输时,网络层所起的作用就是在众多的选项内选择一条传输路线。
IP 协议定义了一套自己的地址规则,称为 IP 地址。它实现了路由功能,允许某个局域网的 A 主机,向另一个局域网的 B 主机发送消息。
但是网络层是不可靠的协议,并不保证数据包的完成,没有提供一种检测和处理数据未传达情况下的处理机制,比如路由器缓存满了,新来的数据就会丢失。这种可靠性传输机制是靠传输层(TCP协议)控制的。


链路层(又名数据链路层,网络接口层)
用来处理连接网络的硬件部分,为IP模块发送和接收IP数据包。包括控制操作系统、硬件的设备驱动、NIC(Network Interface Card,网络适配器,即网卡),及光纤等物理可见部分(还包括连接器等一切传输媒介),如负责0、1比特流与物理设备电压高低、光的闪灭之间的互换。
硬件上的范畴均在链路层的作用范围之内。
链路层的作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错等。
两台主机之间的数据传输,总是在一段一段的链路上传送的,这就需要使用专门的链路层的协议。在两个相邻节点之间传送数据时,数据链路层将网络层交下来的IP数据报组装成帧,在两个相邻节点间的链路上传送帧。每一帧包括数据和必要的控制信息(如同步信息,地址信息,差错控制等)。


兼顾到OSI的7层结构还可以划分出一个物理层
物理层规定了激活、维持、关闭通信端点之间的机械特性、电气特性、功能特性以及过程特性。物理层为上层协议提供了一个传输数据的物理媒介。物理层是计算机上对网络硬件进行管理和协调的协议。
物理层的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异。

工作过程:

OSI 7层网络
物理层:通过媒介传输比特,确定机械及电气规范(比特Bit)
数据链路层:将比特组装成帧和点到点的传递(帧Frame)
网络层:负责数据包从源到宿的传递和网际互连(包PackeT)
传输层:提供端到端的可靠报文传递和错误恢复(段Segment)
会话层:建立、管理和终止会话(会话协议数据单元SPDU)
表示层:对数据进行翻译、加密和压缩(表示协议数据单元PPDU)
应用层:允许访问OSI环境的手段(应用协议数据单元APDU)
OSI的物理层和数据链路层2个在TCP/IP协议中合称为网络接口层,会话层+表示层+应用层3个在TCP/IP协议中合称为应用层。
 
传输层与网络层区别
网络层协议负责的是提供主机间的逻辑通信
传输层协议负责的是提供进程间的逻辑通信。
 
数据在各层之间的单位
物理层: 比特(bit)
链路层: 帧(frame)
网络层:数据包(packet)
传输层: 数据段(segment)
 
数据包
在 TCP / IP 协议中数据先由上往下(应用层->网络接口层)将数据装包,然后由下往上(网络接口层->应用层)拆包。
在装包的时候,每一层都会增加一些信息用于传输,这部分信息就叫报头,当上层的数据到达本层的时候,会将数据和上层的报头一起作为数据,加上本层的报头打包在一起,继续往下传递.
在拆包的时候,每一层将本层需要的报头读取后,就将剩下的数据往上传。
 
IP地址(互联网地址)
网络上每一个节点都必须有一个独立的Internet地址(也叫做IP地址)。通常使用的IP地址是一个32bit的数字,也就是我们常说的IPv4标准,将32位的 IP 地址以每8位为一组,分成4组,每组以 “.” 隔开,再将每组数转换成十进制数,也就是常见的255.255.255.255的样式。
IP 地址由网络标识和主机标识两部分标识组成,常用的B类IP地址一般前两段为网络标识,后两段为主机标识,同一网段内的主机的网络标识一样。具体的网络地址和主机地址需要使用子网掩码解释出来。
 
广播地址
广播地址用于在同一个链路中相互连接的主机之间发送数据包。将 IP 地址中的主机地址部分全部设置为 1,就成了广播地址。
广播分为本地广播和直接广播两种。在本网络内的广播叫做本地广播;在不同网络之间的广播叫做直接广播。
 
慢启动和 ACK
服务器发送数据包,当然越快越好,但是,发得太快,就有可能丢包。带宽小、路由器过热、缓存溢出等许多因素都会导致丢包。线路不好的话,发得越快,丢得越多。
为了找到线路的理想速率,TCP设计了一个慢启动(slow start)机制。开始的时候,发送得较慢,然后根据丢包的情况,调整速率:如果不丢包,就加快发送速度;如果丢包,就降低发送速度。
默认情况下,接收方每收到两个 TCP 数据包,就要发送一个确认消息。”确认”的英语是 acknowledgement,所以这个确认消息就简称 ACK。
ACK包含期待要收到下一个数据包的编号和接收方的接收窗口的剩余容量两个信息。
由于 TCP 通信是双向的,所以双方都需要发送 ACK。
 
子网掩码
子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。
用于子网掩码的位数决定于可能的子网数目和每个子网的主机数目。
 
域名系统(DNS)
域名系统是一个分布的数据库,它提供将主机名(就是网址啦)转换成IP地址的服务。
 
端口号(port)
端口号是用在TCP,UDP上的一个逻辑号码,并不是一个硬件端口,用来识别同一台计算机中进行通信的不同应用程序。因此,它也被称为程序地址。我们平时说把某某端口封掉了,也只是在IP层次把带有这个号码的IP包给过滤掉了而已。
 
TCP和UDP
TCP全称是 Transmission Control Protocol(传输控制协议),提供的是面向连接、可靠的字节流服务。就是TCP将准备发送的数据分成若干段,并有顺序编码,发送的时候这些数据段可以不按照顺序到达,可以一次发送完,也可以分好几次分别发送,但是接收方的TCP可以检测到哪些数据段缺失,会要求发送发重传,接收方也可以一次或分多次接收,全部接收OK之后,会再把这些数据段按顺序组合并解析出来给网络层使用。所以说 TCP 是基于数据流模式的。
UDP不提供复杂的控制机制,利用 IP 提供面向无连接的通信服务。
并且它是将应用程序发来的数据在收到的那一刻,立即按照原样发送到网络上的一种机制。即使是出现网络拥堵的情况,UDP 也无法进行流量控制等避免网络拥塞行为。
此外,传输途中出现丢包,UDP 也不负责重发。甚至当包的到达顺序出现乱序时也没有纠正的功能。
UDP 常用于以下几个方面:
1.包总量较少的通信(DNS、SNMP等);
2.视频、音频等多媒体通信(即时通信);
3.限定于 LAN 等特定网络中的应用通信;
4.广播通信(广播、多播)。
UDP是用户数据报协议,是一个简单的面向无连接的协议,是基于报文的。无连接特性决定了只要知道目的IP,任何主机都可以向该地址发数据,数据是以报文为单位的,报文是一个整体,发送了几个报文,接收方就要分几次接收,报文与报文之间不会合并,如果一次性读取超过一个报文的数据,就会出错。
TCP 与 UDP 的区别相当大。它充分地实现了数据传输时各种控制功能,可以进行丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。而这些在 UDP 中都没有。
此外,TCP 作为一种面向有连接的协议,只有在确认通信对端存在时才会发送数据,从而可以控制通信流量的浪费。
根据 TCP 的这些机制,在 IP 这种无连接的网络上也能够实现高可靠性的通信( 主要通过检验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现)。
 
TCP三次握手建立连接,四次挥手断开连接
TCP 提供面向有连接的通信传输。面向有连接是指在数据通信开始之前先做好两端之间的准备工作。
所谓三次握手是指建立一个 TCP 连接时需要客户端和服务器端总共发送三个包以确认连接的建立。
三次握手(客户端发送建立连接请求,服务器发送“是否确认连接”请求,客户端发送“确认连接”消息)
需要三次握手而不是两次握手是为了防止已失效的连接请求报文突然又传送到了服务端,因而产生错误。
如果第三次握手失败会怎样?
这种情况下,请求方(不管是客户端还是服务器)认为自己发出了ACK信号,认为接收方准备OK了,但是接收方并没有收到请求方发送的确认连接信息,处于等待ACK信号状态。 那么请求方会发送数据包,如果这个数据包没有继续像ACK信号那样丢失,则通信不会有影响,因为这个数据包中是包含一个ACK信号的。 如果数次发送仍然丢失,则服务器会根据自己的超时设置,执行关闭连接的挥手动作。
四次挥手即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。
四次挥手(客户端向服务器发送断开连接请求,服务器向客户端发送可以断开连接消息。 此时TCP连接处于半连接状态。 服务器向客户端发送断开连接请求,客户端向服务器发送可以断开连接消息。
为什么需要四次挥手而不是两次挥手是因为TCP连接是双向的,各自的发送通道和接收通道需要分别关闭。
 
主要的协议
Internet Protocol 协议
IP(Internet Protocol)网际协议位于网络层,IP 协议的作用是把各种数据包传送给对方。而要保证确实传送到对方那里,则需要满足各类条件。其中两个重要的条件是 IP 地址和 MAC地址(Media Access Control Address)。
IP 地址指明了节点被分配到的地址,MAC 地址是指网卡所属的固定地址。IP 地址可以和 MAC 地址进行配对。IP 地址可变换,但 MAC地址基本上不会更改。
IP 间的通信依赖 MAC 地址。在网络上,通信的双方在同一局域网(LAN)内的情况是很少的,通常是经过多台计算机和网络设备中转才能连接到对方。而在进行中转时,会利用下一站中转设备的MAC地址来搜索下一个中转目标。这时,会采用 ARP 协议(AddressResolution Protocol)。ARP是一种用以解析地址的协议,根据通信方的 IP 地址就可以反查出对应的 MAC 地址。
 
TCP协议
按层次分,TCP 位于传输层,提供可靠的字节流服务。
所谓的字节流服务(Byte Stream Service)是指,为了方便传输,将大块数据分割成以报文段(segment)为单位的数据包进行管理。而可靠的传输服务是指,能够把数据准确可靠地传给对方。一言以蔽之,TCP协议为了更容易传送大数据才把数据分割,而且 TCP 协议能够确认数据最终是否成功送达到对方。
为了准确无误地将数据送达目标处,TCP 协议采用了三次握手(three-way handshaking)策略。
 
DNS协议    
DNS(Domain Name System)服务是和 HTTP 协议一样位于应用层的协议。它提供域名到 IP 地址之间的解析服务。
用户通常使用域名来访问对方的计算机,而不是直接通过IP地址访问,这更加符合人们的使用习惯。如www.baidu.com就是一个域名。那么如何从域名对应到实际的IP地址呢,就是使用DNS协议。DNS 协议提供通过域名查找 IP 地址,或逆向从 IP 地址反查域名的服务。
 
交换机、猫、路由器、网关
交换机(Switch)是一种基于MAC(网卡的硬件地址)识别,为始发者和接收者之间建立临时的联网路径。工作在链路层(网络接口层)。
路由器(Router)亦称选径器,是在网络层实现互连的设备。可以连接多个网络或网段的网络设备,包括局域网和广域网。工作在网络层。
调制解调器(英文名Modem),俗称“猫”,是一种信号转换器,它能把计算机的数字信号翻译成可沿普通电话线传送的脉冲信号,而这些脉冲信号又可被线路另一端的另一个调制解调器接收,并译成计算机可懂的语言。
网关:一个链接两种不同协议簇的进程,为某一个特定的应用提供服务。比如用于连接一个局域网和互联网。
交换机根据MAC地址寻址,路由器根据IP地址寻址; 交换机的转发速度快,路由器转发速度相对较慢; 路由器比交换机功能多,如可以拨号上网、防火墙功能
数据传输流程:交换机->(网关)->猫->路由器->计算机
 
Http和Https的区别
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法,位于应用层。
Http协议运行在TCP之上,明文传输,客户端与服务器端都无法验证对方的身份;
Https在TCP基础上添加来SSL(Secure Socket Layer),是添加了加密和认证机制的HTTP。
二者区别:
Https通信会由于加减密处理消耗更多的CPU和内存资源
Https通信需要证书,而证书一般需要向认证机构购买
 
对称加密与非对称加密
在网络上传输的数据需要经过加密,防止信息被别人非法截取泄密,加密方式分为对称加密和非对称加密。
对称密钥加密是指加密和解密使用同一个密钥的方式,这种方式存在的最大问题就是密钥发送问题,即如何安全地将密钥发给对方;
非对称加密是指使用一对非对称密钥,即公钥和私钥,公钥可以随意发布,但私钥只有自己知道。发送密文的一方使用对方的公钥进行加密处理,对方接收到加密信息后,使用自己的私钥进行解密。
由于非对称加密的方式不需要发送用来解密的私钥,所以可以保证安全性;但是和对称加密比起来,它非常的慢,所以我们还是要用对称加密来传送消息,但对称加密所使用的密钥我们可以通过非对称加密的方式发送出去。
 
Get与POST的区别
HTTP协议请求包括Get和POST请求。
从功能上讲,GET一般用来从服务器上获取资源,POST一般用来更新服务器上的资源;
从REST服务角度上说,GET是幂等的,即读取同一个资源,总是得到相同的数据,而POST不是幂等的,因为每次请求对资源的改变并不是相同的;进一步地,GET不会改变服务器上的资源,而POST会对服务器资源进行改变;
从请求参数形式上看,GET请求的数据会附在URL之后,即将请求数据放置在HTTP报文的 请求头 中,以?分割URL和传输数据,参数之间以&相连。特别地,如果数据是英文字母/数字,原样发送;否则,会将其编码;而POST请求会把提交的数据则放置在是HTTP请求报文的 请求体 中,明文不可见。
就安全性而言,POST的安全性要比GET的安全性高,因为GET请求提交的数据将明文出现在URL上,而且POST请求参数则被包装到请求体中,相对更安全。
从请求的大小看,GET请求的长度受限于浏览器或服务器对URL长度的限制,允许发送的数据量比较小,而POST请求则是没有大小限制的。
 
浏览器中输入URL到网页显示的过程
第一步,解析域名,找到主机IP
先从自身浏览器缓存的DNS中查找对应IP; 如果查找不到,就会去本地hosts文件中查找; 还找不到,会借助网络路由器的DNS缓存查找。
第二步,浏览器与网站建立TCP连接
浏览器利用IP直接与网站主机通信,通过三次握手,建立通信连接。
第三步,浏览器发起HTTP请求
浏览器向目标IP主机发起一个HTTP-GET方法报文请求。请求中包含访问的URL和其他如浏览器操作系统信息等。
第四步,服务器处理请求并返回HTML响应。
第五步,浏览器接收服务器响应,解析并渲染视图,显示HTML页面
 
计算机间两种通信方式
一种是客户机-服务器方式,一种是P2P方式。
客户机-服务器体系最大特点是“一台服务器 — 多个客户机”,客户机通常充当发起请求的角色,而服务器则通常充当接收请求,提供响应。
P2P体系结构中进行通信的可能是两台用户的电脑,两个手机,或者一台电脑和一个手机,总之,进行通信的任意一对都被称为“对等方”,P2P体系结构对基础设施服务器有最小的依赖, 这是和基础设施密集的客户机/服务器体系结构是截然相反的。
 
ARP(地址解析协议)工作原理
ARP位于网络层,完成了从IP地址(IP地址是网络层和以上各层使用的地址,是一种逻辑地址)到物理地址(物理地址是数据链路层和物理层使用的地址)的映射。
1:首先,每个主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系。
2:当源主机要发送数据时,首先检查ARP列表中是否有对应IP地址的目的主机的MAC地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送ARP数据包,该数据包包括的内容有:源主机IP地址,源主机MAC地址,目的主机的IP地址。
3:当本网络的所有主机收到该ARP数据包时,首先检查数据包中的目的IP地址是否是自己的IP地址,如果不是,则忽略该数据包;如果是,则首先从数据包中取出源主机的IP和MAC地址写入到ARP列表中,如果已经存在,则覆盖,然后将自己的MAC地址写入ARP响应包中,告诉源主机自己是它想要找的MAC地址。
4:源主机收到ARP响应包后。将目的主机的IP和MAC地址写入ARP列表,并利用此信息发送数据。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。
广播发送ARP请求,单播发送ARP响应。
 
SQL 注入
SQL(Structured Query Language,结构化查询语言)是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
SQL注入就是把SQL命令插入到提交的Web表单中,或这输入域名(或页面)请求的查询字符串中,最终达到欺骗服务器执行恶意的SQL命令。
SQL注入攻击的总体思路:寻找到SQL注入的位置; 判断服务器类型和后台数据库类型; 针对不同的服务器和数据库特点进行SQL注入攻击,SQL注入攻击的应对方法:
参数绑定:使用预编译手段,绑定参数是最好的防SQL注入的方法。攻击者的恶意SQL会被当做SQL的参数而不是SQL命令被执行。
正则表达式:使用正则表达式过滤传入的参数
 
XSS 攻击
XSS是一种经常出现在web应用中的计算机安全漏洞,XSS是指恶意攻击者利用网站没有对用户提交数据进行转义处理或者过滤不足的缺点,进而添加一些脚本代码嵌入到web页面中去,使别的用户访问都会执行相应的嵌入代码,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。
解决办法:不信任任何客户端提交的数据,只要是客户端提交的数据就应该先进行相应的过滤处理然后方可进行下一步的操作。防止攻击者在数据中插入一些符号以及javascript代码,使得这些数据成为应用代码中的一部分而被执行。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值