计算机网络协议

计算机网络协议

计算机通信协议介绍

协议的标准化

1978年国际标准化组织(ISO)提出"开放系统互连参考模型",即著名的OSI/RM模型。它将计算机的结构通信协议划分为七层,自下而上依次为:

OSI七层模型

物理层
数据链路层
网络层
传输层
会话层
表示层
应用层

img

TCP/IP五层模型&TCP/IP四层模型

img

TCP,IP协议群

应用协议

运行在不同系统上的应用程序进程如何相互传递报文的协议

常见的应用协议:

FTP协议:
	文件传输协议-支持断点续传
HTTP协议:
	一个简单的请求响应协议
DNS协议:
	域名系统,域名和ip地址相互映射的一个分布式数据库
SNMP协议:
	简单网络管理协议:用于在IP网络管理网络节点

传输协议

屏蔽了网络层的核心细节,让应用程序看起来像是两个传输层实体 之间有一条端到端的逻辑信道。

TCP协议

传输控制协议,面向连接的,可靠的,基于字节流的传输层通信协议

提供可靠性传输,实行顺序控制,重发控制,流量控制,拥塞控制提高网络利用率

UDP协议

不具有可靠性的数据报文协议,可以确保发送消息的大小,不能保证消息一定会到达。

TCP和UDP区别

TCP用于在传输层必要实现可靠传输的情况;

UPD用于对高速传输和实时性比较高要求的通信或广播通信。

网际协议

网络层协议,包含寻址信息和控制信息,可使数据包在网络中路由。

IP协议

网际互联协议,寻找地址,管理分割数据片

ICMP协议

确认IP包是否成功送达目标地址,通知在发送过程中IP包被废弃的具体原因,改善网络设置等。

ARP协议

地址解析协议,位于TCP/IP协议群中的网络层,将某个IP地址解析成对应的MAC地址。主机将包含目标IP地址信息的ARP请求广播到网络中的所有主机,并接收返回消息,以此确定目标IP地址的物理地址。

TCP协议传输特点

一个可靠的传输协议,在创建连接时会经历三次握手,在断开连接时会经历四次挥手。

三次握手其实就是TCP应用在发送数据前,通过TCP协议跟通信方协商好连接信息,建立起TCP的连接关系。

建立连接的三次握手

建立一个TCP连接时需要客户端和服务端总共发送三个包以确认连接的建立。

img

第一次握手: 客户端发送 SYN报文,并进入 SYN SENT状态,等待服务器的确认;

第二次握手: 服务器收到 SYN报文,需要给客户端发送 ACK 确认报文,同时服务器也要向客户端发送一个 SYN 报文,所以也就是向客户端发送 SYN + ACK 报文,此时服务器进入 SYN RCVD状态;

第三次握手:客户端收到SYN +ACK报文,向服务器发送确认包,客户端进入ESTABLISHED 状态。待服务器收到客户端发送的ACK包也会进入ESTABLISHED状态,完成三次握手

断开连接的四次挥手

断开一个TCP时,需要客户端和服务端总共发送四个包以确认连接的断开。

img

第一次挥手。客户端发起 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 连接的时间要比客户端早一些。

服务端口

端口号用来识别计算机中进行通信的应用程序。也被称为程序地址。

一台计算机可以运行多个程序。传输层协议例用这些端口号是识别本机中正在进行通信的应用程序,并准确地进行数据传输。

img

端口分配

操作系统中一共提供了0~65535可用端口范围
按端口号分类

公认端口 (Well Known Ports) : 从0到1023,它们紧密绑定 (binding) 于一些服务。通常这些端口的通讯明确表明了某种服务的协议。例如: 8端口实际上总是HTTP通讯。

注册端口 (Registered Ports) : 从1024到65535。它们松散地绑定于一些服务。也就是说有许多服务绑定于这些端口,这些端口同样用于许多其它目的。例如: 许多系统处理动态端口从1024左右开始。

img

Mysql3306,tomcat8080,http80,oracle1521

数据包与处理流程

