【面试向】详解TCP/IP协议

餐前小料,简单思考一下:

  1. 什么是TCP/IP协议?

  1. 为什么要了解TCP/IP协议?

  1. 为什么需要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,如果是则代表建立成功,两者可以传递数据。

三次握手简图

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后才可以断开连接)

四次挥手简图

其实简单来说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适合两个对象间传递数据可靠性高但是效率低

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值