计算机网络基本知识整理

本基本知识整理及代码源于牛客网C++面试宝典导读,

  网址https://www.nowcoder.com/tutorial/93/e1b14ab2b40a4ef98d9e55830eb48d66

  TCP

  建立连接和断开连接过程:

  建立连接:

  三次握手:

  1.客户端将标志位SYN置为1,随机产生一个值标志位seq=i,将该数据包发送给服务器,客户端进入SYN_SENT状态,等待服务器确认。

  2.服务器收到数据包后由SYN=1知道客户端请求建立连接,服务器将SYN和ACK都置为1,ack=i+1,随机产生seq=j,并将数据包发送给客户端,进入SYN_RCVD状态。

  3.客户端收到确认后,检查ack=i+1,ACK=1,如果正确将ACK置1,ack=j+1,将数据包发送给服务器,服务器检查ack=j+1,ACK=1,如果正确则建立连接。

  为什么要三次握手:

  防止客户端已失效的连接请求传到B,产生错误。

  例如:客户端发送第一个请求,超时后再次发送请求,最后有两个请求到达服务器,如果没有三次握手,则会建立两个连接,而只有一个连接有效,另一个连接则会占用服务器资源。如果采用三次握手,服务器收不到第二个请求确认,则不会建立第二个连接。

  断开连接:

  四次挥手:

  TCP连接时全双工的,因此每个方向都要单独关闭。

  1.客户端发送FIN报文,停止发送数据,进入FIN_WAIT_1状态,此时客户端还可以接受数据。

  2.服务器收到FIN报文后,发送ACK给客户端,服务器进入CLOSE_WAIT状态,客户端收到后进入FIN_WAIT_2状态。

  3.当服务器没有数据要发送时,发送FIN报文,服务器进入LAST-ACK状态,等待客户端确认。

  4.客户端收到FIN报文后,发送ACK报文,客户端进入TIME_WAIT状态,等待2MSL(报文最大生存时间),然后关闭连接。

猜你喜欢

转载自www.cnblogs.com/wshr007/p/11455909.html