`
benx
  • 浏览: 276170 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

tcp 和 java socket

    博客分类:
  • java
 
阅读更多

 

tcp socket 总结点

 

1、操作系统分为内核态和用户态,tcp协议实现属于操作系统内核态,然后socket传输过程中发送方和接收方都有自己的窗口(buffer),那么就必须会有内核态的buffer到用户态的buffer拷贝

 

2、java 的socket只是通过java本地方法调用基于操作系统的tcp实现

 

3、 tcp不同与udp,udp只是尽自己努力的把数据传送到目的地,但tcp是必须保证数据传送过去,在传送过程中会使用发送和确认,重试的方式来保证数据的传达

 

4、数据传输开始使用发一个数据,等待一个确认,后来发现这样太慢,就使用一次发送多个数据,等待多个数据的确认,如果没有收到确认,或者在确认中发现遗漏了一个数据,会发起重试。

 

5,发送方和接收方都有自己的窗口(buffer),这个窗口时可变的,在java中可以通过sendbuffersize和recivebuffersize来设置,发送方的可用窗口大小为 buffersize - (等待发送数据+等待确认数据)   接收方的可用窗口大为buffersize-(按序到达,等待用户读取+未按时到达,等待重新发送) 如果接收方的窗口慢了,那么会告诉发送发,那么发送方将暂时不会发送给接收方,用户发送数据先写到发送缓冲,如果发送缓冲已满,将会阻塞。

 

6、在内核态中,如果发送窗口已满,将阻塞write,如果接受窗口为空,将会阻塞read

 

7,Nagle算法,主要是为了节省流量的目的,当用户逐个字节的发送数据时,会把字节缓冲起来,组成一个报文发送。

 

8,在使用netty或mina是要注意,如果发送缓冲区已满,那么将会阻塞发送,netty或mina将会把发送的请求保存在内存中,如果保存的过多可能会发生outofmemory错误。

 

linux IO模型

阻塞,同步IO:比如读,如果窗口没有数据,将一直等待,比如listen,如果没有新的连接,将一直等待   java IO使用该方式

 

非阻塞,同步IO:比如读,如果窗口没有数据,将返回false,使用轮询模式

 

IO复用,阻塞(半阻塞),同步IO:IO复用主要是把read或linsten或connect或write等操作注册到系统中,使用轮询方式判断是否有事件发生,然后触发事件    java NIO使用该方式

 

信号驱动,非阻塞,同步:将兴趣注册到系统中,此时不需要轮询,当有事件发生时,将递交信号

 

非阻塞,异步IO:从概念上说,应该用户会提供一个回调方法,内核把数据直接把数据拷贝给用户,填充用户提供的缓冲区,完后通知用户,这种方式看上去很完美,可惜目前java不支持这种方式。

 

 

 

TCP的几种状态

LISTEN:侦听来自远方的TCP端口的连接请求

SYN-SENT:再发送连接请求后等待匹配的连接请求

SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认

ESTABLISHED:代表一个打开的连接

FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认

FIN-WAIT-2:从远程TCP等待连接中断请求

CLOSE-WAIT:等待从本地用户发来的连接中断请求

CLOSING:等待远程TCP对连接中断的确认

LAST-ACK:等待原来的发向远程TCP的连接中断请求的确认

TIME-WAIT:等待足够的时间以确保远程TCP接收到连接中断请求的确认

CLOSED:没有任何连接状态

分享到:
评论

相关推荐

    基于TCP的Java Socket通信技术.pdf

    通过本文档,我们可以了解到基于TCP的Java Socket通信技术的原理和实现过程,了解到TCP/IP协议、Socket编程和Java Socket通信等方面的知识,为我们在实际开发中提供了有价值的参考。 知识点: 1. TCP/IP协议的重要...

    Java TCP IP Socket编程(原书第2版).

    《Java TCP/IP Socket编程(原书第2版)》基于TCP/IP Socket相关原理,对如何在Java中进行Socket编程作了深入浅出的介绍。《Java TCP/IP Socket编程(原书第2版)》内容简明扼要,条理清晰,并在讲解相应的概念或编程...

    TCP-socket.zip_java_java Tcp _java socket _socket_socket多线程

    本压缩包文件"TCP-socket.zip"包含了一个基于Java实现的TCP Socket通信客户端和服务端,且支持多线程并发连接。这个学习资源可以帮助我们深入了解Java中的TCP Socket编程和多线程技术。 首先,让我们来看看TCP协议...

    tcp_udp_socket.zip_Java TCP/UDP_java Tcp _java socket _java tcp

    本实验项目“tcp_udp_socket.zip”旨在帮助开发者理解如何使用Java实现TCP和UDP的Socket通信。以下将详细讲解这两个协议及其在Java中的实现。 首先,TCP(Transmission Control Protocol)是一种面向连接的、可靠的...

    JAVA TCP和UDP Socket通信框架

    Java中的TCP和UDP Socket通信是网络编程的基础,用于在不同设备之间建立可靠的数据传输通道。TCP(Transmission Control Protocol)提供的是面向连接、有序且无损的服务,而UDP(User Datagram Protocol)则是无连接...

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

    Java TCP/IP Socket编程是Java网络通信的核心技术,广泛应用于服务器端和客户端之间的数据传输。这本书的第二版深入探讨了如何使用Java实现TCP/IP协议栈的socket接口,为开发者提供了全面的理论知识和实践指导。 ...

    基于java的modbus TCP通信

    在 Java 中,可以使用 Socket 编程来实现 Modbus TCP 通信。首先,需要创建一个 Socket 对象,用于连接到 Modbus 设备。然后,需要根据 Modbus TCP 协议的报文格式编码报文,发送到设备端。设备端将回复响应报文,...

    基于TCP的Java Socket网络连接过程要点分析.pdf

    本文将从应用程序、Socket和操作系统三个层面探讨Java Socket程序中TCP通信连接的过程,并分析connect()方法、bind()方法和accept()方法在通信过程中的具体作用。 一、TCP三次握手 在Java网络编程中,TCP虚连接...

    Java TCP IP Socket

    Java TCP/IP Socket 涉及的是Java编程语言中网络编程的核心部分,它允许Java程序通过使用TCP/IP协议族与远程的或者本地的其他程序进行数据交换。TCP/IP协议族是目前互联网上最广泛使用的协议族,而Socket编程是实现...

    Java TCP/IP Socket编程

    5. **关闭连接**:在完成数据交换后,客户端和服务器都需要关闭Socket和相关的流,释放系统资源。通常,先关闭写入流,然后关闭读取流,最后关闭Socket。 6. **异常处理**:在网络编程中,由于网络环境的不确定性,...

    Java TCP_IP Socket编程源代码书籍以及附带源码

    Java TCP/IP Socket编程是网络通信领域中的核心技术,广泛应用于服务器端和客户端之间的数据传输。本资源包含一本关于Java TCP/IP Socket编程的书籍及其配套源代码,对于深入理解Socket编程至关重要。 书籍《Java ...

    Socket_TCP_UDP.rar_java socket tcp udp_java socket 协议_java tcp u

    Socket编程是Java中用于网络通信的核心技术,它涵盖了TCP(传输控制协议)和UDP(用户数据报协议)两种主要的互联网协议。TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议,而UDP则是一种无连接的、不可靠...

    Java_TCP_IP_Socket编程(原书第2版)

    2. **Java Socket类库**:Java提供了java.net.Socket和ServerSocket类来支持TCP/IP通信。Socket代表一个连接的两端,一个在客户端,另一个在服务器端。ServerSocket用于监听客户端的连接请求。 3. **建立连接**:...

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

    - 当通信完成后,关闭Socket和ServerSocket。 2. **客户端**: - 创建Socket实例,指定服务器的IP地址和端口号,这会尝试建立到服务器的连接。 - 获取Socket的输入流和输出流,通常也是InputStreamReader、...

    Java TCP IP Socket编程(原书第2版)

    综上所述,《Java TCP/IP Socket编程》(原书第2版)是一本全面且深入的指南,无论你是初学者还是有一定经验的开发者,都能从中获得宝贵的知识和实践经验,助力你在网络编程领域取得更大的成就。

    Java TCP-IP Socket编程-卡尔弗特.pdf

    例如,创建安全的HTTPS连接,需要使用SSLSocket和SSLServerSocket类,实现数据传输的安全加密。 总的来说,“Java TCP-IP Socket编程-卡尔弗特.pdf”这份资料应该会详细讲解以上内容,并可能涵盖更多高级主题,如...

    Java TCP IP Socket编程 包含源码

    Java TCP/IP Socket编程是网络通信领域中的核心技术,广泛应用于服务器端和客户端之间的数据传输。本资源包含第二版书籍的相关源码,旨在帮助开发者深入理解并实践Socket编程。以下是关于Java TCP/IP Socket编程的...

    JAVA_Socket_TCP(客户端服务器)

    本教程将深入探讨如何使用Java Socket库创建TCP客户端和服务器。 首先,我们从服务器端开始。在Java中,`java.net.ServerSocket`类用于创建服务器端的Socket,监听特定端口上的连接请求。以下是一个简单的服务器...

    tcp.rar_java Tcp _java tcp socket

    Java的`java.net.Socket`类和`java.net.ServerSocket`类是进行TCP通信的核心。`ServerSocket`用于服务器端,监听特定端口上的连接请求;而`Socket`则用于客户端,用来建立与服务器的连接。 1. **创建服务器端:** ...

    java socket客户端断线重连

    java socket client 断线重连的简单实现 有什么意见可以提哦

Global site tag (gtag.js) - Google Analytics