回答点:七层模型每层对应的作用及相关协议、为什么分层、为什么有TCP/IP四层模型
参考:
1、OSI七层参考模型是一个ISO组织所提出的一个标准参考分层模型,它按照数据传输过程所涉及的传输设备、方式、功能职责的不同将数据传输划分为了7层,从上到下依次:
- 应用层:提供两个终端设备上应用程序之间信息交换的服务,HTTP、SMTP、POP3、DNS、FTP、TELNET
- 表示层:提供各种用于应用层数据的编码和转换功能,确保能被另一个系统的应用层所识别
- 会话层:为不同应用程序之间建立连接提供服务
- 传输层:负责向两台终端设备进程之间的通信提供通用的数据传输服务,TCP、UDP
- 网络层:为分组交换网络上的不同主机提供通信服务,IP
- 数据链路层:将网络层交下来的IP数据报组装成帧,在两个相邻节点间的链路上传送帧
- 物理层:实现相邻计算机节点之间比特流的透明传输
2、分层目的:
- 各层之间相互独立,各司其职,与我们在开发时的分层是一样的
- 提高整体的灵活性,与平时开发要求的高内聚、低耦合一致
- 让大问题——》多个小问题,让复杂的计算机网络系统变得易于设计、实现
3、但是OSI七层参考模型的设计是相对复杂的,设计成本高,是一个理想状态下的分层模型,而在实际应用中,为了简便我们的开发与设计提出了TCP/IP四层模型,它是对于OSI七层模型的一个简化。将应用层+表示层+会话层=应用层,数据链路层+物理层=网络接口层,通常实际开发中常采用传输层TCP协议+网络层IP协议故称为TCP/IP协议
回答点:TCP协议的特点(面向连接、可靠传输)、三次握手过程
参考:
TCP协议是一个面向连接,基于字节流可靠通信的传输层协议。在双方进行通信时需要三次握手来建立连接保证数据传输的可靠性。
第一次握手:C端——》S端发送SYN=1数据包【请求建立连接】,C端进入SYN-SENT状态;
第二次握手:S端手段C端发送的SYN=1数据包,接着C端——》S端发送SYN=1,ACK=1的数据包【同意连接并对第一次握手的数据包进行确认】,C端从listen状态进入SYN-RCVD状态。
第三次握手:C端收到S端发送的SYN=1,ACK=1的同意连接报文段后,进入ESTABLISHED状态,向S端发送ACK=1的数据包【再次对第二次握手S端发来的数据包进行确认】,S端收到后也进入ESTABLISHED状态。
当C端与S端都进入ESTABLISHED状态时,表示可靠连接以建立完成,可以进行数据的通信了。
回答点:每一次握手的意义、2次握手确认双发网络正常、4次浪费资源
参考:
第一次握手:发起建立连接请求;“XXX,咱们去看电影吧”
第二次握手:确认并同意连接请求;“可以啊”
第三次握手:对第二次的连接进行确认;“那咱们走吧”
前两次握手完成只能确认C端与S端之间的网络是顺畅的,并不能保证建立了可靠的传输。
例如:当C端向S端第一次发送请求连接报文时,由于网络等原因,迟迟没有到S端,C端又重新向S端发送了请求连接报文,这一次很顺畅的到了S端,S端并进行了确认。若这时,C端第一次发送的请求连接报文到了S端,S端以为C端再一次进行连接就会再次发送确认报文,而C端已经收到过一次确认报文,所以此次的确认报文它会忽略,而S端发送了确认报文后会一直等待C端的回应,就会造成S端一直等待,浪费资源,甚至服务器停止响应。2次不能够保证可靠的连接,也不能避免重复连接或连接混乱问题。在经历过3次握手稳定的连接已建立,再次传输浪费资源。所有三次是最佳的既节省资源又能建立可靠连接的次数
回答点:连接管理(断开连接节省资源),四次挥手传输的标志位
参考:
TCP面向连接的可靠传输过程,建立连接来发送数据保证数据的可靠性,这条连接是占用资源的。当双方通信完成后,会通过四次回收来释放连接,对资源进行回收。四次回收过程如下:
第一次挥手:C端——》S端发送FIN=1的数据包,请求释放连接
第二次挥手:S端收到释放连接数据包,S端——》C端发送ACK=1数据包,进行确认
此时双方的连接状况:C端不能再向S端传输数据了,S端仍可以继续向C端传数据,C端也可接收
第三次挥手:当S端不在向C端发送数据时,会再次向C端发送ACK=1,FIN=1数据包【释放连接】
第四次挥手:C端收到S端的释放连接数据包,再次进行确认向S端发送ACK=1数据包,S端接收
经历四次握手后,双方断开连接,梳理一下双方每次挥手的状态:
第一次:C端——》等待1
第二次:C端——》等待2,S端——》等待关闭
第三次:C端——》超时等待,S端——》最后确认
第四次:C端——》CLOSED,S端——》CLOSED
回答点:含义、如何实现
流量控制是指接收方根据窗口大小对于发送方所发送数据包的限制,通过流量控制,让发送方所发送的数据接收方能够有效的全部接收,避免丢包引起的重传机制而带来不必要的消耗。
流量控制需要通过滑动窗口来实现,接收方发送的确认报文中的窗口字段可以控制发送方窗口的大小,从而影响发送方的发送速率,若窗口字段设置为0,则不能发送数据
回答点:概念、作用
滑动窗口通过拥塞窗口值指定发送方每次能发送数据包的个数。发送方和接收方分别维护了各自的缓冲区,也称窗口。发送方窗口的大小由接收方中TCP首部的窗口字段决定。发送方将窗口内容分为:已发送已确认、已发送未确认、未超出发送窗口范围的未发送数据,已超出发送窗口范围的未发送数据。随着接收方确认,发送方的窗口不断向前滑动
回答点:含义、作用、实现
拥塞控制是指对整个网络中传输的数据包多少进行控制,控制的目的就是避免「发送方」的数据填满整个网络,控制「发送方」的数据发送量。拥塞控制主要通过4个算法来实现:
1、慢启动:刚来时发送数据包个数少,“试探性”发送,依次呈指数增长,直到超过慢启动门限,发生拥塞的可能性就变大了,会利用拥塞避免处理
2、拥塞避免:超过慢启动门限后,不再呈指数增长,能发送的数据包数逐次+1,当发生丢包触发重传机制后,会使用拥塞发生处理
3、拥塞发生:重传机制有2种
当使用超时重传机制:
(1)将门限值ssthresh设为拥塞窗口值cwnd的一半【ssthresh=cwnd/2】
(2)拥塞窗口值cwnd设为1,回到慢启动【cwnd=1】
使用快速重传机制:
(1)将门限值ssthresh设为拥塞窗口值cwnd的一半【ssthresh=cwnd/2】
(2)拥塞窗口值cwnd设为原来的一半+3【cwnd=cwnd/2+3】
4、快速开始:在拥塞发生时采用快速重传机制就会快速开始
快速开始是在拥塞情况并不那么严重,很快就能恢复网络的通信状况的一个算法
回答点:是否连接、可靠、首部长度、使用场景
TCP | 面向连接 | 可靠 | 首部20-60字节 | 数据传输要求严格 |
UDP | 面向无连接 | 不可靠 | 首部8字节 | 视频(即时传输) |