TCP/IP协议
概述 https://www.jianshu.com/p/b4250ba3ef12
分层模型:TCP/IP协议的网络模型分为应用层,传输层,网络层,链路层。还包括UDP(简单通信,可靠性低)、DHCP(动态主机配置)。TCP主要负责应用与网络的通信,将数据分割装包并在到达时重组;IP负责计算机间的通信,传送数据包。
OSI七层模型和TCP/IP协议模型
应用层 https://www.jianshu.com/p/4731888c3af1
应用层的常用协议,SSL加密,HTTP三个版本的进化
1、主要内容是定义不同主机上应用的通信规则,主要有超文本传输协议HTTP(传递HTML图片等文件)、文件传送协议FTP(两个TCP,控制连接和数据连接)、域名解析协议DNS(将域名转化为IP地址)、邮件相关协议(SMTP,POP,IMAP)等。
2、SSL:主要应用于浏览器和网站服务器之间通信的加密,认证网站服务器身份,防止中间人攻击。它不是独立的应用层协议,而是修改现有的协议使之更安全,相当于附加层。如HTTPS。
4、SSH:远程登录会话安全协议,完全替代TELNET和FTP的应用层协议。
3、非对称加密:公钥公开,私钥保密;请求方获取公钥加密数据,接收方使用私钥解密数据-RSA算法
传输层 https://www.jianshu.com/p/0a8f59d7eb6f
UDP,TCP(三次握手,四次挥手,确认应答与重发机制),窗口控制和滑动,拥塞机制(慢启动过程)
UDP:无连接传输,即时性高,简单不可靠,面向报文不分组,提供一对多、多对多,通过首部的校验和判断是否损坏。
TCP:1、面向连接,只支持1对1,序列号和确认应答机制来保证TCP的可靠性(序列号保证数据的顺序,确认应答保证服务端收到了数据),支持丢包重发和顺序控制。
2、三次握手(客户端请求连接SYNx→服务端确认应答ACKx+1+请求连接SYNy→客户端确认应答ACKy+1),如果服务端收不到客户端的确认应答就不建立传输连接,第三次握手避免了服务器资源的浪费,也防止因延迟而失效的连接请求到达服务器后产生错误。PS:建立连接期间可以确定最大消息长度(MSS)。
3、四次挥手(客户端请求断开FIN→服务端确认应答ACK→服务端请求断开FIN→客户端确认应答ACK)。
服务端的确认应答和请求断开为什么需要分开两次传输?服务端收到断开请求时,由于有必要的数据要处理不能立刻断开,要经过CLOSE-WAIT阶段准备好后才能发送FIN释放连接。
为什么客户端在TIME-WAIT阶段(发出ACK后)要等2MSL(最大报文生存时间)才CLOSE?如果2MSL内再次收到了服务器的请求断开FIN,说明服务器没有收到客户端的应答ACK,则需要重发并重新计时。
4、窗口滑动:窗口指的是无需等待确认应答可以发送的最大数据量,大大提升了性能。窗口控制需要使用大量缓存区。
发送方:被告知后设置自己发送窗口的窗口大小,如果连续3次收到同一段数据的确认应答(下一个是2001),则会对对应的数据进行重发(比超时更为快速的重发机制)。若确认应答之前的数据都已发送完成,则窗口滑动。
接受方:确认应答ACK报文中会告知接受窗口的窗口大小(即进行流量控制),按序到达的数据会发送确认应答(下一个是2001),其他数据缓存起来。
5、拥塞控制:首先1、启动“慢开始机制”,窗口大小设置成1个报文长度,每收到一个ACK拥塞窗口大小翻倍,指数级增长很快出现确认包超时(发生拥塞);此时2、启动“拥塞避免机制”设置慢开始阈值为当前拥塞窗口大小的一半,把当前窗口设置成1重新启动慢开始,当达到这个阈值时开始线性增加;当收到三次相同的确认应答时说明又拥塞了,启动3、“快重发机制”,直接重发(而非等待超时提高重发效率),并启动4、“快恢复机制”,即再次把阈值设置成当前窗口大小的一半,当前窗口也减半,继续线性增加,直到下一次收到三次确认应答启动快重发。
流量控制和拥塞控制:流量控制对应窗口滑动,接收方告知窗口大小,避免数据来不及接收,造成数据丢失;拥塞控制由发送方控制,通过慢开始+拥塞避免和快重传+快恢复检测网络状况而确定发送窗口大小, 避免过多数据导致路由器或链路过载。
网络层 https://www.jianshu.com/p/7c1bea892d78
IP协议(IPv4,IPv6,地址分类,子网掩码),ARP协议,路由协议,IP分片和再构,路径MTU发现,DNS域名解析系统
1、网络层主要是实现终端节点间的通信(即点对点通信),IP协议是其核心协议
2、
数据链路层 https://www.jianshu.com/p/44b3e34534fe
MAC地址,以太网,交换机
HTTP
基础 https://www.runoob.com/http/http-tutorial.html
报文 http://tools.jb51.net/table/http_header
https://www.cnblogs.com/lauhp/p/8979393.html
请求行、请求头、请求数据(Post),响应头,状态码,Content-Type对照表等
HTTP1.0,1.1和2.0 https://www.cnblogs.com/heluan/p/8620312.html
https://www.jianshu.com/p/7bfec28236c3
1.1新增:长连接(默认开启,减少消耗和延迟);节约带宽(先只发header,服务器100后再发body);Host域;优化缓存策略(增加If-None-Match等缓存头);新增错误码
2.0优化:多路复用(并发处理多个请求,1.1需要建立多个TCP连接);头部数据压缩(HPACK算法);服务器推送(评估请求增量推送更多资源,浏览器本地加载不再请求)
Cookie和Session https://www.cnblogs.com/8023-CHD/p/11067141.html
Cookie:由服务端颁发,储存在客户端;过期时间;特点(方便JS读取用户相关信息);禁用Cookie(URL带参)
Session:浏览器首次请求时服务端生成Session和SessionId储存在服务器上,并颁发Cookie给浏览器,以便下次处理带Cookie的请求;
区别:存放、安全性、数据量(Cookie4KB)、过期时间
HTTP与HTTPS的区别 https://blog.csdn.net/xiaoming100001/article/details/81109617
http协议以明文的方式在网站服务器和web浏览器之间传递信息,https加入ssl协议,依靠证书来验证服务器身份并为通信加密。
https工作原理:客户端发起请求连接服务器的443端口→服务器把证书(公钥)传给客户端→客户端解析证书(机构和过期时间等,若发现异常会出现浏览器不信任该服务器等提示)→客户端用公钥加密随机值(生成会话密钥)传送给服务端→服务端用私钥解密 / 服务端发送用私钥加密后的信息→客户端用之前生成的私钥解密获取解密后的内容
默认端口不同:http80,https443;握手阶段https比较费时;配置证书需要一定成本。
Get和Post请求
语法上实际并无大区别,诸如请求参数长度限制、请求参数放在url中还是body中(安全性的微小区别)、缓存cache,以及post会发两个TCP数据包这微不足道的时间消耗(可验证数据包的完整性)这些区别其实是浏览器的实现支持不同,是冲应用层http协议的层面去理解。但如果从tcp传输层,它们真正的区别应从语义上理解:get偏获取,post偏处理(增删改)
iOS中的Socket编程 https://www.jianshu.com/p/dc74df1ce57b
常见问题
HTTP的结构是怎样的?
简述发送一个HTTP请求的过程。
简介 TCP 和 UDP 区别,他们位于哪一层?
路由器和交换机的工作原理大概是什么,他们分别用到什么协议,位于哪一层?
描述TCP协议三次握手,四次挥手的过程。
TCP 协议是如何进行流量控制,拥塞控制的?
为什么建立连接时是三次握手,两次行不行?如果第三次握手失败了怎么处理?
第三次握手避免了服务器资源的浪费,也防止因延迟而失效的连接请求到达服务器后产生错误;当失败时服务器并不会重传ack报文,而是直接发送RST复位报文段,进入CLOSED状态。这样做的目的是为了防止SYN洪泛攻击。
关闭连接时,第四次握手失败怎么处理?
你怎么理解分层和协议?
简述Session和Cookie的区别。
Get和Post有什么区别?
谈谈你对HTTP1.1,2.0和HTTPS理解。
网友评论