网络编程
计算机知识思维导图:网络编程。网页展示前三层结构,可在线查看完整脑图并下载 GoMind 文件。
2026-08-25
## 网络编程 ### 网络编程 #### NIO ##### NIO的方式异步,服务器端用mina这个框架做管理 #### 协议 ##### XMPP ##### TCP ##### http ##### TCP和UDP的区别 #### 技术 ##### 建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket ,另一个运行于服务器端,称为ServerSocket ##### 套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认 #### 网络由下往上分层 ##### 物理层、数据链路层、网络层、传输层、会话层、表示层和应用层 ##### socket则是对TCP/IP协议的封装和应用(程序员层面上) ##### HTTP是应用层协议,主要解决如何包装数据 ##### 平时说的最多的socket是什么呢,实际上socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API) ##### CSDN上有个比较形象的描述:HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力 #### 长短连接 ##### 长连接 ##### 短链接 #### 高性能网络应用框架 ##### Netty ##### MINA #### 技术分层 ##### client ##### server #### 多方式、优缺点 ##### 轮询 ##### 长轮询 ##### 长连接 ##### Flash Socket ##### 新 web Socket #### 参考 ##### websocket基础 - 上吧,少年 - 博客频道 - CSDN.NET ##### WebSocket与消息推送 - 张果 - 博客园 ##### http、TCP/IP协议与socket之间的区别 - 梦想通 - 博客园 ##### TCP/IP、Http、Socket的区别 - skyboy11yk的专栏 - 博客频道 - CSDN.NET ##### 利用长轮询实现微信网页版扫码登录 - 瓶子里的小地盘 - 博客频道 - CSDN.NET > 仅展示前三层结构;请在线查看完整脑图或下载 GoMind 文件。
网络编程
网络编程
NIO的方式异步,服务器端用mina这个框架做管理
NIO
xmpp = socket+xml xmpp是将socket和xml封装了
XMPP
第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手
握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。
什么是TCP连接的三次握手
断开连接时服务器和客户端均可以主动发起断开TCP连接的请求,断开过程需要经过“四次握手”(过程就不细写了,就是服务器和客户端交互,最终确定断开)
TCP
HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用
http
TCP是面向链接
TCP的三次握手在最低限度上(实际上也很大程度上保证了)保证了连接的可靠性
UDP不是面向连接
UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号,发送端不知道数据是否会正确接收,当然也不用重发,所以说UDP是无连接的、不可靠的一种数据传输协议
UDP的开销更小数据传输速率更高,因为不必进行收发数据的确认,所以UDP的实时性更好
TCP和UDP的区别
协议
建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket ,另一个运行于服务器端,称为ServerSocket
套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认
技术
物理层、数据链路层、网络层、传输层、会话层、表示层和应用层
socket则是对TCP/IP协议的封装和应用(程序员层面上)
HTTP是应用层协议,主要解决如何包装数据
平时说的最多的socket是什么呢,实际上socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API)
CSDN上有个比较形象的描述:HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力
网络由下往上分层
基础的就是建立java.net.Socket连接,自己制定协议来控制断开|webSocket
服务器端的实现老的有标准IO(java.net.*),新的有NIO(java.nio.*)
有具体业务时可以考虑一些成熟的协议来实现,如XMPP
长连接
HTTP连接本身的request/response模式设计就是短链接的,即服务器端响应之后断开连接。
短链接
长短连接
Netty 是一个基于NIO的客户、服务器端编程框架
TCP和UDP的socket服务开发
Netty项目 - 事件驱动的异步网络应用程序框架http://netty.io/
netty/netty
Netty
高性能Java网络框架 MINA
支持基于 Java NIO 技术的 TCP/UDP 应用程序开发、串口通讯程序
MINA
高性能网络应用框架
clientSocket
request
response
网络
webSocket
client
mina
response
request
网络
netty
java.net.socket -websocket
java.net.socket -socket
java.net
javax.websocket
java EE7 & tomcat7.0.62
org.apache.catalina.websocket.WebSocketServlet
tomcat7
其它
socket
TCP
UDP
XMPP
轮询
长轮询
流
Ajax
http
协议
server
技术分层
轮询:客户端定时向服务器发送Ajax请求,服务器接到请求后马上返回响应信息并关闭连接。
优点:后端程序编写比较容易。
缺点:请求中有大半是无用,浪费带宽和服务器资源。
实例:适于小型应用。
轮询
长轮询:客户端向服务器发送Ajax请求,服务器接到请求后hold住连接,直到有新消息才返回响应信息并关闭连接,客户端处理完响应信息后再向服务器发送新的请求。
优点:在无消息的情况下不会频繁的请求,耗费资源小。
缺点:服务器hold连接会消耗资源,返回数据顺序无保证,难于管理维护。
实例:WebQQ、Hi网页版、Facebook IM。
长轮询
长连接:在页面里嵌入一个隐蔵iframe,将这个隐蔵iframe的src属性设为对一个长连接的请求或是采用xhr请求,服务器端就能源源不断地往客户端输入数据。
优点:消息即时到达,不发无用请求;管理起来也相对方便。
缺点:服务器维护一个长连接会增加开销。
实例:Gmail聊天
长连接
Flash Socket:在页面中内嵌入一个使用了Socket类的 Flash 程序JavaScript通过调用此Flash程序提供的Socket接口与服务器端的Socket接口进行通信,JavaScript在收到服务器端传送的信息后控制页面的显示。
优点:实现真正的即时通信,而不是伪即时。
缺点:客户端必须安装Flash插件;非HTTP协议,无法自动穿越防火墙。
实例:网络互动游戏。
Flash Socket
新 web Socket
多方式、优缺点
websocket基础 - 上吧,少年 - 博客频道 - CSDN.NET
WebSocket与消息推送 - 张果 - 博客园
http、TCP/IP协议与socket之间的区别 - 梦想通 - 博客园
TCP/IP、Http、Socket的区别 - skyboy11yk的专栏 - 博客频道 - CSDN.NET
利用长轮询实现微信网页版扫码登录 - 瓶子里的小地盘 - 博客频道 - CSDN.NET
参考