http协议与tcp协议的理解
1.区别
tcp协议是对应于传输层,http协议是对应于应用层,从本质上来说,二者是没有可比性的。http协议是建立在tcp协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发送一次http请求。http会通过tcp建立起一个到服务器的连接通道,当本次请求需要的数据完毕之后,http会立即将tcp连接断开,这个过程是很短的。所以http是一种无状态的短链接。所谓的无状态是指浏览器每次向服务器发起请求的时候,不是通过一个连接,而是每次都建立一个新的连接。如果是一个连接的话,服务器进程中就能保持住这个连接并且在内存中记住一些信息状态。而每次请求结束之后,连接就关闭,相关的内容就释放了,所以记不住任何状态,成为无状态连接。
http就是在每次请求完成之后就把tcp连接关闭了,所以是短链接,而我们直接通过socket[套接字]编程使用tcp协议的时候,我们可以自己通过代码区控制什么时候打开连接什么时候关闭连接,只要我们不通过代码把连接关闭,这个连接就会在客户端和服务端的进程中一直存在,相关状态数据就会一直存着。
2.http之状态码
状态码有三位数字组成,第一个数字定义了响应的类别,且有5种可能:
1xx:指示信息----表示请求已接收,继续处理
2xx:成功----表示请求已被接收,理解,接受
3xx:重定向----要完成请求必须进行更进一步的操作
4xx:客户端错误----请求有语法错误或请求无法实现
5xx:服务端错误----服务器未能是实现合法的请求
常见状态码,状态描述,说明:
200:ok //客户端请求成功
400:bad request //客户端请求有语法错误,不被服务器所理解
401:Unauthorized //请求未经授权
403:forbidden //服务器收到请求,但是拒绝提供服务
404:not found //请求资源不存在 eg:输入了错误的url
500:internal server error //服务器发生不可预期的错误
503:server unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
3.tcp三次握手和四次分手
传递过程中出现的字符的含义:
SYN,ACK,FIN存放在tcp的标志位,一共有6个字符,这里就介绍这三个:
SYN:代表请求创建连接,所以在三次握手中前两次要SYN=1,表示这两次用于建立连接
FIN:表示请求关闭连接,在四次分手时,我们发现FIN发了两遍。这是因为tcp的连接是双向的,所以一次FIN只能关闭一个方向
ACK:代表确认接受,不管是三次握手还是四次挥手,在回应的时候都会加上ACK=1,表示消息接收到了,并且在建立连接之后的发送数据的时候,都需加上ACK=1,来表示数据接收成功
seq:序列号,当发送一个数据时,数据是被拆成多个数据包来发送,序列号就是对每个数据包进行编号,这样接收方才能对数据包进行再次拼接
ack:这个代表下一个数据包的编号,这也就是为什么第二次请求时,ack时seq+1
三次连接:
1.客户端首先要发送SYN=1,表示要创建连接
2.服务端接收到后,要告诉客户端:我接受到了,所以加个ACK=1,就变成了ACK=1,SYN=1
3.理论上这时候就创建连接成功了,但是要防止一个意外,所以客户端要在发送一个消息给服务端确认一下,这时候只需要ACK=1就行了【如果一个连接请求在网络中跑的慢,超时了,这时客户端会从发请求,但是这个跑的慢的请求最后还是跑到了,然后服务端就接收了两个连接请求,然后全部回应就会创建两个连接,浪费资源!如果加了第三次客户端确认,客户端在接受到一个服务端连接确认请求后,后面再接收到的连接确认请求就可以抛弃不管了】
四次挥手:【tcp是双向连接的】
1.首先客户端请求关闭客户端到服务端方向的连接,这时候客户端就需要发送一个FIN=1,表示要关闭一个方向的连接
2.服务端接收到后是需要确认一下的,所以返回一个ACK=1
3.这时之关闭了一个方向,另一个方向也需要关闭,所以服务端也向客户端发送了一个FIN=1,ACK=1
4.客户端接收到后发送ACK=1,表示接受成功
4.osi的七层模型:
物理层--------数据链路层--------网络层--------传输层--------会话层--------表示层--------应用层
http协议与tcp协议的理解的更多相关文章
- Http协议与TCP协议简单理解(转)
在C#编写代码,很多时候会遇到Http协议或者TCP协议,这里做一个简单的理解.TCP协议对应于传输层,而HTTP协议对应于应用层,从本质上来说,二者没有可比性.Http协议是建立在TCP协议基础之上 ...
- 【转载】Http协议与TCP协议简单理解
在C#编写代码,很多时候会遇到Http协议或者TCP协议,这里做一个简单的理解.TCP协议对应于传输层,而HTTP协议对应于应用层,从本质上来说,二者没有可比性.Http协议是建立在TCP协议基础之上 ...
- http协议,tcp协议,ip协议,dns服务之前的关系和区别
长期以来都有一个问题,大家都在说http协议,tcp协议,ip协议,他们之间到底什么区别,有什么用,没人告诉我,最近看了这本<图解http>明白了一些,以下图片摘自这本书 一.理解一个传输 ...
- 网络协议 9 - TCP协议(下):聪明反被聪明误
网络协议 1 - 概述 网络协议 2 - IP 是怎么来,又是怎么没的? 网络协议 3 - 从物理层到 MAC 层 网络协议 4 - 交换机与 VLAN:办公室太复杂,我要回学校 网络协议 5 - I ...
- Http协议与TCP协议
背景 在日常工作中,经常会遇到某某框架是基于Http协议或者TCP协议,今天,就针对于该协议,整理下 从本质上来说,Http协议与TCP协议是应用在不同网络层,Http协议处于应用层,TCP处于传输层 ...
- Http协议与TCP协议简单理解
TCP协议对应于传输层,而HTTP协议对应于应用层,从本质上来说,二者没有可比性.Http协议是建立在TCP协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求.Http会通 ...
- Http协议与TCP协议理解
TCP协议对应于传输层,而HTTP协议对应于应用层,从本质上来说,二者没有可比性.Http协议是建立在TCP协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求.Http会通 ...
- Http协议与TCP协议理解(转载的)
TCP协议对应于传输层,而HTTP协议对应于应用层,从本质上来说,二者没有可比性.Http协议是建立在TCP协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求.Http会通 ...
- 关于Http协议与TCP协议的一些简单理解
TCP协议对应于传输层,而HTTP协议对应于应用层,从本质上来说,二者没有可比性.Http协议是建立在TCP协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求.Http会通 ...
- http协议跟tcp协议的简单理解
在说明这两个协议之前,我们先简单说一下网络的分层. 1)应用层 支持网络应用,应用协议仅仅是网络应用的一个组成部分,运行在不同主机上的进程则使用应用层协议进行通信.主要的协议有:http.ftp.te ...
随机推荐
- 使用IDEA创建一个maven的web项目并部署到tomcat上
目录 1.创建一个maven项目 2.为项目添加配置文件 3.创建一些类和jsp页面 4.将项目部署到tomcat 1.创建一个maven项目 打开IDEA,File--New--Project 选择 ...
- Windows下使用vscode连接Linux服务器进行C++代码运行与调试
参考链接: vscode + SSH 配置 https://blog.csdn.net/irober/article/details/112724986 launch.json + tasks.jso ...
- 用了这么久 IDEA,你竟然不知道 Live Templates ?
大家好,我是风筝,公众号「古时的风筝」,专注于 Java技术 及周边生态. 文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在里面. Live Templa ...
- 看我是如何用C#编写一个小于8KB的贪吃蛇游戏的
译者注:这是Michal Strehovský大佬的一篇文章,他目前在微软.NET Runtime团队工作,主要是负责.NET NativeAOT功能的开发.我在前几天看到这篇文章,非常喜欢,虽然它的 ...
- ac自动姬
字符串 ac自动姬 前言 省选临近,不能再颓了! 说着开始研究起moonlight串流.真香 本期博客之所以在csdn上发了一份,因为没有图床!如果有图床我一定会自力更生的! 好像和字符串没有毛关系 ...
- 不止ChatGPT,谷歌云 AI 方案早已厉兵秣马!
近日 ChatGPT 爆火,掀起热议,能聊天能写代码,还能写策划稿,AI 似乎已逐渐变得无所不能. 不过在 AI 对话上,谷歌早在17年就提出了 Dialogflow 这一AI对话平台.相比起 Cha ...
- Vue插槽最全最通俗的总结
1.匿名插槽----就是定义的时候不带name的插槽,使用的时候也不用带name 总结: (1)一定要分清定义插槽和使用插槽格式.如上图A是在使用一个插槽的基础上再继续定义一个匿名插槽. (2)匿名插 ...
- 读C#代码整洁之道笔记07_代码评审和集成测试
1. 代码评审注意事项 1.1. 始终保持代码评审的意识 1.2. 保证代码构建成功 1.3. 确保所有的测试都是通过的 1.4. 注意YAGNI原则 1.5. 检查重复代码 1.6. 使用静态分析器 ...
- 真正“搞”懂HTTP协议11之代理服务
代理,其实全称应该叫做代理服务器,它是客户端与服务器之间得中间层,本质上来说代理就是一个服务器,在HTTP的链路中插入的一个中间环节,就是代理服务器啦.所谓的代理服务就是指:服务本身不生产内容,而是处 ...
- spring-in-action_day01
前景说明:SpringInAction主要致力于SpringBoot为基础的讲解,尽可能多的使用SpringBoot,可以减少显行的配置,如xml配置,可以更加的专注于功能的实现. 第一章:主要讲了如 ...