Java网络编程Socket原理

本文详细介绍了Java网络编程中Socket的工作原理,包括用户态和内核态的概念,Linux Socket作为系统调用接口的角色,以及TCP三次握手的过程。文章讨论了Java中Socket的native方法与Linux Socket函数的对应,并概述了Socket的创建、绑定、监听、接受和关闭等关键操作。
摘要由CSDN通过智能技术生成

Java网络编程Socket原理

用户态和内核态

用户态和内核态主要是基于操作系统来说的。

内核态:内核态其实可以直接理解为内核或者操作系统,主要是控制CPU或者磁盘、网卡等硬件设备这些资源。

用户态:用户态是权利有限的程序,我们可以理解为不能直接使用CPU或者磁盘、网卡等资源的程序,我们写的大多数程序运行在用户态,比如JVM。

为什么要有用户态和内核态?

主要为了集中管理和调配资源以及保护资源和系统。毕竟CPU和内存以及IO设备这些资源任何程序都能随便调用和访问,对于这些资源本身来说就是一种危险。

往往我们的系统的资源是固定的,例如内存2G,CPU固定,磁盘2TB,网络接口固定。所以就需要操作系统对资源进行有效的利用。假设某个应用程序过分的访问这些资源,就会导致整个系统的资源被占用,如果不对这种行为进行限制和区分,就会导致资源访问的冲突。Linux操作系统就将权限等级分为了2个等级,分别就是内核态和用户态。

这里就衍生出一个问题,就是应用程序本身需要访问网卡、硬盘等设备资源你的时候怎么访问?操作系统提供了一个叫做系统调用的接口便于我们能访问网络设备。

应用程序通过系统调用调用内核资源

Linux Socket

Liunx Socket其实就是上面所说的内核提供给用户程序的一个系统调用接口。应用程序通过调用内核态的Socket函数接口来完成网络通信,这个过程也叫做用户态到内核态的切换。所以java中我们使用的网络通信实际是调用了内核提供给我们的的Socket函数接口。

Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,只调用socket接口来使用下层TCP/IP提供的服务。

整体流程如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值