最近校招季,特把自己面试中遇到的问题整理整理,以巩固自己的知识。
对于网络这块,面试官一般喜欢问的是ISO/OSI参考模型和TCP/IP协议族方面的知识,下面我们就来看看吧。
首先,我们先给出它们的结构图
OSI,TCP/IP参考模型图OSI,TCP/IP参考模型图
注意:图中有一个Hardware层,图中显示它和OSI模型中的物理层(Physical)相对应,其实严格意义上说,它是不属于TCP/IP协议族中的一员的,这个层次包括网线的制式,网卡的定义,负责网络的传输。
OSI
Open System Interconnection,即开放式系统互联。OSI先有模型,后有协议,先有标准,后进行实践。且OSI只是一种理想的模型,并没有真正使用。
TCP/IP
TCP/IP则是先有协议和应用再提出了模型,且是参照的OSI模型。TCP/IP现已被广泛使用,已成为网络互联实际上的标准。
TCP:Transmission Control Protocol,传输控制协议
IP:Internet Protocol Address,网际协议地址
UDP:User Datagram Protocol,用户数据报协议
TCP/IP协议中各个层次的功能
- 应用层:为用户提供各种需要的服务,例如FTP,Telnet,DNS,SMTP。
- 传输层:为应用层实体提供端到端的通信功能。该层定义了两种主要的协议:TCP(传输控制协议)和UDP(用户数据报协议)。TCP提供的是一种可靠的、面向连接的数据传输服务,UDP提供的是不可靠的、无连接的数据传输服务。
- 网际互联层:主要解决主机到主机的通信问题。其中最重要的一个协议是IP协议(网际协议),它提供的是一种不可靠、无连接的数据报传输服务。
- 网络接口层:与OSI模型中的数据链路层和物理层相对应。
TCP和UDP的区别
TCP提供了一种可靠的数据传输服务,TCP是面向连接的。利用TCP通信的两台主机首先要经历一个“拨打电话”的过程,等到通信准备结束后才开始传输数据,最后结束通话。UDP是直接把数据发出去,而不管对方是不是在收信,就算是UDP无法送达,也不会产生ICMP差错报文。
一个TCP数据的发送过程
- 双方建立连接。
- 发送方给给接收方TCP数据报,然后等待对方的确认TCP数据报。如果在一定的时间内没有收到确认数据报,就重新发送刚才发送的数据报;如果收到了,就发送下一个数据报。
- 接收方等待发送方的数据报,如果得到数据报并检验无误,就发送ACK(确认)数据报,并等待下一个TCP数据报的到来,直到接收到FIN数据报(发送完成数据报)。
- 终止连接。
TCP连接的建立和终止
- 连接的建立
在建立连接的时候,客户端首先向服务器申请打开某一端口,然后服务端发回一个ACK报文通知客户端请求报文收到,客户端收到确认报文后再次发出确认报文确认刚才服务端发出的确认报文自己收到。至此,连接的建立完成,这也叫做“三次握手”。
- 结束连接
TCP有一个特别的概念叫做half-close,这个意思是说TCP的连接是全双工连接(可以同时发送和接收)。因此在关闭连接的时候,必须关闭传和送两个方向上的连接。当要结束连接的时候,客户端给服务器一个FIN为1的TCP报文,然后服务器返回给客户端一个确认ACK报文,并且发送一个FIN报文,当客户端回复ACK报文后,连接就结束了。这就是“四次握手”。
TCP协议是如何保证传输的可靠性的
- 将数据截取为合理的长度
应用数据被分割成TCP认为最适合发送的数据块,应用数据产生的数据报长度将保持不变。
- 超时重发
当TCP发出一个报文后,它会启动一个定时器,等待目的端的确认报文发回。如果在定时器时间内没有收到确认报文,那它就会重新发送这个报文。
- 目的端对于收到的报文,做出确认响应
当目的端收到报文后,它将发送一个确认报文。这个确认不是立即发送,一般会延迟几分之一秒(要对包作完整校验)。
- 目的端检验出包有错,丢弃报文段,不给出确认响应,等待重传。
目的端收到报文后,会对报文的完整性作校验(主要是防止传输过程中数据的丢失或更改),如果检验有差错,TCP就会舍弃此报文段,并且不会做出确认响应,等待另一端的重传。
- 对失序数据进行重排交给应用层。
因为TCP报文是作为IP数据报(IP提供的是不可靠传输)来传送的,而IP报的的到达顺序可能会失序。因此TCP将对收到的数据进行重新排序然后才交给应用层。
- 对于重复数据,丢弃重复数据
由于IP数据报可能会重复,TCP必须丢弃重复的数据。
- TCP可以进行流量控制,防止较快主机致使较慢主机的缓冲区溢出
TCP连接的每一方都有固定大小的缓冲区,TCP接收端只允许另一端发送接收端缓冲区能接纳的数据。(流量控制协议:可变大小的滑动窗口协议)
网友评论