UDP协议: 数据源和终端不建立连接,直接抓取数据包,扔到网络上 (不需要经历三次握手,四次挥手,所以传输速度较大,但是容易丢包,适用于视频,音乐等大文件的传输,可以丢包,但是要传输速度快),相对TCP较安全的协议。
TCP/IP协议: 是传输层协议,需要经历三次握手,四次挥手与服务器建立TCP长连接,建立连接之前需要三次握手四次挥手,就不容易丢包,但是效率要慢上很多。 三次握手:(建立TCP连接) 客户在socket() connect()后主动(active open)连接上服务器,发送SYN(syn=j),进入SYN_SEND状态。 确认服务器发送的包(ack=j+1),并对客户端返回SYN(syn=k),即SYN+ACK包,进入SYN_RECV状态。 客户端收到SYN+ACK,像服务端发送确认包ACK(ack=k+1),此包发送完毕后,客户端和服务器进入ESTABLISHED状态,完成三次握手。 四次挥手:(断开TCP连接) Client端发起中断连接请求,也就是发送FIN报文:我Client端没有数据要发给你了。 Server端向客户端发送ACK:告诉Client端,你的请求我收到了,但是我还没准备好,请继续你等我的消息 --Client端就进入FIN_WAIT状态。 Server端确定数据已发送完成,则向Client端发送FIN报文:告诉Client端,好了,我这边数据发完了,准备好关闭连接了。 Client端收到FIN报文后:就知道可以关闭连接了,但是他还是不相信网络,怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。 Server端收到ACK后:就知道可以断开连接了。 Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。Ok,TCP连接就这样关闭了!
Socket: 是一个API,让程序员更方便的使用TCP/IP协议栈 建立一个Socket连接需要至少一对套接字 套接字连接过程分为三个步骤:服务器监听,客户端请求,连接确认 服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。 客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。 连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户 端,一旦客户端确认了此描述,双方就正式建立连接。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。
HTTP协议: 是应用层协议,基于TCP/IP协议,与TCP/IP不同的是,建立的是TCP短连接(需要的话建立连接,传输完数据就关闭连接) 客户端定时向服务器发送连接请求,表示在线 Keep-Alive:浏览器页面不关闭,这个TCP连接就不会断开 它的信息是明文传输的
HTTPS协议: HTTP下加入SSL,为信息加密 会建立信息传输安全通道和确认网站的真实性
GET与POST: GET是通过在url拼接参数的方式 --url的长度限长 --直接在url上拼接也是不安全的 --GET发送给服务器是url加参数一次传输 POST的在requestbody中传参 --requestbody可以有多种数据格式,没有限长 --requestbody可能数据过多(如:插入的列过多)故不适合使用GET方式 --POST是先发送url给服务器确认,得到响应之后发送data包给服务器,故效率相对GET要低(在网络信号差的时候差距会体现出来)
序列化与反序列化: 实现序列化接口 序列化 --就是把java对象转化为字节序列,方便持久存储和网络传播 可以在网络传输的数据类型: 序列化是通过某种算法将存储于内存中的对象转换成可以用于持久化存储或者通信的形式的过程 反序列化是将这种被持久化存储或者通信的数据通过对应解析算法还原成对象的过程,它是序列化的逆向操作 调用者和被调用者必须约定好序列化和反序列化算法:传的是JSON格式,接收也只能接收JSON格式数据 transient:使用此关键字可以让这条属性不做序列化
|