IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> TCP和UDP的区别、三次握手、四次挥手 -> 正文阅读

[网络协议]TCP和UDP的区别、三次握手、四次挥手

概念不同

TCP:传输控制协议(TCP,Transmission Control Protocol)。
UDP:用户数据报协议(UDP,User Datagram Protocol)。

  • TCP面向连接, 传输数据时,需先进行三次握手,建立连接。UDP无连接,传输数据时无需建立连接,即无需三次握手直接发送数据,挺野的……;
  • TCP通过确认和重传机制,提供可靠的服务。即通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达,而UDP不保证可靠传输,只是尽可能得交付;//所以当信道环境较差的情况下,尽量使用TCP传输,UDP丢包率很高。
  • TCP面向字节流,即将数据看成一连串无结构的字节流,像水一样没有界限。UDP是面向报文的,有结构性。UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等);//之前同事做过测试,当带宽降低的时候,TCP传送速率明显降低了,UDP基本没有变化。这也是可靠UDP传输存在的意义。
  • 每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信(组播使用UDP)
  • TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道。

TCP因为其有算法的存在,所以也会消耗更多的资源,UDP就是给IP+Port发就行了。一个形象的例子:TCP类似打电话,接通与否、说话清楚与否都可以实时反馈,而UDP类似发短信,对方有没有收到我们也无从知晓(可能关机了),但是能群发……。所以说没有绝对的好或者是坏,即使是可靠的UDP传输。

套接字不同

无论是TCP还是UDP最终都是使用socket创建连接的。
int socket(int family, int type, int protocol);
family:协议族。常用AF_INET,IPv4协议。
type:套接字类型。常用SOCK_STREAM(TCP协议)和SOCK_DGRAM(UDP协议)。
protocol:协议类型。常用IPPROTO_TCPIPPROTO_UDP

TCP创建socket:
socket_id = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

UDP创建socket:
socket_id = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
在这里插入图片描述

TCP 三次握手

三次握手只能由客户端发起。
在这里插入图片描述
//贴一段《UNIX网络编程-卷1》对三次握手的描述:

建立一个TCP连接时会发生下述情形。
(1) 服务器必须准备好接受外来的连接。这通常通过调用socket、bind和listen函数完成,称之为被动打开
(2) 客户通过调用connect发起主动打开。这导致客户TCP发送一个SYN(同步)分节,它告诉服务器客户将在(待建立的)连接中发送数据的初始化序列号。通常SYN分节不携带数据。其所在IP数据报只含由一个IP首部、一个TCP首部及可能有的TCP选项。
(3) 服务器必须确认(ACK)客户的SYN,同时自己也得发送一个SYN分节,它含有服务器将在同一连接中发送数据的初始化序列号。服务器在单个分节中发送SYN和对客户SYN的ACK(确认)。
(4) 客户必须确认服务器的SYN。

每个ACK都是单独和一个SYN的序列号对应的,如上图的J对应J+1,K对应K+1。

TCP四次挥手

四次挥手双方均可发起。
在这里插入图片描述
//贴一段《UNIX网络编程-卷1》对四次挥手的描述:

TCP建立一个连接需要3个分节,终止一个连接需要4个分节。
(1) 某个应用进程首先调用close,我们称该端执行主动关闭。该端的TCP于是发送一个FIN分节,表示数据发送完毕。
(2) 接收到这个FIN的对端执行被动关闭。这个FIN由TCP确认。它的接收也作为一个文件结束符传递给接收端应用进程,因为FIN的接收意味着接收端应用进程在相应连接上再无额外数据可以接收。//此时刻接收端可以发但是不再接收数据了
(3) 一段时间后,接收到这个文件结束符的应用进程将调用close关闭它的套接字。这导致它的TCP也发送一个FIN。//大家一起关闭
(4) 接收这个最终FIN的原发送端TCP确认这个FIN。

每个ACK都是单独和一个FIN的序列号对应的,如上图的M对应M+1,N对应N+1。

Q:怎么从《UNIX网络编程-卷1》直接贴一段话啊?
A:手打的。

文章第一段UDP和TCP不同的部分摘抄自腾讯面试:我倒在了网络基础知识,添加了一些自己的见解。描述有欠缺的地方可以评论指出,感谢。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-09-03 12:18:17  更:2021-09-03 12:18:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:48:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码