TCP/IP 协议 常见面试题1

1  TCP和UDP区别,应用场景

TCP:为应用层提供可靠的、面向连接的和基于流的服务。使用超时重传、数据确认等方式来确保数据包被正确地发送至目的端,因此服务是可靠的。使用TCP协议通信的双方必须先建立TCP连接,并在内核中为该连接维持一些必要的数据结构,比如连接的状态、读写缓冲区,以及诸多定时器等。当通信结束时,双方必须关闭连接以释放这些内核数据。TCP基于流。基于流的数据没有边界(长度)限制,它源源不断地从通信的一端流入另一端。发送端可以逐个地向数据流中写入数据,接收端也可以逐个地将它们读出。

缺点:因为TCP有确认机制、三次握手机制,这些也导致TCP容易被人利用,实现DOS、DDOS、CC等攻击

UDP:则与TCP想反,它为应用层提供不可靠、无连接和基于数据报的服务。“不可靠”意味着UDP协议无法保证数据从发送端正确地传送到目的端。如果数据在途中丢失,或者目的端通过数据校验发现数据错误而将其丢弃,则UDP协议只是简单地通知应用程序发送失败。因此使用UDP协议的应用程序通常要自己处理数据确认,超时重传等逻辑。UDP是无连接的,即通信双方不保持一个长久的联系,因此应用程序每次发送数据都要明确指定接收端的地址(IP地址等信息)。基于数据报的服务,是相对基于流的服务而言的。每个UDP数据报都有一个长度,接收端必须以该长度为最小单位将其所有内容依次读出,否则数据将被截断。

UDP优点:快比TCP稍安全

缺点:不可靠,不稳定,如果网络质量不好,很容易丢包。

什么时候该使用TCP: 当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。

在日常生活中,常见使用TCP协议的应用如下: 浏览器,用的HTTP FlashFXP,用的FTP Outlook,用的POP、SMTP Putty,用的Telnet、SSH QQ文件传输

什么时候使用UDP:当对网络通讯质量要求不高的时候,要求速度尽可能的快,这时就可以使用UDP。用UDP协议的应用如下: QQ语音 QQ视频 TFTP。

2 浏览器输入www.baidu.com后,网络过程

事件顺序:

(1) 浏览器获取输入的域名www.baidu.com

(2) 浏览器向DNS请求解析www.baidu.com的IP地址

(3) 域名系统DNS解析出百度服务器的IP地址 (详细介绍DNS)-通过网关出去

(4) 浏览器与该服务器建立TCP连接(默认端口号80)

(5) 浏览器发出HTTP请求,请求百度首页

(6) 服务器通过HTTP响应把首页文件发送给浏览器

(7) TCP连接释放

(8) 浏览器将首页文件进行解析,并将Web页显示给用户。

涉及到的协议:

(1) 应用层:HTTP(WWW访问协议),DNS(域名解析服务)

DNS解析域名为目的IP,通过IP找到服务器路径,客户端向服务器发起HTTP会话,然后通过运输层TCP协议封装数据包,在TCP协议基础上进行传输。

(2) 传输层:TCP(为HTTP提供可靠的数据传输),UDP(DNS使用UDP传输),HTTP会话会被分成报文段,添加源、目的端口;TCP协议进行主要工作。

(3)网络层:IP(IP数据数据包传输和路由选择),ICMP(提供网络传输过程中的差错检测),ARP(将本机的默认网关IP地址映射成物理MAC地址)为数据包选择路由,IP协议进行主要工作,相邻结点的可靠传输,ARP协议将IP地址转成MAC地址。

简单理解:   域名解析 --> 发起TCP的3次握手 --> 建立TCP连接后发起http请求 --> 服务器响应http请求,浏览器得到html代码 --> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) --> 浏览器对页面进行渲染呈现给用户。

3 三次握手和四次挥手过程

三次握手:

第一次握手:建立连接时,客户端发送SYN包到服务端,其中包含客户端的初始序号seq=x,并进入SYN_SENT(同步已发送)状态,等待服务器确认。(其中SYN=1,ACK=0,表示这是一个TCP连接请求数据报文;序号seq=x,表明数据传输数据时第一个数据字节的序号是X).

第二次握手:服务器收到请求后,必须确认客户的数据包。同时自己也发送一个SYN包,即SYN+ACK包,此时服务器进入SYN_RECV(同步以收到)状态。(其中确认报文段中,标识位SYN=1,ACK=1,表示这是一个TCP连接响应数据报文,并包含服务器的初始序号seq(服务器)=y,以及服务器对客户端初始序号的确认号ack(服务器)=seq(客户端)+1=x+1).

第三次握手:客户端收到服务器的SYN+ACK 包,向服务器发送一个序列号(seq=x+1),确认号为ack=y+1,此包发送完毕,客户端和服务器进入ESTAB_LISHED(TCP连接成功)状态,完成三次握手。

为啥三次握手:假设客户端请求建立连接,发给服务器SYN包等待服务器确认,服务器收到确认后,如果是两次握手,假设服务器给客户端在第二次握手时发送数据,数据从服务器发出,服务器任务连接已经建立,但在发送数据的过程中数据丢失,客户端认为连接没有建立,会进行重传。假设每一次发送的数据一直在丢失,客户端一直SYN,服务器就会产生多个无效连接,占用资源,这个时候服务器可能会挂掉。这就是SYN的洪水攻击

第三次握手是为了防止:如果客户端迟迟没有收到服务器返回确认报文,这时会放弃连接,重新启动一条连接请求,但问题是:服务器不知道客户端没有收到,所以他会收到两个连接,浪费连接开销。如果每次都是这样,就会浪费多个连接开销。

 

四次挥手:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值