计算机网络的七层协议
计算机网络体系可以大致分为一下三种,OSI七层模型、TCP/IP四层模型和五层模型。
七层协议的功能:
物理层:
负责处理网络通信的物理传输和传输介质的细节。物理层的主要任务是将比特流(bitstream)从发送方传输到接收方,确保数据能够在网络中进行可靠的物理传输。
数据链路层:
数据链路层通常简称为链路层。将网络层传下来的IP数据包组装成帧,并再相邻节点的链路上传送帧。
网络层:
主要负责实现不同网络之间的数据传输,包括路由选择、分组传输和逻辑地址寻址等功能。
运输层:
有时也译为传输层,向主机进程提供通用的数据传输服务。该层主要有以下两种协议:
- TCP:提供面向连接的、可靠的数据传输服务;
- UDP:提供无连接的、尽最大努力的数据传输服务,但不保证数据传输的可靠性。
会话层:
负责在网络中的两节点之间建立、维持和终止通信,如服务器验证用户登录便是由会话层完成的。
表示层:
主要负责数据格式的转换,如加密解密、转换翻译、压缩解压缩等。
应用层:
为应用程序提供交互服务。在互联网中的应用层协议很多,如域名系统DNS,支持万维网应用的HTTP协议,支持电子邮件的SMTP协议等。
TCP和UDP
区别
总结
TCP是一种面向连接的可靠传输协议。它提供了可靠的数据传输和错误检测机制,确保数据的完整性和顺序性。TCP使用三次握手建立连接,通过序列号、确认应答和重传机制来保证数据的可靠传输。TCP还具有拥塞控制和流量控制的功能,以适应不同网络条件和流量负载。由于TCP的可靠性和复杂性,它在需要可靠数据传输的应用中广泛使用,如文件传输、电子邮件和网页浏览等。
UDP是一种无连接的不可靠传输协议。它不提供可靠性和错误检测机制,数据传输过程中无需建立连接和维护状态。UDP直接将数据报发送到目标地址,不保证数据的顺序和完整性。UDP的优点是简单、高效,适用于一些实时性要求高、数据丢失可以容忍的应用,如音频和视频流媒体、实时游戏和DNS(域名系统)等。
TCP
三次握手:
第一次握手:
客户端向服务端发送一个SYN=1(同步报文),并进入SYN_SENT状态,等待服务器确认。
SYN标志位被设置为1,表示这是一个建立连接的请求。SYN包还包含了一些其他的信息,如源端口、目的端口和初始序列号等。
第二次握手:
服务端收到连接请求报文后,如果同意建立连接,则向客户端发送同步确认报文(SYN=1,ACK=1),确认号为 ack = x + 1,同时选择一个随机数 seq = y 作为初始序列号,此时服务器进入SYN_RECV状态。
第三次握手:
客户端收到服务端的确认后,向服务端发送一个确认报文(ACK=1),确认号为 ack = y + 1,序列号为 seq = x + 1,客户端和服务器进入ESTABLISHED状态,完成三次握手。
为什么不是两次握手
防止已过期的连接请求报文突然又传送到服务器,因而产生错误和资源浪费。
当客户端向服务端发送一个SYN后,由于网络阻塞或者其他原因导致服务端没有接收到SYN包。客户端为了建立连接会再发送一个SYN,服务端接收到第二个SYN后,向客户端发送SYN+ACK,结果第一个SYN又发送到服务端,服务端会误认为客户端发送了第二个连接请求进入连接等待状态,造成了状态不一致问题。
数据传输
TCP为每一个连接建立一个缓冲区
- 发送端发送数据时会从缓冲区截取一部分发送内容,并且会附带序列号和长度。
- 接收端接收到数据后会回复序列号+长度,也就是下一包数据的起始序列号。
- 接收端可以根据序列号进行数据的重组,当出现丢包时,接收端可以重新发送请求。
数据传输不分客户端和服务端,TCP连接是全双工的,对于两端均采用上述机制。
四次挥手
第一次挥手:
客户端向服务端发送FIN关闭连接请求后进入终止等待1状态。
第二次挥手:
服务端收到FIN包后向客户端发送ACK包表示自己进入关闭等待状态,客户端进入终止等待2状态。
第三次挥手:
此时服务端可以继续发送未发送的数据,客户端也可以接收数据。数据发送完毕后服务端向客户端发送FIN包进入最后确认状态。
第四次挥手:
客户端收到FIN包后向服务端发送一个ACK包,然后进入超时等待状态,服务端收到ACK包后立即关闭连接。
为什么要进入超时等待
因为要保证客户端收到ACK包,如果客户端发送ACK包后立即关闭连接,当ACK包在网络中丢失时会导致服务端一直处在等待关闭状态。
当客户端处于超时等待状态,如果服务端没有收到ACK包会再次向客户端发送FIN包,客户端会再次发送ACK包并刷新超时等待时间。