TCP/IP HTTP

简介: TCP/IP HTTP

不得不提的TCP/IP协议,TCP/IP不是两个协议,而是一整个协议栈;#


TCP/IP包含如下图四层:其中每一层都使用着一个或者多个协议,遵循这些协议就可以实现不同设备之间的轻松通信


  • 应用层(Http协议 DNS协议 Email协议...)
  • 传输层(TCP协议 UDP协议)
  • 网络层 (IP协议 )
  • 网络接口层(设备的驱动程序+接口卡)


其中TCP(transfer control protocol)协议是传输层的协议,他是面向连接的,基于字节流的传输通信协议, Java对Tcp的支持体现在它的网络编程包中的SocketServerSocket的封装.


特点:

  1. 面向连接的(三次捂手建立连接,四次挥手释放连接)
  2. 点对点的通信
  3. 高可靠(得益于第一个特点)
  4. 占用的系统资源多,效率低


在java的网络通信中,Tcp基于字节流进行数据包的传输, 客户端的Socket和服务端的ServerSocket内置了输入输出流,都过彼此的IO流进行通信


TCP的三次握手和四次挥手#



三次握手#


假设A B两个客户端进行数据的传输,在真正进行数据的传输之前,两者会用问答式的方式建立连接


  1. 第一次握手: A向B发送了一段数据(包含了SYN,全称同步序列号,这是请求建立握手的信息),然后呢,A问了B一个问题,说:"B,你想用哪个同步序列号作为起始字段的数据包回复我呢?"
  2. 第二次握手: B收到了A的请求,B呢也没闲着,他做了两件事,首先,它回复A说:"我收到你的请求了,这是我的ACK+SYN",然后呢,他也问了A一个问题:"你要用哪个序列号作为起始字段回应我呢?"
  3. 第三次握手: A收到了B的响应,说:"我已经收到了你的回复,现在我要开始真正传输数据了"


相对于UDP协议, 从上面的过程可以看出, 基于TCP协议的所建立的连接是安全可靠的, 在传输数据之间保证两者之间都是健康存在的. 而UDP截然相反,面向无连接,发送端可不管接收端是否健康,只管发送自己的数据包,让数据包根据自己身上的地址去找接受自己的人,要是接收端的程序已经挂掉了,这样数据包也就丢失了.

仅仅是上面的三次握手,数据的传输就一定是安全的吗? 假如三次握手之后,发送端发送出了异常的数据呢? 当然不是,进行数据交互的双方存在确认应答机制 如下图:



当接收端接受到数据后,会告诉发送端自己所期望的下一个数据序号时,这个机制称为确认应答机制,一旦发送端收到收到某个确认应答之后,又连续接到了三个相同的确认应答的信号,那么发送端就知道了发送出现了异常,于是重新根据确认应答的信号进行重新发送


四次挥手#


A B 完成了数据的传输后,通过彼此之间的四次挥手,告诉彼此,本次连接正常结束

  1. 第一次挥手: 作为发送端的A,它发送完了数据之后把FIN(希望断开连接的标志)置为1,告诉B,我要准备断开连接了
  2. 第二次挥手: B收到了A发过来的请求断开连接的请求,把ACK置为1,告诉A,我知道你的请求了
  3. 第三次挥手: B向A提出关闭连接的请求,将FIN置为1
  4. 第四次挥手: A接受到B的确认关闭信息,把ACK置为1,告诉B双方的连接到此结束


为什么握手需要三次,但是挥手需要四次呢?#


三次握手与四次挥手相比,后者多出来了一次向发送端的发送确认断开的会话,当客户端请求断开的时候,服务端仅仅是回复他,自己收到请求的,但是它不会立即断开,它会等本轮发送的数据包完全发送过去才会断开连接.接着,当全部数据发送过去之后,服务端再次向客户端发送FIN+ACK 告诉它,可以断开了,于是就多了一次挥手


为什么不能进行两次握手连接呢?#


两次握手少了一次确认机制,假设依然是A,B进行IO数据交互,同样是A先发起请求,A对B说,老哥,我想问你要点数据,这是我的SYN ,B接收到了,跟A说,好的老弟,这是我的应答分组序号, 然而,B发送给A的消息丢包了,A并没有建立和B的连接,但是B却认为A已经ok了,于是B开始发送数据, 发送给A的数据全部被A忽略掉,B就出现了数据发送的超时,再重新发送就出现了死锁的现象

点击进入:参考链接


HTTP协议(Hyper Text Transfer Protocol)#


  • http协议是应用层的协议,所有的www文件全部遵循这个协议
  • HTTP协议的底层使用的TCP/IP协议


