Java通信编程理论基础篇
Java通信编程理论基础篇
最近用到通信编程,也是第一次全面接触这些相对底层的技术,在JAVA理论基础上需要一些准备才能更好的理解java的通信原理和完成框架结构的设计。
TCP/IP参考模型: 美国国防部高级研究计划局计算机网及后来的Internet使用的参考模型。可以分为四层(主机网络层,网络互联层,传输层,应用层)。
网络互联层:这个是整个参考模型的核心,它的功能似是把IP数据包发送到目标主机。为了尽快地发送数据,IP协议把原始数据分为多个数据包,然后沿不同的路径同时传递数据包。该层采用IP协议,它规定了数据包的格式,并且规定了为数据包寻找路由的流程。
传输层:使源主机和目标主机桑的进程可以进行会话。在传输层定义了两种服务质量不同的协议,即TCP和UDP。
TCP:是一种面向连接的,可靠的协议。它将源主机发出的字节流无差错地发送给互联网上的目标主机。在发送端,TCP协议负责把上层传送下来的数据分成报文段传递给下层。在接收端,TCP协议负责把接收到的报文进行重组后交给上层。TCP协议还要处理端到端的流量控制,以避免接收速度缓慢的接收方没有足够的缓冲区来接收发送方发送的大量数据。
UDP:该协议是一个不可靠的,无连接协议名主要适用于不需要对报文排序和流量控制的场合。
应用层:TCP/IP模型将OSI参考模型中的会话和表示层的功能合并到应用层实现。针对各种各样的网络应用,应用层映入了许多协议。基于TCP的主要有FTP,TELNET,HTTP,HTTPS,POP3,SMTP.基于UDP协议的有SNMP,DNS。
端口:TCP采用端口来区分进程。端口不是物理设备。当两个进程进行一次通信,就意味着建立TCP连接,连接的两个端点用端口来表示。端口号的范围为0到65535,其中0到1023的端口号一般固定分配给一些服务。客户进程的端口一般有所在主机的操作系统动态分配。
线程阻塞:线程在运行的时候也会因为某些原因而阻塞。所有处于阻塞状态的线程的共同特征是,放弃CPU,暂停运行,等到导致阻塞的原因消除才会恢复运行,或者被其他线程中断,该线程会退出,并抛出InterruptedException。
导致线程阻塞的主要原因:
1)线程睡眠。
2)线程执行同步代码,无法获得同步锁。
3)线程执行了一个对象的Wait方法,进入阻塞,等待其他线程执行该对象的notify。
4)线程执行I/O操作或进行远程通信时,会因为等待相关资源而进入阻塞状态。
5)请求与服务器连接的时候,执行Socket的接续方法时,会进入阻塞状态。直到连接成功。
6)线程从Socket的输入流读入数据时,如果没有足够的数据,就会进入阻塞状态,知道读到足够的数据,或者到达输入流的末尾,或者出现异常,才会结束阻塞。
7)线程向Socket的输出流写一批数据时,可能会进入阻塞状态,等到输出了所有的数据,或者出现异常,才能结束阻塞。
8)调用Socket的方法来设置了关闭Socket的延迟时间,那么Socket在关闭的时候,会进入阻塞。
浙公网安备 33010602011771号