Http与协议TCP协议简单易懂

于C#编写代码,很多时候会遇到Http协议或TCP合约,这里做一个简单的了解。

TCP对应于该传送层协议,和HTTP对应于应用层协议,从本质上讲,两者是没有可比性。Http该协议是基于TCP之上的,当浏览器须要从server获取网页数据的时候,会发出一次Http请求。

Http会通过TCP建立起一个到server的连接通道。当本次请求须要的数据完成后,Http会马上将TCP连接断开,这个过程是非常短的。所以Http连接是一种短连接。是一种无状态的连接。所谓的无状态,是指浏览器每次向server发起请求的时候。不是通过一个连接。而是每次都建立一个新的连接。

假设是一个连接的话,server进程中就能保持住这个连接而且在内存中记住一些信息状态。而每次请求结束后,连接就关闭。相关的内容就释放了,所以记不住不论什么状态。成为无状态连接。

随着时间的推移,html页面变得复杂了。里面可能嵌入了非常多图片,这时候每次訪问图片都须要建立一次tcp连接就显得低效了。

因此Keep-Alive被提出用来解决效率低的问题。从HTTP/1.1起。默认都开启了Keep-Alive,保持连接特性,简单地说,当一个网页打开完毕后。client和server之间用于传输HTTP数据的TCP连接不会关闭,假设client再次訪问这个server上的网页,会继续使用这一条已经建立的连接Keep-Alive不会永久保持连接。它有一个保持时间。能够在不同的server软件(如Apache)中设定这个时间。

尽管这里使用TCP连接保持了一段时间。可是这个时间是有限范围的。到了时间点依旧是会关闭的。所以我们还把其看做是每次连接完毕后就会关闭。后来,通过Session,
Cookie等相关技术,也能保持一些用户的状态。可是还是每次都使用一个连接,依旧是无状态连接。

曾经有个概念非常容忍搞不清楚。

就是为什么Http是无状态的短连接。而TCP是有状态的长连接?Http不是建立在TCP的基础上吗,为什么还能是短连接?如今明确了。Http就是在每次请求完毕后就把TCP连接关了,所以是短连接。而我们直接通过Socket编程使用TCP协议的时候,由于我们自己能够通过代码区控制什么时候打开连接什么时候关闭连接。仅仅要我们不通过代码把连接关闭,这个连接就会在client和服务端的进程中一直存在,相关状态数据会一直保存着。

在C#中会有Socket。实际上socket是对TCP/IP协议的封装,Socket本身并非协议。而是一个调用接口(API)。Socket的出现仅仅是使得程序猿更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象。从而形成了我们知道的一些最主要的函数接口。比方create、listen、connect、accept、send、read和write等等。

比較形象的描写叙述:HTTP是轿车。提供了封装或者显示数据的详细形式;Socket是发动机,提供了网络通信的能力。对于从C#编程的角度来讲。为了方便,你能够直接选择已经制造好的轿车Http来与server交互。可是有时候往往由于环境因素或者其它的一些定制的请求,必需要使用TCP协议,这时就需要使用Socket编程,然后自己去处理获取的数据。

就像是你用已有的发动机,自己造了一辆卡车。去从server交互。

HTTP/1.0和HTTP/1.1都把TCP作为底层的传输协议。

HTTP客户首先发起建立与serverTCP连接。

一旦建立连接。浏览器进程和server进程就能够通过各自的套接字来訪问TCP。如前所述,client套接字是客户进程和TCP连接之间的“门”。server端套接字是server进程和同一TCP连接之间的“门”。

客户往自己的套接字发送HTTP请求消息,也从自己的套接字接收HTTP响应消息。类似地,server从自己的套接字接收HTTP请求消息,也往自己的套接字发送HTTP响应消息。客户或server一旦把某个消息送入各自的套接字。这个消息就全然落入TCP的控制之中。

TCP给HTTP提供一个可靠的传输数据服务;这意味着由客户发出的每一个HTTP请求消息终于将无损地到达server,由server发出的每一个HTTP响应消息终于也将无损地到达客户。

C#代码连接远程数据库用的是TCP协议。每次new 一个connection的时候,connection.open就打开了这个TCP连接。connection.Close的时候就关闭了这个连接。FTP的底层也是TCP, 只是是长连接的。

传输大文件比較快。

须要看详细场景。在server端。假设程序是採取的长连接的方式,那么就能控制同一时候连接到这个server的连接个数。防止同一时候有多个连接。

可是採取短连接的方式,那么就不能控制同一时候连接到这个server上的连接的个数。这也是一个长处。能够同一时候处理大量连接请求。可是假设连接请求量太大的话,可能造成server停止工作。

WebService不须要连接,一秒中至少能够支持上万/十万的请求,每次请求然后释放,没有空余的内存消耗。一般不会限制同一时候连接的个数,这是优势。

Message Queue须要建立连接, 支持上千的连接就非常吃力了。由于每一个连接即使没有在请求数据,也会在内存中占用一定的空间存储。会限制。比方SQL Server数据库server。一般最多同一时候连接16个。

Http协议一定通过指定的port。80,所以一般计算机上不会限制这个port,所以Http协议可以顺利通过全部机器上的防火墙。

而使用Socket编程的话,就须要自己指定特定的port。那么非常可能这个port是在某个环境中禁用的,那么就无法穿透防火墙。IIS使用的是80port,也就是这个程序一直在监听着这个port。一旦发现有人要建立到这个port的连接,他就会响应,然后建立连接。这里说的连接都是短连接。

