TCP/IP协议族
TCP/IP不是一个协议,它是很多协议的统称
OSI的七层协议——TCP/IP的四层协议
在七层模型中,每个分层都接受由它下一层所提供的特定服务,并且负责为自己的上一层提供特定的服务,上下层之间进行交互所遵循的约定叫做“接口”,同一层之间的交互所遵循的约定叫做“协议”
(不想写html,所以没有合并单元格,请凑合着看)
OSI七层协议 | TCP/IP | 对应网络协议 | 封包过程(从上往下) |
---|---|---|---|
应用层 | 应用层 | HTTP , FTP , TFTP , SMTP , NFS , WAIS | |
表示层 | Telnet , SNMP , Rlogin , Gopher | ||
会话层 | SMTP , DNS | ||
传输层 | 传输层 | TCP , UDP | 给数据包加上TCP包头 |
网络层 | 网络层 | IP , ARP , RARP , ICMP , AKP , UUCP | 给TCP数据加上IP包头 |
数据链路层 | 数据链路层 | FDDI , Ethernet , Arpanet , PDN , SLIP , PPP | 给IP包头加上以太网协议包头(MAC地址),并进行CRC编码 |
物理层 | IEEE802.1A , IEEE802.2 到 IEEE802.11 |
概念
- 域名系统(DNS):一个分布的数据库,提供主机名(网址)转换成IP地址的服务。
- RFC:TCP/IP 协议的标准文档,目前有4000多个协议的定义,但我们只需学习那么十几个协议而已。
- 端口号:这是用在 TCP 和 UDP 上的逻辑号码,并不是一个硬件端口,我们平时说把某某端口封掉了,也只是在IP层次把带有这个号码的IP包给过滤掉了而已。
- 应用编程接口:现在常用的编程接口有 socket 和 TLI。socket 有时候也叫做 “Berkeley socket”,可见 Berkeley 对于网络的发展有多大的贡献。
应用层
HTTP
HTTP协议(Hyper Text Transfer Protocol,超文本传输协议)是用于从万维网(WWW:World Wide Web)服务器传输超文本到本地浏览器的传送协议。
HTTP是一个基于TCP/IP通信协议来传递数据
HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。
HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。
(1) 主要特点
-
简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
-
灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
-
无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
-
无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
-
支持B/S及C/S模式。
(2)HTTP之URL
- HTTP使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接。
- URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息。URL,全称是UniformResourceLocator, 中文叫统一资源定位符,是互联网上用来标识某一处资源的地址。
以下面这个URL为例,介绍下普通URL的各部分组成:
http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name
从上面的URL可以看出,一个完整的URL包括以下几部分:
-
协议部分:该URL的协议部分为“http:”,这代表网页使用的是HTTP协议。在Internet中可以使用多种协议,如HTTP,FTP等等本例中使用的是HTTP协议。在"HTTP"后面的“//”为分隔符
-
域名部分:该URL的域名部分为“www.aspxfans.com”。一个URL中,也可以使用IP地址作为域名使用
-
端口部分:跟在域名后面的是端口,域名和端口之间使用“:”作为分隔符。端口不是一个URL必须的部分,如果省略端口部分,将采用默认端口
-
虚拟目录部分:从域名后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分。虚拟目录也不是一个URL必须的部分。本例中的虚拟目录是“/news/”
-
文件名部分:从域名后的最后一个“/”开始到“?”为止,是文件名部分,如果没有“?”,则是从域名后的最后一个“/”开始到“#”为止,是文件部分,如果没有“?”和“#”,那么从域名后的最后一个“/”开始到结束,都是文件名部分。本例中的文件名是“index.asp”。文件名部分也不是一个URL必须的部分,如果省略该部分,则使用默认的文件名
-
锚部分:从“#”开始到最后,都是锚部分。本例中的锚部分是“name”。锚部分也不是一个URL必须的部分
-
参数部分:从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分。本例中的参数部分为“boardID=5&ID=24618&page=1”。参数可以允许有多个参数,参数与参数之间用“&”作为分隔符。
(3)HTTP之状态码
状态代码由三位数字组成,第一个数字定义了响应的类别,共分五种类别:
1xx:指示信息–表示请求已接收,继续处理
2xx:成功–表示请求已被成功接收、理解、接受
3xx:重定向–要完成请求必须进行更进一步的操作
4xx:客户端错误–请求有语法错误或请求无法实现
5xx:服务器端错误–服务器未能实现合法的请求
常见状态码:
状态码 | 英文名称 | 中文描述 |
---|---|---|
200 | OK | 客户端请求成功 |
301 | Moved Permanently | 永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替 |
302 | Found | 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI |
304 | Not Modified | 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源 |
307 | Temporary Redirect | 临时重定向。与302类似。使用GET请求重定向 |
400 | Bad Request | 客户端请求有语法错误,不能被服务器所理解 |
401 | Unauthorized | 请求未经授权, 请求要求用户的身份认证, 这个状态代码必须和WWW-Authenticate报头域一起使用 |
403 | Forbidden | 服务器收到请求,但是拒绝提供服务 |
404 | Not Found | 请求资源不存在,eg:输入了错误的URL |
405 | Method Not Allowed | 客户端请求中的方法被禁止 |
500 | Internal Server Error | 服务器发生不可预期的错误 |
503 | Server Unavailable | 服务器当前不能处理客户端的请求,一段时间后可能恢复正常 |
(4)HTTP工作原理
HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。
以下是 HTTP 请求/响应的步骤:
-
客户端连接到Web服务器
一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。例如,http://www.oakcms.cn。 -
发送HTTP请求
通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。 -
服务器接受请求并返回HTTP响应
Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。 -
释放连接TCP连接
若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求; -
客户端浏览器解析HTML内容
客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。
例如:在浏览器地址栏键入URL,按下回车之后会经历以下流程:
-
浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;
-
解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立TCP连接;
-
浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;
-
服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;
-
释放 TCP连接;
-
浏览器将该 html 文本并显示内容;
(5)get和post的区别
GET和POST本质上两者没有任何区别。他们都是HTTP协议中的请求方法。底层实现都是基于TCP/IP协议。所谓区别,只是浏览器厂家根据约定,做的限制而已。
-
GET 与POST都有自己的语义,不能随便混用。GET的主要任务是获得数据,但在获得数据前也可以向服务器提交一些数据;POST的主要任务是提交数据,但在提交数据之后服务器也会向用户端返回一些显示用的数据。
-
GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连, POST方法是把提交的数据放在HTTP包的Body中.
-
GET参数通过URL传递,POST放在Request body中。如果你用GET服务,在request body传了数据,不同服务器的处理方式是不同的,有些服务器会读取出数据,有些服务器直接忽略。所以,虽然GET可以带request body,也不能保证一定能被接收到。
-
HTTP协议没有对传输的数据大小进行限制,也没有对URL长度进行限制。 GET提交的数据大小有限制,是因为大多数浏览器通常都会限制url长度在2K个字节,大多数服务器最多处理64K大小的url,且超过的部分不处理。POST方法提交的数据也没有限制,起限制作用的是服务器的处理程序的处理能力。
-
GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值。
-
GET方式提交的数据会明文显示在url中,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面被缓存或者其他人访问这台机器的历史记录,就可以获得该用户的账号和密码。POST方式看不到传送的数据是因为IE浏览器做了限制。通过第三方工具也能看到了POST方式传送的数据。这也是为什么要研究HTTPS。
-
GET产生一个TCP数据包;POST产生两个TCP数据包(浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok)。但不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。
-
对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
-
GET请求只能进行url编码,而POST支持多种编码方式(form表单的enctype属性)。
(下面四点几乎一个原理) -
GET在浏览器回退时是无害的,而POST会再次提交请求。
-
GET产生的URL地址可以被Bookmark,而POST不可以。
-
GET请求会被浏览器主动cache,而POST不会,除非手动设置。
-
GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
http和https
超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。
为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS,为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。
(1) HTTP和HTTPS的基本概念
HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。
HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。
(2)HTTP与HTTPS区别
HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。
HTTPS和HTTP的区别主要如下:
1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
(3)HTTPS的工作原理
我们都知道HTTPS能够加密信息,以免敏感信息被第三方获取,所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用HTTPS协议。
客户端在使用HTTPS方式与Web服务器通信时有以下几个步骤,如图所示。
- 客户使用https的URL访问Web服务器,要求与Web服务器建立SSL连接。
- Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。
- 客户端的浏览器与Web服务器开始协商SSL连接的安全等级,也就是信息加密的等级。
- 客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。
- Web服务器利用自己的私钥解密出会话密钥。
- Web服务器利用会话密钥加密与客户端之间的通信。
(4)HTTPS的优点
尽管HTTPS并非绝对安全,掌握根证书的机构、掌握加密算法的组织同样可以进行中间人形式的攻击,但HTTPS仍是现行架构下最安全的解决方案,主要有以下几个好处:
- 使用HTTPS协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;
- HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性。
- HTTPS是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。
- 谷歌曾在2014年8月份调整搜索引擎算法,并称“比起同等HTTP网站,采用HTTPS加密的网站在搜索结果中的排名将会更高”。
(5)HTTPS的缺点
虽然说HTTPS有很大的优势,但其相对来说,还是存在不足之处的:
(1)HTTPS协议握手阶段比较费时,会使页面的加载时间延长近50%,增加10%到20%的耗电;
(2)HTTPS连接缓存不如HTTP高效,会增加数据开销和功耗,甚至已有的安全措施也会因此而受到影响;
(3)SSL证书需要钱,功能越强大的证书费用越高,个人网站、小网站没有必要一般不会用。
(4)SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗。
(5)HTTPS协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。最关键的,SSL证书的信用链体系并不安全,特别是在某些国家可以控制CA根证书的情况下,中间人攻击一样可行。
六、http切换到HTTPS
如果需要将网站从http切换到https到底该如何实现呢?
这里需要将页面中所有的链接,例如js,css,图片等等链接都由http改为https。例如:http://www.baidu.com改为https: //www.baidu.com
BTW,这里虽然将http切换为了https,还是建议保留http。所以我们在切换的时候可以做http和https的兼容,具体实现方式是,去掉页面链接中的http头部,这样可以自动匹配http头和https头。例如:将http://www.baidu.com改为//www.baidu.com。然后当用户从http的入口进入访问页面时,页面就是http,如果用户是从https的入口进入访问页面,页面即使https的。
传输层
TCP 与 UDP
TCP和UDP都是传输层的协议,TCP会超时重传,UDP不会,TCP是打电话,UDP是发短信
TCP | UDP | |
---|---|---|
面向连接 | 是 | 否 |
传输可靠性 | 可靠 | 不可靠 |
传播速度 | 慢 | 快 |
应用场合 | 数据量大,对可靠性要求高的场合 | 数据量小,对可靠性要求不高的场合 |
网络层
ARP 与 RARP
ARP和RARP的功能是地址解析,介于数据链路层和网络层之间
ARP:将IP地址解析为MAC地址的协议
RARP:将主机的MAC地址解析为IP地址的协议
本来主机是完全不知道这个IP对应的是哪个主机的哪个接口,当主机要发送一个IP包的时候,会首先查一下自己的ARP高速缓存(就是一个IP-MAC地址对应表缓存),如果查询的IP-MAC值对不存在,那么主机就向网络发送一个ARP协议广播包,这个广播包里面就有待查询的IP地址,而直接收到这份广播的包的所有主机都会查询自己的IP地址,如果收到广播包的某一个主机发现自己符合条件,那么就准备好一个包含自己的MAC地址的ARP包传送给发送ARP广播的主机,而广播主机拿到ARP包后会更新自己的ARP缓存(就是存放IP-MAC对应表的地方)。发送广播的主机就会用新的ARP缓存数据准备好数据链路层的的数据包发送工作。
IP协议
IP不是可靠的协议,这是说,IP协议没有提供一种数据未传达以后的处理机制–这被认为是上层协议–TCP或UDP要做的事情。
(1)TTL字段
这个字段规定该数据包在穿过多少个路由之后才会被抛弃(这里就体现出来IP协议包的不可靠性,它不保证数据被送达),某个ip数据包每穿过一个路由器,该数据包的TTL数值就会减少1,当该数据包的TTL成为零,它就会被自动抛弃。这个字段的最大值也就是255,也就是说一个协议包也就在路由器里面穿行255次就会被抛弃了,根据系统的不同,这个数字也不一样,一般是32或者是64,Tracerouter这个工具就是用这个原理工作的,tranceroute的-m选项要求最大值是255,也就是因为这个TTL在IP协议里面只有8bit。
(2)IP地址 与 MAC地址
互联网地址(ip地址):网络上每一个节点都必须有一个独立的Internet地址(也叫做IP地址)。IP地址是分配给IP 网络每台机器的数字标识符,他指出了设备在网络中的具体位置。IP地址由网络号和主机号构成。
MAC地址是物理地址,是唯一的,被编码到网络接口卡里,用于在本地网络中寻找主机。
现在通常使用的IP地址是IPV4,IPV4分为五类地址,可以根据IP地址判断它属于哪类地址。
(3)IPV4地址分类
网络号 | 主机号 | 范围 | 网络地址/本机(主机号全为0) | 广播地址(主机号全为1) | |
---|---|---|---|---|---|
A类地址 | 0(8位) | 0.0.0.0~127.255.255.255 | 0.0.0.0 | 127.255.255.255 | |
B类地址 | 10(16位) | 128.0.0.0~191.255.255.255 | 128.0.0.0 | 191.255.255.255 | |
C类地址 | 110(24位) | 192.0.0.0~223.255.255.255 | 192.0.0.0 | 223.255.255.255 | |
D类地址 | 1110组播 | 224.0.0.0~239.255.255.255 | 224.0.0.0 | 239.255.255 | |
E类地址 | 1111保留 | 240.0.0.0~255.255.255.255 | 240.0.0.0 | 255.255.255 |
(4)私有地址
私有地址的提出是为了解决IP地址短缺的问题。私有地址是指内部网络或主机地址,这些地址只能用于某个内部网络,不能用于公共网络。RFC1918描述了为私有网络预留的3个IP地址段。
网络类型 | 地址范围 |
---|---|
A类地址 | 10.0.0.0~10.255.255.255 |
B类地址 | 172.16.0.0~172.31.255.255 |
C类地址 | 192.168.0.0~192.168.255.255 |
(5)子网
IP地址的定义是网络号+主机号。但是现在所有的主机都要求子网编址,也就是说,把主机号在细分成子网号+主机号。最终一个IP地址就成为 网络号码+子网号+主机号。
例如一个B类地址:191.30.109.134。一般情况下,这个IP地址的红色部分就是网络号,而蓝色部分就是子网号,绿色部分就是主机号。至于有多少位代表子网号这个问题上,这没有一个硬性的规定,取而代之的则是子网掩码,校园网相信大多数人都用过,在校园网的设定里面有一个255.255.255.0的东西,这就是子网掩码。子网掩码是由32bit的二进制数字序列,形式为是一连串的1和一连串的0,例如:255.255.255.0(二进制就是11111111.11111111.11111111.00000000)对于刚才的那个B类地址,因为191.30是网络号,那么后面的109.134就是子网号和主机号的组合,又因为子网掩码只有后8bit为0,所以主机号就是IP地址的后8个bit,就是134,而剩下的109就是子网号码。
(6)IP地址寻址
当一个IP数据包准备好了的时候,IP数据包(或者说是路由器)是如何将数据包送到目的地的呢?它是怎么选择一个合适的路径来"送货"的呢?
1、最特殊的情况是目的主机和主机直连,那么主机根本不用寻找路由,直接把数据传递过去就可以了。至于是怎么直接传递的,这就要靠ARP协议了,后面会讲到。
2、稍微一般一点的情况是,主机通过若干个路由器(router)和目的主机连接。那么路由器就要通过ip包的信息来为ip包寻找到一个合适的目标来进行传递,比如合适的主机,或者合适的路由。路由器或者主机将会用如下的方式来处理某一个IP数据包
2.1、如果IP数据包的TTL(生命周期)已到,则该IP数据包就被抛弃。
2.2、搜索路由表,优先搜索匹配主机,如果能找到和IP地址完全一致的目标主机,则将该包发向目标主机
2.3、搜索路由表,如果匹配主机失败,则匹配同子网的路由器,这需要“子网掩码(1.3.)”的协助。如果找到路由器,则将该包发向路由器。
2.4、搜索路由表,如果匹配同子网路由器失败,则匹配同网号路由器,如果找到路由器,则将该包发向路由器。
2.5、搜索路由表,如果以上都失败了,就搜索默认路由,如果默认路由存在,则发包
3、如果都失败了,就抛弃这个包。
这再一次证明了,ip包是不可靠的。因为它不保证送达。
(7)IPV4与IPV6
IPV6的提出也是为了解决IP地址短缺的问题,但是目前IPV4和IPV6并不兼容。
IPV4 | IPV6 | |
---|---|---|
版本 | 4 | 6 |
组成 | 32位,4个字节 | 128位,8个字节 |
常用表示方法 | 点分十进制 | 冒号分十六进制。(可省略前导零。可在地址的文本格式中使用一次双冒号(::)) |
地址配置 | 手动或DHCP配置 | 无状态地址自动配置(SLAAC) |
地址解析协议 | ARP | 邻居发现协议NDP |
身份验证和加密 | 不提供 | 提供 |
数据链路层
数据链路层可以从IP得到要传送的数据,从ARP得到数据的传送信息。
作用
- 为IP模块发送和接收IP数据报
- 为ARP模块发送ARP请求和接收ARP应答
- 为RARP发送RARP请求和接收RARP应答
协议
以太网协议(网卡协议)、令牌环、PPP(点对点))协议(adsl宽带)、FDDI、loopback(环回接口,环回地址:127.0.0.1)协议
CRC编码
(1) CRC校验原理
假设发送信息用信息多项式C(X)表示,将C(x)左移r位,则可表示成C(x)*2^r,这样C(x)的右边就会空出r位校验码的位置,做除法(模2除),得到的余数R就是校验码。发送的CRC编码是,验证接收到的报文编码是否至正确,依然是做模2除:。
(2) 生成多项式的选取应满足以下条件:
a. 生成多项式的最高位和最低位必须为1。
b. 当被传送信息(CRC码)任何一位发生错误时,被生成多项式做模2除后,应该使余数不为0。
c. 不同位发生错误时,应该使余数不同。
d. 对余数继续做模2除,应使余数循环。
(3) CRC校验码的手动计算示例
生成多项式:G(X)=X4+X3+1,要求出二进制序列10110011的CRC校验码。
-
G(X)=X4+X3+1,二进制比特串为11001;(有X的几次方,对应的2的几次方的位就是1)
-
因为校验码4位,所以10110011后面再加4个0,得到101100110000,用“模2除法”(其实就是亦或^)即可得出结果;
-
CRC^101100110000得到101100110100。发送到接收端;
-
接收端收到101100110100后除以11001(以“模2除法”方式去除),余数为0则无差错;
参考文章:计网,HTTP,HTTP与HTTPS