zoukankan      html  css  js  c++  java
  • UDP TCP

    UDP(用户数据报协议)

    1.无连接的

    2.尽最大努力交付,即不保证可靠交付

    3.面向报文的

    4.UDP没有拥塞控制

    5.支持一对一、一对多、多对一和多对多的交互通信;

    6.首部开销小(只有四个字段:源端口、目的端口、长度、检验和)。

    TCP(传输控制协议)

    1.面向连接的,使用TCP协议前建立连接,传送数据完毕后,释放已经建立的TCP连接

    2.每一条TCP连接只能有两个端点(两个套接字),每一条TCP连接只能是点对点的

    3.TCP提供可靠交付的服务

    4.TCP提供全双工通信

    5.面向字节流的

    UDP和TCP都是传输层协议

    三次握手:

     

    第一次:不能携带数据,消耗掉一个序号,TCP客户进程进入SYN-SENT(同步已发送)状态 SYN(同步位)
    第二次:不能携带数据,消耗掉一个序号,TCP服务器进程进入SYN-RCVD(同步收到)状态
    第三步:可以携带数据,不携带数据则不消耗序号。TCP连接已经建立。
    为什么A还要发送一次确认呢? 防止已失效的连接请求突然传给了B,因而产生错误。

    四次挥手:

     

    第一步:A把连接释放报文段首部(控制位FIN=1,序号seq=u),等于前面已传送过的数据最后一个字节的序号加1。A进入FIN-WAIT-1(终止状态一)。FIN报文段即使不携带数据,也消耗掉一个序号

    第二步:B收到连接释放后发出确认,然后B进入CLOSE-WAIT(关闭等待)状态。此时TCP连接处于半关闭(half-close)状态,即A不用发送数据了,但B可以发送数据并且A仍要接受。A接收到B的确认后,就进入到FIN-WAIT(终止等待2)状态

    第三步:B没有要向A发送的数据,B把连接释放报文段首部(控制位FIN=1,序号seq=w,ack=u + 1,ACK=1),然后B进入LAST-ACK(最后确认)状态,等待A的确认。

    第四步:A收到B的释放报文段后,对此发出确认。然后进入TIME-WAIT(时间等待)状态。此时TCP连接还没有释放掉。

    为什么A在TIME-WAIT状态必须等待2MSL(最长报文段寿命)的时间?

    1.为了保证A发送的最后一个ACK报文段能够到达B。ACK可能丢失,导致B在LAST-ACK状态收不到确认。这时B超时重传FIN+ACK报文段,而A就能在2MSL时间内收到重传的FIN+ACK报文段,接着A重传一次确认,重启2MSL计时器。

    2.防止上一次的“已失效的连接请求报文段”出现在本连接中。因为经过2MSL的时间,上一次连接产生的报文段都从网络中消失

    参考资料:计算机网络[第7版][谢希仁]

  • 相关阅读:
    HashMap实现原理
    框架-Spring
    团队开发介绍
    返回一个环状整数数组中最大子数组之和
    软件工程学习体会
    书店促销
    寻找小水王
    梦断代码阅读笔记3
    找水王
    梦断代码阅读笔记2
  • 原文地址:https://www.cnblogs.com/yanhowever/p/11103008.html
Copyright © 2011-2022 走看看