所以你对server上的网址的请求,都是通直播80port节目现场。那么这port发送client浏览器。

版权声明:本文博主原创文章,博客,未经同意不得转载。

时间: 2024-07-28 16:53:32

Http与协议TCP协议简单易懂的相关文章

可靠的传输层协议——TCP协议

TCP协议 TCP协议工作在传输层,虽然它与UDP的下一层都是IP但是它却和UDP的效果完全不同,它是一种可靠的传输层协议 一.TCP协议封装 TCP数据段头部共有20个字节,包括16位的源端口号,16位的目的端口号,端口号与前面各层中的协议类型相似,都指的是上层将要交给谁,这个端口号就是主机上一个进程所绑定的一个入口,所以通过端口号和IP就能找到唯一主机的唯一进程. 32位序号:用来标识从TCP发端向TCP收端发送的数据字节流,它表示在这个报文段中的的第一个数据字节.如果将字节流看作在两个应用

UDP协议&TCP协议

域名: DN (Domain name)是由一串由点分隔的名字组成的Internet上某一台计算机或计算机组的名称. 域名服务系统:DNS:它可以作为将域名和IP地址相互映射的一个分布式数据库. 协议: 应用层常见协议: http协议:超文本传输语言. ftp协议:文件传输协议 smtp协议:简单邮件传输协议 传输层的协议: UDP协议:用户数据报协议,面向无连接的,简单不可靠的传输层协议. 面向无连接 通过数据报包来进行传输,每个数据报包大小不会超过64k. 不可靠的传输. 传输速度快. TC

数据通讯与网络 第五版第24章 传输层协议-TCP协议部分要点

上一博客记录了UDP协议的关键要点,这部分记录TCP协议的关键要点. 24.3 传输控制协议(TRANSMISSION CONTROL PROTOCOL) TCP(Transmission Control Procotol )协议是一个面向连接,可靠的协议.TCP为了提供面向连接的服务,专门定义了连接创建,数据传输.连接终止阶段.TCP使用GBN和SR协议来提供可靠性.为了实现可靠性这个目标,TCP使用检验和来进行误差控制.重传来处理数据包丢失和冲突.同时还利用了应答和计数机制.在本节,首先讨论

HTTP协议 TCP协议简要

HTTP简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议. HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等). HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1.0

TCP/IP协议--TCP协议

TCP提供一种面向连接的.可靠的字节流服务.面向连接指,发送和接收方在交换数据前必须建立一个TCP连接.顺便说下,一个TCP连接只有两方,因此广播和多播是不能应用于TCP的.字节流指,两个应用程序通过TCP连接交换8bit字节构成的字节流.可靠性:1. 应用数据被分割成TCP认为最适合发送的数据块.TCP传给IP的叫报文段,也叫段segment2. 当TCP发出一个段后,启动一个定时器,等待目的端确认收到.如果不能及时收到,发送端将重发这个报文段.3. 接收端收到TCP数据,将发送一个确认.并非

TCP协议与TCP通信

1 TCP协议 TCP协议是面向连接的通信协议,即在传输数据前先在发送端和接收端建立逻辑连接,然后再传输数据,它提供了两台计算机之间可靠无差错的数据传输. 在TCP连接中必须要明确客户端与服务器端,由客户端向服务端发出连接请求,每次连接的创建都需要经过"三次握手". 第一次握手,客户端向服务器端发出连接请求,等待服务器确认 第二次握手,服务器端向客户端回送一个响应,通知客户端收到了连接请求 第三次握手,客户端再次向服务器端发送确认信息,确认连接 下载文件时必须采用TCP协议. 2 TC

运输层协议--TCP及UDP协议

TCP及UDP协议 按照网络的五层分级结构来看,TCP及UDP位于运输层,故TCP及UDP是运输层协议.TCP协议--传输控制协议UDP协议--用户数据报协议 多路复用及多路分解 图多路复用及多路分解 接受主机中的运输层实际上并没有直接将数据交给进程,而是通过一个中间的套接字来传递.由于在任何一个时刻接受主机上可能有多个套接字,所以每个套接字都已一个唯一的标识符. 主机如何将一个收到的运输层报文段定向到合适的套接字? 为达到这一目的,在每个运输层报文段中设置了几个字段,在接收端,运输层检查并标识

Ip/TCP协议简介

Ip协议 提供了主机和主机间的通信,为了完成不同主机的通信,我们需要某种方式来唯一标识一台主机,这个标识,就是著名的IP地址.通过IP地址,IP 协议就能够帮我们把一个数据包发送给对方. TCP协议 TCP 协议在 IP 协议提供的主机间通信功能的基础上,完成这两个主机上进程对进程的通信.为了标识数据属于哪个进程,我们给需要进行 TCP 通信的进程分配一个唯一的数字来标识它.这个数字,就是我们常说的端口号. TCP 的全称是 Transmission Control Protocol,TCP进行

TCP协议与socket套接字

一.TCP协议 TCP协议建立双向通道 1.三次握手,建立连接: 客户端向服务端发送建立连接的请求  服务端返回收到请求的信息给客户端,并且发送往客户端建立连接的请求  客户端接收到服务端发来的请求,返回接成功给服务端,完成双向连接 2.反馈机制: 客户端往服务端发送请求,服务端必须返回响应, 告诉客户端收到请求了,并且将服务端的数据一并返回给客户端. 洪水攻击:指的是通过伪造大量的请求,往对方服务器发送请求,导致对方服务器响应跟不上,以至于瘫痪. 半连接池listen: 限制用户在同一个时间段