面试前来一发系列之 —— 计算机网络基础复习(一)

####一、OSI七层模型 与 因特网分层模型(五层)

1、模型区分

OSI 七层模型包括(自顶而下):
应用层、表示层、会话层、运输层、网络层、链路层和物理层

五层因特网协议栈(自顶而下):
应用层、运输层、网络层、链路层和物理层

区别:因特网少了表示层和会话层,不是因为它俩不重要,而是在因特网中,这两个层留给应用程序开发者去处理,由他们决定这些服务是否重要,如果重要就在应用程序中构建相应的功能。

2、每个层的作用、常见协议以及信息分组类型:

(1)应用层
应用层是网络应用程序以及它们的应用层协议留存的地方,应用层协议分布在多个端系统上,一个端系统的应用程序可以通过应用层协议与另一个端系统中的应用程序交换信息的分组,应用层协议关注的是对运输层传来的数据进行解读和提供服务。
常见协议: HTTP(Web)、SMTP (email)、FTP (file)
应用层之上的信息分组称为 “报文(message)“

(2)表示层
使通信的应用程序能够解释交换数据的含义(包括数据压缩、加密、解密、描述)

(3)会话层
提供数据交换定界和同步功能,包括了建立检查点和恢复方案的方法。

(4)运输层
在应用程序端点之间传送应用层报文(进程之间通信)。
常见协议: TCP(面向连接的可靠协议)、UDP (无连接服务)
运输层之上的信息分组称为 “报文段(segment)“

(5)网络层
负责将网络层分组从一台主机移动到另一台主机(主机/路由器之间通信)。
常见协议: IP
网络层之上的信息分组称为 “数据报(datagram)“

(6)链路层
将源计算机网络层来的数据可靠的传输到相邻节点的目标计算机的网络层(交换机之间通信)。
常见协议: 以太网、Wi-Fi
链路层之上的信息分组称为 “帧(frame)“

(7)物理层
将帧中的一个一个比特从一个结点移动到下一个网络结点。
物理层之上的数据单位为 “比特“

为了理解整个五层协议在实现程序进程通信过程中的大致流程,做了个大意图:
这里写图片描述

####二、TCP 与 UDP
1、TCP与UDP的区别

  1. TCP是面向连接的(建立连接,资源预定占用),UDP是无连接的(两个实体并不一定同时在线);
  2. TCP是可靠的(通过编号和定序),UDP是不可靠的;
  3. TCP只支持点对点通信,UDP支持一对一、一对多、多对一、多对多的通信模式;
  4. TCP是面向字节流的,UDP是面向报文的;
  5. TCP有拥塞控制机制和流量控制; UDP没有制,适合媒体通信;
  6. TCP首部开销(20个字节)比UDP的首部开销(8个字节)要大;
  7. TCP保障数据顺序,UDP不保证;

