TCP/IP面试题(持续更新)

No.1 TCP/IP基础
(这些知识点都可以参考:http://www.cnblogs.com/newwy/p/3234536.html

No.2 常见面试题
TCP与UDP的区别:
①TCP协议是有连接的,有连接的意思是开始传输实际数据之前TCP的客户端和服务器端必须通过三次握手建立连接,会话结束之后通过四次挥手结束连接。而UDP是无连接的
②TCP协议保证数据按序发送,按序到达,提供超时重传来保证可靠性,但是UDP不保证按序到达,甚至不保证到达,只是努力交付,即便是按序发送的序列,也不保证按序送到。
③TCP有流量控制和拥塞控制,而UDP没有,所以UDP及时网络拥堵客户端的发送速率也不会有影响
④TCP协议所需资源多,TCP首部需20个字节(不算可选项),UDP首部字段只需8个字节。
⑤TCP只支持一对一通信,而UDP支持一对一,一对多,多对多通信
⑥TCP是面向字节流,可靠的服务,UDP是面向报文,不可靠的服务
⑦TCP注重数据安全性,UDP数据传输快,因为不需要连接等待,少了许多操作,但是其安全性却一般
请详细介绍一下TCP协议建立连接和终止连接的过程?
建立一个TCP连接时,会发生下述情形:

1、服务器端必须做好准备接受外来的连接。这通常通过 socket(), bind(), listen() 三个函数来完成的。我们称之为 被动打开(passive open).

2、客户端通过调用connect发起主动打开(active open)。这导致客户端TCP发送SYN同步分节。它告诉服务器客户端在(待建立的)连接中发送的数据的初始化序列号。通用SYN分节不携带数据,
3、服务器必须确认(ACK) 客户端的SYN,同时自己也得发送一个SYN分节,它含有服务器将在统一连接中发送的数据的初始化序号。服务器在单个分节中发送SYN和对客户端SYN的ACK确认。
4、客户端必须确认服务器的SYN。


这里写图片描述

建立连接:三次握手

TCP连接的终止:
1、某个应用程序首先调用close,主动关闭(active close) 该端的TCP于是发送一个FIN分节,表示数据发送完毕。
2、接收到这个FIN的对端执行被动关闭(passive close)。这个FIN是TCP确认。它的接收也作为一个文件结束符(end of file) 传递给接收端的应用程序(放在排队等候应用进程接收的任何其他数据之后),因为FIN的接收意味着接收端应用程序在相应连接上再无额外数据可以接收。
3、一段时间以后,接收到这个文件结束符的应用进程将调用close关闭它的套接字。这导致它的TCP也发送一个FIN。
4、接收这个最终FIN的原发送端TCP(即执行主动关闭的一端)确认这个FIN

这里写图片描述

关闭连接:四次挥手

三次握手建立连接时,发送方再次发送确认的必要性?
采用三次握手是为了防止失效的连接请求报文段突然又传送到B,而产生错误。失效的连接请求报文段:主机A发出的连接请求没有得到主机B的确认,于是过了一段时间,主机A又向主机B发送新的连接请求,且建立成功,完成数据传输。考虑到这一种情况,主机A第一次发送的连接请求并没有丢失,而是因为网络节点长时间滞留导致延迟到达主机B,主机B以为是主机A的新连接请求,于是主机B发送了确认请求给A,而A并不会理会B的这个确认请求,主机B就会一直在等待主机A发送数据,导致了主机B的资源浪费。

四次挥手释放连接时,等待2MSL的意义?
第一,为了保证A发送的最有一个ACK报文段能够到达B。这个ACK报文段有可能丢失,因而使处在LAST-ACK状态的B收不到对已发送的FIN和ACK报文段的确认。B会超时重传这个FIN和ACK报文段,而A就能在2MSL时间内收到这个重传的ACK+FIN报文段,接着A重传一次确认。
第二,就是防止上面提到的已失效的连接请求报文段出现在本连接中,A在发送完最有一个ACK报文段后,再经过2MSL,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值