文章目录
- 一、计算机网络体系结构
- 1、计算机网络的各层协议及作用?
- 二、物理层
- 三、数据链路层
- 四、网络层
- 五、传输层
- 1、TCP和UDP的区别?
- 2、UDP 和 TCP 对应的应用场景是什么?
- 3、详细介绍一下 TCP 的三次握手机制
- 4、为什么需要三次握手,而不是两次?
- 5、为什么需要三次握手,而不是四次?
- 6、详细介绍TCP的四次挥手
- 7、为什么连接的时候是三次握手,关闭的时候却是四次握手?
- 六、应用层
一、计算机网络体系结构
1、计算机网络的各层协议及作用?
计算机网络体系可以大致分为一下三种,OSI七层模型、TCP/IP四层模型和五层模型。
(a)OSI七层协议
分层 | 功能 | 协议 | 设备 | 流量控制 | 差错控制 | 拥塞控制 | 传输单位 |
---|---|---|---|---|---|---|---|
7 应用层 | 用户与网络接口 | 文件FTP、邮件SMTP、万维网HTTP、域名系统DNS | |||||
6 表示层 | 定义数据结构和信息表示,数据压缩 、加密解密 | ||||||
5 会话层 | 不同主机各个进程之间会话,断点下载、服务器验证用户登录 | ||||||
4 传输层 | 不同主机两个进程端到端通信、复用分用 | TCP(有连接、可靠)、UDP(无连接、不可靠) | ✔️ | ✔️ | ✔️ | ||
3 网络层 | 为分组交换网上的不同主机提供通信 | IP(无连接)、ICMP、ARP | 路由器 | ✔️ | ✔️ | ✔️ | 数据报 |
2 数据链路层 | 两个主机点到点连接 | STP、PPP、帧中继 | 交换机 | ✔️ | ✔️ | 帧 | |
1 物理层 | 通信结点间传输 | 集线器 | 比特 |
(b)TCP/IP 四层模型
应用层:对应于OSI参考模型的(应用层、表示层、会话层)。
传输层: 对应OSI的传输层,为应用层实体提供端到端的通信功能,保证了数据包的顺序传送及数据的完整性。
网际层:对应于OSI参考模型的网络层,主要解决主机到主机的通信问题。
网络接口层:与OSI参考模型的数据链路层、物理层对应。
(c )五层模型:应用层、传输层、网络层、数据链路层、物理层。
二、物理层
三、数据链路层
四、网络层
五、传输层
1、TCP和UDP的区别?
TCP | UDP | |
---|---|---|
连接方式 | 有连接 | 无连接,可随时发送数据 |
可靠性 | 可靠,有流量控制和拥塞控制 | 不可靠,无流量和拥塞控制 |
有序性 | 有序,消息在传输过程中可能会乱序,TCP 会重新排序 | 无序 |
速度 | 慢 | 快 |
连接对象 | 一对一 | 一对一、一对多、多对一、多对多都行 |
传输方式 | 字节流 | 报文 |
首部开销 | 最小20字节,最大60字节 | 首部开销小 ,8字节 |
应用场景 | 需可靠传输如文件传输、HTTP/HTTPS | 高速实时应用(视频会议、IP电话、直播、广播) |
2、UDP 和 TCP 对应的应用场景是什么?
TCP 是面向连接,能保证数据的可靠性交付,因此经常用于:
FTP文件传输 HTTP / HTTPS
UDP 面向无连接,它可以随时发送数据,再加上UDP本身的处理既简单又高效,因此经常用于:
包总量较少的通信,如 DNS 、SNMP等 视频、音频等多媒体通信 广播通信
3、详细介绍一下 TCP 的三次握手机制
第一次握手:客户端请求建立连接,向服务端发送一个同步报文(SYN=1),同时选择一个随机数 seq = x 作为初始序列号,并进入SYN_SENT状态,等待服务器确认。
第二次握手::服务端收到连接请求报文后,如果同意建立连接,则向客户端发送同步确认报文(SYN=1,ACK=1),确认号为 ack = x + 1,同时选择一个随机数 seq = y 作为初始序列号,此时服务器进入SYN_RECV状态。
第三次握手:客户端收到服务端的确认后,向服务端发送一个确认报文(ACK=1),确认号为 ack = y + 1,序列号为 seq = x + 1,客户端和服务器进入ESTABLISHED状态,完成三次握手。
理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。
4、为什么需要三次握手,而不是两次?
(1)防止已过期的连接请求报文突然又传送到服务器,因而产生错误和资源浪费。
在双方两次握手即可建立连接的情况下,假设客户端发送 A 报文段请求建立连接,由于网络原因造成 A暂时无法到达服务器,服务器接收不到请求报文段就不会返回确认报文段。 客户端在长时间得不到应答的情况下重新发送请求报文段 B,这次 B顺利到达服务器,服务器随即返回确认报文并进入 ESTABLISHED 状态,客户端在收到 确认报文后也进入 ESTABLISHED状态,双方建立连接并传输数据,之后正常断开连接。 此时姗姗来迟的 A 报文段才到达服务器,服务器随即返回确认报文并进入ESTABLISHED 状态,但是已经进入 CLOSED 状态的客户端无法再接受确认报文段,更无法进入 ESTABLISHED状态,这将导致服务器长时间单方面等待,造成资源浪费。
(2)三次握手才能让双方均确认自己和对方的发送和接收能力都正常。
第一次握手:客户端只是发送处请求报文段,什么都无法确认,而服务器可以确认自己的接收能力和对方的发送能力正常;第二次握手:客户端可以确认自己发送能力和接收能力正常,对方发送能力和接收能力正常;第三次握手:服务器可以确认自己发送能力和接收能力正常,对方发送能力和接收能力正常;可见三次握手才能让双方都确认自己和对方的发送和接收能力全部正常,这样就可以愉快地进行通信了。
(3)告知对方自己的初始序号值,并确认收到对方的初始序号值。
TCP 实现了可靠的数据传输,原因之一就是 TCP
报文段中维护了序号字段和确认序号字段,通过这两个字段双方都可以知道在自己发出的数据中,哪些是已经被对方确认接收的。这两个字段的值会在初始序号值得基础递增,如果是两次握手,只有发起方的初始序号可以得到确认,而另一方的初始序号则得不到确认。
5、为什么需要三次握手,而不是四次?
因为三次握手已经可以确认双方的发送接收能力正常,双方都知道彼此已经准备好,而且也可以完成对双方初始序号值得确认,也就无需再第四次握手了。
第一次握手:服务端确认“自己收、客户端发”报文功能正常。
第二次握手:客户端确认“自己发、自己收、服务端收、客户端发”报文功能正常,客户端认为连接已建立。
第三次握手:服务端确认“自己发、客户端收”报文功能正常,此时双方均建立连接,可以正常通信。
6、详细介绍TCP的四次挥手
第一次挥手:客户端向服务端发送连接释放报文(FIN=1,ACK=1),主动关闭连接,同时等待服务端的确认。
序列号 seq = u,即客户端上次发送的报文的最后一个字节的序号 + 1
确认号 ack = k, 即服务端上次发送的报文的最后一个字节的序号 + 1
第二次挥手:服务端收到连接释放报文后,立即发出确认报文(ACK=1),序列号 seq = k,确认号 ack = u + 1。
这时 TCP 连接处于半关闭状态,即客户端到服务端的连接已经释放了,但是服务端到客户端的连接还未释放。这表示客户端已经没有数据发送了,但是服务端可能还要给客户端发送数据。
第三次挥手:服务端向客户端发送连接释放报文(FIN=1,ACK=1),主动关闭连接,同时等待 A 的确认。
序列号 seq = w,即服务端上次发送的报文的最后一个字节的序号 + 1。
确认号 ack = u + 1,与第二次挥手相同,因为这段时间客户端没有发送数据
第四次挥手:客户端收到服务端的连接释放报文后,立即发出确认报文(ACK=1),序列号 seq = u + 1,确认号为 ack = w + 1。
此时,客户端就进入了 TIME-WAIT 状态。注意此时客户端到 TCP 连接还没有释放,必须经过 2*MSL(最长报文段寿命)的时间后,才进入 CLOSED 状态。而服务端只要收到客户端发出的确认,就立即进入 CLOSED 状态。可以看到,服务端结束 TCP 连接的时间要比客户端早一些。
7、为什么连接的时候是三次握手,关闭的时候却是四次握手?
服务器在收到客户端的 FIN 报文段后,可能还有一些数据要传输,所以不能马上关闭连接,但是会做出应答,返回 ACK 报文段。接下来可能会继续发送数据,在数据发送完后,服务器会向客户单发送 FIN 报文,表示数据已经发送完毕,请求关闭连接。服务器的ACK和FIN一般都会分开发送,从而导致多了一次,因此一共需要四次挥手。
六、应用层
参考:https://www.cnblogs.com/shiyitongxue/p/18051130