Mainly used to record Java, DBMS, HDFS... related learning notes
socket就是封装了这一套基于tcp/udp/ip协议细节,提供了一系列套接字接口进行通信。
我们知道Socket有两种:TCP Socket和UDP Socket,TCP和UDP是协议,而要确定一个进程的需要三元组,还需要IP地址和端口。
建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。
协议
UDP是OSI参考模型中一种无连接的传输层协议,它主要用于不要求分组顺序到达的传输中,分组传输顺序的检查与排序由应用层完成 ,提供面向事务的简单不可靠信息传送服务。UDP 协议基本上是IP协议与上层协议的接口。UDP协议适用端口分别运行在同一台设备上的多个应用程序。
UDP提供了无连接通信,且不对传送数据包进行可靠性保证,适合于一次传输少量数据,UDP传输的可靠性由应用层负责。常用的UDP端口号有:
应用协议 端口号
DNS 53
TFTP 69
SNMP 161 UDP报文没有可靠性保证、顺序保证和流量控制字段等,可靠性较差。但是正因为UDP协议的控制选项较少,在数据传输过程中延迟小、数据传输效率高,适合对可靠性要求不高的应用程序,或者可以保障可靠性的应用程序,如DNS、TFTP、SNMP等。
协议
TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,用户数据报协议(UDP)是同一层内;另一个重要的传输协议。在因特网协议族(Internet protocol suite)中,TCP层是位于IP层之上,应用层之下的中间层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。
3次握手
4次挥手
URL(Uniform Resource Locator)
URL(Uniform Resource Locator) 地址用于描述一个网络上的资源,基 本格式 例如:https://baike.baidu.com/item/http/243074?fromtitle=%E8%B6%85%E6%96%87%E6%9C%AC%E4%BC%A0%E8%BE%93%E5%8D%8F%E8%AE%AE&fromid=8535513
schema://host[:port#]/path/…/?[url-params]#[ query-string]
参数解析 | 参数 | 含义 | | ———— | ——————————————————————————————————————- | | scheme | 指定应用层使用的协议(例如:http, https, ftp) | | host | HTTP服务器的IP地址或者域名 | | port | HTTP服务器的默认端口是80,这种情况下端口号可以省略。如果使用了别的端口,必须指明,例如http://www.gupaoedu.com:8080/ | | path | 访问资源的路径 | | query-string | 查询字符串 | | # | 片段标识符(使用片段标识符通常可标记出已获取资源中的子资源(文档内的某个位置)) |
URI(Uniform Resource Identifier)
每个 web 服务器资源都有一个名字,这样客户端就可以根据这个名字来找到对应的资源,这个资源称之为(统一资源标识符)
总的来说: URI 是用一个字符串来表示互联网上的某一个资源。而 URL 表示资源的地点(互联网 所 在的位置)
区别
URI包括URL和URN两个类别,URL是URI的子集,所以URL一定是URI,而URI不一定是URL
URI = Universal Resource Identifier 统一资源标志符,用来标识抽象或物理资源的一个紧凑字符串。 URL = Universal Resource Locator 统一资源定位符,一种定位资源的主要访问机制的字符串,一个标准的URL必须包括:protocol、host、port、path、parameter、anchor。 URN = Universal Resource Name 统一资源名称,通过特定命名空间中的唯一名称或ID来标识资源。
请求方法
请求方法 | 说明 |
---|---|
GET | 一般是用于客户端发送一个URI地址去获取服务端的资源(一般用于查询操作) |
POST | 一般用户客户端传输一个实体给到服务端,让服务端去保存(一般用于创建操作) |
PUT | 向服务器发送数据,一般用于更新数据的操作 |
HEAD | 用于向服务端发起一个查询请求获取 head 信息,比如获index.html的有效性、最近更新时间等。 |
DELETE | 客户端发起一个Delete请求要求服务端把某个数据删除(一般用于删除操作) |
OPTIONS | 查询指定URI支持的方法类型(get/post) |
HTTP 协议的特点
HTTP 协议是无状态的,什么是无状态呢?就是说 HTTP 协议本身不会对请求和响应之间的通信状态做保存。
如何实现有状态的协议
Http协议中引入了cookie技术,用来解决http协议无状态的问题。
过在请求和响应报文中写入Cookie 信息来控制客户端的状态;Cookie会根据从服务器端发送的响应报文内的一个叫做 Set-Cookie 的首部字段信息,通知客户端保存 Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入 Cookie 值后发送出去。 在基于 tomcat 这类的 jsp/servlet 容器中,会提供 session 这样的机制来保存服务端的对象状态;
HTTP 协议的缺陷
通信过程中是使用明文,内容可能会被窃听
不验证通信双方的身份
无法验证报文的完整性,报文可能被篡改
HTTPS 简介
由于HTTP协议通信的不安全性,所以人们为了防止信息在传输过程中遭到泄漏或者篡改,就想出来对传输通道进行加密的方式https。
https 是一种加密的超文本传输协议,它与 HTTP 在协议差异在于对数据传输的过程中,https对数据做了完全加密。由于http协议或者https协议都是处于TCP传输层之上,同时网络协议又是一个分层的结构,所以在tcp协议层之上增加了一层SSL(Secure Socket Layer,安全层)或者TLS(Transport Layer Security) 安全层传输协议组合使用用于构造加密通道;
| HTTP | | HTTP |
| TCP | | SSL |
| IP | | TCP |
| IP |
http组成 https组成