900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 网络编程-TCP/IP协议栈-UDP/HTTP协议

网络编程-TCP/IP协议栈-UDP/HTTP协议

时间:2022-05-14 23:39:15

相关推荐

网络编程-TCP/IP协议栈-UDP/HTTP协议

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. /api/business/supremecourse/course.do:请求URL //3. HTTP/1.1:HTTP协议以及版本POST /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.0Accept: */*Cache-Control: no-cachePostman-Token: 4b0c8482-cce5-40e2-a7b9-a251378c6475Host: Accept-Encoding: gzip, deflate, brConnection: keep-aliveContent-Type: application/x-www-form-urlencodedContent-Length: 30zone: 1027071-liaojiaminHost: //以下报文体supremeCourseID=129&allow=true

HTTP请求方法
HTTP包含来多种不同的请求方法,每一种请求方式用在不同的场景
URL-- 统一资源定位符
URL由三部分组成:资源类型,存放资源的主机域名,资源文件名URL的一般语法格式为(带括号 [ ] 的是可选项目): protocol 😕/ hostname[:port] / path / [;parameters][?query]#fragment如上面HTTP请求案例中的URL:/api/business/supremecourse/course.do&supremeCourseID=129&allow=true protocol:httphostname:parameters:supremeCourseID=129&allow=truepath:api/business/supremecourse/course.do
HTTP请求头
请求头中主要包含本次请求的附加信息,其中常用的字段如下: Accept:指定客户端能够接受的内容类型Accept-Encoding:指定浏览器可以支持的web服务器返回内容压缩编码类型Accept-Language:浏览器可接受的语言Content-Length:请求的内容长度,如:Content-Length:348Content-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.5Date: Mon, 29 Jun 13:31:00 GMTContent-Type: application/json;charset=UTF-8Connection: keep-aliveVary: Accept-EncodingContent-Disposition: inline;filename=f.txtContent-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协议的实现原理

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。