也就是说,在Java中那些web服务器底层使用的是SocketServerSocket 去和浏览器发起的HTTP请求进行交互


历史版本#


http 1.0 服务器返回了客户端的信息后,连接直接断掉

http 1.1 服务器返回客户端的信息后,连接依然保持着


两个部分#


下面主要是介绍两种协议的数据格式,以及各自的特点

  1. 请求协议
  2. 响应协议:


  • 请求行: 方法(GET/POST) ,URL, 协议/版本
  • 请求头:(Request Header)
  • 请求正文: (请求正文一般是POST的内容,或者是上传文件的时候,携带的文件的内容)


GET:

  1. 在地址栏上拼接数据(所以它会有安全隐患),一般想从服务器获取数据,会用GET
  2. 携带的数据量有限,一般是1kb左右


下面的一段是浏览器的请求信息, 分为三部分
// 请求行  GET: 请求方式   请求路径/login     请求参数: ?username=zhangsan&age=123  协议:HTTP/1.1
GET /login?username=zhangsan&age=123 HTTP/1.1
// 请求头
Host: localhost:9999
// 连接方式,保持连接
Connection: keep-alive
// 缓存控制: no-cache 表示每次请求越过缓存,直接从服务器获取数据
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36
// 表示客户端告诉服务端自己支持接收什么类型的数据
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
// 告诉服务器,我们的浏览器支持什么类型的加密算法
Accept-Encoding: gzip, deflate, br
// 支持的语言和编码
Accept-Language: zh,en;q=0.9,zh-CN;q=0.8
Cookie: Idea-9a19dbcd=4a7969e9-f4db-4e10-aa71-f62f0a2168d4; Webstorm-9d134285=fbf822dc-0178-401c-b371-47dc0dd1f169
// 请求体


POST:

  1. 数据是用流的方式写出去的,不会在地址栏显示.
  2. 提交给服务器的数据会在请求体里面,一般是没有大小限制的,POST提交数据的方式,有一个属性叫做:Content-Length: XXX 标记本次提交的请求体的大小
  3. 请求头和请求体之间存在一个换行符


