如果面试官问你,你了解TCP/IP的协议吗,你知道TCP/IP 和UDP/IP的差异吗?我想你可以这么回答
首先,简单描述
- tcp/ip是一种可靠的网络通信协议,它定义了主机之间通过网络传输数据的标准
- tcp/ip分层模型有五层,每一层都有各自的协议,用于通讯。tcp和udp处于传输层,ip处于网络层
其次,三次握手协议
为什么说,tcp/ip是可靠的传输协议呢,因为主机之间通讯会经过3次握手,建立稳定链接后,才开始传输数据
- 第一次握手:客户端向服务器端发起链接请求,会发送SYN=1,seq=j(随机数)到服务端。此时客户端处于SYN_SEND状态。
- 第二次握手:服务器端收到客户端的请求后,通过SYN=1知道客户端想要建立链接,这个时候,服务器端会发送SYN=1,ACK=1,ack=j+1,seq=k(随机数)给客户端。此时,服务器端处于SYN_RCVD状态。
- 第三次握手:客户端收到服务器发送的消息后,确认ack=j+1没问题,发送ACK=1,ack=k+1。服务器端收到后,确认ack=k+1没问题,客户端与服务器端连接建立成功,都处于ESTABLISHED状态,可以传输数据了。
扩展,syn攻击
当客户端发送链接请求与客户端第一次握手后,server处于SYN_RCVD状态,在server收到client返回的ack之前,server一直处于半连接的状态。SYN攻击就是Client在短时间内伪造大量不存在的IP地址,并向server不断地发送SYN包,server回复确认包,并等待Client的确认,由于源地址是不存在的,因此,server需要不断重发直至超时。这些伪造的SYN包将占用未连接队列,导致正常的SYN请求因为队列满而被丢弃,从而引起网络堵塞甚至系统瘫痪。
(tips1:未连接队列:服务器维护一个未连接队列,该队列为每个客户端的SYN包开设一个条目
tips2:syn攻击检测命令:#netstat -nap | grep SYN_RECV)
最后,四次挥手协议
四次挥手协议用于终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。
由于TCP连接是全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN