协议总结
应用层
1.DNS(域名系统)
域名系统(DNS)是因特网使用的命名系统,用来把便于人们记忆的具有特定含义的主机名转变为便于机器处理的IP地址。DNS系统采用C/S模型,其协议运行在UDP之上。
层次域名空间
- 因特网采用层次树状结构的命名方法,任何一个连接到因特网的主机或路由器都有一个唯一的层次结构名称,即域名。域可以划分为子域,常见的有顶级域、二级域、三级域等。参考下图栗子:
- 关于域名标号有以下几点需要注意:
1.标号中的英文不区分大小写;
2.除字符“-”之外不可以使用其他的标点符号;
3.每个标号不超过63个字符,完整域名最长不超过255个字符;
4.级别最低的域名写在最左边,依次类推。 - 顶级域名包括:
1.国家顶级域名:中国:.cn
2.通用顶级域名:.com等
3.基础结构域名:只有一个arpa,用于反向域名解析,又称为反向域名。
- 因特网采用层次树状结构的命名方法,任何一个连接到因特网的主机或路由器都有一个唯一的层次结构名称,即域名。域可以划分为子域,常见的有顶级域、二级域、三级域等。参考下图栗子:
域名服务器
- 域名服务器不但能够进行域名到IP地址的解析,还拥有连向其它域名服务器的信息。
- 主要有以下四种域名服务器:
1.根域名服务器:最高层次的域名服务器,所有的根域名服务器均知道所有的顶级域名服务器IP地址。
2.顶级域名服务器:管理旗下注册的所有二级域名服务器;
3.授权域名服务器:每台主机都必须在授权域名服务器处登记;
4.本地域名服务器:当一台主机发出DNS查询请求时,这个查询请求首先发送给该主机的本题域名服务器。
域名解析过程
1.正向解析:域名 -> IP地址
2.反向解析:IP地址 -> 域名
常使用解析方式有以下两种:- 递归查询: 本地域名服务器只需要向根域名服务器查询一次,后面几次查询都是递归地在其它几个域名服务器之间进行的。参考下图:
- 递归迭代查询:主机向本地域名服务器进行递归查询,本地域名服务器向根域名服务器的查询采取迭代查询。参考下图:
- 递归查询: 本地域名服务器只需要向根域名服务器查询一次,后面几次查询都是递归地在其它几个域名服务器之间进行的。参考下图:
2.FTP(文件传输协议)
FTP是因特网上使用的最广泛的文件传输协议,提供交互式的访问,允许客户指明文件的类型与格式,并允许文件具有存取权限。
FTP提供以下功能:
1.提供不同种类主机系统之间的文件传输能力;
2.以用户权限管理的方式提供用户对远程FTP服务器上的文件管理功能;
3.以匿名FTP的方式提供公用文件共享的能力。FTP采用C/S工作模式,使用TCP可靠地传输服务。其工作步骤如下:
1.打开熟知端口21,是客户进程能够连接;
2.等待客户进程发送连接请求;
3.启动从属进程来处理客户进程发来的请求,主进程与从属进程并发执行,从属进程对客户进程的请求处理完毕即终止;
4.回到等待状态,继续接收其它客户进程的请求。FTP有两个并行的TCP连接,分比为控制连接(端口号21),数据连接(端口号20)。
1.控制连接:用来传输控制信息,控制信息以7位ASCII格式传送,控制连接在整个会话期间都处于打开状态;
2.数据连接:连接客户端和服务器端的数据传送进程。
3.SMTP(简单邮件传输协议)
- SMTP是一种提供可靠且有效的电子邮件传输协议,它控制两个相互通信的SMTP进程交换信息。使用TCP连接,端口号为25。
- SMTP通信有以下三个阶段:
1.连接建立:连接是在发送主机的 SMTP 客户和接收主机的 SMTP 服务器之间建立的。SMTP不使用中间的邮件服务器;
2.邮件传送;
3.连接释放:邮件传送完毕后,应释放TCP连接。
4.POP3(邮局协议)
- POP3是一个非常简单但功能有限的邮件读取协议。使用TCP连接,端口号为110。
5.MIME(多用途网际邮件扩充)
- MIME增加了邮件主体的结构,并定义了传送非ASCII码的编码规则。
- MIME主要包括以下三部分内容:
1.5个新的邮件首部字段:MIME版本、内容描述、内容标识、传送编码、内容类型;
2.定义了许多邮件内容的格式,对多媒体电子邮件的表示方法进行了标准化;
3.定义了传送编码,可对任何内容格式进行转换,而不会被邮件系统改变。
6.HTTP(超文本传输协议)
HTTP定义了浏览器怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给浏览器。
HTTP操作过程,举一个栗子吧:
1.浏览器分析链接指向页面的URL(http: //www. baidu.com)
2.浏览器向DNS请求解析www. baidu.com的IP地址
3.域名系统DNS解析出百度的IP地址
4.浏览器与该服务器建立TCP连接(端口为80)
5.浏览器发出HTTP请求
6.服务器通过HTTP进行响应
7.释放TCP连接
8.浏览器对数据进行渲染,界面展示。HTTP连接的两种类型
- 非持久性连接
1.每个TCP连接最多允许传输一个对象
2.HTTP 1.0版本使用非持久连接。
存在如下问题:1.每个对象需要2RTT(从客户端发送一个很小的数据包到服务器并泛会所经历的时间)
2.操作系统需要为每个TCP链接开销资源
3.当浏览器开启多个TCP连接,并行获取网络对象时对服务器端要求较高。 - 持久性连接
1.每个TCP连接允许传输多个对象
2.HTTP 1.1版本默认使用持久性连接。
分为以下两种持续性连接:- 无流水的持久性连接:
1.客户端只有收到前一个响应后才会发送新的请求
2.每个被引用的对象耗时1个RTT - 带有流水机制的持久性连接:
1.HTTP 1.1默认
2.客户端只要遇到一个引用对象就尽快发出请求
3.理想情况下,收到所有的引用对象只需耗时约1个RTT
- 无流水的持久性连接:
- 非持久性连接
HTTP消息格式
HTTP协议有两类消息分别为请求消息和响应消息。
1.请求消息:GET /passApi/js/wrapper.js?cdnversion=1630116179208&_=1630116178928 HTTP/1.1 Host: passport.baidu.com Connection: keep-alive sec-ch-ua: "Chromium";v="92", " Not A;Brand";v="99", "Google Chrome";v="92" sec-ch-ua-mobile: ?0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36 Accept: */* Sec-Fetch-Site: same-site Sec-Fetch-Mode: no-cors Sec-Fetch-Dest: script Referer: https://www.baidu.com/?tn=48021271_21_hao_pg Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9
2.响应消息:
HTTP/1.1 200 OK Connection: keep-alive Content-Encoding: gzip Content-Type: application/x-javascript Date: Sat, 28 Aug 2021 02:02:58 GMT Etag: W/"611e01ea-1948" Last-Modified: Thu, 19 Aug 2021 07:02:02 GMT Server: BWS Strict-Transport-Security: max-age=31536000 Tracecode: 01788550290681416458082810 Traceid: 1630116178051209089008182872117861831832 Vary: Accept-Encoding Transfer-Encoding: chunked
3.方法
- POST:
网页经常需要填写表格,在请求消息的消息体中上传客户端的输入 - GET:
输入信息通过request行的URL字段上传 - HEAD:
请求Server不要将所请求的对象放入响应消息中
HTTP/1.1又增加了两个方法
- PUT:
将消息体中的文件上传到URL字段所指定的路径 - DELETE:
删除URL字段所指定的文件
4.HTTP响应状态码
1.200 OK
2.301 Moved Permanently
3.400 Bad Request
4.404 Not Found
5.505 HTTP Version Not Supported应用层还有一个DHCP协议,这里暂时不介绍,等到网络层的时候再详细介绍。
- POST:
传输层
- 从通信和信息处理的角度来看,传输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最底层。
- 传输层的功能如下:
- 传输层提供应用进程之间的逻辑通信(端到端的通信),网络层提供的是主机之间的逻辑通信。
- 复用和分用。复用指发送方不同的应用进程都可以使用同一个传输层协议传送数据;分用是指接收方的传输层在剥去报文的首部后能把这些数据正确的交付到目的应用进程。
- 传输层还要对收到的报文的首部以及数据部分进行差错检测,网络层只是对首部进行差错检测。
- 提供两种不同的传输协议,即面向连接(什么是连接呢?)的TCP以及无连接的UDP,网络层无法同时实现两种协议。
1. UDP
UDP仅仅在IP的基础上增加了两个基本服务:复用和分用,以及差错检测,其优点如下:
- UDP无需建立连接,不会有建立连接的时延。
- 无连接状态,TCP需要在端系统中维护连接状态,而UDP则不需要花费一些资源在维护连接状态上。
- 分组首部开销小,TCP有20B的首部开销,而UDP只有8B的首部开销。
- 应用层能更好的控制要发送的数据和发送时间,UDP没有拥塞控制,所以网络中的拥塞不会影响主机的发送效率。
- UDP支持一对一、一对多、多对一和多对多的交互通信。像DNS就是基于UDP实现的。
UDP的数据报格式
UDP数据报包含两部分:UDP首部和用户数据,UDP首部有8B,由四个字段组成,每个字段的长度都是2B,各字段意义如下:- 源端口:源端口号,在需要对方回信时选用,不需要时可用全0.
- 目的端口:目的端口号。
- 长度:UDP数据报的长度,最小值为8。
- 检验和:检测UDP数据报是否有错,不计算检验和时,可以将其置为0。
UDP校验
1.发送方首先将全零放入校验和字段,并添加伪首部(不发送);
2.将UDP视为许多16为的字串接起来;
3.若UDP数据报的数据部分不是偶数个字节,则需要在数据部分末尾添一个全0字节(不发送);
4.然后按二进制反码计算出这些16位字的和,将此和的二进制反码写入校验和字段,并发送;
5.接收方将收到的UDP数据报加上伪首部(当然也可能需要补0),按二进制反码求这些16位字的和;
6.当无差错时,结果应为1,否则即有错,丢弃。
参考下图栗子:
这种差错检测方法的检错能力不强,但是简单,快捷。