1 三次握手,四次挥手
三次握手
为什么需要握手
TCP需要数据安全性,不同连接之间不能混淆,所以序列号不一样,每次握手双方得提供序列号同步
(另外还同步报文,滑动窗口等等)
为什么是三次握手,不能是四次
因为四次挥手多了一步被动关闭状态,挥手时候允许半关闭状态继续传送数据,无超时设定
三次握手建立连接时候不允许存在半打开状态下传输消息,则有超时设定
SYN超时
server收到client的SYN,回复SYN-ACK但未收到client的ACK,server会不断重试直至超时。
linux默认63s断开连接
SYN Flood问题
SYN队列满后,通过tcp_syncookies参数回发SYN Cookie,如正常连接则client回发SYN Cookie,建立连接
已连接,Client出现故障
保活机制
向对方发送保活探测报文,未收到相应继续发送
尝试次数到达保活探测数仍未收到相应则中断连接
四次挥手
为什么有Time-wait
有足够时间让对方收到ACK包,避免新旧连接混淆
四次挥手下ClOSE_WAIT状态产生原因
三次握手建立连接后,不分server和client,双方都可以主动关闭
被关闭一方,可以随时close_wait被动关闭,不设置超时时间,半关闭状态任可以接受数据
可能原因--对方socket关闭连接,我方忙于读写未及时关闭
1 检查代码,特别是释放资源代码
2 检查配置,特别是处理请求线程配置
2 HTTP协议问题
过期缓存用途
比如为了用户更好体验,使用过期缓存数据等
请求相应头部有什么
Cache-Control,Expires, Last-Modified, if-Modified-Since, Etag, if-None-Match
头部Cache-Control下的内部常用值
max-age :过期时间
no-cache:使用缓存
public 客户端和代理服务器(CDN,Nginx等)都可缓存
private 只有客户端可以缓存
等
缓存过期时间Expires如何设定
1 自己设定
2 默认设定 (DownloadTime - LastModified) * 10%
如何使用HTTP缓存
通过头部下Last-Modified(资源最新修改时间,由服务器告诉浏览器)和 if-Modified-Since(资源最新修改时间,
由浏览器告诉服务器),来判断数据是否发生修改。另外再判断Expires是否过期,如果未过期也没有修改返回,
304 Not Modified,否则发送新数据 200 OK。
地址栏输入URL后流程
DNS解析找IP地址
通过IP和Port建立TCP连接
发送HTTP请求
(如果额外配置,会经过正向代理,反向代理网关拿缓存。(CDN,Nginx等等,之间可能还会再次经历DNS),缓存没有命中,CDN,Nginx等代理和服务器拿数据或者更新缓存,然后交付数据)
服务器处理请求并返回HTTP报文
浏览器渲染页面并且四次挥手
HTTP长连接
优势:减少握手次数,减少慢启动影响(TCP传输的慢启动)
缺点:产生TCP传输阻塞问题,丢包后(未正确顺序拿到ACK),应用层不会继续接受传过来的数据,超时后重传丢包数据才能继续接受
原理:HTTP下header的connection为close时为短连接,keepalived长连接
多播如何实现
单播1对1(TCP/UDP)
多播是一对多,TCP是点对点,所以不支持
所以在局域网内通过广播,和组播发送。是通过交换机路由器来复制数据,减少网络消耗带宽
IP地址全1则为广播等
服务器并发最大连接数是多少
不是由65535个端口数量决定,操作系统是通过一个四元组来标识一个TCP链接
TCP四源组(IP源地址,IP目标地址,源端口,目的端口), 端口和进程联系,
每一个TCP链接都要占用一个文件句柄,系统允许创建的链接数取决于句柄数的上限
Linux中这个值默认是1024,我们也可以自己修改配置的更大
TCP和UDP选择区别
UDP--一对多,效率高,简单,实时性好
TCP--传递任意长度,可靠,流量控制,拥塞控制
等比较基础略
HTTP2有什么优点
之前版本header太长,cookie太长等,http2压缩了header
多路复用,一个连接可以复用多次
消息推送,可以直接传递缓存no-cache数据
stream权重优先级区分
TCP滑动窗口,慢开始等
Get和Post区别
Cookie和Session区别
Http和Https区别
SSL
Https数据传输流程等
略