秋招总结(二)-计算机网络归纳

1.网络编程一般步骤:

  • TCP:
  1. 服务端: socket->bind->listen->accept->recv/send->close
  2. 客户端:socket->connect->send/recv->close
  • UDP:
  1. 服务端:socket->bind->recvfrom/sendto->close
  2. 客户端:socket->sendto/recvfrom->close

 

2.TCP和UDP的区别:

  • TCP面向连接(三次握手),通信前需要先建立连接;UDP面向无连接,通信前不需要连接。
  • TCP通过序号、重传、流量控制、拥塞控制实现可靠传输;UDP不保障可靠传输,尽最大努力交付。
  • TCP面向字节流传输,因此可以被分割并在接收端重组;UDP面向数据报传输。

 

3.三次握手

  • 第一次:主动发起连接方发送含SYN位,并初始化一个 同步序列号=  S 的包到接收方 (发送方->SYN_SEND)
  • 第二次:接收方收到后,发送一个含ACK位和SYN位,确认号 = S+1, 并且初始化一个 同步序列号 = P的包到发送方 (接收方->SYN_RECV)
  • 第三次:发送方收到后,发送一个含ACK位,确认号 = P+1 的包到接收方。 此时连接建立; (发送方->ESTABLISH, 接收方->ESTABLISH)

 

4.四次挥手

  • 第一次:主动关闭方发送含FIN位,并初始化一个 同步序列号 = Q 的包到被动方。 (主动方->FIN_WAIT_1)
  • 第二次:被动方收到后,发送一个含ACK位且确认号 = Q+1 的包到主动方。 (被动方->CLOSE_WAIT, 主动方->FIN_WAIT_2)
  • 第三次:被动方发送含FIN位,并初始化一个同步序列号 = P 的包到主动方。 (被动方->LAST_ACK, 主动方->TIME_WAIT)
  • 第四次:主动方发送最后一个含ACK位且 确认号 = P+1 的包到被动方。 (被动方->CLOSED)

 

5.为什么握手是三次,挥手是四次

  • 三次握手原因:为了应对网络延迟中已失效的连接请求报文段问题

例子:若client发送的一个连接请求报文段并没有丢失,而是在某个网络节点滞留了。本来这是一个已失效的报文段,而server误以为是一个新的连接请求。于是向client发送确认报文段。若不是“三次握手”,那么只要server发出确认,新的连接就建立了。但实际上client并没有发出连接请求,因此不会理睬server的确认,也不会发送数据。这样就造成了资源的浪费。“三次握手”就能避免这种情况,server没有接到client的确认,连接就没建立。

 

  • 四次挥手原因:

因为TCP连接是全双工的网络协议,允许同时通信的双方同时进行数据的收发,同样也允许收发两个方向的连接被独立关闭,以避免client数据发送完毕,向server发送FIN关闭连接,而server还有发送到client的数据没有发送完毕的情况。所以关闭TCP连接需要进行四次握手,每次关闭一个方向上的连接需要FIN和ACK两次握手。

之所以不是三次而是四次主要是因为被动关闭方将"对主动关闭报文的确认"和"关闭连接"两个操作分两次进行。以便将缓冲中剩下的数据从输出流发送给主动关闭方。

 

6.TCP连接状态

  • LISTEN:服务器处于监听状态。

  • SYN_SEND:客户端socket执行CONNECT连接,发送SYN包,进入此状态。

  • SYN_RECV:服务端收到SYN包并发送服务端SYN包,进入此状态。

  • ESTABLISH:表示连接建立。客户端发送了最后一个ACK包后进入此状态,服务端接收到ACK包后进入此状态。

  • FIN_WAIT_1:终止连接的一方(通常是客户机)发送了FIN报文后进入。等待对方FIN。

  • CLOSE_WAIT:(假设服务器)接收到客户机FIN包之后等待关闭的阶段。在接收到对方的FIN包之后,自然是需要立即回复ACK包的,表示已经知道断开请求。但是本方是否立即断开连接(发送FIN包)取决于是否还有数据需要发送给客户端,若有,则在发送FIN包之前均为此状态。

  • FIN_WAIT_2:此时是半连接状态,即有一方要求关闭连接,等待另一方关闭。客户端接收到服务器的ACK包,但并没有立即接收到服务端的FIN包,进入FIN_WAIT_2状态。

  • LAST_ACK:服务端发动最后的FIN包,等待最后的客户端ACK响应,进入此状态。

  • TIME_WAIT&#x

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值