计算机网络协议
1|0计算机网络协议
1|1计算机通信协议介绍
协议的标准化
1978年国际标准化组织(ISO)提出"开放系统互连参考模型",即著名的OSI/RM模型。它将计算机的结构通信协议划分为七层,自下而上依次为:
OSI七层模型
TCP/IP五层模型&TCP/IP四层模型
1|2TCP,IP协议群
应用协议
运行在不同系统上的应用程序进程如何相互传递报文的协议
常见的应用协议:
传输协议
屏蔽了网络层的核心细节,让应用程序看起来像是两个传输层实体 之间有一条端到端的逻辑信道。
TCP协议
传输控制协议,面向连接的,可靠的,基于字节流的传输层通信协议
提供可靠性传输,实行顺序控制,重发控制,流量控制,拥塞控制提高网络利用率
UDP协议
不具有可靠性的数据报文协议,可以确保发送消息的大小,不能保证消息一定会到达。
TCP和UDP区别
TCP用于在传输层必要实现可靠传输的情况;
UPD用于对高速传输和实时性比较高要求的通信或广播通信。
网际协议
网络层协议,包含寻址信息和控制信息,可使数据包在网络中路由。
IP协议
网际互联协议,寻找地址,管理分割数据片
ICMP协议
确认IP包是否成功送达目标地址,通知在发送过程中IP包被废弃的具体原因,改善网络设置等。
ARP协议
地址解析协议,位于TCP/IP协议群中的网络层,将某个IP地址解析成对应的MAC地址。主机将包含目标IP地址信息的ARP请求广播到网络中的所有主机,并接收返回消息,以此确定目标IP地址的物理地址。
1|3TCP协议传输特点
一个可靠的传输协议,在创建连接时会经历三次握手,在断开连接时会经历四次挥手。
三次握手其实就是TCP应用在发送数据前,通过TCP协议跟通信方协商好连接信息,建立起TCP的连接关系。
建立连接的三次握手
建立一个TCP连接时需要客户端和服务端总共发送三个包以确认连接的建立。
第一次握手: 客户端发送 SYN报文,并进入 SYN SENT状态,等待服务器的确认;
第二次握手: 服务器收到 SYN报文,需要给客户端发送 ACK 确认报文,同时服务器也要向客户端发送一个 SYN 报文,所以也就是向客户端发送 SYN + ACK 报文,此时服务器进入 SYN RCVD状态;
第三次握手:客户端收到SYN +ACK报文,向服务器发送确认包,客户端进入ESTABLISHED 状态。待服务器收到客户端发送的ACK包也会进入ESTABLISHED状态,完成三次握手
断开连接的四次挥手
断开一个TCP时,需要客户端和服务端总共发送四个包以确认连接的断开。
第一次挥手。客户端发起 FIN包 (FIN = 1),客户端进入 FIN_WAIT_1 状态。TCP 规定即使 FIN包不携带数据,也要消耗一个序号。
第二次挥手。服务器端收到 FIN包,发出确认包 ACK (ack = u + 1),并带上自己的序号 seg=V,服务器端进入了 CLOSE WAIT状态。这个时候客户端已经没有数据要发送了,不过服务器端有数据发送的话,客户端依然需要接收。客户端接收到服务器端发送的 ACK后,进入了FIN_WAIT_2状态。
第三次挥手。服务器端数据发送完毕后,向客户端发送FIN包 (seq=w ack=u+1),半连接状态下服务器可能又发送了一些数据,假设发送 seq 为 w。服务器此时进入了LAST ACK状态。
第四次挥手。客户端收到服务器的 FIN包后,发出确认包 (ACK=1,ack=w+1) ,此时客户端就进入了TIME WAIT状态。注意此时 TCP 连接还没有释放,必须经过2*MSL后,才进入CLOSED状态。而服务器端收到客户端的确认包ACK后就进入了CLOSED状态,可以看出服务器端结束 TCP 连接的时间要比客户端早一些。
1|4服务端口
端口号用来识别计算机中进行通信的应用程序。也被称为程序地址。
一台计算机可以运行多个程序。传输层协议例用这些端口号是识别本机中正在进行通信的应用程序,并准确地进行数据传输。
端口分配
操作系统中一共提供了0~65535可用端口范围
按端口号分类
公认端口 (Well Known Ports) : 从0到1023,它们紧密绑定 (binding) 于一些服务。通常这些端口的通讯明确表明了某种服务的协议。例如: 8端口实际上总是HTTP通讯。
注册端口 (Registered Ports) : 从1024到65535。它们松散地绑定于一些服务。也就是说有许多服务绑定于这些端口,这些端口同样用于许多其它目的。例如: 许多系统处理动态端口从1024左右开始。
Mysql3306,tomcat8080,http80,oracle1521
1|5数据包与处理流程
通心传说中的数据单位,也称数据包。
包括:包,帧,数据包,段,消息。
网络中传输的数据包分为两部分:
一部分是协议所要用到的首部
另一部分是上一层传过来的数据
数据包处理流程
1|6HTTP协议简介
什么是超文本
用超链接的方法,将不同空间的文字信息组织在一起的网状文本。
什么是HTTP协议
超文本传输协议,万维网的数据通信的基础
运行在TCP之上,他指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。
HTTP基于TCP/IP通信协议来传递数据(HTML文件,图片文件,查询结果等)
1|7HTTP协议特点
支持客户端/服务端模式
简单快速:客户端请求服务时,只需要传送请求方法和路径。协议简单,服务器程序规模小,通信速度快。
灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type标记
无连接:每请求一次,释放一次连接。所以无连接表示每次连接只能处理一个请求。(优点:节省传输时间,实现简单。无连接也叫短连接。HTTP 协议头部中字段:Connection:keep-alive表示支持长链接)
单向性:服务端永远是被动的等待客户的请求。
无状态:HTTP协议是无状态协议。无状态是指协议对事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据l量增大。另一方面。在服务器不需要先前信息时它的应答就较快。为了解决HTTP协议无状态,于是两种保持HTTP连接状态的技术就产生了,一个是Cookie,另一个是Session。
1|8HTTP协议发展和版本
HTTP1.1
支持长连接
HTTP2.0
支持长连接
支持多路复用
首部压缩
由于1.1中header带有大量的信息,并且得重复传输,2.0使用encoder来减少需要传输的hearder大小。
服务端推送
服务端可以在客户端某个请求后,主动推送其他资源
更安全
通过黑名单机制禁用了不再安全的加密算法
1|9HTTP协议中的URI,URL,URN
URI
同一资源标识符,用于标识互联网某个唯一资源的字符串名称。
URL和URN都是URI的子集;
URI是个纯粹的语法结构,用于指定标识Web资源的字符串的各个不同部分。他不属于定位符,因为根据该标识符无法定位任何资源。
URL
统一资源定位符,可以帮助我们定位互联网上的某一个唯一资源。
URL的五个元素包括在一个简单的地址中。
URN
URN (Uniform Resource Name,) 统一资源名称,其目的是通过提供一种途径,用于在特定的命名空间资源的标识,以补充网址。
1|10HTTP协议的请求
HTTP协议中的请求信息
打开一个网页需要浏览器发送很多次Request
请求状态分析(request)
request消息分为三部分;
request line
request header
request body
request header和request body之间有一个空行
请求行
GET /course/id/18.html?a=3&b=4 HTTP/1.1
POST /login HTTP/1.1
请求头
请求头用于说明是谁或什么在发送请求、请求源于何处,或者客户端的喜好及能力。服务器可以根据请求头部给出的客户端信息,试着为客户端提供更好的响应。请求头中信息的格式为key: value。
请求体
客户端传递给服务器的数据
1|11请求方式
GET
向指定的资源发出“显示”请求。GET请求中会将请求中传递的数据包含在URL中并在浏览器的地址栏中显示。GET请求传递数据时要求数据必须是字符。GET请求可以被浏览器缓存。
POST
向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求传递数据时,数据可以是字符也可以是字节型数据,默认为字符型。POST请求默认情况下不会被浏览器所缓存。
HEAD
向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头度中的元信息。
PUT
向指定资源位置上传其最新内容
DELETE
请求服务器删除Request-URI所标识的资源
GET和POST的区别
- GET在浏览器回退时是无害的,而POST会再次提交请求
- GET产生的URL地址可以被Bookmark,而POST不可以。
- GET请求会被浏览器主动cache,而POST不会,除非手动设置。
- GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留
- GET请求在URL中传送的参数是有长度限制的,而POST则没有。对参数的数据类型GET只接受ASCII字符,而POST即可是字符也可是字节。
- GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
- GET参数通过URL传递,POST放在Request body中
1|12HTTP协议的响应
HTTP协议中的响应信息
服务端接收到客户端的请求消息,并将处理信息返回给客户端,以此来表示响应。当服务器收到浏览器的请求后,会发送响应消息给浏览器。一个完整的响应消息主要包括响应行、响应头信息和响应体。
响应状态分析
Response消息也由三部分组成: 第一部分叫Response line、第二部分叫Responseheader、第三部分叫Response body。
服务端为浏览器返回消息格式如下
1|13响应行
响应行:
HTTP/1.1 200 OK
响应行中的状态码
和请求消息相比,响应消息多了一个“响应状态码”,它以“清晰明确”的语言告诉客户端本次请求的处理结果
http状态码分类
常见状态码及含义
1|14响应头
响应头用于告知浏览器当前响应中的详细信息,浏览器通过获取响应头中的信息可以知道应该如何处理响应结果。响应头中信息的格式为key: value。
1|15响应体
响应体就是响应的消息体,如果是纯数据就是返回纯数据,如果请求的是HTML页面,那么返回的就是HTML代码,如果是JS就是JS代码,如此之类
1|16MIME类型
什么是MIME类型
MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
MIME类型的作用
HTTP协议所产生的响应中正文部分可以是任意格式的数据,那么如何保证接收方能看得懂发送方发送的正文数据呢? HTTP协议采用MIME协议来规范正文的数据格式
MIME类型的使用
在服务端我们可以设置响应头中Content-Type的值来指定响应类型
MIME类型对应列表
__EOF__
作 者:YXH
出 处:https://www.cnblogs.com/YxinHaaa/p/17366950.html
关于博主:编程路上的小学生,热爱技术,喜欢专研。评论和私信会在第一时间回复。或者直接私信我。
版权声明:署名 - 非商业性使用 - 禁止演绎,协议普通文本 | 协议法律文本。
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」