浅谈计算机网络
1、OSI七层模型、TCP/IP四层结构、五层协议结构?
OSI七层模型:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
TCP/IP四层结构:网络接口层、网际层、运输层、应用层
五层协议:物理层、数据链路层、网络层、运输层、应用层
对应的层 | 作用 | 对应的网络协议/硬件 |
---|
物理层 | 提供数据传输的硬件保证,网卡接口,传输介质 | 中继器、集线器、网关、光纤 | 数据链路层 | 数据交换,传输的数据转换为二进制形式 | 网卡、网桥、交换机 | 网络层 | 路由选择,网络互联 | IP、ICMP | 传输层 | 用于端到端的可靠数据传输 | TCP、UDP | 会话层 | 用于建立用户级的连接,选择适当的传输服务 | SQL、RPC | 表示层 | 用于对数据的压缩、加密 | JPEG、MPEG、ASII | 应用层 | 提供用户服务,具体功能由应用程序实现 | HTTP、SMTP、DNS |
2、TCP和UDP的区别?基于TCP、UDP的协议有哪些?
TCP提供面向连接的、可靠的数据流传输,而UDP提供的是无连接的、不可靠的数据流传输。
TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。
TCP的传输单位称为TCP报文段,UDP传输单位称为用户数据报。
TCP注重数据安全性,UDP数据传输快,因为不需要连接等待,少了很多操作,但是其安全性却一般。
基于TCP的协议
- HTTP:Web服务器传输超文本到本地浏览器的传送协议。
- SMTP:邮件传送协议,用于发送邮件。服务器开放的是25端口。
- FTP:定义了文件传输协议,使用21端口。
基于UDP的协议:
- DNS:用于域名解析服务,将域名地址转换为IP地址。DNS用的是53号端口。
TCP:当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,HTTP、HTTPS、FTP等传输文件的协议会使用到。
UDP:当强调传输性能而不是传输的完整性时,要求网络通通讯速度能尽量的快:如QQ语音,QQ视频等。
3、面向连接与面向非连接区别?
面向连接的服务,通信双方在进行通讯之前,要先在双方建立起一个完整的可以彼此沟通的通道,在通信过程中,整个连接的情况一直可以被实时地监控和管理。
非面向连接的服务,不需要预先建立一个联络两个通信节点的连接,需要通信的时候,发送节点就可以往网络上发送信息,让信息自主地在网络上去传,一般在传输地过程中不再加以监控。
4、TCP协议如何保证可靠传输?
- 对应用数据进行分割:将应用数据被分割成TCP认为最适合发送的数据块。
- 对数据包进行编号:TCP给要发送的每一个数据包进行编号,接受方按照编号对数据包进行排序,把有序数据传送给应用层。
- 校验和:这是一个端到端的检验,目的是检测数据在传输过程中的任何变化。如果接受端校验有差错,说明数据在传输过程中出了问题,接收端将丢弃不再接受该数据。
- 流量控制:TCP连接的每一方都有固定大小的缓冲空间,TCP的接受端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP使用的是流量控制协议是可变大小的滑动窗口协议。(TCP利用滑动窗口实现流量控制)
- 拥塞控制:当网络拥塞时,减少数据发送。防止过多的数据注入到网络中,避免传输链路过载。
- ARQ协议:该协议也是为了实现可靠传输的,它的基本原理就是没发完一个分组就停止发送,等到对方确认。在收到确认后再发下一个分组。
- 超时重传:当TCP发出一个报文段后,它启动一个定时器,等待接收端确认收到这个报文段,如果不能及时收到一个确认,将重发这个报文段。
滑动窗口实现流量控制: 流量控制是为了控制发送方发送速率,保证接收方来得及接收。
接受方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为0,则发送方不能发送数据。
5、TCP如何实现拥塞控制?
为了进行拥塞控制,TCP发送方要维持一个拥塞窗口(cwnd)的状态变量。拥塞控制窗口的大小取决于网络的拥塞程度,并且动态变化。发送方让自己的发送窗口取为拥塞窗口和接收窗口中较小的一个。
TCP的拥塞控制采用了四种算法,满开始、拥塞避免、快重传和快恢复
- 满开始:满开始算法的思路是当主机开始发送数据时,如果立即把大量数据字节注入到网络,那么可能会引起网络阻塞,因为现在还不知道网络的符合情况。经验表明,较好的方法是先检测一下,即由小到大逐渐增大发送窗口,也就是由小到大逐渐增大拥塞窗口数值,cwnd初始值为1,每经过一个传播轮次,cwnd加倍。
- 拥塞避免:拥塞避免算法的思路是让拥塞窗口cwnd缓慢增大,即每经过一个往返时间RTT就把发送放的cwnd加1;
- 快重传与快恢复: 在 TCP/IP 中,快速重传和恢复(fast retransmit and recovery,FRR)是一种拥塞控制算法,它能快速恢复丢失的数据包。没有 FRR,如果数据包丢失了,TCP 将会使用定时器来要求传输暂停。在暂停的这段时间内,没有新的或复制的数据包被发送。有了 FRR,如果接收机接收到一个不按顺序的数据段,它会立即给发送机发送一个重复确认。如果发送机接收到三个重复确认,它会假定确认件指出的数据段丢失了,并立即重传这些丢失的数据段。有了 FRR,就不会因为重传时要求的暂停被耽误。 当有单独的数据包丢失时,快速重传和恢复(FRR)能最有效地工作。当有多个数据信息包在某一段很短的时间内丢失时,它则不能很有效地工作。
6、TCP的三次握手和四次挥手
- 为了准确无误的把消息发送目标地,TCP协议采用了三次握手策略。
- 建立一次TCP连接需要”三次握手“。
为什么要进行三次握手?
- 第一次握手,为了让服务端认为客户端发送消息能力正常,服务端认为服务端接收能力正常。
- 第二次握手,为了让客户端认为服务器端接收和发送能力正常,客户端认为客户端发送和接收能力正常。
- 第三次握手,为了让服务器确认自己发送和接受能力正常,同时服务端也知道客户端发送和接收数据正常。
三次握手的具体过程
几个状态
- SYN表示建立连接
- FIN表示关闭连接
- ACK表示响应
- PSH表示有数据传输
- RST表示连接重置
- 开始客户端处于closed状态,服务端处于listen状态。
- 第一次握手:客户端给服务端发一个SYN报文,并指明客户端的初始化序列号ISN?,此时客户端处于SYN_SENT状态。
- 第二次握手:服务端收到客户端的SYN报文之后,会以自己的SYN报文作为应答,并且指明自己的ISN,同时会发送客户端ISN+1作为ACK的值,表示自己已经收到客户端的ISN,此时服务器处于SYN_RCVD的状态。
- 第三次握手:客户端收到SYN报文之后,会发送一个ACK报文,当然,也是一样把服务器的ISN + 1作为ACK的值,表示已经收到服务端的SYN报文,此时客户端处于established状态。
- 服务器收到ACK报文之后,也处于established状态,此时,双方以建立连接。
四次挥手的具体过程
- 双方都处于establised状态,客户端发起关闭请求,
- 第一次挥手:客户端发送一个FIN报文,报文中会指定一个序列号。此时客户端处于FIN_WAIT1状态。
- 第二次挥手:服务器收到FIN之后,会发送ACK报文,且客户端的序列号值+1作为ACK报文的序列号值,表明已经收到客户端的报文了,此时服务端处于CLOSE_WAIT状态。
- 第三次挥手:如果服务器也想断开连接了,和客户端的第一次挥手一样,发出FIN报文,且指定一个序列号。此时服务端处于LAST_ACK的状态。
- 第四次挥手:客户端收到FIN之后,发送一个ACK报文作为应答,且把服务端的序列号值 + 1作为自己ACK的序列号值,此时客户端处于TIME_WAIT状态。需要过一阵子以确保服务端收到自己的ACK报文之后才会CLOSE状态。
- 服务端收到ACK报文之后,就处于关闭连接了,处于CLOSED状态。
7、如果已经建立连接,但是客户端突然出现故障了怎么办?
TCP设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户请求后就会重新复位这个计数器,时间通常是设置为2小时,若两个小时还没收到客户端的任何数据,服务器就会发送一个探测报文段,,以后每隔75秒发送一次。若一连发送10个探测报文仍然没有反应,服务器就认为客户端出故障了,接着就关闭连接。
|