通信协议
- 客户端和服务器之间通信所需要遵循的某种规则
网络模型OSI(Open System Interconnnection)
- 该模型把把网络通信分为7层(物理层,数据链路层,网络层,传输层,会话层,表示层,应用层),是设计和描述计算机网络通信的基本架构。
- 在实际应用中一般只是用到4层。
TCP/IP网络模型
这个模型是一系列网络协议的总层,是互联网的基础
4个层次
- 链接层
- 对应的是物理层和数据链路层,主要负责监视数据在主机和网络之间的交换
- 主要协议
- 地址解析协议(ARP)
- 网络层
- 对应的是网络层,主要解决主机与主机之间的通信问题,所含网络通信协议设计数据包在网络行的逻辑传输。还负责数据包在多种网络之间的路由。
- 主要协议
- 网际协议(IP)
- 互联网管理协议(IGMP)
- 互联网控制报文协议(ICMP)
- 传输层
- 对应传输层,为应用实体提供端对端的通信功能,保证数据包的顺序传送和数据的完整性。
- 主要协议
- 传输控制协议(TCP)
- 用户数据报协议(UCP)
- 应用层
- 对用会话层,表示层,应用层,提供用户所需的各种服务
- 主要协议
- FTP
- Telnet
- DNS
- SMTP
- HTTP
- Socket
这些通信协议,保证了端对端网络通信的流畅,常用的TCP和UDP协议是传输层协议,区别很大
1. 面向连接的TCP
一种基于连接的协议,在双方通信传输数据之前,必须建立可靠的连接。(如双方通话前必须把电话接通)
- 通过三次对话建立连接(三次”握手“)Client A,Server B
- 客户端A询问服务器B: 发送请求建立连接数据包
- 服务器B应答客户端A:返回同意或者拒绝建立连接的数据包
- 若服务器同意,客户端则发送建立连接数据包,拒绝则会话结束。
经过上述的三次握手,双方建立了一条隐形的通信通道,这样双方的连接就不会断开,从而进行收发信号。
- 特点
- 面向连接:通信前要三次”握手“建立连接。
- 安全可靠:每一次通信都必须得到对方的应答,否则认为数据报丢失,需要重发。
- 全双工通信:一旦建立连接,双方都可以通过通道进行数据传输。
- 一对一:通信只能建立在两个点之间
- 面向流通信: 通信传输是通过流的形式进行。
2. 面向数据报的UDP
无需建立连接,只要指定目标地址,即可通过UDP向目标地址发送数据报。
由于没有建立可靠的连接,不保证数据包可以送到目的地,所以数据报可能丢失。
比TCP可以发送更大的数据报,并进行一对多的广播发送。
- 特点:
- 无连接:通信之前无需建立可靠的连接
- 数据无保障: UDP不对数据排序,数据报文头部无报文顺序信息,而且无需按顺序到达,可能造成报文混乱。
- 开销小:无连接,不保证报文送达和报文顺序,开销较小,而且速度更快。
- 一对一,一对多,多对多:无需连接,可以进行一对一通信,也可以进行一对多的广播通信和多对多的通信。
UDP和TCP的比较和应用场景
- 大多数情况下,如登录,支付,上传等,都需要服务器返回具体的执行结果以及判断是否成功,需要TCP。
- 在电视直播中,如果每一个帧或者几个帧画面都要直播服务器确认,会使得画面卡顿和一直占用网络带宽,应使用UDP。
3.HTTP编程
超文本传输协议,是应用最广泛的网络协议,几乎所有的www 文件都要遵守这个协议的标准。最初是为了提供一种HTML页面发布和接收的方法。
在这里插入图片描述
工作原理
- 客户端请求服务器建立连接并发出请求数据
- 服务器接收请求并发出应答数据,服务器接收到并进行处理,处理之后就返回数据并断开连接。
拓展知识:
- URL和URN 是URI的子集, 最常用的是URL。
- URI : Universal Resource Identifier 统一资源标识符
- 在某一规则下能把一个资源独一无二地标志出来。(像人们的身份证号一样,确定一个唯一的人)
- Web上,假设所有的Html文档都有唯一的编号,记作html:xxxxx,xxxxx是一串数字,即Html文档的身份证号码,这个能唯一标识一个Html文档,那么这个号码就是一个URI。
- URI一般由三部组成
①访问资源的命名机制
②存放资源的主机名
③资源自身的名称,由路径表示,着重强调于资源。
- RUL :Universal Resource Locator 统一资源定位符
- 是一个地址,唯一确定一个资源(括文件、服务器的地址和目录等),在Web上通过描述是哪个主机上哪个路径上的文件来唯一确定一个资源,也就是定位的方式来实现的URI。
- URN : Universal Resource Name 统一资源名称
访问网站的范例
- 客户端在浏览器输入网址,按回车键,浏览器封装URL到HTTP请求体并发送请求包给Web服务器。
- Wub服务器接收请求后建立连接,将请求体中的head和body体中的信息经过服务器逻辑处理后,返回HTML页面给客户端。
- 客户端接收到服务器返回信息结构体,从中读取HTML代码,断开连接。
- 服务器通过浏览器解析页面并呈现在浏览器上。
使用Java的net包进行简单的HTTP请求
- 接收外界传入的目的网站
- 的网址字符串根据网址创建包含地址信息的URL对象
- 将URL强制类型转换获取HttpURLConnection对象
- 然后对对象进行连接信息设置
- 获取到输入流,用流对象读取服务器传过来的相应内容。
- 在对应答数据执行客户端的业务逻辑
标志的HTTP支持六种请求方法:GET,POST,HEAD,PUT,DELETE,OPTIONS,最常用的是GET和POST方法。
GET和POST
- 客户端
- GET请求默认HttpURLCnnection的设置
- 接收目的服务器的网络地址字符串
- 构造URL对象
- 设置为GET请求方式
- 发起连接
- 创建流对象并从通道中读取服务器的应答信息
- 执行业务逻辑
- POST请求
- 接收目的服务器的网络地址字符串
- 调用HttpURLConnection的setRequestMethod方法为POST,并将SetDoOutput为true,并通过write方法写入参数到body体。(因为消息POST消息必须通过body传递参数)
- GET请求默认HttpURLCnnection的设置
- 服务端