计算机网络问题

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数据传输流程等

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章