Java面试之TCP/IP 您所在的位置:网站首页 ip报文flags Java面试之TCP/IP

Java面试之TCP/IP

2023-06-20 01:35| 来源: 网络整理| 查看: 265

0 分享至

用微信扫码二维码

分享至好友和朋友圈

TCP/IP(Transmission Control Protocol / Internet Protocol)中文译为传输控制协议/因特网互联协议,这个大家族里的其它知名协议还有HTTP、HTTPS、FTP、SMTP、UDP、ARP、PPP、IEEE 802.x等。TCP/IP是当前流行的网络传输协议框架,从严格意义上讲它是一个协议族,因为TCP、IP是其中最为核心的协议,所以就把该协议族称为TCP/IP。

TCP/IP是一组网络协议,它定义了在网络中进行数据传输和通信的规则和标准。TCP/IP协议族由两个主要的协议组成:传输控制协议(TCP)和Internet协议(IP)。

TCP(Transmission Control Protocol)是一种可靠的、面向连接的协议。它负责将数据拆分成小的数据包,并通过网络传输到目标主机。TCP确保数据的可靠性,通过确认、重传和流量控制等机制来保证数据的完整性和顺序性。

IP(Internet Protocol)是一种网络层协议,用于定义数据在网络中的传输方式。它负责将数据包从源主机发送到目标主机,通过IP地址标识主机和网络,并进行路由选择。IP协议是无连接的,不对数据进行可靠性保证,只负责将数据包传输到目标地址。

TCP/IP协议族还包括其他一些重要的协议,如网际控制报文协议(ICMP)、用户数据报协议(UDP)、互联网组管理协议(IGMP)等,它们共同构成了现代互联网的基础。

通过TCP/IP协议族,计算机可以在全球范围内进行通信和数据交换。它提供了一种通用的网络通信框架,使得不同的计算机和设备能够互相通信和交换数据。TCP/IP协议在互联网上得到广泛应用,支持各种应用程序和服务,如Web浏览器、电子邮件、文件传输等。

总结起来,TCP/IP是一种网络协议族,通过TCP和IP协议提供了可靠的、面向连接的数据传输和网络通信的功能。它是构建互联网的基础,支持各种应用程序和服务的通信。

可靠性体现在TCP协议通信双方的数据传输是稳定的,即便是在网络不好的情况下,TCP都能够保证数据传输到目标端。其可靠性主要体现在以下几个方面。

1.序列号和确认号机制

TCP发送端发送数据包的时候会选择一个seq序列号,接收端收到数据包后会检测数据包的完整性,如果检测通过会响应一个ack确认号表示收到了数据包。

2.超时重发机制

TCP发送端发送了数据包后会启动一个定时器,如果一定时间没有收到接受端的确认后,将会重新发送该数据包。

3.对乱序数据包重新排序

从IP网络层传输到TCP层的数据包可能会乱序,TCP层会对数据包重新排序再发给应用层。

4.丢弃重复数据

从IP网络层传输到TCP层的数据包可能会重复,TCP层会丢弃重复的数据包。

5.流量控制

TCP发送端和接收端都有一个固定大小的缓冲空间,为了防止发送端发送数据的速度太快导致接收端缓冲区溢出。发送端只能发送接收端可以接纳的数据。

TCP流量控制的实现基于滑动窗口协议。每个TCP连接都维护着一个滑动窗口,用于控制发送方发送数据的速率。

滑动窗口是一个可变大小的缓冲区,用于存储接收方可以接收的数据。

发送方可以根据接收方的通知,将滑动窗口大小调整为合适的大小,以控制发送数据的速率。

如果接收方无法接收更多的数据,它将发送一个通知给发送方,告诉发送方它当前的缓冲区已经满了。

发送方将停止发送数据,直到接收方再次发送通知,告诉发送方它已经处理了部分数据,可以接收更多数据为止。

6.拥塞控制

TCP可以通过拥塞控制机制来避免网络拥塞的发生,通过调整发送方的发送速率,以保证网络的稳定性和可靠性。

TCP拥塞控制主要涉及三个算法:慢启动、拥塞避免和快重传/快恢复。

慢启动算法是TCP在连接建立时使用的一种算法,它通过将拥塞窗口大小从1开始逐渐增加,

直到网络达到稳定状态,以此探测网络的拥塞情况,并尽可能快地将数据发送到接收端。

