了解网络协议与编程对我们很有帮助:
七层模型:
模型对应协议:
传输层常用协议:
TCP传输有打包分段控制,有确认是否收到重传机制
视屏或者DSN使用的UDP协议,UDP有个升级版是UDT,带验证的传出,
但是ping命令直接访问的网络层
linux的lvs负载均衡直接访问的网络层
linux的tcpdump直接访问的链路层
端口号:
我了区分一台机器上不同的网络应用,所以有了端口号,我当前发过来的数据是要给那个端口号来接受的
一些程序恶友既定的端口号,别入80或者8080,知名端口号0~1023不能随便用,1024~49151
客户端程序我们操作系统会给动态端口号,一般在49151之上
TCP三次握手建立连接:
客户端将SYN节加一个随机的序列号seq发送给服务端,等待确认,服务器端收到请求后同样也会返回SYN节,返回ACK+节ID,返回ack+seq+1,返回seqID,这样一来一回可以根据数据运算而进一步建立连接,然后客户端将ACK+节ID,ack+seqID+1返回客户端,这样一来一回校验值是否是+的,然后才会建立连接
TCP三次握手的漏洞:
客户端SYN时候带上,假的IP源信息,然后服务端建立了大量的半连接队列,一般队列大小的值是10左右,超过阈值,然后服务端就无法接受任何别的连接了
TCP的四分手:
Fin=1 seq= j 等等final报文
应为是全双工的所以需要四次分手,读的同时可以写,写的同时可以读,同时进行
TCP、IP中的数据包:
层层剥离,上层给下层会加一个首部
TCP套接字对:
客户端与服务端的IP与端口,为套接字对
发送缓冲区与接收缓冲区。输出缓冲区与输入缓冲区,为什么这样缓冲设计呢,一个一个字节传递浪费带宽性能,创建套接字后缓冲区是操作系统自动帮我们生成,缓冲区的大小可以调整
TCP通过消息序号和确认应答来提高可靠性:
每一批数据都有自己的编号,一段时间没有收到对应编号的响应则会重新发送数据,如果重复接受了,接收端会将重复的数据抛弃,且会再次返回响应
TCP滑动窗口:
接受数据的大小由接收方来控制的,TCP内部控制的,交互应答来控制大小
接收方将窗口大小传递给发送方,然后发送方调整发送数据的大小
TCP也有心态机制,但是一般心跳都是用应用层面来解决,TCP默认心跳两个小时才超时,1 2 4 8 16
知道对方挂了,一定是通过心跳报文来解决的
HTTP协议:
http协议概述
无状态,单向性
URI和URL的区别,URI包含了URL
HTTP请求的传输过程:
keep-alive是长连接
HTTP请求报文结构:
HTTP响应报文结构:
UDP协议:
编程中的Socket:
数据操作频繁的用场链接,web用短连接,访问完可以马上释放连接的那种
负载均衡可以坐在HTTP层也可以坐在TCP层
网络编程书籍推荐:
并发编程和Spring源码
:二:
linux的网络IO模型:
00:33:00