计算机网络

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超文本传输协议,用来规范超文本的传输,是无状态的只发送不维护默认端口号80URL 前缀是 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的滑动窗口,而是实现了一个权限队列,根据权限高低来发送数据。

以上是关于计算机网络的主要内容,如果未能解决你的问题,请参考以下文章

计算机网络概述

计算机网络—— 概述:计算机网络体系结构

计算机网络学习笔记(汇总目录)

计算机网络学习笔记(汇总目录)

计算机网络-网络层-超网

认识计算机网络