计算机网络

作者: 六横六竖亚 | 来源:发表于2020-02-08 18:15 被阅读0次

    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理解。

    相关文章

      网友评论

        本文标题:计算机网络

        本文链接:https://www.haomeiwen.com/subject/dtcgcctx.html