• TCP和UDP有啥区别?


    TCP
    全称: Transmission Control Protocol
    中文名: 传输控制协议
    解释: 是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。
    用途:TCP旨在适应支持多网络应用的分层协议层次结构。 连接到不同但互连的计算机通信
    网络的主计算机中的成对进程之间依靠TCP提供可靠的通信服务。TCP假设它可以从较低级别
    的协议获得简单的,可能不可靠的数据报服务。 原则上,TCP应该能够在从硬线连接到分组
    交换或电路交换网络的各种通信系统之上操作。
    使用TCP协议的应用层服务: HTTP(超文本传输协议),FTP(文本传输协议),SMTP(简单邮件传输协议),TELNET(TCP/IP终端仿真协议),POP3(邮局协议第三版)

    UDP
    全称: User Datagram Protocol
    中文名: 用户数据报协议
    解释: 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法。RFC 768描述了UDP。
    用途: 在选择UDP作为传输协议时必须要谨慎。在网络质量令人十分不满意的环境下,UDP协议数据包
    丢失会比较严重。但是由于UDP的特性:它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,
    所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,
    也不会对接收结果产生太大影响。比如我们聊天用的QQ就是使用的UDP协议。
    使用UDP协议的应用层服务: DHCP(动态主机配置协议),NTP(网络时间协议),BOOTP(引导协议),TFTP(简单文件传输协议)

    同时使用TCP和UDP协议的应用层服务: SOCKS(安全套接字协议),SLP(服务定位协议),MSN(微软网络服务),DNS(域名系统)

    TCP的三次握手四次挥手
    第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
    第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
    第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
    4次挥手
    1)客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),
    此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。
    2)服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。
    TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,
    客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。
    3)客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。
    4)服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,
    假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
    5)客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。
    注意此时TCP连接还没有释放,必须经过2∗∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。
    6)服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。

  • 相关阅读:
    C语言——深入理解指针——函数指针
    SharePoint
    nodejs安装及环境配置
    CI/CD | 大型企业与开发团队如何进行持续集成与持续发布
    大厂真题:【链表】大疆2023秋招-链表合并
    python下拉框选择测试
    【加密周报】经济衰退在加息气氛中蔓延 美联储“放手一搏”?盘点上周加密市场发生的重大事件
    C#控件开发错误解决记录
    C#-SQLite-使用教程笔记
    413 Request Entity Too Large
  • 原文地址:https://blog.csdn.net/weixin_42575811/article/details/127098254