[转帖]tcp、http和socket的区别
https://www.jianshu.com/p/88d69454bdde
一:tcp协议
tcp协议属于传输层协议(UDP也属于传输层协议,但是UDP协议是无状态的)。建立一个TCP连接需要三次握手,断开一个TCP连接需要四次挥手。手机能够使用联网功能,是因为手机底层实现了TCP/IP协议,使用手机终端通过无线网就可以与服务端建立一个tcp连接。TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上。
tcp建立连接需要三次握手:

如图所示:客户端要与服务端建立tcp连接,首先向服务端发送一个syn J信号,服务端收到此信号后向客户端回答一个ACK J+1信号,并额外加了一个syn K信号,客户端收到ACK J+1信号后就知道,服务端能收到我的信号,后面我客户端就可以放心的发送数据给你服务端而不用担心你服务端接收不到我发送的数据了。客户端收到服务端发送的SYN K信号后,还需要向服务端回一个 ACK K+1信号,这样服务端收到此信号就知道,我服务端给你客户端发送的信号,你客户端能够收到,这样我服务端就可以放心的给你客户端发送数据而不用担心你客户端收不到自己发送的数据了。其实从上面的描述可以看到:建立连接完全可以跟断开TCP连接一样分四步走,只不过是把服务端的应答信号ACK和客户端的认证请求信号SYNC这两步做成一步走了。
tcp连接关闭时需要四次挥手:

客户端收到服务端的应答信号ACK M+1后,客户端就知道:服务端知道我客户端不会再发送数据包给你服务端了,你可以停止对我的监听了。但是此时只是客户端->服务端的单向流动停止了,另一个方向的流动:服务端->客户端的数据发送还可以正常进行,直到服务端向客户端发送FIN N挥手信号,客户端向服务端回应ACK N+1信号,服务端才知道:客户端知道我服务端不会再发送数据包给你客户端了,你可以停止对我的监听了。至此,客户端->服务端的单向流动和服务端->客户端的单向流动两个方向都停止,可以关闭连接了。
二:http协议
http协议,简称超文本传输协议(Hypertext Transfer Protocol),是web应用程序的基础,也是手机联网常用的协议之一。http协议在tcp协议上面,属于应用层协议。
http协议最显著的特点就是:客户端发送的每次请求,都需要服务端返回响应。客户端收到服务端的响应后,主动关闭连接。一次TCP连接过程完成。
1)在HTTP1.0中,客户端每发送一次请求都需要新建一个单独的连接,得到服务端响应后,主动断开本次连接。
1)在HTTP1.1中,可以在一次连接中处理多次请求(keep Alive,默认开启),尽管有 Keep-Alive 机制可以复用,但在每个连接上同时只能有一个请求 / 响应,这意味着完成响应之前,这个连接不能用于其他请求。比如某个tcp连接的keep Alive的参数设置为:max=5,time_out=10s(本次连接最长存活时间为10s,最多请求次数为5次),则请求情况像下面这样:

而不是像这样:

从图3中可以看到,如果浏览器需要向同一个域名发送多个请求,需要在本地维护一个 FIFO 队列,完成一个再发送下一个。这样,从服务端完成请求开始回传,到收到下一个请求之间的这段时间,服务端处于空闲状态。
后来,人们提出了 HTTP 管道(HTTP Pipelining)的概念,试图把本地的 FIFO 队列挪到服务端。它的原理是这样的:浏览器一股脑把请求都发给服务端,然后等着就可以了。这样服务端就可以在处理完一个请求后,马上处理下一个,不会有空闲了。甚至服务端还可以利用多线程并行处理多个请求。但是由于一些原因,http1的管道技术使用得并不完美和普及。
http连接下,客户端保持在线状态的方法:客户端每次建立http连接,得到服务端响应后,都会主动断开连接,所以说http连接是短连接。那怎么保持客户端的在线状态呢?答案就是:客户端需要不断的向服务端发送连接请求。通常的做法是,客户端也保持每隔一段固定的时间向服务器发送一次“保持连接”的请求,服务器在收到该请求后对客户端进行回复,表明知道客户端“在线”。若服务器长时间无法收到客户端的请求,则认为客户端“下线”,若客户端长时间无法收到服务器的回复,则认为网络已经断开。
为什么说http连接是无状态的?
【无状态】能在其他资料中查到的说法有:
(1)协议对于事务处理没有记忆能力,(2)对同一个url请求没有上下文关系,(3)每次的请求都是独立的,它的执行情况和结果与前面的请求和之后的请求是无直接关系的,它不会受前面的请求应答情况直接影响,也不会直接影响后面的请求应答情况,(4)服务器中没有保存客户端的状态,客户端必须每次带上自己的状态去请求服务器,(5)人生若只如初见,可以参考:http协议无状态中的 状态 到底指的是什么?!,文中经过分析理清了很多概念,以及之间的关系,推测出【状态】的含义就是:客户端和服务器在某次会话中产生的数据,从而【无状态】就意味着,这些数据不会被保留。
三:socket
我们知道两个进程如果需要进行通讯最基本的一个前提能能够唯一的标示一个进程,在本地进程通讯中我们可以使用PID来唯一标示一个进程,但PID只在本地唯一,网络中的两个进程PID冲突几率很大,这时候我们需要另辟它径了,我们知道IP层的ip地址可以唯一标示主机,而TCP层协议和端口号可以唯一标示主机的一个进程,这样我们可以利用ip地址+协议+端口号唯一标示网络中的一个进程。
能够唯一标示网络中的进程后,它们就可以利用socket进行通信了,什么是socket呢?我们经常把socket翻译为套接字,socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。

