TCP/IP基础问题
1.你了解TCP/IP里的三次握手,四次挥手机制吗?
TCP/IP协议是传输层一个面向连接的安全可靠的一个传输协议。三次握手的机制是为了保证一个安全可靠的连接。第一次握手由客户端发起,客户端会向服务端发送一个报文,SYN=1,服务端收到后会给客户端发送一个确认消息包。 ACk位为1,以上两次握手后,客户端是知道了所有的信息,但对于服务端是不够的。第三次握手是当服务端收到来自客户端发送的确认消息报文。三次握手后,双方都知道了彼此既能给对方发消息,也可以收到彼此的消息。
四次挥手也是由客户端发起,客户端会发送一个报文,FIN=1,当服务端收到这个报文后,我就知道了客户端想和我断开连接,但是此时服务端不一定做好准备,因为当客户端发起断开连接的消息时,服务端可能有未发送完的 消息,对于服务端,需要一次消息确认。服务端发完消息确认包后,可能通过片刻还会发送一个断开连接的报文,FIN=1, 当这个报文发给客户端后,客户端同样需要给服务端发一个确认消息,于是连接被中断。需要注意的是,TCP断开 连接时的发起方,可以是客户端,也可以是服务端。
2. 为什么不是四次握手?
两种情况。第一种是把服务器的确认ACK和SYN分两次发送,好比:
服务器:我在 服务器:你在吗?
一次能干完的是,分两次,浪费资源。
第二种是客户端再次发送消息,也是同理。
3. 那为什么四次挥手不改成三次挥手?
四次挥手里,服务器的FIN和ACK是分开发的,三次握手里的ACK和SYN是一起发的。如果服务器还有消息没有发送,一起完成会出现错误。
4.什么是SYN Flood攻击?
客户端大量伪造IP发送SYN包,服务端回复ACK和SYN去到一个未知的地址,大量连接会导致服务器处于SYN_RCVD状态,如果连接队列满了,会出现无法正常处理请求的情况。
5.什么是Retransmission time out?
TCP具有超时重传机制,间隔一段时间后没有收到数据包的回复时,重传这个数据包。
如何解决? 往返时延(Round-Trip Time, RTT),取平均值,比如第一次RTT为500ms,第二次为800ms,那么第三次发送时为650ms. 经典算法引入了Smoother RTT,每测量一次RTT, 就对SRTT做一次更新。
6.简单说一下什么是流量控制?
对于发送方和接收方而言,TCP需要把发送的数据放到发送缓存区,将接收的数据放到接收缓存区。流量控制是在通过接收缓存区的大小,控制发送端的发送,如果缓存区满了,就不能发送了。 为了控制发送速率,接收端会告知客户端自己的接收窗口(rwnd),也就是接收缓冲区中空闲的地方。
7. TCP和UDP的区别。
TCP面向连接,可靠,基于字节流的传输层协议。 UDP面向无连接的传输层协议。
TCP可靠就体现在精准记录哪些数据发送和接收,保证按序到达。TCP可控制,根据具体情况调整自己的行为。但是有可能耗时长。