通心传说中的数据单位,也称数据包。

包括:包,帧,数据包,段,消息。

网络中传输的数据包分为两部分:

一部分是协议所要用到的首部

另一部分是上一层传过来的数据

img

数据包处理流程

img

HTTP协议简介

什么是超文本

用超链接的方法,将不同空间的文字信息组织在一起的网状文本。

什么是HTTP协议

超文本传输协议,万维网的数据通信的基础

运行在TCP之上,他指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。

HTTP基于TCP/IP通信协议来传递数据(HTML文件,图片文件,查询结果等)

HTTP协议特点

支持客户端/服务端模式

简单快速:客户端请求服务时,只需要传送请求方法和路径。协议简单,服务器程序规模小,通信速度快。

灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type标记

无连接:每请求一次,释放一次连接。所以无连接表示每次连接只能处理一个请求。(优点:节省传输时间,实现简单。无连接也叫短连接。HTTP 协议头部中字段:Connection:keep-alive表示支持长链接)

单向性:服务端永远是被动的等待客户的请求。

无状态:HTTP协议是无状态协议。无状态是指协议对事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据l量增大。另一方面。在服务器不需要先前信息时它的应答就较快。为了解决HTTP协议无状态,于是两种保持HTTP连接状态的技术就产生了,一个是Cookie,另一个是Session。

HTTP协议发展和版本

img

HTTP1.1

支持长连接

img

HTTP2.0

支持长连接

支持多路复用

img

首部压缩

由于1.1中header带有大量的信息,并且得重复传输,2.0使用encoder来减少需要传输的hearder大小。

服务端推送

服务端可以在客户端某个请求后,主动推送其他资源

更安全

通过黑名单机制禁用了不再安全的加密算法

img

HTTP协议中的URI,URL,URN

URI

同一资源标识符,用于标识互联网某个唯一资源的字符串名称。

URL和URN都是URI的子集;

img

URI是个纯粹的语法结构,用于指定标识Web资源的字符串的各个不同部分。他不属于定位符,因为根据该标识符无法定位任何资源。

URL

统一资源定位符,可以帮助我们定位互联网上的某一个唯一资源。

URL的五个元素包括在一个简单的地址中。