tcp服务端和tcp客户端使用socket通信的过程如下。从图中可以看到,socket连接可以保持长连接。

注意的是,socket连接可以由客户端主动关闭,也可以由服务端主动关闭。
关于在http之后为什么又出现了socket,请看我的另一片文章:C10k问题
参考借鉴:
《Unix网络编程 卷I 套接字联网API》
http://www.cnblogs.com/jiangshiyong/archive/2012/08/26/2657811.html
https://imququ.com/post/http2-and-wpo-2.html
http://blog.csdn.net/jenminzhang/article/details/47017741
[转帖]tcp、http和socket的区别的更多相关文章
- TCP/IP,HTTP,Socket的区别与联系
一 忆往昔,尽是悔恨泪. 在学校的时候学过,网络七层,也知道tcp的三次握手.但因为根本没用在实际开发中,所以逐渐淡忘.现在就再次理解下三个的区别与联系. 二 正题 网络七层: ...
- HTTP/TCP/IP UDP Socket等区别联系
1.TCP连接 手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接.TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上. ...
- 【转】TCP/IP和SOCKET的区别
要写网络程序就必须用Socket,这是程序员都知道的.而且,面试的时候,我们也会问对方会不会Socket编程?一般来说,很多人都会说,Socket编程基本就是listen,accept以及send,w ...
- Http、TCP/IP、Socket的区别
网络由下往上分为 物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 通过初步的了解,我知道IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用层, 三者从本质上来说没有可 ...
- TCP/IP,Http,Socket的区别
大学学习网络基础的时候老师讲过,网络由下往上分为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层.通过初步的了解,我知道IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用 ...
- ios开发网络知识 TCP,IP,HTTP,SOCKET区别和联系
TCP,IP,HTTP,SOCKET区别和联系 网络由下往上分为: 对应 物理层-- 数据链路层-- 网络层-- IP协议 传输层-- ...
- Http、tcp、Socket连接区别
转自Http.tcp.Socket连接区别 相信不少初学手机联网开发的朋友都想知道Http与Socket连接究竟有什么区别,希望通过自己的浅显理解能对初学者有所帮助. 1.TCP连接 要想明白Sock ...
- TCP/IP、Http、Socket的区别与关系
--TCP/IP.Http.Socket的区别与关系 --------------------------------------2014/05/14 网络由下往上分为 物理层.数据链路层.网络层.传 ...
- TCP socket和web socket的区别
小编先习惯性的看了下某中文百科网站对Web Socket的介绍,觉得很囧.如果大家按照这个答案去参加BAT等互联网公司的前端开发面试,估计会被鄙视. 还是让我们阅读一些英文材料吧. 让我们直接看sta ...
- TCP/IP、SOCKET、HTTP之间的联系与区别
主要内容: 1.网络的七层协议 2.TCP/IP.SOCKET.HTTP简介 3.TCP连接.HTTP连接.Socket连接的区别 一.网络的七层协议 网络七层由下往上分别为物理层.数据链路层.网络层 ...
随机推荐
- SQL语句(mysql)「一」
SQL的一些常用语句 创建类 CREAT DATABASE <数据库名>; 该方法创建一个数据库,当要使用一个数据库的时候,使用指令: USE <数据库名>; 查看当前正在使用 ...
- Unix 文件权限位
简介 在 Unix 或者类 Unix 文件系统中,每个文件(或者目录,目录也被视为文件)都有自己的所属对象和一个与之相关的 Unix 用户组关联,可以通过设置对应的文件的权限标记指定对于所属用户.所属 ...
- CSS之动画
一.动画 动画类型 CSS3 可以创建动画,它可以取代许多网页动画图像.Flash 动画和 JavaScript 实现的效果. transform属性可以定义一些主要的动画属性, translate: ...
- C++产生N以内的随机整数
C++产生N(这里N=100)以内的随机整数的例子: #include <iostream> #include <ctime> using namespace std; int ...
- LeetCode206反转链表、24两两交换节点
206. 反转链表 反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL ...
- 如何使用.NET在2.2秒内处理10亿行数据(1brc挑战)
译者注 在上周我就关注到了在github上有1brc这样一个挑战,当时看到了由Victor Baybekov提交了.NET下最快的实现,当时计划抽时间写一篇文章解析他的代码实现,今天突然看到作者自己写 ...
- 神经网络基础篇:梯度下降法(Gradient Descent)
梯度下降法 梯度下降法可以做什么? 在 测试集上,通过最小化代价函数(成本函数)\(J(w,b)\)来训练的参数\(w\)和\(b\), 如图,在第二行给出和之前一样的逻辑回归算法的代价函数(成本函数 ...
- MongoDB经典故障系列六:CPU利用率太高怎么办?
每逢电商大促,全民狂欢,但热闹是属于疯狂剁手的人们.而开发者们有的缺是"高流量.高访问.高并发"三高下带来的种种问题.为了应对大促期间的高I/O情况,企业会选择MongoDB云数据 ...
- 云图说|ModelArts开发环境,让AI开发、探索、教学更简单
摘要:ModelArts开发环境,以云原生的资源使用和开发工具链的集成,目标为不同类型AI开发.探索.教学用户. 本文分享自华为云社区<[云图说]| 第280期 ModelArts开发环境,让A ...
- Python图像处理丨如何调用OpenCV绘制直方图
摘要:本篇文章主要讲解灰度直方图的基本概念,Python调用OpenCV实现绘制图像直方图. 本文分享自华为云社区<[Python图像处理] 十一.灰度直方图概念及OpenCV绘制直方图> ...