关注公众号获取更多干货
TCP通信协议应该是上位机开发中应用最广泛的协议,无论是西门子S7协议、三菱MC协议或者是欧姆龙的Fins-TCP协议等,都是TCP通信协议的典型应用。很多人在上位机面试时,都会被问到关于TCP通信的一些问题,比如三次握手和四次挥手、TCP与Socket之间的联系等,为了便于大家更好地理解TCP通信,我整理了一套关于TCP通信的20个常见的面试题:
01、OSI参考模型与TCP/IP参考模型
如上图所示,OSI参考模型为7层模型,依次为应用层、表示层、会话层、传输层、网络层、数据链路层及物理层,TCP/IP模型是在OSI参考模型的基础上做了一定的精简,形成一个4层模型。在层次关系上,两者都采用了分层体系结构,都是对等的层间通信,不同之处在于TCP/IP参考模型比OSI参考模型层次更清晰简练,在功能上,两者差别不大,都是为了实现两个或多个终端之间的通信。
02、TCP通信位于网络模型的哪一层?
TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,无论是OSI参考模型,还是TCP/IP参考模型,TCP都位于传输层,TCP是为了在不可靠的互联网络上提供可靠的端到端字节流而专门设计的一个传输协议。
03、如何理解面向连接、可靠、字节流?
面向连接:意味着TCP是点对点之间的通信,不能像UDP那样可以一个主机同时向多个主机发送消息,也就是无法实现一对多的情形。
可靠的:无论网络链路如何变化,TCP都可以保障报文能够到达接收端。
字节流:基于字节流,意味着无论我们消息有多大都可以进行传输。并且消息是有序的,当前一个消息没有收到的时候,即使它先收到了后面的字节已经收到,那么也不能扔给应用层去处理,同时对重复的报文会自动丢弃。
04、为什么需要TCP协议?
因为IP层是不可靠的,它不保证网络包的一定交付、不保证按序交付、也不保证完整交付。因此如果需要保证网络数据包的可靠性,就必须要通过上层即传输层的TCP协议来保证。
05、TCP与UDP之间区别及联系?
TCP与UDP都属于传输层协议,区别如下:
连接机制
TCP 是面向连接的传输层协议
UDP 是不需要连接
服务对象
TCP 是一对一的两点服务
UDP 支持一对一、一对多、多对多
可靠性
TCP 保证数据不丢失、不重复、按需到达
UDP 是尽最大努力交付,不保证交付数据
拥塞控制、流量控制
TCP 有拥塞控制和流量控制机制
UDP 则没有拥塞控制和流量控制机制
06、TCP首部报文分析
TCP的首部至少占用20个字节,包含的内容有源端口号、目标端口号、序列号、应答号、控制位、校验和等,具体如下所示:
07、简要说明TCP三次握手
服务器与客户端均处于CLOSE状态
服务器先主动监听某端口,处理LISTEN状态
客户端发送SYN报文,seq=x,SYN=1
服务器回复SYN+ACK报文,seq=y,ack=x+1,SYN=1,ACK=1
客户端回复ACK报文,ack=y+1,ACK=1
08、简要说明TCP四次挥手
服务器与客户端均处于ESTABLISHED状态
客户端打算关闭连接,发送一个 FIN 报文,进入 FIN_WAIT_1 状态。
服务端回复 ACK报文,进入 CLOSED_WAIT 状态。
客户端收到 ACK 应答报文后,进入 FIN_WAIT_2 状态。
服务端处理完数据后,向客户端发送 FIN 报文,进入 LAST_ACK 状态。
客户端回复一个 ACK 应答报文,之后进入 TIME_WAIT 状态
服务器收到 ACK 应答报文后,进入了 CLOSE 状态,服务端完成连接的关闭。
客户端在经过 2MSL 一段时间后,自动进入 CLOSE 状态,客户端也完成连接的关闭。
09、TCP握手为什么刚好是三次?