网络原理由浅到深
应用层
序列化:把结构化数据转换成“字符串”或“二进制bit流”。
反序列化:把“字符串”或“二进制bit流”转换成结构化数据。
应用层的重点就是协议,Java标准库提供了很多,但我们平时也需要使用自定义协议。‘
目前最常用的三个自定义协议:
1、xml
优点:可读性和扩展性提供了。
缺点:冗余量提高了。
2、json
优点:可读性和扩展性提供了。
缺点:冗余量没有xml多(目前的主流自定义协议)。
3、protobuffer
优点:更节省带宽,效率最高。
缺点:可读性差。
传输层
UDP协议
不可连接、不可靠传输、面向数据报、全双工。
UDP报头
UDP报头4个字段,每个字段2个字节
传输层:负责起点和终点,要有源端口和目的端口。
数据报长度:64Kb 端口范围0-65535
检验和:验证数据在传输中是否正确,使用CRC算法验证。
CRC算法是每个都枚举,更为准确的算法有:md5\sha1
md5:1、定长
2、分散——字符串hash算法
3、不可逆——密码学
TCP协议⭐
有链接,可靠传输,面向字节流,全双工
可靠传输:
1、
用来确保可靠性,核心是:确认应答(ACK)
⭐TCP的确认应答是有确保TCP可靠性的最核心机制
确认应答是有序号的:
2、
超时重传,核心是:看序号
如果主机A在发数据之后,主机B一段时间后没有返回确认应答,那么主机A就会重新发送一样的数据过去。
超时时间也不是固定值,会随着重传的次数增加而增加
累计到一定的重传次数,TCP认为网络或者对端主机出现异常,强制关闭连接。
主机B使用有:优先级阻塞队列,去重处理(依靠序号)
连接管理
三次握手:
三次握手的意义:
1、三次握手,可以针对通信路径,进行投石问路,初步的确认一下通信链路是否畅通。
2、三次握手,也是在验证通信双发,发送能力和接收能力是否正常。
3、三次握手的过程中也会协商一些必要的参数。
(⭐在三次握手的中,序号就已经确认了,通常以数字较大的开头)