`
wbj0110
  • 浏览: 1598373 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

TCP/IP,http,socket,长连接,短连接

阅读更多

先看图:

 


 

TCP/IP是什么?

 

   TCP/IP是个协议组,可分为三个层次:网络层、传输层和应用层。
   在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。
   在传输层中有TCP协议与UDP协议。
   在应用层有FTP、HTTP、TELNET、SMTP、DNS等协议。

 

 

 

Socket是什么呢?

 

    Socket是应用层与TCP/IP协议族通信的中间软件抽象层,一组接口,把复杂的TCP/IP协议族隐藏在Socket接口后面。

 

   所以HTTP就是TCP/IP应用层的协议。Socket是他们的软件抽象层。

 

短连接:
   连接->传输数据->关闭连接
   HTTP是无状态的,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。
   也可以这样说:短连接是指SOCKET连接后发送后接收完数据后马上断开连接。
长连接:
    连接->传输数据->保持连接 -> 传输数据-> 。。。 ->关闭连接。
   长连接指建立SOCKET连接后不管是否使用都保持连接,但安全性较差。
http的长连接:
   HTTP也可以建立长连接的,使用Connection:keep-alive,HTTP 1.1默认进行持久连接。HTTP1.1和HTTP1.0相比较而言,最大的区别就是增加了持久连接支持(貌
似最新的 http1.0 可以显示的指定 keep-alive),但还是无状态的,或者说是不可以信任的。

 

 

 

 

 

================================================

 

 

socket

Socket协议的形象描述
  socket的英文原义是“孔”或“插座”。在这里作为4BDS UNIX的进程通信机制,取后一种意思。socket非常类似于电话插座。以一个国家级电话网为例。电话的通话双方相当于相互通信的2个进程,区号是它的 网络地址;区内一个单位的交换机相当于一台主机,主机分配给每个用户的局内号码相当于socket号。任何用户在通话之前,首先要占有一部电话机,相当于 申请一个socket;同时要知道对方的号码,相当于对方有一个固定的socket。然后向对方拨号呼叫,相当于发出连接请求(假如对方不在同一区内,还 要拨对方区号,相当于给出网络地址)。对方假如在场并空闲(相当于通信的另一主机开机且可以接受连接请求),拿起电话话筒,双方就可以正式通话,相当于连 接成功。双方通话的过程,是一方向电话机发出信号和对方从电话机接收信号的过程,相当于向socket发送数据和从socket接收数据。通话结束后,一 方挂起电话机相当于关闭socket,撤消连接。

详细内容见百科


通常短连接是这样:连接->传输数据->关闭连接
那什么是长连接?一般长连接相对短连接而言的,长连接在传输完数后不关闭连接,而不断的发送包保持连接等待处理下一个数据包。
such as: 连接->传输数据->保持连接 -> 传输数据-> 。。。 ->关闭连接。

那什么时候用短连接呢?
一般长连接用于少数client-end   to server-end的频繁的通信,例如:数据库的连接用长连接, 如果用短连接频繁的通信会造成socket错误,而且频繁的socket 创建也是对资源的浪费。
而像WEB网站的http服务一般都用短链接,因为长连接对于服务端来说会耗费一定的资源,而像WEB网站这么频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源。(查看来源)


TCP/IP通信解读长短链接

一。通信方式
主要有以下三大类:
(一)SERVER/CLIENT方式
1.一个Client方连接一个Server方,或称点对点(peer to peer):
2.多个Client方连接一个Server方,这也是通常的并发服务器方式。
3.一个Client方连接多个Server方,这种方式很少见,主要
用于一个客户向多个服务器发送请求情况。

(二)连接方式
1.长连接
Client方与Server方先建立通讯连接,连接建立后不断开,
然后再进行报文发送和接收。这种方式下由于通讯连接一直
存在,可以用下面命令查看连接是否建立:
netstat –f inet|grep 端口号(如5678)。
此种方式常用于点对点通讯。

2.短连接
Client方与Server每进行一次报文收发交易时才进行通讯连
接,交易完毕后立即断开连接。此种方式常用于一点对多点
通讯,比如多个Client连接一个Server.

(三)发送接收方式
1.异步
报文发送和接收是分开的,相互独立的,互不影响。这种方
式又分两种情况:
(1)异步双工:接收和发送在同一个程序中,有两个不同的
子进程分别负责发送和接收
(2)异步单工:接收和发送是用两个不同的程序来完成。
2.同步
报文发送和接收是同步进行,既报文发送后等待接收返回报文。
同步方式一般需要考虑超时问题,即报文发上去后不能无限等
待,需要设定超时时间,超过该时间发送方不再等待读返回报
文,直接通知超时返回。

实际通信方式是这三类通信方式的组合。比如一般书上提供的
TCP/IP范例程序大都是同步短连接的SERVER/CLIENT程序。有的
组合是基本不用的,比较常用的有价值的组合是以下几种:

同步短连接Server/Client
同步长连接Server/Client
异步短连接Server/Client
异步长连接双工Server/Client
异步长连接单工Server/Client

其中异步长连接双工是最为复杂的一种通信方式,有时候经
常会出现在不同银行或不同城市之间的两套系统之间的通信。
比如金卡工程。由于这几种通信方式比较固定,所以可以预
先编制这几种通信方式的模板程序。

二.报文格式
通信报文格式多样性更多,相应地就必须设计对应的读写报文的接
收和发送报文函数。

(一)阻塞与非阻塞方式 
1.非阻塞方式
读函数不停地进行读动作,如果没有报文接收到,等待一段时间后
超时返回,这种情况一般需要指定超时时间。
2.阻塞方式
如果没有报文接收到,则读函数一直处于等待状态,直到有报文到达。

(二)循环读写方式
1.一次直接读写报文
在一次接收或发送报文动作中一次性不加分别地全部读取或全部
发送报文字节。
2.不指定长度循环读写
这一般发生在短连接进程中,受网络路由等限制,一次较长的报
文可能在网络传输过程中被分解成了好几个包。一次读取可能不
能全部读完一次报文,这就需要循环读报文,直到读完为止。

3.带长度报文头循环读写
这种情况一般是在长连接进程中,由于在长连接中没有条件能够
判断循环读写什么时候结束,所以必须要加长度报文头。读函数
先是读取报文头的长度,再根据这个长度去读报文.实际情况中,
报头的码制格式还经常不一样,如果是非ASCII码的报文头,还必须
转换成ASCII,常见的报文头码制有:
(1)n个字节的ASCII码
(2)n个字节的BCD码
(3)n个字节的网络整型码

 

分享到:
评论

相关推荐

    基于TCP/IP的socket编程

    在TCP/IP环境中,socket接口提供了创建、配置、连接和通信的API。 服务器端编程通常包括以下步骤: 1. 创建socket:使用socket()函数创建一个socket对象。 2. 绑定:使用bind()函数将socket与特定的IP地址和端口号...

    Java+TCP/IP+Socket编程++原书第2版.pdf

    TCP/IP(Transmission Control Protocol/Internet Protocol)协议栈是互联网通信的基础,而Socket是Java中实现TCP/IP通信的关键组件。本篇将深入探讨Java如何利用TCP/IP协议通过Socket进行网络编程。 TCP/IP协议族...

    Can't create TCP/IP socket(24).原因及解决办法

    3. "ERROR - Unable to connect to foreign data source- Can't create TCP-IP socket (24)_冰刀(skate)-CSDN博客.url":这可能是一个具体的案例,描述了在尝试连接外部数据源时遇到的TCP/IP套接字创建问题。...

    基于TCP/IP的Socket多线程通信(服务器和客户端)

    - 当通信结束,关闭Socket连接。 9. **代码示例**:多线程通信的代码通常包含Socket的创建、绑定、监听、连接、读写以及线程的创建和管理。具体实现可以参考提供的“多线程通信完成品”文件。 总的来说,基于TCP/...

    TCP/IPsocket长连接

    8. **安全性**:为了保护用户数据的安全,可能需要在传输层使用SSL/TLS加密,实现安全的Socket连接,防止数据被窃取。 9. **权限管理**:在安卓系统中,进行网络通信需要在Manifest文件中声明`...

    基于TCP/IP协议的Socket编程

    基于TCP/IP协议的Socket编程 TCP/IP协议是网络通信协议的基础,它规定了网络上的所有通信设备,尤其是一个主机与另一个主机之间的数据传输格式以及传送方式。TCP/IP协议的基本传输单位是数据包(datagram),TCP...

    Socket服务端客户端以tcp/ip协议发送接收报文

    在IT领域,网络通信是不可或缺的一部分,而Java Socket编程则是实现网络通信的一种常见方式,尤其在TCP/IP协议栈上。本教程将详细讲解如何利用Java Socket实现基于TCP/IP的服务端和客户端之间的报文发送与接收。 ...

    java TCP/IP socket 编程(原书第2版)pdf+源码

    在Java中,TCP/IP Socket编程主要涉及应用层和传输层,特别是TCP协议,它提供了一种面向连接、可靠的数据传输服务。 在Java中,Socket类和ServerSocket类是TCP/IP通信的主要接口。ServerSocket用于创建服务器端的...

    C# tcp/ip Socket Programmer

    1. **TCP/IP基础**:首先,你需要理解TCP/IP协议族的基本概念,包括OSI模型、TCP/IP四层模型(应用层、传输层、网络层、数据链路层)以及各层的主要协议,如HTTP、TCP、UDP、IP等。 2. **C# Socket API**:C#提供了...

    Delphi 编写TCP/IP网络Socket通信程序

    计算机网络是由一系列网络通信协议组成的,其中的核心协议是传输层的TCP/IP和UDP协议。TCP是面向连接的,通信双方保持一条通路,好比目前的电话线,使用telnet登陆BBS,用的就是TCP协议;UDP是无连接的,通信双方都...

    TCP/IP通信c#例程

    通过实践这个C# TCP/IP通信的例子,你可以深入理解TCP/IP协议的工作原理,学习如何在C#中使用Socket类进行网络编程,这对于开发涉及网络通信的软件至关重要。无论是创建简单的聊天应用,还是复杂的分布式系统,TCP/...

    c++ TCP/IP服务器程序

    在C++中实现TCP/IP服务器,我们需要理解套接字(socket)编程,它是网络编程的核心。 1. **套接字创建**:在C++中,我们需要包含`<sys/socket.h>`和`<netinet/in.h>`等头文件,使用`socket()`函数创建一个套接字。...

    TCP/IPsocket的简单编程

    TCP/IP套接字编程是网络通信的核心技术,广泛应用于各种操作系统,包括Windows和Linux。本文将深入探讨在...通过实践和研究"socket1"这样的例子,你将能够深入理解TCP/IP通信的内在机制,并逐步提升你的编程能力。

    C# TCP/IP通信小例子

    在C#中,我们通常使用System.Net命名空间下的Socket类来处理TCP/IP通信。 首先,让我们来看看服务端的实现。服务端需要监听特定的端口,等待客户端的连接请求。在C#中,可以创建一个Socket实例,并调用Bind方法绑定...

    tcp/ip聊天室.rar

    综上所述,"tcp/ip聊天室.rar" 包含了一个使用TCP/IP进行通信,通过socket编程实现连接,利用多线程处理并发连接,以及借助Linux(Ubuntu)和MySQL数据库进行数据存储的完整聊天室系统。这个项目展示了网络编程和...

    TCP/IP和SOCKET基本原理

    TCP/IP和SOCKET基本原理是网络通信中的重要概念,它们是构建互联网应用的基础。TCP/IP协议族是一个分层的通信模型,主要包含四个层次:网络接口层、网络层、传输层和应用层。TCP/IP的核心协议包括IP、TCP、UDP等,...

    VB tcp/ip通讯socket源代码

    5. 当通信完成后,关闭Socket连接。 TCP服务器端则需要处理以下任务: 1. 创建ServerSocket,绑定到特定的IP地址和端口,监听客户端的连接请求。 2. 使用Accept方法接收客户端的连接,这会返回一个新的Socket对象,...

    基于TCP/IP协议socket的文件传输,可以自己设置IP地址和端口,写入XML并读取其XML里的地址

    在IT领域,网络通信是至关重要的部分,而TCP/IP协议栈是互联网通信的基础。本话题主要探讨了如何利用Socket编程实现在TCP/IP协议基础上的文件传输,并结合MFC(Microsoft Foundation Classes)库以及XML(eXtensible...

Global site tag (gtag.js) - Google Analytics