大家好,关于深入解析网络编程:TCP/IP、HTTP、Socket及长连接与短连接技术很多朋友都还不太明白,今天小编就来为大家分享关于的知识,希望对各位有所帮助!
Socket 通信示例主机A的应用程序要与主机B的应用程序通信,必须通过Socket建立连接,而建立Socket连接需要底层TCP/IP协议建立TCP连接。建立TCP 连接需要底层IP 协议来寻址网络上的主机。我们知道网络层使用的IP协议可以帮助我们根据IP地址找到目标主机,但是一台主机上可能运行着多个应用程序。如何与指定的应用程序通信需要TCP或UPD地址,即端口号来指定。这样,一个Socket实例就可以唯一地代表一个主机上应用程序的通信链路。
建立通信链路当客户端想要与服务器通信时,客户端首先必须创建一个Socket实例。操作系统会为这个Socket实例分配一个未使用的本地端口号,并创建一个包含本地和远程地址以及端口号的Socket实例。套接字数据结构将保留在系统中,直到连接关闭。在创建Socket实例的构造函数正确返回之前,会执行TCP三向握手协议。 TCP握手协议完成后,会创建Socket实例对象,否则会抛出IOException错误。相应的服务器会创建一个ServerSocket实例。 ServerSocket的创建比较简单。只要指定的端口号没有被占用,一般情况下实例创建都会成功。同时,操作系统也会为ServerSocket实例创建底层数据结构。该数据结构包含指定监听端口号和包含监听地址的通配符,通常为“”,表示监听所有地址。稍后,当调用accept()方法时,就会进入阻塞状态,等待客户端的请求。当新的请求到达时,将为该连接创建一个新的套接字数据结构。套接字数据中包含的地址和端口信息正是请求源地址和端口。这个新创建的数据结构将与ServerSocket实例的未完成连接数据结构列表相关联。注意,此时服务端对应的Socket实例还没有创建,而是会等待与客户端的三次握手完成。只有服务器端的Socket实例会返回,并且该Socket实例对应的数据结构会从未完成列表移至已完成列表。因此,与ServerSocket关联的列表中的每个数据结构代表与客户端建立的TCP连接。备注:调整系统参数,调整Windows下单机最大TCP连接数。 Windows下单机的TCP连接数由多个参数决定:以下都是通过修改注册表[HKEY_LOCAL_MACHINESystemCurrentControlSet ServicesTcpipParameters]1.最大TCP连接数 ** TcpNumConnections2.TCP关闭延迟时间* TCPTimedWaitDelay (30-240)s3.最大动态端口数MaxUserPort (默认=5000, Max=65534) TCP 客户端连接服务器时,客户端必须分配一个动态端口,默认情况下,该动态端口的分配范围为1024-5000 ,这意味着默认情况下,客户端最多可以同时发起3977个4.****最大TCB 数量的Socket连接。 MaxFreeTcbs系统为每个TCP连接分配一个TCP控制块(TCP control block)。 block或TCB),该控制块用于缓存TCP连接的一些参数。每个TCB需要分配一个0.5KB的页面池和一个0.5KB的非页面池。也就是说,每个TCP连接都会占用1KB的系统内存。对于非Server版本,MaxFreeTcbs默认值为1000(物理内存64M以上)。对于Server版本,默认值为2000。也就是说,默认情况下,Server版本最多可以同时建立和维护2000个TCP连接。5. 最大TCB Hash table 数量MaxHashTableSize TCB通过Hash表进行管理。该值表示分配的页池内存量。也就是说,如果MaxFreeTcbs=1000,那么pagepool内存量为500KB,那么MaxHashTableSize应该大于500。数字越大,Hash表的冗余度越高,分配和分配的时间就越少。每次都找到一个TCP连接。该值必须是2的幂,最大为65536。windows server 2003下IBM WebSphere Voice Server的典型配置为MaxUserPort=65534(十进制) MaxHashTableSize=65536(十进制) MaxFreeTcbs=16000(十进制) 这里我们可以看到即MaxHashTableSize 被配置为MaxFreeTcbs 的4 倍,这样可以大大提高TCP 建立的速度。
TCP/IPTCP/IP是一个协议组,可分为三个层次:网络层、传输层和应用层。网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。传输层有TCP协议和UDP协议。应用层有:TCP包括FTP、HTTP、TELNET、SMTP等协议UDP包括DNS、TFTP等协议短连接连接-传输数据-关闭连接HTTP是无状态的。浏览器和服务器每次执行一次HTTP操作时,都会建立一次连接,但在任务结束时断开连接。也可以这样说:短连接是指SOCKET连接发送完毕并接收到数据后立即断开。长连接连接-传输数据-保持连接-传输数据-。 - 关闭连接。长连接是指建立SOCKET连接后无论是否使用都保持连接,但安全性较差。http的长连接HTTP也可以建立长连接。使用Connection: 保持活动状态。 HTTP 1.1 默认使用持久连接。对比HTTP1.1和HTTP1.0,最大的区别就是增加了持久连接支持(好像最新的http1.0可以显式指定keep-alive),但是仍然是无状态的,或者说不能信任。什么时候用长连接,短连接?长连接多用于频繁操作和点对点通信,连接数不能太多。每个TCP连接都需要三步握手,这需要时间。如果每次操作都是先连接再操作,处理速度会降低很多。因此每次操作后都不会断开连接,第一次处理时直接发送数据包。没关系,不需要建立TCP连接。例如:长连接用于数据库连接。频繁的短连接通信会导致socket错误,频繁的socket创建也是一种资源的浪费。像WEB网站这样的HTTP服务一般都使用短链接,因为长连接会消耗服务器一定的资源,而对于像WEB网站这样几千甚至上亿的客户端连接来说,使用短连接更加经济。对于某些资源,如果使用长连接,同时有数千个用户,每个用户占用一个连接是可想而知的。因此并发量较大,但每个用户如果不需要频繁操作,则需要使用短连接。总之,长连接和短连接的选择要根据情况而定。发送接收方式****1、异步消息发送和接收是分开的,相互独立,互不影响。这种方法分为两种情况:(1)异步双工:接收和发送在同一个程序中,由两个不同的子进程分别负责发送和接收(2)异步单工:接收和发送使用两个不同的子进程来完成程序。2、同步消息发送和接收是同步进行的,即发送消息后,等待接收返回消息。同步方法一般需要考虑超时问题,即消息发送后不能无限期等待。您需要设置一个超时时间。过了这个时间,发送方将不再等待读取返回消息,直接通知超时返回。长连接中,一般没有条件判断读写何时结束,所以必须添加长度头。读取函数首先读取消息头的长度,然后根据这个长度读取对应长度的消息。Socket是什么
好了,文章到这里就结束啦,如果本次分享的深入解析网络编程:TCP/IP、HTTP、Socket及长连接与短连接技术和问题对您有所帮助,还望关注下本站哦!
【深入解析网络编程:TCP/IP、HTTP、Socket及长连接与短连接技术】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
TCP/IP基础真难学!
有5位网友表示赞同!
HTTP协议就是我们浏览網頁的基础吧!
有11位网友表示赞同!
想深入了解网络编程,这些概念都是必须掌握的。
有20位网友表示赞同!
Socket编程真的很有趣!可以自己搭建服务器客户端。
有6位网友表示赞同!
长连接和短连接的区别在哪?我有点糊涂啊~
有18位网友表示赞同!
为什么有些网站会选择长连接呢?
有12位网友表示赞同!
http这块技术真是太基础了,离不开它呀。
有14位网友表示赞同!
socket编程感觉很复杂,需要好好学习一下。
有12位网友表示赞同!
TCP/IP是网络通信的基石啊!
有19位网友表示赞同!
学习完这些概念,就可以写出更强大的网络应用了吧?
有16位网友表示赞同!
最近在研究长连接技术,希望能够更快高效地完成数据传输。
有9位网友表示赞同!
HTTP协议的发展真是史无前例的,从简单的文本到如今的多媒体传输
有11位网友表示赞同!
想了解一下socket编程的最佳实践?
有17位网友表示赞同!
TCP/IP和HTTP都有哪些局限性的呢?
有6位网友表示赞同!
长连接好神奇!可以减少延迟,提升用户体验。
有6位网友表示赞同!
短连接简单方便,适合处理少量数据请求.
有20位网友表示赞同!
有没有推荐一些TCP/IP的学习资料?
有14位网友表示赞同!
HTTP和socket应该怎样搭配使用呢?
有12位网友表示赞同!
网上很多关于TCP/IP的视频教程,可以一边看一边实践操作。
有6位网友表示赞同!