传送协议
服务器(域名或ip)
端口号
请求资源路径
传递数据。(在URL中传递数据是以key=value的结构进行数据绑定,以“?”字符为起点,每个参数以“&”隔开,再以“=”分开参数名称与数据,通常以UTF8的URL编码,避开字符冲突的问题

URN

URN (Uniform Resource Name,) 统一资源名称,其目的是通过提供一种途径,用于在特定的命名空间资源的标识,以补充网址。

HTTP协议的请求

HTTP协议中的请求信息

打开一个网页需要浏览器发送很多次Request

请求状态分析(request)

request消息分为三部分;

request line

request header

request body

request header和request body之间有一个空行

img

img

img

请求行

GET /course/id/18.html?a=3&b=4 HTTP/1.1
POST /login HTTP/1.1

请求头

请求头用于说明是谁或什么在发送请求、请求源于何处,或者客户端的喜好及能力。服务器可以根据请求头部给出的客户端信息,试着为客户端提供更好的响应。请求头中信息的格式为key: value。

Host
客户端指定自己想访问的WEB服务器的域名/IP 地址和端口号

Connection
连接方式。如果值是close则表示基于短连接方式,如果该值是keep-alive,网络连接就在一定时间范围内是不会关闭,使得对同一个服务器的请求可以继续在该连是持久的,接上完成

Upgrade-Insecure-Requests服务端是否支持https加密协议。

Cache-Control指定请求和响应遵循的缓存机制

User-Agent
浏览器表明自己的身份 (是哪种浏览器) 。例如Chrome浏览器: Mozilla/5.0(Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)Chrome/81.0.4044.129 Safari/537.36.

Accept
告诉WEB服务器自己接受什么介质类型,/表示任何类型,type/* 表示该类型下的所有子类型。

Accept-Encoding
浏览器申明自己接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法 (gzip,deflate)。

Accept-Language
浏览器申明自己接收的语言。语言跟字符集的区别:中文是语言,中文有多种字符集比如big5,gb2312,gbk等

Referer
表示浏览器应该在多少时间之后刷新文档,以秒计时

Cookie
可向服务端传递数据一种模型

请求体

客户端传递给服务器的数据

img

请求方式

GET

向指定的资源发出“显示”请求。GET请求中会将请求中传递的数据包含在URL中并在浏览器的地址栏中显示。GET请求传递数据时要求数据必须是字符。GET请求可以被浏览器缓存。

POST

向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求传递数据时,数据可以是字符也可以是字节型数据,默认为字符型。POST请求默认情况下不会被浏览器所缓存。

向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头度中的元信息。

PUT

向指定资源位置上传其最新内容

DELETE

请求服务器删除Request-URI所标识的资源

GET和POST的区别

  1. GET在浏览器回退时是无害的,而POST会再次提交请求
  2. GET产生的URL地址可以被Bookmark,而POST不可以。
  3. GET请求会被浏览器主动cache,而POST不会,除非手动设置。
  4. GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留
  5. GET请求在URL中传送的参数是有长度限制的,而POST则没有。对参数的数据类型GET只接受ASCII字符,而POST即可是字符也可是字节。
  6. GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
  7. GET参数通过URL传递,POST放在Request body中

HTTP协议的响应

HTTP协议中的响应信息

服务端接收到客户端的请求消息,并将处理信息返回给客户端,以此来表示响应。当服务器收到浏览器的请求后,会发送响应消息给浏览器。一个完整的响应消息主要包括响应行、响应头信息和响应体。

响应状态分析

Response消息也由三部分组成: 第一部分叫Response line、第二部分叫Responseheader、第三部分叫Response body。
服务端为浏览器返回消息格式如下

img

img

响应行

img

响应行:

HTTP/1.1 200 OK

响应行中的状态码

和请求消息相比,响应消息多了一个“响应状态码”,它以“清晰明确”的语言告诉客户端本次请求的处理结果

http状态码分类

img

常见状态码及含义

200 - 请求成功,已经正常处理完毕
301 - 请求永久重定向,转移到其它URL
302 - 请求临时重定向
304- 请求被重定向到客户端本地缓存
400-客户端请求存在语法错误
401-客户端请求没有经过授权
403-客户端的请求被服务器拒绝,一般为客户端没有访问权限
404- 资源未找到,客户端请求的URL在服务端不存在
500- 服务端出现异常

响应头

响应头用于告知浏览器当前响应中的详细信息,浏览器通过获取响应头中的信息可以知道应该如何处理响应结果。响应头中信息的格式为key: value。

Date
响应的Date使用的是GMT时间格式,表示响应消息送达时间

Server
服务器通过这个Server告诉浏览器服务器的类型

Vary
客户端缓存机制或者是缓存服务器在做缓存操作的时候,会使用到Vary头,会读取响应头中的Vary的内容,进行一些缓存的判断。

Content-Encoding
文档的编码(Encode)方式。用gzip压缩文档能够显著地减少HTML文档的响应时间。

Content-Length
表示内容长度。只有当浏览器使用持久HTTP连接时才需要这个数据

Content-Type
表示响应的文档属于什么MIME类型

响应体

响应体就是响应的消息体,如果是纯数据就是返回纯数据,如果请求的是HTML页面,那么返回的就是HTML代码,如果是JS就是JS代码,如此之类

MIME类型

什么是MIME类型

MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。

MIME类型的作用

HTTP协议所产生的响应中正文部分可以是任意格式的数据,那么如何保证接收方能看得懂发送方发送的正文数据呢? HTTP协议采用MIME协议来规范正文的数据格式

MIME类型的使用

在服务端我们可以设置响应头中Content-Type的值来指定响应类型

MIME类型对应列表

img

img

posted @ 2023-05-01 20:13  YxinHaaa  阅读(20)  评论(0编辑  收藏  举报