什么是tcp
tcp(transmission control protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由ietf的rfc 793定义。在简化的计算机网络osi模型中,它完成第四层传输层所指定的功能,用户数据报协议(udp)是同一层内另一个重要的传输协议。在因特网协议族(internet protocol suite)中,tcp层是位于ip层之上,应用层之下的中间层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是ip层不提供这样的流机制,而是提供不可靠的包交换。
应用层向tcp层发送用于网间传输的、用8位字节表示的数据流,然后tcp把数据流分区成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传输单元( mtu)的限制)。之后tcp把结果包传给ip层,由它来通过网络将包传送给接收端实体的tcp层。tcp为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的包发回一个相应的确认(ack);如果发送端实体在合理的往返时延(rtt)内未收到确认,那么对应的数据包就被假设为已丢失将会被进行重传。tcp用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。
什么是http
超文本传输协议(http,hypertext transfer protocol)是互联网上应用最为广泛的一种网络协议。所有的www文件都必须遵守这个标准。设计http最初的目的是为了提供一种发布和接收html页面的方法。1960年美国人ted nelson构思了一种通过计算机处理文本信息的方法,并称之为超文本(hypertext),这成为了http超文本传输协议标准架构的发展根基。ted nelson组织协调万维网协会(world wide web consortium)和互联网工程工作小组(internet engineering task force )共同合作研究,最终发布了一系列的rfc,其中著名的rfc 2616定义了http 1.1。
http是一个客户端和服务器端请求和应答的标准(tcp)。客户端是终端用户,服务器端是网站。通过使用web浏览器、网络爬虫或者其它的工具,客户端发起一个到服务器上指定端口(默认端口为80)的http请求。(我们称这个客户端)叫用户代理(user agent)。应答的服务器上存储着(一些)资源,比如html文件和图像。(我们称)这个应答服务器为源服务器(origin server)。在用户代理和源服务器中间可能存在多个中间层,比如代理,网关,或者隧道(tunnels)。尽管tcp/ip协议是互联网上最流行的应用,http协议并没有规定必须使用它和(基于)它支持的层。 事实上,http可以在任何其他互联网协议上,或者在其他网络上实现。http只假定(其下层协议提供)可靠的传输,任何能够提供这种保证的协议都可以被其使用。
通常,由http客户端发起一个请求,建立一个到服务器指定端口(默认是80端口)的tcp连接。http服务器则在那个端口监听客户端发送过来的请求。一旦收到请求,服务器(向客户端)发回一个状态行,比如“http/1.1 200 ok”,和(响应的)消息,消息的消息体可能是请求的文件、错误消息、或者其它一些信息。http使用tcp而不是udp的原因在于(打开)一个网页必须传送很多数据,而tcp协议提供传输控制,按顺序组织数据,和错误纠正。
通过http或者https协议请求的资源由统一资源标示符(uniform resource identifiers)(或者,更准确一些,urls)来标识。
http与tcp的区别和联系
1、tcp连接
手机能够使用联网功能是因为手机底层实现了tcp/ip协议,可以使手机终端通过无线网络建立tcp连接。tcp协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上。
建立起一个tcp连接需要经过“三次握手”:
第一次握手:客户端发送syn包(syn=j)到服务器,并进入syn_send状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的syn(ack=j+1),同时自己也发送一个syn包(syn=k),即syn+ack包,此时服务器进入syn_recv状态;
第三次握手:客户端收到服务器的syn+ack包,向服务器发送确认包ack(ack=k+1),此包发送完毕,客户端和服务器进入established状态,完成三次握手。
握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,tcp连接一旦建立,在通信双方中的任何一方主动关闭连 接之前,tcp 连接都将被一直保持下去。断开连接时服务器和客户端均可以主动发起断开tcp连接的请求,断开过程需要经过“四次握手”(过程就不细写 了,就是服务器和客户端交互,最终确定断开)
2、http连接
http协议即超文本传送协议(hypertext transfer protocol ),是web联网的基础,也是手机联网常用的协议之一,http协议是建立在tcp协议之上的一种应用。
http连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。
1)在http 1.0中,客户端的每次请求都要求建立一次单独的连接,在处理完本次请求后,就自动释放连接。
2)在http 1.1中则可以在一次连接中处理多个请求,并且多个请求可以重叠进行,不需要等待一个请求结束后再发送下一个请求。
由于http在每次请求结束后都会主动释放连接,因此http连接是一种“短连接”,要保持客户端程序的在线状态,需要不断地向服务器发起连接请求。通常的 做法是即时不需要获得任何数据,客户端也保持每隔一段固定的时间向服务器发送一次“保持连接”的请求,服务器在收到该请求后对客户端进行回复,表明知道客 户端“在线”。若服务器长时间无法收到客户端的请求,则认为客户端“下线”,若客户端长时间无法收到服务器的回复,则认为网络已经断开。
3、socket原理
3.1套接字(socket)概念
套接字(socket)是通信的基石,是支持tcp/ip协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的ip地址,本地进程的协议端口,远地主机的ip地址,远地进程的协议端口。
应用层通过传输层进行数据通信时,tcp会遇到同时为多个应用程序进程提供并发服务的问题。多个tcp连接或多个应用程序进程可能需要通过同一个 tcp协 议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与tcp/ip协议交互提供了套接字(socket)接口。应用层可以 和传输层通过socket接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。
3.2 建立socket连接
建立socket连接至少需要一对套接字,其中一个运行于客户端,称为clientsocket ,另一个运行于服务器端,称为serversocket 。
套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。
服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。
客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。
连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户 端,一旦客户端确认了此描述,双方就正式建立连接。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。
4、socket连接与tcp连接
创建socket连接时,可以指定使用的传输层协议,socket可以支持不同的传输层协议(tcp或udp),当使用tcp协议进行连接时,该socket连接就是一个tcp连接。
5、socket连接与http连接
由于通常情况下socket连接就是tcp连接,因此socket连接一旦建立,通信双方即可开始相互发送数据内容,直到双方连接断开。但在实际网络应用 中,客户端到服务器之间的通信往往需要穿越多个中间节点,例如路由器、网关、防火墙等,大部分防火墙默认会关闭长时间处于非活跃状态的连接而导 致 socket 连接断连,因此需要通过轮询告诉网络,该连接处于活跃状态。
而http连接使用的是“请求—响应”的方式,不仅在请求时需要先建立连接,而且需要客户端向服务器发出请求后,服务器端才能回复数据。
很多情况下,需要服务器端主动向客户端推送数据,保持客户端与服务器数据的实时与同步。此时若双方建立的是socket连接,服务器就可以直接将数据传送给 客户端;若双方建立的是http连接,则服务器需要等到客户端发送一次请求后才能将数据传回给客户端,因此,客户端定时向服务器端发送连接请求,不仅可以 保持在线,同时也是在“询问”服务器是否有新的数据,如果有就将数据传给客户端。
二、相互关系
首先,纠正一下我以前一直误解的概念,我一直以为http和tcp是两种不同的,但是地位对等的协议,虽然知道tcp是传输层,而http是应用层今天学习了下,知道了 http是要基于tcp连接基础上的,简单的说,tcp就是单纯建立连接,不涉及任何我们需要请求的实际数据,简单的传输。http是用来收发数据,即实际应用上来的。
第一:从传输层,先说下tcp连接,我们要和服务端连接tcp连接,需要通过三次连接,包括:请求,确认,建立连接。即传说中的“三次握手协议”。
第一次:c发送一个请求连接的位码syn和一个随机产生的序列号给seq,然后s收到了这些数据。
第二次:s收到了这个请求连接的位码,啊呀,有人向我发出请求了么,那我要不要接受他的请求,得实现确认一下,于是,发送了一个确认码 acn(seq+1),和syn,seq给c,然后c收到了,这个是第二次连接。
第三次:c收到了确认的码和之前发送的syn一比较,偶哟,对上了么,于是他又发送了一个acn(seq+1)给s,s收到以后就确定建立连接,至此,tcp连接建立完成。
简单就是:请求,确认,连接。
第二:从实际上的数据应用来说http
在前面客户端和应用服务器建立tcp连接之后,就需要用http协议来传送数据了,http协议简单来说,还是请求,确认,连接。
总体就是c发送一个http请求给s,s收到了这个http请求,然后返回给chttp响应,然后c的中间件或者说浏览器把这些数据渲染成为了网页,展示在用户面前。
第一:发送一个http请求给s,这个请求包括请求头和请求内容:
request header:
包括了,1.请求的方法是post/get,请求的url,http协议版本2.请求的数据,和编码方式3是否有cookie和cooies,是否缓存等。
post和get请求方式的区别是,get把请求内容放在url后面,但是url长度有限制。而post是以表单的形势,适合要输入密码之类的,因为不在url中显示,所以比较安全。
request body:
即请求的内容。
第二:s收到了http请求,然后根据请求头,返回http响应。
response header:包括了1.cookies或者sessions2.状态吗3.内容大小等
response body:
即响应的内容,包括,js什么的。
第三,c收到了以后,就由浏览器完成一系列的渲染,包括执行js脚本等。
这就是我所理解的webtcp,http基础知识,待续。。。。。
tcp是底层通讯协议,定义的是数据传输和连接方式的规范
http是应用层协议,定义的是传输数据的内容的规范
http协议中的数据是利用tcp协议传输的,所以支持http也就一定支持tcp
http支持的是www服务
而tcp/ip是协议
它是internet国际互联网络的基础。tcp/ip是网络中使用的基本的通信协议。
tcp/ip实际上是一组协议,它包括上百个各种功能的协议,如:远程登录、文件传输和电子邮件等,而tcp协议和ip协议是保证数据完整传输的两个基本的重要协议。通常说tcp/ip是internet协议族,而不单单是tcp和ip。
国产达梦数据库上线国内首条全线路国产自动售检票系统
发射功率测试笔的制作
Kasite微纳加工中心:微型零部件及微孔深孔加工
诺基亚9PureView体验评测 好不好用
iPhone8什么时候上市最新消息:9月份发布十月份上市,iPhone8如期而至价格最高8000?黑科技照样有!
tcp和http的区别在哪里
Anker新品亮相MWC,引领快充革命
揭秘HUAWEI Mate 50系列创新科技背后的故事
时控开关怎么更换电池?
SparkFun Electronics、InPlay和Bosch Sensortec合作发布两款加速无线物联网解决方案的开发板
高通合同伙伴研制“XR观影器”,可是与高通硬件手机配合使用
后PC时代:IT厂商该如何自我救赎?
自动跟踪算法的追踪问题解决方案
螺丝供料器不送螺丝的故障原因及解决方法
国内激光雷达用于激光雷达接收端的16通道集成放大器芯片研发成功
系统机器学习算法总结知识分享
RS触发器的基本工作原理图解分析
使用参数化约束进行PCB设计
通过利用关键点控制实现网络终端设备在线升级的方案
分布式大屏控制系统的工作原理