http与tcp
Http定义了客户端(浏览器)怎样向万维网服务器请求文档,以及服务器如何把文档传给客户端。学习HTTP协议,可以从它归属的TCP/IP协议族开始。
tcp
传输控制协议(英语:Transmission Control Protocol,缩写:TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能。
在因特网协议族(Internet protocol suite)中,TCP层是位于IP层之上,应用层之下的中间层。
应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流分割成适当长度的报文段。之后TCP把结果包传给IP层,由它来透过网络将包传送给接收端实体的TCP层。TCP为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的包发回一个相应的确认信息(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包就被假设为已丢失并进行重传。TCP用一个校验和函数来检验数据是否有错误,在发送和接收时都要计算校验和。
运作
TCP协议的运行可划分为三个阶段:连接创建(connection establishment)、数据传送(data transfer)和连接终止(connection termination)。
构成
数据在TCP层称为流(Stream),数据分组称为分段(Segment)。作为比较,数据在IP层称为Datagram,数据分组称为分片(Fragment)。
tcp的三次握手过程
- 客户端(通过执行connect函数)向服务器端发送一个SYN包,请求一个主动打开。该包携带客户端为这个连接请求而设定的随机数A作为消息序列号。
- 服务器端收到一个合法的SYN包后,把该包放入SYN队列中;回送一个SYN/ACK。ACK的确认码应为A+1,SYN/ACK包本身携带一个随机产生的序号B。
- 客户端收到SYN/ACK包后,发送一个ACK包,该包的序号被设定为A+1,而ACK的确认码则为B+1。然后客户端的connect函数成功返回。当服务器端收到这个ACK包的时候,把请求帧从SYN队列中移出,放至ACCEPT队列中;这时accept函数如果处于阻塞状态,可以被唤醒,从ACCEPT队列中取出ACK包,重新创建一个新的用于双向通信的sockfd,并返回。
以上定义转自*
http
超文本传输协议(英语:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。
设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。通过HTTP或者HTTPS协议请求的资源由统一资源标识符(Uniform Resource Identifiers,URI)来标识。
简述
HTTP是一个客户端(用户)和服务端(网站)之间请求和应答的标准,通常使用TCP协议。HTTP可以在任何互联网协议或其他网络上实现。
请求方法
GET——向指定的资源发出“显示”请求。GET可能会被网络爬虫等随意访问。
HEAD——与GET方法一样,都是向服务器发出指定资源的请求。只不过服务器将不传回资源的本文部分。它的好处在于,使用这个方法可以在不必传输全部内容的情况下,就可以获取其中“关于该资源的信息”(元信息或称元数据)。
POST——向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。浏览器发出的POST请求的body主要有两种格式,一种是application/x-www-form-urlencoded用来传输简单的数据,大概就是"key1=value1&key2=value2"这样的格式。另外一种是传文件,会采用multipart/form-data格式。采用后者是因为application/x-www-form-urlencoded的编码方式对于文件这种二进制的数据非常低效。
PUT——向指定资源位置上传内容。
DELETE——请求服务器删除Request-URI所标识的资源。
TRACE——回显服务器收到的请求,主要用于测试或诊断。
OPTIONS——这个方法可使服务器传回该资源所支持的所有HTTP请求方法。用’*'来代替资源名称,向Web服务器发送OPTIONS请求,可以测试服务器功能是否正常运作。
CONNECT——HTTP/1.1协议中预留给能够将连接改为隧道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)。
url
HTTP用统一资源标识符(Uniform Resource Identifiers, URI)传输数据和建立连接。URI由URL和URN构成,URL通过描述资源的位置来标识资源,URN通过名字来标识资源。
当前版本
HTTP/2
ip
IP协议能够把各种数据包准确的传递给对方,其两个重要条件是IP地址和MAC地址。由于IP地址有限(我们通常的IP地址是路由器给我们生成的IP地址),路由器里面会记录我们的MAC地址。MAC地址不可能重复。
如果说IP协议是找到信息接收方的地址。那TCP协议就是安全的把信息传递给接收方。
DNS(Domain names System)服务提供域名到IP地址之间的解析服务。