UDP协议
-
UDP协议全称是用户数据报协议,在网络中她与TCP协议一样用于处理数据包,两个协议同处于协议栈的传输层,和TCP不同的是,UDP是一种无连接的协议栈。
-
因为UDP是无连接的,所以相对来说,UDP的报头比TCP要简单的多了。如下图:
-
UDP特点:
- 第一UDP是一个非连接的协议,传输数据之前源端口和终端不建立连接,当他想传送时就简单的去抓取来自应用城西的数据,并尽可能快的把他扔在网络上,在发送端,UDP传送数据的速递仅仅是受应用程序生成数据的速度,计算机的计算能力,和传输带宽的现在;在接受端,UDP吧每个消息段放再队列中,应用程序每次从队列中读一个消息段。
- 由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一天服务器可以同时向多个客户端传输相同的消息
- UDP信息包的标题短,只有8字节,相对于TCP的20字节信息包的额外开销很小
- 吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率,传输带宽,源端和终端主机性能的限制
- UDP使用尽量大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态表(这个表中有许多参数)
- UDP是面向报文的,发送方的UDP对应应用程序交下来的报文,在添加首部后就向下交付给IP层,即不拆分,也不合并,而是保留这些报文的边界,因此,应用程序需要选择合适的报文大小。
-
我们经常用PING命令来测试两台主机之间TCP/IP通信是否正常,其实PING命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的信息及时反馈回来,那么网络就是通的。
HTTP协议
- HTTP协议名为超文本传输协议。这个协议在TCP/IP协议栈的应用层,因此,我们无需关系HTTP是如何传输的,只需要看我们传输的内容,能否正确的被接收端识别。
- HTTP是基于TCP实现的,简单说来,TCP协议负责可靠的内容传输,HTTP协议负责识别内容,两者本身不在一个层面,没有可比性。
- HTTP是无状态的意思是,每一次的内容解析是没有关联的。TCP有状态是指两端在连接过程的时候是有在连接中的状态
- HTTP包含两种报文类型,请求报文,响应报文。
- 请求报文用在客户端对服务器的请求时候使用的报文格式
- 响应报文用在服务响应请求的报文格式
HTTP协议请求消息结构
- 客户端发生一个HTTP请求奥服务器的请求消息包括一下格式:请求行(request line),请求头部(header),空行和请求数据四个部分组成,下图给出了请求报文的一般格式。
- 如上图所示HTTP消息主要包含以下实质内容(空格和换行也不能少):
- 请求方法
- URL:统一资源定位符
- HTTP请求头部
- HTTP请求体
- 以下是一个HTTP请求的例子,从Fiddler抓包工具中抓出来的一个请求案例。
//1. post:请求方法
//2. http://edu.zhenai.com/api/business/supremecourse/course.do:请求URL
//3. HTTP/1.1:HTTP协议以及版本
POST http://edu.zhenai.com/api/business/supremecourse/course.do HTTP/1.1
//以下报文头部
Cookie: token=506188.1587368100293.ef83f599f1a54833d0cc5124da98140a.test; token=506188.1587368100293.ef83f599f1a54833d0cc5124da98140a.test; sid=88TIsgom9Xqw3GMLTDv0;
User-Agent: PostmanRuntime/7.25.0
Accept: */*
Cache-Control: no-cache
Postman-Token: 4b0c8482-cce5-40e2-a7b9-a251378c6475
Host: edu.zhenai.com
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 30
zone: 1027071-liaojiamin
Host: edu.zhenai.com
//以下报文体
supremeCourseID=129&allow=true
HTTP请求方法
- HTTP包含来多种不同的请求方法,每一种请求方式用在不同的场景
序号 | 方法 | 描述 |
---|---|---|
1 | GET | 请求指定页面信息,并放回实体主体 |
2 | HEAD | 类似get请求,不过返回的响应中没有具体的内容,用于获取报头 |
3 | POST | 向指定资源提交数据进行处理请求(例如提交表达或者上传文件),数据被包含在请求体中,POST请求可能会操作新的资源的建立和/或已有资源的修改 |
4 | PUT | 从客户端想服务器传送的数据取代指定的文档内容 |
5 | DELETE | 请求服务器删除指定内容 |
6 | CONNECT | HTTP1.1协议中预留给能够将连接改为管道方式的代理服务器 |
7 | OPTIONS | 允许客户端查看服务器的性能 |
8 | TRACE | 回显服务器收到的请求,主要用于测试或诊断 |
URL-- 统一资源定位符
- URL由三部分组成:资源类型,存放资源的主机域名,资源文件名
- URL的一般语法格式为(带括号 [ ] 的是可选项目): protocol 😕/ hostname[:port] / path / [;parameters][?query]#fragment
- 如上面HTTP请求案例中的URL:http://edu.zhenai.com/api/business/supremecourse/course.do&supremeCourseID=129&allow=true
- protocol:http
- hostname:edu.zhenai.com
- parameters:supremeCourseID=129&allow=true
- path:api/business/supremecourse/course.do
HTTP请求头
- 请求头中主要包含本次请求的附加信息,其中常用的字段如下:
- Accept:指定客户端能够接受的内容类型
- Accept-Encoding:指定浏览器可以支持的web服务器返回内容压缩编码类型
- Accept-Language:浏览器可接受的语言
- Content-Length:请求的内容长度,如:Content-Length:348
- Content-Type:请求的与实体对于的MIME信息,常用的类型也有很多中,如下表信息中列出
- Date:请求发送日期和时间
更多的HTTP响应头和请求头信息对照表
//Content-type常用类型
text/html:HTML格式
text/plain:纯文本格式
text/xml:xml格式
image/gif:gif图片格式
image/jpeg:jpg图片格式
image/png:png图片格式
//以为application开头的媒体格式类型:
application/xhtml+xml:XHTML格式
application/xml:xml数据格式
application/atom+xml:atom xml聚合格式
application/pdf:pdf格式
application/msword:word文档格式
application/octet-stream:二进制流数据
application/x-www-form-urlencoded:form表达数据被编码后送到服务器
HTTP请求体
- 在整个报文中,请求头之后,隔一个空格,以下部分就是HTTP的请求体。
- 请求体是我们发送请求的时候需要传给接收端的内容。其格式需要和请求头中的Content-Type对应,不日回导致接受无法识别。如上案例中的请求体:supremeCourseID=129&allow=true
HTTP响应
- HTTP的响应统一分为:响应行,响应头,响应体,和请求报文有点类似。总体结构如下:
// 状态行,用于描述服务器对请求的处理结果
HTTP/1.1 200 OK
// 多个响应头:响应头用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理之后他返回的数据
Server: nginx/1.15.5
Date: Mon, 29 Jun 2020 13:31:00 GMT
Content-Type: application/json;charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
Content-Disposition: inline;filename=f.txt
Content-Length: 2166// 此处保留一个空行
//实体内容:代表服务器向客户端返回的数据信息。
{"data":{"msg":"获取成功",......}
HTTP响应行
- 响应行中包含来HTTP的版本和本次请求的状态,请求状态的对于值见其他资源HTTP响应码
HTTP响应头
- 响应头用于描述服务器的基本信息,数据的描述,这些信息将告知客户端如何处理响应题中的内容
- Allow服务器支持哪些请求方法(GET,POST)
- Content-Encoding 文档的编码(Encode)方法。
- Content-Length 表示内容长度。
- Content-Type 表示后面的文档属于什么MIME类型。
更多的响应头字段参考资源HTTP响应头和请求头信息对照表
HTTP响应实体
- 响应实体中包含的就是客户端从服务器中获取的数据。数据的格式和长度都会在响应头中描述。
上一篇 网络编程-TCP/IP协议栈-TCP协议
下一篇 网络编程-HTTPS协议的实现原理