1.OSI 七层模型是什么?每一层的作用是什么?
2.TCP/IP四层模型是什么?每一层的作用是什么?
总结(各层所用协议)
简单总结以下每一层包含的协议
应用层协议 :
- HTTP 协议(超文本传输协议,网页浏览常用的协议)
- DHCP 协议(动态主机配置)
- DNS 系统原理(域名系统)
- FTP 协议(文件传输协议)
- Telnet协议(远程登陆协议)
- 电子邮件协议等(SMTP、POP3、IMAP)
运输层协议 :
- TCP 协议 报文段结构可靠数据传输流量控制拥塞控制
- UDP 协议 报文段结构RDT(可靠数据传输协议)
网络层协议 :
- IP 协议(TCP/IP 协议的基础,分为 IPv4 和 IPv6)
- ARP 协议(地址解析协议,用于解析 IP 地址和 MAC 地址之间的映射)
- ICMP 协议(控制报文协议,用于发送控制消息)
- NAT 协议(网络地址转换协议)
- RIP 协议、
- OSPF 协议、
- BGP 协议(路由选择协议)
- …
网络接口层 :
- 差错检测技术多路访问协议(信道复用技术)
- CSMA/CD 协议MAC 协议以太网技术
- …
3.TCP与UDP的区别
- 是否面向连接 :UDP 在传送数据之前不需要先建立连接。而 TCP提供面向连接的服务,在传送数据之前必须先建立连接,数据传送结束后要释放连接
- 是否是可靠传输:远地主机在收到 UDP 报文后,不需要给出任何确认,并且不保证数据不丢失,不保证是否顺序到达。TCP 提供可靠的传输服务,TCP 在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制。通过 TCP 连接传输的数据,无差错、不丢失、不重复、并且按序到达。
- 是否有状态 :这个和上面的“是否可靠传输”相对应。TCP 传输是有状态的,这个有状态说的是 TCP 会去记录自己发送消息的状态比如消息是否发送了、是否被接收了等等。为此,TCP 需要维持复杂的连接状态表。而 UDP是无状态服务,简单来说就是不管发出去之后的事情了。
- 传输效率 :由于使用 TCP 进行传输的时候多了连接、确认、重传等机制,所以 TCP 的传输效率要比 UDP 低很多。
- 传输形式 : TCP 是面向字节流的,UDP 是面向报文的。
- 首部开销:TCP 首部开销(20 ~60字节)比 UDP 首部开销(8字节)要大。
- 是否提供广播或多播服务 :TCP 只支持点对点通信,UDP 支持一对一、一对多、多对一、多对多;
- …
4.TCP 三次握手和四次挥手
1. 为什么要三次握手?
三次握手的目的是建立可靠的通信信道,说到通讯,简单来说就是数据的发送与接收,而三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的。
三次握手就能确认双方收发功能都正常,缺一不可
2. 为什么不能是两次握手?
假设客户端发送了TCP连接请求,但由于链路的某种原因,该请求延迟到达。但该请求超时了,于是客户端进行超时重传,重传的请求与服务器端(建立连接–数据传输–释放连接)完成传输,可户端已关闭。
此时,那个延迟的请求到达,于是服务器端对其进行确认,向客户端发送确认请求,但客户端已关闭,因此服务器端会不断的发送确认请求,会造成资源的浪费,如下图所示:
3. 四次挥手
为什么要进行四次挥手?
TCP是全双工通信,可以双向传输数据。任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了 TCP 连接。
举个例子:A 和 B 打电话,通话即将结束后。
第一次挥手 : A 说“我没啥要说的了”。
第二次挥手 :B 回答“我知道了”,但是 B 可能还会有要说的话,A 不能要求 B 跟着自己的节奏结束通话。
第三次挥手 :于是 B 可能又巴拉巴拉说了一通,最后 B 说“我说完了”。
第四次挥手 :A 回答“知道了”,这样通话才算结束。
只要四次挥手没有结束,客户端和服务端就可以继续传输数据!
具体挥手过程如下:
- 终止FIN:用来释放连接。为1时,表明此报文段的发送方的数据已发送完毕。
- seq:等于TCP客户进程以前已传送过的数据的最后一个字节的序号+1。
- ack:等于TCP客户进程之前已收到的数据的最后一个字节的序号+1。
为什么不能把服务器发送的 ACK 和 FIN 合并起来,变成三次挥手?
因为服务器收到客户端断开连接的请求时,可能还有一些数据没有发完,这时先回复 ACK,表示接收到了断开连接的请求。等到数据发完之后再发 FIN,断开服务器到客户端的数据传送。
为什么第四次挥手客户端需要等待 2*MSL(报文段最长寿命)时间后才进入 CLOSED 状态?
第四次挥手时,客户端发送给服务器的 ACK 有可能丢失,如果服务端因为某些原因而没有收到 ACK 的话,服务端就会重发 FIN,如果客户端在2*MSL 的时间内收到了 FIN,就会重新发送 ACK 并再次等待 2MSL,防止 Server 没有收到 ACK 而不断重发 FIN。
如图所示:
5.HTTP
HTTP定义了浏览器(即万维网客户进程)怎样向万维网请求万维网文档,以及万维网服务器怎样把万维网文档传送给浏览器。
从输入URL 到页面展示到底发生了什么?
总体来说分为以下几个过程:
- DNS 解析
- TCP 连接
- 发送 HTTP 请求
- 服务器处理请求并返回 HTTP 报文
- 浏览器解析渲染页面
- 连接结束
连接过程如下所示: