基础
网络模型:4、5、7
网络传输层协议:TCP/IP和UDP协议
TCP:面向连接,传输大小限制,安全可靠、效率低
三次握手:
第一次:客户端向服务器发送连接请求
第二次:服务器向客户端响应连接请求
第三次:客户端与服务器建立连接
四次挥手:
第一次:客户端向服务器发送断开连接请求
第二次:服务器向客户端响应收到断开连接请求(因为TCP连接是双向的,所以此时服务器依然可以向客户端发送信息)
第三次:客户端等待服务器发送信号完成,向服务器确定全部信息发送完毕,并且断开客户端与服务器的连接
第四次:服务器向客户端断开连接
Java 实现TCP
ServerSocket 服务端套接字 核心方法:accept
Socker 套接字 核心方法:getInputStream 和getOutputStream
UDP:非面向连接,效率高,不安全、不可靠
Java的实现
DatagramSocket 套接字对象,指明本机的端口信息
DatagramPacket 数据包,可以用来发送消息,也可以用来接收消息
程序架构
C/S Client Server 基于客户端服务器的程序架构,需要一个服务器或者N个客户端,实现数据的传输
B/S Browser Server 基于浏览器的程序结构,不需要客户端,只需要通过浏览器访问即可
get和post的区别
1.GET把参数包含在URL中,POST通过request body传递参数
2.get传递数据有大小限制,post没有
3.GET产生一个TCP数据包;POST产生两个TCP数据包
http响应状态码
400:请求参数有误
403:服务器已经理解请求,但是拒绝执行它
404:请求失败,找不到页面
405:请求方法错误,请求行中指定的请求方法不能被用于请求相应的资源
500:后台代码错误
进阶:NIO
NIO:New IO 同步非阻塞IO流
三大核心:1.通道Channel 实现连接 2.缓冲区 Buffer 实现消息的读取或发送的载体3.选择器 Selector 多路复用的体现 监听IO状态,4大事件
ServerSocketChannel 服务端套接字通道
SocketChannel 套接字通道对象 write 和read
ByteBuffer 一定要记得切换指针位置
高手:Netty
NIO原生的封装的一个开源框架,简化了原生的操作
场景:自定义通信协议(软硬交互、即时通讯、信息采集、消息队列等)