餐前小料,简单思考一下:
什么是TCP/IP协议?
为什么要了解TCP/IP协议?
为什么需要TCP/IP协议?
什么是TCP/IP协议?
百度百科如是回答:
TCP/IP(transmission control protocol/internet protocol,传输控制协议/网际协议)是指是指在多个不同网络见实现信息传输的协议簇。TCP/IP协议不仅仅指TCP和·IP两个协议,而是指一个由FTP,SMTP,TCP,UDP,IP等协议构成的协议簇,只是因为在TCP/IP协议中这两最具代表性,所以称作TCP/IP协议。
说人话版本:TCP/IP链接互联网,它是一个标准。TCP/IP只是一个链接协议的名称,这个协议包含了其他协议。所见不一定所得,还有其他内涵。
为什么要了解TCP/IP协议?
1,找工作面试会问。
2,你是互联网工作者,你需要知道互联网连接的标准,这是你的专业基础知识。
为什么需要TCP/IP协议?
芝士问答答案:
在以太网协议中规定,同一局域网中的一台主机要和另一台主机进行直接通信,必须要知道目标主机的MAC地址。而在TCP/IP协议栈中,网络层和传输层只关心目标主机的ip地址。这就导致在以太网中使用IP协议时,数据链路层的以太网中使用IP协议时,数据链路层的以太网协议接到上层IP协议提供的数据中,只包含目的主机的IP地址。于是需要一种方法,根据目的主机的IP地址,获得MAC地址,这就是ARP协议要做的事情。所谓地址解析就是主机在发送帧前将目标IP地址转换成MAC的过程。
说人话版本:
若想在局域网中传输数据就需要主机的MAC地址,而MAC地址需要由IP知道。所以没有TCP/IP互联网的数据就没法传输。TCP/IP是如今互联网通信的基础。
面试常问题目:
(问题及答案来源于CSDN,但稍稍补充一点)
一,简述TCP的三次握手和四次挥手
SYN:请求建立连接,FIN:请求断开连接,ACK:确认是否有效,seq:序列号,ack:确认号
1)三次握手
1.客户端向服务端发送一个SYN=1(请求建立连接),并生成一个序列号seq=j。
2.服务端接收到SYN=1后,给客户端发送一个SYN=1与ACK=1;并将ACK置为j+1;同时生成一个序列号seq=k。
3.客户端接收到会检查ACK是否为j+1与ACK是否为1,如果是,则会给服务端发送一个ACK=1与与ACK=k+1,以及自己的序列号seq=j=1;服务端接收到会检查ACK是否为1与ACK是否为k+1,如果是则代表建立成功,两者可以传递数据。
![](https://i-blog.csdnimg.cn/blog_migrate/23ccfa92c3192b444265c0dd7bd37dc5.jpeg)
三次握手简图
2)四次挥手
1.客户端向服务器发送FIN=1(请求关闭连接),并生成一个序列号seq=x。
2.服务端接收FIN后,向客户端发送ACK=1,ack=x+1,并生成序列号seq=y(客户端无数据发送,但服务器需发送完最后的数据)。
3.服务器处理完所有数据后,向客户端发送FIN=1与ACK=1,ack=z+1,并生成序列号z,表示服务端现在可以断开连接。
4.客户端收到服务器的数据包之后,会向服务端发送ACK=1,seq=x=1,ack=z+1(需要等待2MSL后才可以断开连接)
![](https://i-blog.csdnimg.cn/blog_migrate/0cfedb9cd32166e9f3a2556cfa06fce5.jpeg)
四次挥手简图
其实简单来说TCP/IP协议也就是:
(来自小破站热评)
在吗?
在
有空吗?
有
我有个问题想问
问吧
......
二、为什么是三次握手而不是两次握手?
因为如果客户端第一次发送的SYN报文因为网络问题而迟迟没有到达服务端,此时客户端会因为超时而重新发送一个新的SYN报文,此时上一个SYN报文在客户端就会失效,如果这里只采用两次握手,会因为客户端第二次发送SYN后,第一次发送的SYN又成功到达服务端,这时就会建立两个连接,产生问题。
三、为什么连接的时候是三次握手,关闭的时候却是四次握手?
因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。
四、为什么需要经过2MSL(报文段在网络中最大生存时间)才能返回到CLOSE状态?
是为了给最后一次发送的ACK报文成功到达服务端预留时间,因为如果因为网络阻塞最后一次ACK未能及时到达服务端,服务端会以为客户端为收到上一次发送的FIN报文,则服务端会重新发送FIN报文,而这是客户端已经断开连接了,这时就是产生错乱的问题。
五、TCP与UDP的区别
UDP适合广播发送,效率高但是不可靠。
TCP适合两个对象间传递数据,可靠性高但是效率低。