title: 计算机网络2
date: 2019-08-12 11:08:46
tags:
typora-copy-images-to: ./计算机网络2
传输层
传送层的特点是什么?用来解决那些问题?有哪些主要特点?在这中间又出现了什么情况?
基础知识
- 传输层提供应用之间的逻辑通信,使应用之间可以忽略下层的数据和协议,看起来是两个应用之间直接进行沟通.
- 网络层提供不同主机之间的沟通.传输层提供不用应用间的沟通.
- 传输层分TCP协议和udp协议.udp不需要建立链接,是不可靠交付,但报文简单效率高,用于视频游戏等.tcp需要建立链接,提供可靠服务,但是开销大,占用资源多.适用于邮件,通信等.
- 每个应用在主机中有特定的端口,传输层通过端口将数据发送给应用进程.这是一种软件指定的端口.端口只对计算机本地有用.端口号从0-65536,16位
UDP
概述
- udp 是无连接的,发送方不管接收方是否能收到.
- udp使用尽最大努力交付.但不保证一定能收到.这使主机不用维持负责的连接状态
- udp是面向报文的,应用层发下来的报文,udp加上首部就向下转发,不进行别的处理.类似把应用层的报文透传给网络层
- udp没有拥塞控制,因此当网络拥挤时udp也同样按原来方式发送数据.不管是否能到达.
- udp支持1对1,1对多,多对1,多对多的交互通信
- udp首部只有8个字节,很小
- udp在通信时不需要建立socket 套接字连接
udp格式
源端口,发送方进程的端口号,也是发送方接受消息的端口号
目的端口,接收方进程的端口号.
长度 udp用户数据报的长度,最小是8(只有首部)
校验和,检查udp用户数据报在传输中是否有错.会把首部和数据部分一起进行校验
伪首部,用来计算校验和而添加的数据,并不会真正封装到数据报中
tcp
概述
tcp是面向连接的,因此会先建立tcp连接,在进行通信
tcp只能是点对点的通信,因为要先建立链接
tcp是可靠交付,保证接收端数据无差错不丢失不重复且按序到达
tcp提供全双工通信,允许双方任何时候都能发送数据,发送接收端都有缓存
tcp以流的方式传递数据.并不关心用户发送的是什么
tcp报文不需要用户控制长度,tcp自己会根据网络情况决定报文长度,而udp需要应用层设定报文长度.
tcp通过socket套接字进行连接, socket=(ip地址:端口号) 双方的socket就可以确定一条tcp连接.
Tcp可靠传输原理
停止等待协议,就是发送方每发送一个分组数据,就停止发送,等待接收方确认该分组到达.然后发送方再次发送.
这里又有几个问题.
发送包丢失
数据包没到达接收方就丢失,那么接收方不会有确认消息,发送方则在等待一段时间后进行重复,这要求1.发送方对分组进行缓存,直到收到确认消息.2.发送的数据报要有编号,知道哪个到达哪个丢失3.超时时间要设置合理.比数据传输的往返时间要长一点
确认包丢失
接收方收到数据,返回的确认包丢失,则发送方会重复发送该包.再次收到时,接收方要丢弃新数据包(因为同样的已经收到了),并再次发送确认消息,防止发送方继续发送相同的包.
确认迟到
确认方收到包,返回的确认消息超过了上边设定的超时时间.处理方式和2一样.
信道利用率
每次只发送一个包,在等待确认,导致信道空闲时间太长,利用率低.因此采用流水线方式,一次发送多个包,等待多个包的确认信息,在继续发送多个包.
tcp报文格式
- 源端口,目的端口 发送接收方的程序进程的端口号
- 序号,tcp是流的方式,每个字节都编号,本序号是指当前报文发送的数据的字节的序号(比如300表示发送的是第300字节开始的内容)用来告诉接收方本报文是哪段数据
- 确认号,接收方用来发送确认消息, 若确认号 =n,表示n以前的消息全部收到了
- 数据偏移: tcp首部长度.
- ack 确认标识,当ack=1时确认号字段才有效.
- urg 表示这是紧急报文.类似优先级,用来加快传输
- push 接收方收到push标记,就尽快把数据交给上层应用而不等待接收缓存填满
- syn 同步信号,建立链接时使用,表示这是链接请求(发送方)或链接同意(接收方)报文
- fin 结束信号,用来中止链接
- rst 复位信号,表示链接出错,需要断开重连
- 窗口,发送方通知接收方的.发送方能接受的数据量大小.
- 检验和,验证首部和数据
- 填充字段,添加一些可选选项,如最大报文长度MSS,窗口扩大选项,时间戳等.
tcp可靠传输实现
滑动窗口
滑动窗口就是朝一个方向(数据方向)不断移动的数据报序号窗口,指允许同时发送的数据的范围.把数据想象成链式的,A发消息给B.当收到B的确认消息后,A不断的向前推进发送窗口.当网络比较好时,滑动窗口会增大,网络不好时滑动窗口会变小.窗口的后沿由B的确认消息的序号决定,前沿又网络状态决定.
发送方将数据不断发送,确认方不断把确认信息通知发送方,那么AB的后延后再向前走,而前沿由后沿和窗口的容量所决定,未确认的信息仍需要保存在滑动窗口中.
超时重传的时间选择
tcp会保存数据包发出时间到收到响应时间的差,称作RTT,就是报文往返时间,超时重传时间会比RTT长一些.并且进行了一些加权运算.
选择确认SACK
如果接收方接受到的数据,缺了中间某些部分,又不想把中间以后的部分都重传,就使用选择确认,可以指定最多4个字节块缺失.用来要求发送方进行局部信息的重传.
tcp流量控制
让发送方发送速率不要太快.使接收方能够来得及接受而不至把数据包丢弃.通过滑动窗口来控制.
发送方的发送窗口不能超过接收方的接收窗口,tcp首部中窗口字段用来通知对方,自己的接收窗口有多大.
tcp的拥塞控制
拥塞就是对网络中某一资源的需求超过该资源能提供的.类似节假日高速免费.车辆超过高速的承载能力,会再入口堵塞,路上行驶变慢.对应网络来说.当发生拥塞时,确认报文可能会超时或丢失,此时tcp在进行超时重传,是没用的.只会恶化网络拥塞.
解决办法就是防止过多的数据注入网络,减少链路过载.
慢开始
发送方维持一个拥塞窗口的变量.控制同一时间发送数据量.发送方让发送窗口等于拥塞窗口,开始是设置拥塞窗口比较小,随着发送数据逐渐增大拥塞窗口,提示发送效率.规则是每收到一个确认消息.拥塞窗口加1个报文段长度.所以是指数性的增大1.2.4.8..
简单说就是初始拥塞窗口为1.网络正常时指数型增大拥塞窗口,当网络拥堵时,要再次初始化拥塞窗口.
拥塞避免
拥塞避免是使拥塞窗口增大的方式更缓慢一些,而不是慢开始那种指数级的增长,他是每经过一个RTT(一次报文发出到收到确认的往返时间)时间,就把拥塞窗口增大1个报文段长度.他是加法性增大 1.2.3.4.5
简单说就是根据往返时间线性增大拥塞窗口
快重传
快重传是发送方要求接收方,每收到一个报文就立刻确认并且是确认最后有序的报文,那么假如发送方发了12345,而因为网络不好导致3丢失,接收方只收到1245,接收方就会发送 1.2.2.2.2.(因为最后有序的报文是2),当发送方收到3个重复的2确认时,知道3丢了.就重传3. 这种方式,不需要要等到超时时才知道3丢失.因此提高网络吞吐量.
简单说就是加快确认信息,提前知道丢包
快恢复
发送快重传后,不在使用慢开始把拥塞窗口设置为1(因为快重传并不意味着网络拥塞,否则确认信息也不可能及时到达)而是把拥塞窗口设置的高一点(如原来的一半),让拥塞窗口恢复的快一点.
主动队列管理
网络层的路由器是有缓存的,可以存储一部分ip数据报,他采用队列方式, 先进先出.那么当要IP数据报太多时,缓存满了,就把后边的数据报都丢弃,这叫做尾部丢弃策略.但是tcp连接中,都是依赖ip层的传输,如果下层丢弃了很多数据报,上层的很多tcp过一段时间都知道了数据丢失,会认为是发生了网络拥塞,就会进行慢开始,降低拥塞窗口,这使得这一段时间网络通信突然下降.然后又指数级的增长.为了避免这种波段.路由器在队列快满的时候,随机的丢弃一些ip数据报,这使得上层的某些tcp进入慢开始,其他的还是正常传输,就减少了一段时间内的通信流量.
简单说就是网络层通过随机丢弃一些数据报,使传输层一些tcp减少传输速率,防止发生拥塞.
tcp连接管理
连接分为建立链接,发生数据,断开连接三个阶段,建立链接需要解决三个问题,1双方要知道对方的存在2双方要商定一些参数如窗口大小.3能对传输的数据进行一些分配.
建立链接
- 开始时,AB先创建传输控制模块TCB,然后B作为服务端进入监听状态
- A先发送报文,syn=1的报文不携带数据.syn是同步信号,A进入syn-sent (同步已发送状态)
- B同意建立链接,使syn和ack都为1,seq是序号,告诉对方当前是哪段数据.这段同样是对步骤1做出的确认信号,B进入syn-rcvd(同步已接收状态)
- A在发送对步骤2的确认的信号,表示收到了B的确认信号(步骤2).A进入established(已建立链接状态)
- B收到A的确认后,也进入established(已建立链接状态),可见,如果最后的报文没收到,B不会变成已连接状态.
- 为什么这样呢?加入A的第一个报文在某点延时了.A又发了一次报文1,B收到两个报文1,会发两次确认,如果等A的再次确认,就会建立2次连接,而A只需要建立一次连接,就使得B的一个连接资源浪费了.第三次确认是服务器把自己的建立链接的权利交给了对方.因为对方知道建立几个链接更合适.(就像你说买苹果,商家就一直装水果,一直往里装肯定不合适,他会问你够了吗?你说够了.然后就停止装水果.)
断开连接
断开连接也称四次挥手,就是互相通知对方断开连接
传输结束后,双方处于established(已建立链接状态),谁都可以选择释放连接
A向B发送链接释放报文,并停止发送数据,主动关闭tcp连接,A进入fin-wait-1(中止等待1)状态,fin报文不携带数据
B收到链接释放报文后,立刻发送确认消息,B进入close-wait(关闭等待)状态,tcp处于半关闭状态,A不能给B发数据,但B可以给A发数据,此时tcp会通知应用进程
A收到B的确认后,进入fin-wait-2(中止等待2)状态,等待B通知A关闭连接
如果B没有要发送的数据,应用进程会通知tcp释放链接,B就发送释放链接报文给A,用来关闭A的连接,B进入last-ack(最后确认)状态,等待A的确认.
A收到B发来的关闭连接状态后,会发出确认消息,然后进入time-wait(时间等待)状态.等待一段时间后,A进入close(关闭状态), msl叫最长报文段寿命,是一个时间.这是为了使A发出的确认报文能被B接受到,防止A关闭后,因网络阻塞,B没有收到确认,无法关闭.
B收到A的确认报文,进入关闭状态.
简单说就是自己通知对方关闭连接,等对方发回确认信息后就进行关闭.稍有不同是A关闭后
回答问题
传送层的特点是什么?用来解决那些问题?有哪些主要特点?在这中间又出现了什么情况?
传输层是建立了两个应用进程之间的连接,忽略下层的传输过程,使应用看齐来像是在直接交流一样,应用通过端口号识别出对方.而传输层的两种方式,可靠传输和不可靠传输,为不同场景的应用适合的方式,udp是不可靠传输,但他效率高,不需要额外数据,适合追求发送效率的游戏视频等,tcp是可靠传输,他会三次握手四次挥手来建立链接,加入很多控制首部,但是保证数据一定会到达对方.
tcp 在传输时,可以有控制防止网络拥塞,简单说就是开始时发生数据小,迅速增大(慢开始),一定程度后开始慢慢增大(拥塞避免),通过快速响应报文知道网络出现丢包(快重传),网络拥堵后降低网络发送量,但又比最初的发送量大(快恢复)
tcp的三次握手和四次挥手,是把建立链接和端口链接的控制权交给对方,通知对方建立或关闭连接后,等对方确认信息到达,自己才建立或关闭连接,防止因重传问题导致一放建立或关闭后另一方并没有同步,浪费资源.
tcp的发送和接受都有缓存,用来提高传输效率.同时加入滑动窗口,也是为了提高效率.
应用层
应用层用来做什么?有什么特点?与下层协议的区别是什么?
dns域名解析系统
dns介绍
dns用来把网站地址转换成ip地址,因为ip地址不好记.
dns是分布式系统.运行dns程序的叫域名服务器
应用查找域名时,像dns服务器发送udp报文,把域名放在其中,dns把ip地址返回.如果找不到,就由dns服务器发送udp报文查询其他dns服务器,递归的查找.
域名划分
域名像一颗树一样,不过最顶级的跟没有名字
域名服务器划分
类似域名一样,域名服务器也有不同的范围,每个域名服务器管理一个范围.
跟域名服务器:最高层次的服务器,某域名服务器找不到ip和网站的对应时,首先会去跟域名服务器查找.根域名服务器采用任播技术(任播就是一组地点不同,ip相同的主机,发送方的报文会被离发送方最近的ip直接收到)因此某域名会找到离他最近的跟域名服务器.
定级域名服务器:管理该服务器内注册的所有二级域名.
权限域名服务器:管理一个区,区的范围比域小.
本地域名服务器:进行dns查询时,首先查询本地域名服务器.本地域名服务器距离用户最近.
dns查询过程
- 电脑查询本地域名服务器时,如果本地域名服务器有,就直接返回,没有则本地域名服务器会向根域名服务器查询
- 根域名服务器如果有,就返回,如果没有,就告诉本地域名服务器,下一步应该向谁查询,然后本地服务器再向那个服务器进行查询.
- 这个过程都是发送udp报文.
ftp文件传输协议
ftp协议有基于udp的也有基于tcp的,用来在网络上传输文件.
ftp使用client/server方式.一个ftp服务器可同时处理多个用户进程,ftp分为主进程用来接收新请求,多个从属进程用来处理单个请求.
主进程步骤如下: 打开端口21,等待用户链接.-->接收用户链接,启动从属进程处理用户请求-->从属进程处理完成后从属进程就中止-->主进程回到等待状态,等待下次链接
ftp会建立两个进程,和两个tcp链接,一个控制进程,一个数据传送进程.传送完毕后关闭数据链接.
tftp协议是使用udp进行传送的协议.且占用内存小.
这个我没听过.直接摘抄图片吧
TelNet 远程终端协议
通过tcp链接,可以远程控制另一台主机.他在用户端运行客户进程,在另一台主机运行服务端进程.两边把同样的数据输入输出出来.表现为两边同步
万维网www
通过链接使各种信息数据之间可以进行跳转.从而使网络上的资源互相连通
www使用统一资源定位符url来表示网络上的各种文档,每个文档的url全网唯一
url 使用 <协议>://<主机>:<端口>/路径 http://www.baidu.com/index.html
HTTP协议
- 使用tcp传输方式
HTTP本身是无连接的,双方不需要建立HTTP连接(但需要建立tcp连接)
HTTP是无状态的,既不保存用户的信息(使用cookie来保存用户信息)
-
HTTP通信时需要进行tcp连接的三次握手,在第三次握手时把请求信息写到报文里.然后服务器在返回响应信息,这样比较耗时且多了很多报文发送
http1.1改进了这里,使用持续连接的方式,就是一次http响应完成后,不立即断开连接,而是持续一段时间保持连接,如果此时还有请求,就减少了三次握手四次挥手的次数.
代理服务器
就是高速缓存,把最近的请求和响应都保存起来,下次发现相同的请求,直接把响应返回去,不必在查询服务器.代理服务器可以在用户端.也可以在服务器端.用户先请求代理服务器,有就直接返回,没有的话,代理服务器回去请求正式服务器,再把响应数据反给用户,同时自己也保存起来.
http报文结构
crlf 是换行回车
状态行由 HTTP版本,状态码,状态码解释组成
cookie机制(保存用户状态)
cookie是用户的一个唯一标识,由服务端生成,服务端通过这标识存储改用户相关的数据.然后在响应报文中,通过Set-cookie的首部字段返给用户,用户浏览器会把这个cookie保存在本地,下次再请求这个服务器的时候会在请求报文首部中带上cookie,那么服务器就可以识别这个用户了.
电子邮件
电子邮件主要由用户代理,邮件服务器,邮件发送接收协议组成
用户代理:
是用户与电子邮件系统的接口,就是运行在电脑中的一个程序.具有编写邮件,显示来信,发送接收邮件,与邮件服务器进行通信的四个功能.
邮件服务器
功能是发送和接收邮件,具有缓存,同时通知发信人邮件传送的结果.邮件服务器需要使用两种协议,一种用于用户代理发邮件给邮件服务器,或邮件服务器之间发送邮件.(如SMTP)一种是用户代理从邮件服务器取邮件(如PoP3).通常邮件服务器既是用户端又是服务器端
如上图,发件人编写邮件,然后进行发送 --> 邮件代理和邮件服务器建立tcp连接,应用层则是SMTP连接,邮件从用户代理发送至邮件服务器 --> 邮件服务器把邮件保存在缓存中,按序发送-->邮件服务器和远程的接收方邮件服务器建立tcp连接,应用层仍是SMTP连接,并发送缓存中的邮件-->接收方服务器把邮件放入收件人的邮箱中,等待收件人收取-->收件人通过用户代理向接收方邮件服务器建立tcp协议,应用层是pop3协议,把邮件服务器中的本人的缓存邮件都拉去到本地.
发送协议smtp
发送方叫smtp客户端,接收方叫smtp服务端,smtp每隔一段时间就对发送方邮件服务器缓存进行扫描,如果有邮件就与另一端的接收方邮件服务器建立tcp链接.这里会发送一次报文进行确认是否可以通信.
发送时,会先检查接收方是否准备接收文件,如果没准备好,就不进行发送,为了节省网络.
发送完成后,发送方发送信息要求断开连接.接收方同意后连接断开,发送结束
邮件读取协议 POP3,IMAP
Pop3的也是需要接收用户代理和接受服务器建立连接,当接代理从pop3中获取邮件后,pop3就讲该邮件删除.(意味着网络上没有保存)
IMAP 则是接收代理和接收服务器建立链接,代理直接远程操控接收服务器上的协议,只有在打开邮件时,邮件内容才会下载到本地.(所以需要用户一直联网.)邮件会保存在服务器上,除非用户手动删除.
MIME
扩充了邮件的格式,可以使邮件发送接收多种格式的文件.
动态主机配置协议DHCP
用来给联网的主机动态配置一些参数信息,如IP地址,子网掩码,默认路由器的ip地址,域名服务器的ip地址
使用时新接入的主机会发送广播,这是一个发现报文,表示有新的主机接入了.请求DCHP给分配ip等信息.
DHCP服务器接收到报文后,查找是否有该主机配置对应的ip,就有返回,没有就从ip地址池中找一个返回,这个报文叫提供报文.表示提供了一个ip配置.
目前是几个网络配置一个DHCP服务器,每个网络通过路由器监听新接入主机的广播,然后以单播的方式转发改报文给DHCP主机,再把得到的ip配置转发给新接入的主机.
DHCP的报文发送方式是udp的.
应用进程跨越网络通信
只要应用进程需要从操作系统获取服务,就要把控制权传递给操作系统,而操作系统在执行完成后,会把控制权返回给应用进程.
网络编程时常把套接字作为应用进程和运输层之间的接口.套接字以上由应用控制,套接字一下由操作系统控制.
操作系统会给上层应用提供网络通信相关的资源.整合为一个套接字描述符(一个号码),这个套接字描述符有一个指针指向存放套接字的地址,套接字结构体中封装了很多信息如本地端口,本地ip,远程端口,远程ip.
tcp的连接流程
建立链接
创建套接字后,其ip和端口号都是空的,服务端调用系统的bind,把本地地址绑定到套接字上,然后调用listen把套接字设置为被动监听模式,在调用accept接受(需要制定端口),把远程的客户端连接请求提取出来.服务端的accept通常采用并发方式,为每个收到的连接都建立一个新的套接字.并返回给客户端.这样就是用原来的套接字一直接受建立请求,用新的套接字处理数据的通信,和ftp中的主进程和从属进程类似.而客户端只要由系统生成一个套接字,然后调用connect指明要链接的服务器套接字的IP地址和端口,就会把连接请求发送给上文的服务器了
数据传送
双方都是用send发送数据,recv接受数据,send包括目标的套接字描述符,数据地址和长度,recv包括接收时使用的套接字描述符,接收的缓存地址和长度.
链接释放
调用close进行关闭连接
总体流程
p2p点对点传输应用
p2p传输是指在没有固定服务器的网络上,大家通过对等方式交换数据.意思大概是每个数据请求者同时也可能是数据的提供者.每个人告诉别人,我这里有什么资源,你想下载可以来我这里.我需要什么资源.我要去哪里下载.
比特洪流BT
把参与某个文件分发的所有对等方称为一个洪流.把要下载的文件的数据单元称为文件快.某用户A要下载某文件B(计算机网络的pdf版)时,先加入某个洪流.从这里一个快一个快的下载文件,文件B可能被分成很多块,而从不同的用户下载不同的快,然后组成一个完整的文件(这里的前提是,这个洪流里大部分人是有同一个文件的,其实这个很普遍,因为我们通常都是文件到处抄来的.源头可能都差不多).
你可以加入一个洪流去下载文件(作为请求方),也可以提供文件快给别人下载(作为服务器方),每个洪流有个基础设施节点,叫做追踪器,每个加入洪流的主机都要向追踪器注册,追踪器就会给他分配多个对等方进行tcp连接,来分发数据.
这过程中会判断速率,谁给A传的速率最快,A就倾向于去哪里拿数据.同时对于网络上最稀有的文件快,要先请求,防止对方退出洪流.这个系统接入的主机越多.效率应该就越高.资源也约丰富.
这种活动像什么呢.就像医院要献血,医生来了问,谁要献血?大家都踊跃报名,医生就让这几个人一起献血,那几个人一起献血,感觉大家都是活雷锋一样.当然,在奉献的时候也获取了自己想要的资源.
回答问题
应用层用来做什么?有什么特点?与下层协议的区别是什么?
应用层充分利用了下层tcp和udp的特点,针对不同的情况选择不同的协议.来提供给用户不同的服务.进程间通过端口号来找到对方.这就是应用层的标识.应用层中很多的程序都使用的代理技术来进行通信.
应用层结构如下
网络安全
安全的目标
保密性
指信息经过加密,只有通信双方才能识别
端点鉴别
指能够正确鉴别发送方和接收方,防止其他人伪装
信息完整性
经过加密的信息必须是完整的,才能保证没有被篡改
运行的安全性
双方可以抵挡网络攻击.防止别人获得访问权限
密码体质
对称加密
加密和解密用的是相同的密码体制,既算法是公开的,而秘钥是保密的关键.如果秘钥被窃取,就会失去加密效果.
非对称加密
加密密钥和解密事用不同的密码体制.而加密和解密使用不同的秘钥.既加密算法解密算法是公开的,而公有秘钥也是公开的,私有秘钥是保密的关键. 其实加密和解密只是一种转换算法的称呼.用公钥加密后的数据只能用私钥解密出来.这里顺序可以变换 .既
设对B产生一堆公私钥公钥是Pkb ,私钥是SKb, 加密算法是 E,解密算法是D,这两个算法是公开的.
最后一点最重要, 总之是 私钥总是和D解密算法对应,公钥总是和E加密算法对应, 公钥加密后在私钥解密和私钥解密后在公钥加密 都能得到原始的报文.但用途是不一样的.因为公钥是加密的. 先公钥加密在私钥解密,是为了给私钥持有方发送数据,因为只有他能解开. 而先私钥解密在公钥加密,则是为了证明谁是私钥持有方(也就是可信任的通信另一方)因为他用私钥解密密的数据才能用他的公钥加密后得到,这是一种确认发送方身份的方式.
数字签名
报文鉴别,通过数字签名确认报文是由发送者A发送的.并没有被别人所篡改
报文完整性,接收者确认收到的报文和发送者的报文是一致的,表示未被篡改
不可否认:报文发送者不能否认曾经发送过该报文.
这里使用了上文的非对称加密,.A对数据使用私钥进行解密算法, 发送到B时,B有A公开的公钥,用公钥对报文执行加密算法,如果能解出,证明是A发来的.注意.这种签名方法的报文,是任何人都能拦截并能拿到里边的内容的,不过这个报文的用处就是为了证明A是正确的发送者.
这种是结合了签名和加密的过程.
报文鉴别
上文对整个报文进行加密解密,比较耗时,因此这里使用hash或md5或sha-1来进行加解密.
hash的特点是多对一的,从一个报文计算到hash值后,无法在回推回原来的报文,
同样不同的报文也不能到相同的hash值.
那么对hash进行加密,就可以类似为对报文加密,保证了报文的完整性.
hash,md5,sha-1,都是这个原理,但是md5已被证实,给出一个md5时,可以找到一个md5相同的内容不同的报文,因此md5已经失效.现在用的是sha-1,就是算法更复杂些.更耗时些.
通过对hash进行加密,拼接在报文后发送. 接收方如果用公钥如果解不出hash,说明不是正确的发送放,在接触hash后,在对报文进行运算得出计算出的hash2,如果两个hash相同.表示报文未篡改.
密钥分配
密钥必须通过安全的通路进行分配,防止被泄露.
对称密钥分配方式:
是密钥分配中心 KDC,他会给通信方发送一个临时密钥,只能使用一次.这之前.通信双方AB已经和KDC进行过登记,AB和KDC的通信是加密的.
A发送给B消息时,先通知KDC,告诉他通信双方是AB,KDC返回报文用A的密钥加密,报文里有密钥KAB用来加密数据.和一个A要转发给B的票据,票据包含通信双方的信息和密钥KAB,用B的密钥加密.
A那得报文后,解出KAB,加密数据,和上文的票据一起发给B,B先用B的密钥解密出通信双方AB和密钥KAB,在用KAB把A发来的数据报文解密出内容.
公钥分配方式
认证中心CA用来保存所有的证书,证书里包含公钥及其拥有者的信息.CA是公开的,任何人都可以可信的地方活动CA的公钥,此公钥用来验证某个公钥是否为属于某个用户或实体.
无线网和移动网
无线网的数据链路层和有线网相差很大.因此在链路层有很多针对无线网而进行的设计,同以太网不太一样.
无线局域网WLAN
IEEE 802.11
是无线以太网的标准,他使用星形网络结构,中心叫做接入点AP.使用该协议的局域网又成WiFi,局域网的基本单位称为基本服务集,包括一个基站也就是接入点AP和多个移动站,一个基本服务集一般范围直径不超过100米.
A和B通信,要经过AP1和AP2,既A--Ap1--Ap2--B.手机想要上网,必须加入某个服务集,然后与其中的接入点建立关联.建立关联就是加入这个接入点AP的子网.并和AP建立了一个虚拟的连接.移动站向关联的AP发送DHCP发现报文,然后Ap给这个移动站分配ip地址.(DHCP协议)
移动自组网络
这种网络没有接入点AP,处于一种平等状态的移动站互相通信形成临时网络,每个节点可能一会是转发节点,一会是目的节点,每个节点都能充当路由的功能
IEEE 802.11的数据链路层
无线局域网不需要进行碰撞检测(碰撞检测就是发送数据时不停检测信道变化,发现别人也在发送数据,就静态发送并退避),再不发送干扰的情况下,允许多个移动站进行通信.但是要尽量避免发生碰撞.
无线网mac层包括两部分,分步协调功能DCF,让每个站通过竞争方式获取发送权,这个必须实现.点协调功能PCF,可选项,接入点轮流使发送站活动发送权利.
为了避免碰撞,所有站在发送完成后,要等一个很短的时间才能发送下一帧,这段时间叫帧间间隔IFS.高优先级帧的IFS比较短.低优先级帧的IFS比较长.
在链路层,无线网在发送数据帧后,如果没有收到ack响应,就会重传刚才的帧,而有线网则不会重传,而是把重传的需求交给上层(网络层)来处理.
在无线网新的从忙状态转为空闲时,为了避免几个站同时发送数据(一旦发送就要把一帧发送完,中途不能停止),所有想要发送到站都要执行退避算法.给每个信道一个退避倒计时,退避倒计时为0时就发送该帧,但在倒计时过程中,发现信道忙,就冻结倒计时.
局域网mac帧
链路层有三种帧,控制帧,数据帧,管理帧,
mac帧中 地址4是给自组网络用,地址123,则是表明发送方mac地址,目的mac地址,和中间的接入点Ap地址,
序号控制字段是给帧做顺序,用来区分哪些帧出错了
持续期字段是上边争用信道使用的
更多分片,是把一个帧分成多个分片(因为无线局域网信号不好,帧太长容易丢失,把帧分成短片更好)