// 请求行
POST /register HTTP/1.1
// 下面到情最下的空格之前,都是请求头
// 主机地址
Host: localhost:9999
// 用户代理,向客户端表示来访的客户端的信息,(IE8 9 等),服务端会根据不同的用User-Agent 返回适应客户端的界面
User-Agent: insomnia/6.5.4
Cookie: LY_TOKEN=eyJhbGciOiJSUzI1NiJ9.eyJpZCI6MjksInVzZXJuYW1lIjoiYWRtaW4iLCJleHAiOjE1NTI2MzM2NTF9.FQujeLEJui5wwNLMhJSLKsVOuoZoXETpVAA3L-B35SESOUpaIo0WMriZoTaYiN-R_wokYbXcHXkYfbealbvOa5cX_fheiKmlu67-4HqWHYT_po-F-2PMajN7awHkX9R3Zuc1NqxVmmhqJ0Wb1w_lw1mEAj8CWV8yZZoVbE9525g
// 请求的体的类型: application/json 表示json数据   application/x-www-form-urlencoded   表示经过urlencoded编码的form表单
Content-Type: application/json
Accept: */*
// 数据的长度
Content-Length: 17
// 请求体
{"name":"张三"}


响应协议:

  • 状态行: 协议/版本 状态码
  • 响应头(Response Header)
  • 响应正文


响应行
HTTP/1.1 200 OK
响应头
Server: server-name  // 服务器的类型
Content-Type: text/html;charset=utf-8   // 响应给客户端的内容
Content-Length: XXX // 响应内容的长度
Date: XXX  // 响应日期
响应体  
XXX   // 响应体


常见的响应:

1、状态行格式如下:

HTTP-Version Status-Code Reason-Phrase CRLF

其中,HTTP-Version表示服务器HTTP协议的版本;Status-Code表示服务器发回的响应状态代码;Reason-Phrase表示状态代码的文本描述。

状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:

1xx:指示信息--表示请求已接收,继续处理

2xx:成功--表示请求已被成功接收、理解、接受

3xx:重定向--要完成请求必须进行更进一步的操作

4xx:客户端错误--请求有语法错误或请求无法实现

5xx:服务器端错误--服务器未能实现合法的请求

常见状态代码、状态描述、说明:

200 OK //客户端请求成功

400 Bad Request //客户端请求有语法错误,不能被服务器所理解

401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用

403 Forbidden //服务器收到请求,但是拒绝提供服务

404 Not Found //请求资源不存在,eg:输入了错误的URL

500 Internal Server Error //服务器发生不可预期的错误

503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

eg:HTTP/1.1 200 OK (CRLF)

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
6天前
免费HTTP代理IP对业务稳定性的影响关键因素分析
随着互联网发展,使用代理IP的需求增加。免费代理IP虽便捷,但对业务稳定性有负面影响:1. 网络连接不稳定,易中断;2. 频繁更换IP影响业务连续性;3. 性能差,速度慢、响应延迟高;4. 服务质量低,缺乏技术支持且存在不受控的限制。因此,选择代理服务时需谨慎评估其对业务的影响。
39 13
|
2天前
|
数据采集 安全 搜索推荐
HTTP代理IP纯净度 提升用户网络体验的核心竞争力
随着互联网发展,使用HTTP动态代理IP的需求日益增加。高纯净度的代理IP在隐私与安全、网络体验和业务运营方面至关重要。它能保护用户信息、提高数据安全性、确保访问速度和连接稳定,并提升业务效率与信誉度。
16 2
|
15天前
|
负载均衡 监控 安全
HTTP代理IP的安全与稳定技术与策略的结合
随着科技与互联网的发展,企业对代理的需求日益增长。为加强HTTP代理IP的安全性和稳定性,可采取用户教育、使用加密协议、定期更换IP、监控可用性、设置访问控制、负载均衡、配置防火墙及定期更新维护等措施。这些方法能有效提升代理服务的安全性和可靠性。
20 7
|
13天前
|
定位技术 数据安全/隐私保护
如何评估HTTP代理IP的性能?
随着互联网技术的发展,使用代理IP的人越来越多。选择HTTP代理IP时,需注意速度和稳定性、用户信息保护、地域性、带宽上限、支持的协议、客户支持、用户评价和信誉、价格和性价比等方面。希望这些建议能帮助大家做出合适的选择。
32 1
|
13天前
|
安全 UED
HTTP 代理 IP 使用中的速度与安全性的权衡
随着科技和互联网的发展,越来越多企业使用代理服务。本文介绍了用户使用HTTP代理IP后体验感变差的几个原因,包括延迟增加、带宽上限、服务器负载高、数据包丢失、安全性问题和兼容性问题。希望这些信息能帮助用户解决问题。
27 1
|
14天前
|
监控 测试技术 定位技术
HTTP代理IP响应速度测试方案设计与指标体系
随着数字化发展,网络安全、隐私保护及内容访问自由成为核心需求。HTTP代理因其技术优势成为热门选择。本文介绍HTTP代理IP响应速度测试方案,包括基础性能、稳定性、地理位置、实际应用、安全性测试及监控指标,推荐测试工具,并提供测试结果评估标准。
27 2
|
1月前
|
安全 网络协议 应用服务中间件
内网ip申请SSL证书实现https访问
内网IP地址虽不能直接申请公网SSL证书,但可通过IP SSL证书保障数据安全。流程包括:确定固定内网IP,选择支持内网IP的CA,注册申请证书,生成CSR,验证IP所有权,下载部署证书至Web服务器,测试HTTPS访问,确保配置正确及证书有效。此方法适用于内网环境,提升数据传输安全性。
内网ip申请SSL证书实现https访问
|
23天前
|
Web App开发 安全 虚拟化
在单个IP地址下实现HTTP代理IP的高效使用
本文介绍了如何在单个窗口使用单个IP以及在多个窗口使用不同IP的方法,包括浏览器设置、使用虚拟机或容器、隐身模式、多浏览器和指纹浏览器等技术手段,并强调了控制IP频率、保证代理质量、注意安全性和法律合规的重要性。
39 8
|
21天前
|
网络安全 数据安全/隐私保护
动态HTTP代理IP在问卷调查中的重要性
随着数字化发展,网络安全与隐私保护日益重要。动态HTTP代理IP在问卷调查中发挥关键作用,包括保护用户隐私、防止重复投票、扩大地域覆盖、提高响应率及确保调查顺畅进行,显著提升数据收集的质量与效率。
28 2
|
27天前
|
数据采集 监控 安全
动态HTTP代理IP的使用技巧与案例分析
本文介绍了动态HTTP代理IP的使用案例与成功经验,包括网络爬虫、信息安全保护、安全访问站点和市场调研等应用场景,以及选择合适代理服务、合理配置请求频率、监控代理IP状态、使用代理池和结合其他技术等实践经验,帮助用户有效利用动态HTTP代理IP,提升工作效率和数据安全性。
45 4