2、TCP 流量控制与拥塞控制

  1. 流量控制
    流量控制就是让发送方的发生速率不要太快,要让接收方来的及接收,不然会导致数据溢出丢失。流量控制是利用滑动窗口机制实现的。

  2. 拥塞控制
    拥塞控制是防止传输数据的联络层网络出拥塞时数据大量丢失的情况。主要方法:
    (1)慢启动:不要一开始就发送大量的数据,先探测一下网络的拥塞程度,也就是说由小到大逐渐增加拥塞窗口的大小;
    (2)拥塞避免:拥塞避免算法让拥塞窗口缓慢增长,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是加倍,这样拥塞窗口按线性规律缓慢增长。
    (3)快重传:快重传要求接收方在收到一个 失序的报文段 后就立即发出 重复确认(为的是使发送方及早知道有报文段没有到达对方)而不要等到自己发送数据时捎带确认。快重传算法规定,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段,而不必继续等待设置的重传计时器时间到期。
    (4)快恢复:快重传配合使用的还有快恢复算法,当发送方连续收到三个重复确认时,就执行“乘法减小”算法,把ssthresh门限减半,但是接下去并不执行慢开始算法:因为如果网络出现拥塞的话就不会收到好几个重复的确认,所以发送方现在认为网络可能没有出现拥塞。所以此时不执行慢开始算法,而是将cwnd设置为ssthresh的大小,然后执行拥塞避免算法。

  3. 什么是套接字(socket)
    Socket通常也称作“套接字”,用于描述IP地址和端口(socket = IP + 端口),是一个通信链的句柄。(其实就是两个程序通信用的),Socket用于在两个基于TCP/IP协议的应用程序之间相互通信。

  4. DNS 、 ARP(地址解析协议) 和 RARP(逆向地址解析协议)
    DNS (将网站域名 映射成 IP 地址):
    每个IP地址都可以有一个主机名,主机名由一个或多个字符串组成,字符串之间用小数点隔开。有了主机名,就不要死记硬背每台IP设备的IP地址,只要记住相对直观有意义的主机名就行了。这就是DNS协议的功能。
    ARP(将 IP 地址映射成):
    每个主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系。
    RARP(逆向地址解析协议):
    RARP的作用是完成硬件地址到IP地址的映射,主要用于无盘工作站,因为给无盘工作站配置的IP地址不能保存。

  5. session(保存在服务器) 与 cookie(保存在本地)
    1、实现机制:Session的实现常常依赖于Cookie机制,通过Cookie机制回传SessionID;
    2、大小限制:Cookie有大小限制并且浏览器对每个站点也有cookie的个数限制,Session没有大小限制,理论上只与服务器的内存大小有关;
    3、安全性:Cookie存在安全隐患,通过拦截或本地文件找得到cookie后可以进行攻击,而Session由于保存在服务器端,相对更加安全;
    4、服务器资源消耗:Session是保存在服务器端上会存在一段时间才会消失,如果session过多会增加服务器的压力。

  6. IP地址的分类
    A类地址:
    以0开头,第一个字节范围:0~127;(1.0.0.0 - 126.255.255.255);
    B类地址:
    以10开头,第一个字节范围:128~191;(128.0.0.0 - 191.255.255.255);
    C类地址:
    以110开头,第一个字节范围:192~223;(192.0.0.0 - 223.255.255.255);
    D类地址:
    以1110开头,第一个字节范围为224~239;

  7. 三次握手、四次挥手 与 SYN 攻击
    1、TCP 建立连接时需要进行三次握手:
    三次握手的目的是连接服务器指定端口,建立 TCP 连接,并同步连接双方的序列号和确认号,交换 TCP 窗口大小信息。在 socket 编程中,客户端执行 connect() 时。将触发三次握手。
    第一次握手(SYN=1, seq=x):
    客户端发送一个 TCP 的 SYN 标志位置1的包,指明客户端打算连接的服务器的端口,以及初始序号 X,保存在包头的序列号(Sequence Number)字段里。
    发送完毕后,客户端进入 SYN_SEND 状态。
    第二次握手(SYN=1, ACK=1, seq=y, ACKnum=x+1):
    服务器发回确认包(ACK)应答。即 SYN 标志位和 ACK 标志位均为1。服务器端选择自己 ISN 序列号,放到 Seq 域里,同时将确认序号(Acknowledgement Number)设置为客户的 ISN 加1,即X+1。 发送完毕后,服务器端进入 SYN_RCVD 状态。
    第三次握手(ACK=1,ACKnum=y+1):
    客户端再次发送确认包(ACK),SYN 标志位为0,ACK 标志位为1,并且把服务器发来 ACK 的序号字段+1,放在确定字段中发送给对方,并且在数据段放写ISN的+1
    发送完毕后,客户端进入 ESTABLISHED 状态,当服务器端接收到这个包时,也进入 ESTABLISHED 状态,TCP 握手结束。
    这里写图片描述
    2、三次握手的意义即为何不进行两次就行:
    如果采取两次握手,相当于第二次握手结束便建立连接,如果发送SYN的一方(一般指客户端)不想连接了,或者是对于一些过时失效的请求,请求连接的一方在建立连接之后不会有反馈,另一方(一般指服务器)却一直在等待,浪费了时间和资源。所以,三次握手可以避免资源浪费。
    3、TCP 断开连接时需要进行四次挥手:
    TCP 的连接的拆除需要发送四个包,因此称为四次挥手(Four-way handshake),也叫做改进的三次握手。客户端或服务器均可主动发起挥手动作,在 socket 编程中,任何一方执行 close() 操作即可产生挥手操作。
    第一次挥手(FIN=1,seq=x):
    假设客户端想要关闭连接,客户端发送一个 FIN 标志位置为1的包,表示自己已经没有数据可以发送了,但是仍然可以接受数据。
    发送完毕后,客户端进入 FIN_WAIT_1 状态。
    第二次挥手(ACK=1,ACKnum=x+1):
    服务器端确认客户端的 FIN 包,发送一个确认包,表明自己接受到了客户端关闭连接的请求,但还没有准备好关闭连接。
    发送完毕后,服务器端进入 CLOSE_WAIT 状态,客户端接收到这个确认包之后,进入 FIN_WAIT_2 状态,等待服务器端关闭连接。
    第三次挥手(FIN=1,seq=y):
    服务器端准备好关闭连接时,向客户端发送结束连接请求,FIN 置为1。
    发送完毕后,服务器端进入 LAST_ACK 状态,等待来自客户端的最后一个ACK。
    第四次挥手(ACK=1,ACKnum=y+1):
    客户端接收到来自服务器端的关闭请求,发送一个确认包,并进入 TIME_WAIT状态,等待可能出现的要求重传的 ACK 包。
    服务器端接收到这个确认包之后,关闭连接,进入 CLOSED 状态。
    客户端等待了某个固定时间(两个最大段生命周期,2MSL,2 Maximum Segment Lifetime)之后,没有收到服务器端的 ACK ,认为服务器端已经正常关闭连接,于是自己也关闭连接,进入 CLOSED 状态。
    四次挥手的示意图如下:
    这里写图片描述
    4、四次挥手的意义:
    用来保障通讯双方都可以安全的回收TCP通信的系统资源

  8. Http 与 Https
    Http协议运行在TCP之上,明文传输,客户端与服务器端都无法验证对方的身份;Https是身披SSL(Secure Socket Layer 安全套接字层,不是一种像TCP、UDP等层次的协议,而是对TCP 的加强,这种加强是在应用层上实现的)外壳的Http,运行于SSL上,SSL运行于TCP之上,是添加了加密和认证机制的HTTP。二者之间存在如下不同:
    1、端口不同:Http与Http使用不同的连接方式,用的端口也不一样,前者是80,后者是443;
    2、资源消耗:Https通信会由于加减密处理消耗更多的CPU和内存资源;
    3、开销:Https通信需要证书,而证书一般需要向认证机构购买;
    Https的加密机制是一种共享密钥加密和公开密钥加密并用的混合加密机制。

  9. 浏览器输入域名到页面展示的整个流程
    1、客户端浏览器通过DNS解析到www.baidu.com的IP地址220.181.27.48,通过这个IP地址找到客户端到服务器的路径。客户端浏览器发起一个HTTP会话到220.161.27.48,然后通过TCP进行封装数据包,输入到网络层。
    2、在客户端的传输层,把HTTP会话请求分成报文段,添加源和目的端口,如服务器使用80端口监听客户端的请求,客户端由系统随机选择一个端口如5000,与服务器进行交换,服务器把相应的请求返回给客户端的5000端口。然后使用IP层的IP地址查找目的端。
    3、客户端的网络层不用关系应用层或者传输层的东西,主要做的是通过查找路由表确定如何到达服务器,期间可能经过多个路由器,这些都是由路由器来完成的工作,我不作过多的描述,无非就是通过查找路由表决定通过那个路径到达服务器。
    4、客户端的链路层,包通过链路层发送到路由器,通过邻居协议查找给定IP地址的MAC地址,然后发送ARP请求查找目的地址,如果得到回应后就可以使用ARP的请求应答交换的IP数据包现在就可以传输了,然后发送IP数据包到达服务器的地址。

  10. GET 与 POST
    1、请求参数形式:GET请求的数据会附在URL之后,即将请求数据放置在HTTP报文的 请求头 中,以?分割URL和传输数据,参数之间以&相连。而POST请求会把提交的数据则放置在是HTTP请求报文的 请求体 中。
    2、安全性而言:POST的安全性要比GET的安全性高,因为GET请求提交的数据将明文出现在URL上,而且POST请求参数则被包装到请求体中,相对更安全。注:这一块说的并不算正确
    3、请求的大小:GET请求的长度受限于浏览器或服务器对URL长度的限制,允许发送的数据量比较小,而POST请求则是没有大小限制的。
    4、使用:结合上述情况,安全性要求高、内容数据量大的请求使用 POST,异步请求(如Ajax)通常也使用POST。

  11. 一台主机最多可以与少于65535台服务器保持连接,因为连接个数由端口号数量决定,而端口号长度为16位。

  12. 网关是局域网连接广域网的出口,可以工作在网络层以上的不同层次。

  13. 典型的路由方式由两种:静态路由和动态路由(还有一种直连路由只适用于直接连接的路由端口)。静态路由是路由器中由管理人员设置固定的路由表,动态路由是路由器自动的根据收到的路由信息更新路由表的过程。当静态路由和动态路由发生冲突时,以静态路由为准;动态路由适用于网络规模大、网络拓扑复杂的网络。

  14. 子网掩码的判定
    如IP地址为202.117.131.12/20 的子网掩码是 255.255.240.0 ,可以从IP地址最后的 /20 看出IP地址前20位表示的是网络号,而子网掩码的作用是屏蔽IP地址的一部分以区别主机标识和网络标识,这里的子网掩码表示为 11111111 11111111 11110000 00000000 即 255.255.240.0。

  15. IPv4 与 IPv6 地址
    IPv4 :采用32位(4个字节)地址长度。
    IPv6 :采用128位(16个字节)地址长度。
    区别:IPv4 与 IPv6 的比较
    https://www.ibm.com/support/knowledgecenter/zh/ssw_ibm_i_72/rzai2/rzai2compipv4ipv6.htm

  16. 嘿嘿,待续

部分参考自:
https://hit-alibaba.github.io/interview/basic/network/TCP.html
https://blog.csdn.net/justloveyou_/article/details/78303617
https://blog.csdn.net/Belug/article/details/78358269

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值