计算机网络
Posted miraclemaker
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算机网络相关的知识,希望对你有一定的参考价值。
1.TCP/IP四层模型和OSI七层模型:
- OSI七层模型:应用层,表示层,会话层,传输层,网络层,数据链路层,物理层
。比较复杂,不太实用,并且有的功能在不同层中多次出现。
- TCP/IP四层模型:应用层,传输层,网络层,网络接口层。
。应用层:提供两个终端设备上不同网络应用之间进行信息交换的服务。
。传输层:提供两个终端设备上进程之间通用的数据传输服务。
。网络层:寻找合适的路径将数据进行分组为数据报传送至目标主机。
。网络接口层:将数据报组装为帧,以比特流的形式进行传输。
- 分层的原因:
。各层之间相互独立,只要知道如何去调用下层提供好的功能即可。易于设计,易于实现
。提高了灵活性,我们只要保证每一层的功能和接口暴露的规则没有改变即可。
2.协议汇总:
- 应用层:
。HTTP 协议:为 Web 浏览器与 Web 服务器之间的通信。
。DHCP 协议:自动给内网机器分配IP地址。
。DNS 协议:将域名转换为IP地址。
。FTP 协议:提供文件传输服务。
。SSH协议:专为远程登录会话和其他网络服务提供安全性。
。电子邮件协议等(SMTP、POP3、IMAP)
- 传输层:
。socket:对TCP/IP的封装,为程序员提供做网络开发的接口。
。TCP协议:提供面向连接的,可靠的数据传输服务。
。UDP协议:提供无连接的,尽最大努力的数据传输服务。
。ARQ协议:超时重传协议,规定一条消息后需要ACK回复。
- 网络层:
。IP 协议:寻找合适地址传输ip数据报,定义数据报的格式。
。ARP 协议:解析 IP 地址和 MAC 地址之间的映射。
。ICMP 协议:确认数据报是否到达,通知数据报被丢弃的原因。
。NAT 协议:用于内部网到外部网的地址转换
。RIP 协议、OSPF 协议、BGP 协议:用不同的算法寻找合适的路径。
- 网络接口层:
。差错检测:多种方法检测传输中是否出现错误。
。多路访问协议:规定多节点共享单一信道改如何使用,时分频分码分。
。CSMA/CD 协议:进行检测信道和碰撞检测。
3.浏览器输入url网址到返回页面发生了什么:
- 查看缓存->获取域名的协议端口等信息,组装成http请求报文,根据dns将域名解析为ip地址,发送tcp三次握手请求连接,发送http请求报文,服务器处理http请求,接受返回的http报文,四次挥手解除链接,放入缓存,对返回的数据进行加载,首先加载html,加载过程中会遇到css,图片,js(css,图片时是异步的,加载js时是同步阻塞的)加载完成后会解析html生成dom树,解析css生成cssom树,将两树合并生成渲染树,最后遍历并绘制页面。
- 寻址:知道目的主机的ip地址后,会逐步在网络间进行传输,通过ip地址与不同层次的子网掩码做位运算得出下一级网络的ip地址,直到找到目的主机。在这个过程中每次要传输数据还需要ARP协议来得出真正的mac地址才能传输,最后还可能需要NAT来找到最后的私有ip地址的主机位置。
4.TCP和UDP的区别:
- 连接:TCP传输前需要连接,传输结束后需要解除链接,而UDP不需要先建立连接。
- 是否可靠:TCP是可靠传输,有三次握手,确认,窗口,重传,拥塞,四次挥手等控制机制保证数据安全有序抵达。而UDP是不可靠传输,不返回任何确认,不保证数据是否丢失。
- 效率:TCP比UDP传输效率要低。
- 多播:TCP只能点对点通信,UDP可以一(多)对一(多)通信。
- 用途:TCP用于文件传输,邮件发送,远程登录等,UDP用于即时通信,语音视频直播等。
- 协议:基于TCP:HTTP,HTTPS,FTP,SSH,SMTP等;基于UDP:DNS,DHCP等。
5.TCP三次握手,四次挥手:
- 三次握手过程:
。询问可以建立连接吗(SYN),我的序号是x(seq=x)。
。可以建立连接(SYN),我的序号是y(seq=y),确认你的序号是x+1(ACK=x+1)吗?
。确认你的序号是y+1(ACK=y+1)。
。双方都要确认四个信息:自己发送接收是否正常,对方发送接收是否正常。八个信息三次握手来确定
- 四次挥手过程:
。请求结束连接(FIN),我的序号是x(seq=x)
。收到你的请求,确认你的序号是x+1(ACK=x+1)。服务端可能还在发送数据。
。我的数据发完了,可以结束连接了(FIN),我的序号是y(ACK=y)。
。收到,确认你的序号是y+1(ACK=y+1)。2msl后断开连接。
- 为什么不能是两次握手或四次握手:
。两次握手即没有最后的ACK,那么服务端无法保证客户端收到自己的同意请求。
。四次握手即第二次服务端的SYN和ACK分开发送,显然是无意义的。
- 为什么第三次握手客户端的ACK不需要服务端的确认:
。不允许ACK对方的裸ACK报文,否则将互相ACK永无止境,如果最后一次ACK丢失,那么服务端还会继续发送一次SYN+ACK。
- 四次挥手为什么中间不能合并:
。因为服务端想结束的时候可能数据还没有发送完,所以先ACK表示收到客户端的请求,发送完数据后在进行FIN表示服务端的数据发完了。
- 为什么客户端第四次挥手后要等2msl才能关闭:
。因为客户端的ACK报文是不会有服务端的ACK发过来的,如果服务端未接收到消息,2msl内会有FIN再次发送过来的。2msl是一个消息发送和回复的最慢时间。
6.TCP保证传输的可靠性:
- 几大方法:
。数据包传输:数据被TCP分成合适的包再传给网络层。
。数据报排序:给每个数据包一个序列号,接收方将收到的包按序排列和去重。
。校验和:TCP会保持首部和数据的校验和,检测包在传输过程中是否发生了数据变化。
。超时重传:发送包后启动一个定时器,规定时间内未接收到接收方的ACK将会重传。
。流量控制:采用滑动窗口协议进行控制发送方发送包的速率。控制端对端的发送速率。
。拥塞控制:根据网络拥塞程度来调整发送速率。控制整个网络的发送速率。
- 流量控制:
。两端各有一个发送缓冲区与接收缓冲区,两端都各自维护一个发送窗口和一个接收窗口。数据一开始就会进入缓冲区;缓冲区的大小>=窗口大小;发送窗口取为拥塞窗口和接收方的接受窗口中较小的一个。
。发送窗口:
。接收窗口:
- 拥塞控制:
。慢开始:初始有拥塞窗口cwnd为1,慢开始门限ssthresh。当cwnd<ssthresh时,cwnd每次翻倍。
。拥塞控制:当cwnd>ssthresh时,每次cwnd+=1。
。快重传:当发送方连续收到接收方返回回来的三次重传提醒,就会重传数据并继续。
。
。快恢复:当出现数据丢失时,cwnd,ssthresh=cwnd/2;继续进行拥塞控制。
。
7.TCP头部结构:
8.ARQ协议:
- 自动重传请求的一个错误纠正协议,规定发送方发送消息后接收方返回ACK,分为停止等待ARQ协议和连续ARQ协议。
- 停止等待ARQ:发送方发送第一份数据等待接收方的ACK后再发第二份,如果ACK未接收到就重复发送第一份数据,如果因为拥塞数据晚到,收到重复的数据或者ACK都会直接丢弃。
- 连续ARQ:发送方一直发送数据,接收方回复自己收到的连续数据的最后一个,如发送12356,那么就回复3,此时发送方需要把456再次重新发送,GO-BACK-N。
9.HTTP和HTTPS:
- HTTP超文本传输协议,用来规范超文本的传输,是无状态的只发送不维护;默认端口号80;URL 前缀是 http://。
HTTPS是基于SSl/TLS进行加密的HTTP协议,保证了安全性的基础上降低了效率,默认端口号443;URL 前 缀是 https://。
- HTTP不保存状态,如何保存用户状态的?通过赋给用户一个Session(服务器保存)来识别用户,将这个Session ID存放到Cookie(浏览器维护)中保存用来跟踪这个Session。
- 请求转发和重定向:
。请求转发:浏览器向服务器发请求,服务器定位到其他地址有你要的数据,服务器取到数据后返回给浏览器。
。重定向:浏览器向服务器发请求,服务器处理不了,返回给浏览器一个能处理的url,浏览器手动去请求新的url地址。
- HTTP1.0和HTTP1.1:HTTP1.1是长链接,并且优化了带宽,新增了错误状态码,更丰富的缓存策略。
- 常见状态码:
。1XX:请求正在处理
。2XX:请求正常处理完毕
。3XX:需要其他操作辅助完成请求处理
。301:永久重定向,如网址更换。
。302:临时重定向,如网站资源被临时转到其他网站。
。304:使用本地缓存击中需要的请求。
。4XX:客户端请求错误
。400:发送的请求存在问题,如请求参数不合法。
。403:拒绝请求,请求没有访问权限。
。404:请求资源在服务端未找到,如请求用户信息,但找不到该用户,或者路径写错。
。409:请求的资源与当前服务端状态存在冲突。
。415:请求体过大。
。5XX:服务端请求错误
。500:服务端出bug了,如服务端处理请求的时候抛出异常。
。502:网关将请求转发到服务端,但是服务端返回错误的响应。
10.Cookie和Session的区别:
- Cookie:保存用户信息,可以保存Session来追踪用户的状态,内部有token可以查询出用户的信息
- Session:只保存用户状态,安全性更高。
11.URI和URL:
- URI:唯一标识一个资源
- URL:定义一个资源的位置,是一个具体的URI
12.长连接和短连接:
- 长连接:任务完成后连接不中断,而是空闲一定时间后再中断;短连接:任务完成后直接中断;
- HTTP的长连接还是短连接实际上取决于TCP;HTTP1.1之后都默认为长连接。
- UDP是无连接的,可能发生丢包问题,如果UDP丢包了,建议降低发送速率,减少报文段长度;
- HTTP的无状态意思是连接建立后不存储对方的状态信息,与连接无关。
13.DNS域名解析的流程:
- 首先会查询浏览器缓存与host配置文件中是否有对应的记录;
- 再去根DNS服务器拿到顶级DNS服务器的ip地址,再去顶级DNS服务器中拿到nameserverDNS服务器的地址,最后返回IP地址。
14.UDP如何保证传输的可靠性:
- 根据TCP的那一套方法上选取自己需要的来实现可靠性。
- 比如我们知道TCP收到消息会发送ACK,保证消息可靠抵达;会对数据包有排序,保证消息的顺序;会对超时的消息进行重传,这些功能UDP可以根据自己的场景选取部分进行实现。
- 除此之外在大量数据发送时,UDP不是采用TCP的滑动窗口,而是实现了一个权限队列,根据权限高低来发送数据。
以上是关于计算机网络的主要内容,如果未能解决你的问题,请参考以下文章