拥塞避免算法是TCP在慢启动算法之后使用的一种算法,它在拥塞窗口大小到达一定程度后,

将每个往返时间内增加的拥塞窗口大小降低到1,以避免出现网络拥塞。

快重传/快恢复算法是指当TCP接收方发现丢失了数据包时,不会立即请求发送方重新发送数据包,

而是立即向发送方发送一个重复确认报文,通知发送方重发丢失的数据包,并通过减小发送方拥塞窗口的大小来避免网络拥塞。

TCP的拥塞控制算法的具体应用场景包括网络负载较高的情况下,为避免网络拥塞,

通过限制发送方的发送速率来保证网络的稳定性和可靠性。

同时,TCP拥塞控制算法也可以用于限制用户对网络资源的占用,保证公平性和公正性。

面向连接是说数据传输之前,必须要建立一个连接,然后基于这个连接进行数据传输。

TCP采用了三次握手的方式来实现可靠的连接建立。

TCP三次握手创建连接示意图

开始时客户端和服务端都处于CLOSED状态,然后服务端开始监听某个端口,进入LISTENING状态。

第一次握手,客户端向服务端发送连接请求并携带同步序列号SYN。发送完毕后,客户端进入SYN_SENT状态。

第二次握手,服务端收到请求后,发送SYN和ACK,这里的SYN表示服务端的同步序列号,

ACK表示对前面收到请求的一个确认,表示告诉客户端,我收到了你的请求。发送完毕后,服务端进入SYN_RCVD状态。

第三次握手,客户端收到服务端的请求后,再次发送ACK,这个ACK是针对服务端连接的一个确认,

表示告诉服务端,我收到了你的请求。发送完毕后,客户端进入ESTABLISHED状态,

当服务端收到这个包后,页进入ESTABLISHED状态,至此,TCP三次握手完成可以开始数据传输。

为什么要三次握手:建立可靠的通信信道进行信息对等和防止超时。

1.通信双方都必须要维护一个序列号,去标记已经发送出去的数据包,哪些是已经被对方签收的。

2.通信双方必须要通过某种手段来实现一个可靠的数据传输通道,而三次通信是建立这样一个通道的最小值。

3.防止历史的重复连接初始化造成的混乱问题,两次握手端只能选择接受或者拒绝这个连接请求。

TCP是全双工通信,双方都能作为数据的发送发和接收方,但TCP连接会有断开的时候,TCP四次挥手(关闭一个连接)

TCP四次挥手断开连接示意图

开始时,由于客户端和服务端都处于连接状态,所以此时客户端和服务端都处于ESTABLISHED状态。

第一次挥手,客户端想要关闭连接,发送(FIN=1,seq=u)给服务端。发送完毕后,客户端进入FIN_WAIT_1状态。

第二次挥手,服务端收到客户端的FIN,发送(ACK=1,seq=v,ack=u+1)给客户端,

发送完毕后,服务端进入CLOSE_WAIT状态。客户端收到这个确认包之后,进入FIN_WAIT_2状态。

第三次挥手,服务端关闭与客户端的连接,主动发送(FIN=1,ACK=1,seq=w,ack=u+1)给客户端,

发送完毕后,服务端进入LAST_ACK状态,等待来自客户端的最后一个ACK。

第四次挥手,客户端收到服务端的关闭请求,再次发送(ACK=1,seq=u+1,ack=w+1)给服务端,

发送完毕后,进入TIME_WAIT状态,等待了某个固定时间(2MSL)之后,没有收到服务端的ACK,

认为服务端已经正常关闭连接,于是客户端自己也关闭连接,进入CLOSED状态。服务端收到这个确认包之后,关闭连接进入CLOSED状态。

为什么要四次挥手

TCP是全双工模式。双方的数据交换告诉双方都没有数据需要发送了。愉快的中断这次TCP连接。

为什么要等待2MSL(报文段最大生存时间)

1.保证TCP协议的全双工连接能够可靠关闭。

2.保证这次连接的重复数据段从网络中消失。

FIN_WAIT状态

TIME_WAIT:主动要求关闭的机器表示收到了对方的FIN报文,并发送了ACK报文,进入TIME_WAIT状态,等2MSL后即可进入到CLOSED状态。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

/阅读下一篇/ 返回网易首页 下载网易新闻客户端


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有