Java面试之TCP/IP

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状态。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,635评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,628评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,971评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,986评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,006评论 6 394
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,784评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,475评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,364评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,860评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,008评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,152评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,829评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,490评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,035评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,428评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,127评论 2 356

推荐阅读更多精彩内容