TCP VS UDP:
1.UDP是无连接,而TCP是有连接;
2.UDP是不稳定的,而TCP是稳定的;
3.UDP是面向数据报,而TCP是面向数据流;
4.UDP是有接收缓冲区的,没有发送缓冲区,而TCP既有发送缓冲区也有接收缓冲区;
传输层:
端口号:用来找到应用程序。
最大端口号:0-65535
MySQL:3306
Tomcat:8080
http:443
端口号分类:
1.知名端口号0-1023 FTP:21; SSH:22; Telnet:23; HTTP:80
2.动态端口号:1024-65535
1.一个端口号可以被多个程序使用吗?
不可以
2.一个程序可以有多个端口号吗?
可以,一个手机号只能归属一个人,但是一个人可以拥有多个手机号
UDP协议(传输层):
16位UDP长度=UDP头部长度(8个字节)+数据长度
UDP 一个包的最大理论长度=2的16次=65536/1024=64KB
面试题:如果UDP编程的时候的数据大于64KB会怎样?
1.在应用层进行数据包的拆分和组合。
2.大于64KB不处理,交给TCP/IP 协议去处理,它会在网络层进行分包和组包 。(不用 )
*校验和是用来要确定数据在传输过程中是否被篡改,也就是用来判断数据的正确性的。
如何判断的?假设数据是以MD5进行校验和的计算,那么原始的数据会先MD5得到一个值,把这个值存储在16位的校验和当中;接收端收到内容之后,按照通过的规则加密数据得到一个校验和,用这个计算出来的校验和和UDP头中的16位校验和对比,如果相等数据是正确的。
全双工:发送端或者是接收端,既能发送消息又能接受消息。
半双工:发送端只能发送消息,不能接收消息;接收端只能接收消息,不能发送消息。
UDP:全双工
TCP:半双工
TCP协议:
URG:当是1表示紧急指针。
ACK:是否是确认应答消息,如果是1表示是确认应答的消息。
PSH:用来表示是否立即从缓冲区取走数据。
RST:复位标识。
SYN:同步序列号标识。(TCP连接时候使用)
FIN:结束序列号标识。(TCP断开连接的时候)
16位校验和:用来确定当前的数据是否是正确的。
超时重发策略:
策略1:发送不会以固定的频率发送。策略1采取的是悲观策略,如果第一次消息发送失败,那么大概率第二次发送消息也会失败,所以TCP会以指数级超时时间增长的频率来发送消息。
第一次超时重发时间间隔:500ms。
第二次超时重发时间间隔:2500ms。
第三次超时重发时间间隔:4599ms。
策略2:如果经历了一定的重试次数,消息还没有得到应答,那么就会停止发送。
TCP连接管理:
3次握手(3次通讯)
ESTABLISHED:表示三次握手已经完成,可以进行数据的传输
TCP 4次挥手:
3次挥手行不行?
有可能可以,对应到程序:接收缓冲区没有数据了,那么就可以直接关闭了
TIME_WAIT 2 MSL(最大超时时间)?
2 MSL = ACK最大超时时间(1 MSL)+对方发送给他消息的一个最大等待时间(1 MSL)
如果发现服务器端存在大量CLOSE_WAIT说明程序有问题?
答:程序的 bug,程序中没有调用close()主动关闭连接。