TCP和UDP的区别

TCP协议和UDP协议的对比:

TCP:  面向连接的  可靠的   字节流服务
UDP:     无连接      不可靠   数据报服务
TCP 服务器必须给每个连接分配资源
UDP 服务器不需要给每个连接分配资源

TCP概述
TCP和UDP详解

TCP 字节流服务

    数据没有发送与接收界限。send 的次数和 recv 的次数没有关系。一次 send 发送的数据在网络中通过几个 TCP 报文段传输是不确定的。如果一次 recv 没有将接受缓冲区中的数据读取完成,则剩余数据继续保存在接收缓冲区中。
在这里插入图片描述

UDP数据报服务:

    数据是一段一段的。发送方 sendto 的次数和接收方接收数据的次数是相等的。sendto 一次发送的数据由接收方一次 recvfrom 获取如果一次 recvtrom 没有将 UDP 报文段中的数据读取完成,则剩下的数据会被丢弃。
在这里插入图片描述

面向连接:

    在通讯双方传递数据之前,必须先建立连接,操作系统内核会为连接分配一定的资源
    在数据发送完之后,必须断开连接,释放连接资源,TCP 的服务器性能有待优化
    同步通讯双方的序号,使得对方都能知道接下来发送的数据的序号值。

连接的过程:

三次握手过程 客户端主动发起链接
入图片描述
不能两次握手:
       1、如果没有最后一个ACK,服务器会不断超时重传 ACK/SYN
       2、会浪费服务器的资源(SYN 溢出攻击,因为网络环境的影响,客户端的 SYN 会被重传多次)

三次握手的含义
       防止 SYN 溢出攻击,服务器端系统会为每一个链接分配资源,从而浪费服务器的资源
       服务器实现三次握手在 listen 函数之后,accept 之前,由系统内核来完成三次握手交互

listen (int listenfd, size_t size);
size+1: 指定内核维护的已完成三次握手,但没有被应用程序处理的连接的个数
accept: 从已完成三次握手的连接队列里获取一个连接。
    客户端在 connect 完成三次握手

断开连接过程,四次挥手过程
在这里插入图片描述
    TCP 的网络通讯是全双工通讯,主动方发送一个 FIN 只能完成主动方到被动方的传输信道关闭,AIP 被动方发送 FIN 关闭被动方到主动方的传输信道。
三次挥手也是可以:被动断开方一次性向主动断开方同时发送 ACK 和 FIN

TIME_WAIT 和 CLOSE_WAIT 的区别:
CLOSE_WAIT 处于被动断开方,TIME_WAIT 处于主动断开发

TIME_WAIT:程序关闭,但是端口号没有释放
    1、可靠的终止 tcp 链接
    2、保证迟来的数据能被识别并丢弃

    客户端和服务端断开链接时,客户端的发送缓冲区和服务器的接受缓冲区断开连接,服务器的发送缓冲区和客户端的接受缓冲区断开连接
四次挥手服务端和客户端同时断开链接
在这里插入图片描述

TCP可靠性

可靠传输的实现
滑动窗口、超时重传、拥塞控制
1、数据能够完全到达对端 (面向连接 32 位确认号 超时重传 滑动窗口(窗口大小有16 位窗口大小)拥塞控制 网络环境 )
2、到达的数据能不乱序、不重复(32 位序号)
3、数据不能出错 (16 位校验和 包括 TCP 头部以及数据部分 CRC)

TCP报头

在这里插入图片描述
TCP 报头最小 20 字节,最大 60 字节
源端口号:16 位长,发送方端口号
目的端口号:16 位长,接收端端口号
32 位序号: 保证数据不乱序,不重复。
32 位确认号: 确认机制,接受到的数据报文 +1 发送给发送方
4 位头部长度: 确定头部和携带的数据
6 位标记:URG:紧急指针有效。
                  ACK:确认报文段。ACK 为 1 表明确认号是合法的。如果 ACK 为 0,那么数据报不包含确认信息,确认字段被省略。
                 PSH:通知对方应用层程序尽快将数据处理,因为后续会有大量的数据到来。
                 RST:用于复位由于主机崩溃或其它原因而出现的错误的连接。还可以用于拒绝非法的数据报或拒绝连接请求。
                 SYN:用于建立连接。
                 FIN:用于释放连接。
16 位窗口大小:流量管控,接收通告窗口, 用于通知对方本端 TCP 接受缓冲区还能接收的数据长度,使得发达数据方能够控制发送数据的速度。
16 位校验和:对整个 TCP 报文段,即 TCP 头部和 TCP 数据进行校验和计算,并由目标端进行验证,保证数据不出错。
16 位紧急指针:它是一个偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。
选项:长度不定;但长度必须以字节记;选项的具体内容我们结合具体命令来看;

UDP报头

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值