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:没有任何连接状态
分享到:
相关推荐
《Java TCP/IP Socket编程(原书第2版)》基于TCP/IP Socket相关原理,对如何在Java中进行Socket编程作了深入浅出的介绍。《Java TCP/IP Socket编程(原书第2版)》内容简明扼要,条理清晰,并在讲解相应的概念或编程...
Java TCP/IP Socket编程 Java TCP/IP Socket编程 Java TCP/IP Socket编程
使用Java编写的tcp和udp的socket通信实验程序。
java Socket 和多线程 实现的通信客户端和服务端 可并发连接
java TCP/IP socket 编程(原书第2版)+部分源码,对于想学习java socket编程很有帮助!
Java TCP_IP Socket编程源代码书籍以及附带源码Java TCP_IP Socket编程源代码书籍以及附带源码
基于TCP的Java Socket通信技术.pdf
基于java的modbus TCP通信
一个很好用的JAVA基于TCP和UDP的Socket通信框架,包括客户端和服务器,以及相应的回调方法
java socket client 断线重连的简单实现 有什么意见可以提哦
TCP IP Socket 免费 个人收集电子书,仅用学习使用,不可用于商业用途,如有版权问题,请联系删除!
基于TCP的Java Socket网络连接过程要点分析.pdf
Java TCP-IP Socket编程-卡尔弗特.pdf,结合java开发基于tcpip协议的socket编程
Tcp(socket)Server.java
Java TCP IP Socket编程(中文版).pdf Java TCP IP Socket编程(中文版).pdf
现在几乎所有互联网应用程序都使用Java Socket进行通信,而本书专注的、教导式的方法,使读者能够快速掌握所有计算机通信的任务和技术要点。 本书特点: 对Socket编程的重点进行了集中简明的介绍,以使读者能够迅速...
SpringMVC的Socket实现+Java Tomcat websocket实现+Java Socket通信实现 +Java UDP通信实现。websocket_study.rar 为springMVC版本的socket实现 websocket02.rar 里面包含tomcat的websocket实现+java socket双向通信...
Java TCP_IP Socket编程(原书第2版).mobi、java底层协议通讯
Java + TCP/IP+ Socket编程++ 原书第2版.pdf 中文版