- 浏览: 185251 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
为什么昵称都叫没了:
对的,我也在做微信公众平台的开发,发现一个简单的教程 http ...
微信公众平台API -
guji528:
想找一个好一点的调试器,不知eric是否OK,有空再研究一下
Eric IDE安装 -
youyang:
受教了,不得不顶。
NoSQL非关系数据库简介 -
zhongzhai:
谢谢分享,波一个
Java中的UDP协议编程 -
huwenbiao2010:
有实现JPopupMenu透明的案例不,发个给我 ,谢谢了 , ...
一道笔试题
1. SO_LINGER / SO_REUSEADDR
TCP正常的关闭过程如下(四次握手过程):
(FIN_WAIT_1) A ---FIN---> B(CLOSE_WAIT)
(FIN_WAIT_2) A <--ACK-- B(CLOSE_WAIT)
(TIME_WAIT)A <--FIN---- B(LAST_ACK)
(TIME_WAIT)A ---ACK-> B(CLOSED)
Ø A端首先发送一个FIN请求给B端,要求关闭,发送后A段的TCP状态变更为FIN_WAIT_1,接收到FIN请求后B端的TCP状态变更为CLOSE_WAIT
Ø B接收到ACK请求后,B回一个ACK给A端,确认接收到的FIN请求,接收到ACK请求后,A端的TCP状态变更为为FIN_WAIT_2。
Ø
B端再发送一个FIN请求给A端,与连接过程的3次握手过程不一样,这个FIN请求之所以并不是与上一个请求一起发送,之所以如此处理,是因为TCP是双
通道的,允许在发送ACK请求后,并不马上发FIN请求,即只关闭A到B端的数据流,仍然允许B端到A端的数据流。这个ACK请求发送之后,B端的TCP
状态变更为LAST_ACK,A端的状态变更为TIME_WAIT。
Ø A端接收到B端的FIN请求后,再回B端一个ACK信息,对上一个FIN请求进行确认,到此时B端状态变更为CLOSED,Socket可以关闭。
除了如上正常的关闭(优雅关闭)之外,TCP还提供了另外一种非优雅的关闭方式RST(Reset)
(CLOSED) A ---RST--> B (CLOSED)
Ø A端发送RST状态之后,TCP进入CLOSED状态,B端接收到RST后,也即可进入CLOSED状态。
在第一种关闭方式上(优雅关闭),非常遗憾,A端在最后发送一个ACK请求后,并不能马上将该Socket回收,因为A并不能确定B一定能够接收到这个
ACK请求,因此A端必须对这个Socket维持TIME_WAIT状态2MSL(MSL=Max Segment
Lifetime,取决于操作系统和TCP实现,该值为30秒、60秒或2分钟)。如果A端是客户端,这并不会成为问题,但如果A端是服务端,那就很危险
了,如果连接的Socket非常多,而又维持如此多的TIME_WAIT状态的话,那么有可能会将Socket耗尽(报Too Many Open
File)。
服务端为了解决这个问题,可选择的方式有三种:
Ø 保证由客户端主动发起关闭(即做为B端)
Ø 关闭的时候使用RST的方式
Ø 对处于TIME_WAIT状态的TCP允许重用
一般我们当然最好是选择第一种方式,实在没有办法的时候,我们可以使用SO_LINGER选择第二种方式,使用SO_REUSEADDR选择第三种方式
- public void setSoLinger( boolean on, int linger) throws SocketException
- public void setReuseAddress( boolean on) throws SocketException
第一个on表示是否使用SO_LINGER选项,linger(以秒为单位)表示在发RST之前会等待多久,因为一旦发送RST,还在缓冲区中还没有发送出去的数据就会直接丢弃
2.TCP_NODELAY
对于交互型的应用(譬如telnet),经常存在的情况是客户端和服务端之间需要频繁地进行一些小数据交换,譬如telnet可能每敲一个键盘都需要将数
据发送到服务端。为了避免这种情况会产生大量小数据包,提出了Nagle算法。Nagle算法要求每次在发送端最后只有一个未被确认的包,因此上一个包发
送出去还没有接收到响应之前,要求发送的包回先放在缓冲区,接收到响应之后,会将缓冲区中的包合并成一个包发送出去(可以看到,响应回地越快,发送出去的
数据也会越快)。
需要注意的是,由Nagle算法要求只能有一个未被确认的包,因此窗口参数会失效,在大数据量传送的情况下会使网络吞吐量下降,因此对于大数据量的交互,
应该关闭Nagle算法,Nagle算法比较适合小数据量频繁交换的情景。我们可以使用TCP_NODELAY关闭Nagle算法。
- public void setTcpNoDelay( boolean on) throws SocketException
3.SO_KEEPALIVE
在一个TCP连接建立之后,我们会很奇怪地发现,默认情况下,如果一端异常退出(譬如网络中断后一端退出,使地关闭请求另一端无法接收到),TCP的另一
端并不能获得这种情况,仍然会保持一个半关闭的连接,对于服务端,大量半关闭的连接将会是非常致命的。SO_KEEPALIVE提供了一种手段让TCP的
一端(通常服务提供者端)可以检测到这种情况。如果我们设置了SO_KEEPALIVE,TCP在距离上一次TCP包交互2个小时(取决于操作系统和
TCP实现,规范建议不低于2小时)后,会发送一个探测包给另一端,如果接收不到响应,则在75秒后重新发送,连续10次仍然没有响应,则认为对方已经关
闭,系统会将该连接关闭。一般情况下,如果对方已经关闭,则对方的TCP层会回RST响应回来,这种情况下,同样会将连接关闭。
-
public
void
setKeepAlive(
boolean
on)
throws
SocketException
发表评论
-
UML类图关系(泛化 、继承、实现、依赖、关联、聚合、组合)
2013-04-26 22:32 879继承 指的是一个类(称为子类、子接口)继承另外的一个类( ... -
数据库链接池(DBCP)配置参考
2012-01-31 17:20 1031链接池不但能提高数据库的访问效率,也能有效地控制自 ... -
设置半透明的JMenuBar
2011-01-17 17:33 3176源作:陈思羽. 更新:龚德伟. 2008.07.20 ... -
使用svn——项目的目录布局
2011-01-07 21:12 805Subversion有一个很标准的目录结构,是这样的。 比如 ... -
Socket TCP连接和断开过程
2010-11-03 09:22 2323在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握 ... -
java jvm 参数 -Xms -Xmx -Xmn -Xss 调优总结
2010-10-25 13:41 977常见配置举例 堆大 ... -
jstat,jmap,jconsole,jvisualvm,jps,jinfo等JDK系统监控、性能调优工具
2010-10-11 13:57 810JProfiler在java程序性能调试方便表现优越,推荐使用 ... -
一道笔试题
2010-09-28 23:05 1016问题说明 : 计算一个整形数组里的连续元素和的最大值 ... -
一个题目:超大量数据的排序
2010-09-22 03:40 1847一个文件里,有一堆int,把它们排序一下,输出到另外一个文 ... -
各种系统架构图及其简介
2010-03-01 11:35 2443转载请保留出处 , 不胜人生 一场醉汇总。 ... -
Java抓图软件
2010-01-19 09:52 1019以下代码不是本人所写,乃是从网上搜到,记录下来供以后参考。 ... -
16进制字符串与byte数组互转(转载)
2010-01-13 21:07 1981import java.io.ByteArrayInp ... -
byte,int,char,double的相互转换(java)
2010-01-13 21:05 2695//整数到字节数组的转换 public stat ... -
Java中的UDP协议编程
2009-11-18 14:34 1941一. UDP协议定义 UDP协议的全称是用户数据报 ... -
System.getProperties()
2009-07-26 22:26 28591 、 java 通过 System.g ... -
System.getProperty()参数大全
2009-07-26 22:22 877java.version Ja ... -
JAVA打包后读取自身JAR中的文件
2009-07-26 21:48 5697在编写完Java程序后,打包成Jar时发布,会发现找不到Jar ... -
log4j 日志文件相对路径
2009-07-26 21:32 13071、在Tomcat 5.5中的Log4j ... -
windows下openldap的安装与java操作测试
2009-07-01 15:36 929windows下openldap的安装与 ... -
用Ant编译、junit测试、生成测试报告、最终自动发mail
2009-03-19 14:15 1595测试通过的版本如下:Eclipse:3.3.2jdk:1.6j ...
相关推荐
### Java CP/IP Socket编程 #### 第1章:简介 计算机网络的发展使得个人电脑不仅可以作为办公工具,还能成为娱乐中心和沟通平台。随着越来越多的人通过互联网进行互动,掌握网络编程技术变得尤为重要。本章旨在为...
《1.1TCP/IP详解卷1:协议 原书第2版》是网络通信领域的一本经典著作,深入解析了TCP/IP协议族的核心概念和技术。这本书对于理解互联网的工作原理至关重要,尤其对于Java开发者来说,熟悉TCP/IP协议有助于构建更高效...
Socket TCP网络调试助手是一款强大的工具,它主要用于帮助开发者在TCP/IP网络环境中进行通信协议的调试和测试。在软件开发过程中,尤其是涉及到网络编程时,理解并掌握TCP/IP协议至关重要。这款工具提供了直观的界面...
它主要包括以下几个部分: 1. **请求行**: 包含方法(如GET)、URL和HTTP版本。 2. **请求头**: 包含客户端的一些信息,如User-Agent、Accept-Language等。 3. **响应状态码**: 表示请求的结果,如200 OK、404 Not ...
在这个"Socket编程客户端"中,我们将会探讨以下几个关键知识点: 1. **Socket基础概念**:Socket在计算机网络中是一种接口,它允许应用程序通过网络进行通信。在TCP/IP协议栈中,Socket提供了应用层与传输层的交互...
在Java网络编程中,我们主要涉及以下几个关键知识点: 1. **套接字(Sockets)编程**:Java的`java.net.Socket`和`ServerSocket`类是进行客户端-服务器通信的基础。源码中可能会包含如何创建和使用套接字,以及处理...
根据提供的文件信息,我们可以深入探讨有关“IP数据包监控”的几个关键知识点,这些知识点主要集中在对IP数据包的理解、监控工具和技术的选择上。 ### 一、IP数据包的基础概念 在计算机网络中,IP(Internet ...
它是一个基于请求与响应模型的、无状态的、应用层协议,通常运行在TCP/IP协议之上。Java语言在开发过程中,HTTP协议的应用非常普遍,无论是客户端还是服务端,都能看到它的身影。 HTTP协议的核心概念包括以下几个...
通信过程主要包括以下几个步骤: 1. **客户端**: - 创建Socket对象,指定服务器IP地址和端口号。 - 获取输出流,向服务器发送数据。 - 获取输入流,接收服务器返回的数据。 2. **服务器端**: - 创建...
Java的Socket编程接口提供了基础的TCP/IP通信功能,开发者可以使用这些接口实现玩家之间的实时交互。此外,NIO(非阻塞I/O)和Netty框架可以进一步优化网络性能,减少延迟,提高游戏体验。 4. **用户界面(UI)**:...
FTP下载和解析涉及到的主要知识点包括以下几个方面: 1. FTP基本概念: FTP是Internet上的标准服务之一,它通过TCP/IP协议进行通信。FTP客户端和服务器之间建立连接,进行文件操作。主要有两种工作模式:主动模式...
Java网络编程主要涵盖以下几个关键知识点: 1. **套接字(Socket)编程**:Java中的`java.net.Socket`和`ServerSocket`类是实现客户端-服务器模型的基础。Socket类代表网络上的一个端点,而ServerSocket则用于监听...
这通常涉及以下几个方面: - **权限管理**:合理设置文件和目录的权限,避免敏感信息泄露。 - **资源限制**:对每个进程或线程的资源使用进行限制,防止服务器资源被恶意消耗。 - **异常处理**:良好的异常处理机制...
在使用HttpClient时,我们通常会遇到以下几个关键步骤: 1. 创建HttpClient实例:通过`HttpClientBuilder`或`HttpAsyncClientBuilder`来配置HttpClient的行为,如设置连接管理器、请求处理器等。 2. 配置请求:使用`...
1. 数据传输:TCP/IP协议栈是基础,通过建立稳定的Socket连接,实现数据的安全传输。 2. 实时性:心跳机制确保连接有效性,定时推送或轮询策略获取最新数据,确保监控的实时性。 3. 数据解析:JSON或XML等格式用于...
在Java中实现局域网通信,我们需要以下几个步骤: 1. **服务器端**:创建一个ServerSocket实例,指定一个端口号,开始监听。例如: ```java ServerSocket serverSocket = new ServerSocket(12345); ``` 2. **...
根据提供的文件信息,本文将详细解析“JAVA源码JAVA3D的网络三维技术的设计与实现”这一主题,包括JAVA3D的基本概念、网络三维技术的关键技术点、设计思路及其实现方法等内容。 ### JAVA3D简介 JAVA3D是基于Java...
JAVA试题(100道) —————————————————————————————————————— 题目1: 下面不属于基本类型的是:c (选择1项) A) boolean B) long C) String D) byte 题目2:d 如下程序中:...
这个压缩包包含了几个关键的组件,可以帮助开发者在Windows平台上使用Qt库来实现Modbus主机的功能。 首先,"ws2_32.dll"是Windows Socket 2库的动态链接库文件,它提供了网络通信的基本接口。在Windows系统中,当你...