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与UDP详解

面试TCP协议的意义

  • 从面试官的角度:可以快速考察候选人对基础知识的掌握程度,以及候选人对待技术的之前所有然的态度。
  • 从求职者的角度:即使工作内容中没有直接使用到TCP协议,但在遇到网络故障,调试和分析问题时,熟悉TCP显得十分重要,要不然抓包都看不懂。
  • 从学习的角度,我们可以学习TCP的设计理念,比如TCP重传,拥塞控制,以及如何在性能和原理之间做权衡和取舍,举一反三,将这些原理细节应用到我们平时的软件设计上,也是一种思维上的学习成长。

UDP与TCP

相同点,都是建立在OSI七层模型中的第四层-------传输层(Transport)程序之间的数据传输

不同之处:

  • UDP:基于非连接
  • TCP:基于连接

UDP基于非连接:

例如写信:对方是否接收、内容是否完整、顺序是否正确 -------------这些都不能得到及时的信息反馈

TCP基于连接:

例如打电话:电话接通、互相通话、结束挂断-----------------每个环节你都可以得到及时的信息反馈
在这里插入图片描述

三次握手过程:

在这里插入图片描述

为什么是三次握手,而不是两次

服务端回复了SYN+ACK包就建立连接,这是防止已失效的请求报文突然又传到服务器引起错误

当客户端向服务端发送一个连接请求SYN,由于网络某个节点异常产生滞留,第一次发送的SYN没有到达服务器,

客户端为了建立连接会重新发送一个SYN包,服务端返回SYN+ACK包建立连接,此时第一包被阻塞的数据突然恢复,服务端接收到了SYN包并返回了SYN+ACK包,此时服务端就会认为是两个连接请求,而客户端只承认是一个请求,这就造成了服务端与客户端的两个状态不一致。

在这里插入图片描述

三次握手的目的是:在不可靠的网络信道上建立可靠的连接。

四次挥手过程:

在这里插入图片描述

  1. TCP 为什么要三次握手和四次挥手?

    三次握手是为了确认双方的收发能力都没有问题,四次挥手是确保数据都发送完了才结束

  2. TCP握手的目的有哪些?

    确认双方的收发能力都没有问题,初始化序列号,确认窗口大小即 MSS 等信息

  3. 为什么 TCP 第二次握手的 SYN 和 ACK 要合并成一次?

    分开两次发送,浪费资源

  4. TCP三次握手过程,有什么状态,状态机如何变化?

    客户端主动向服务端握手:

    • 一开始客户端为 CLOSED 状态,服务端为 LISTEN 状态
    • 首先客户端发送 SYN 报文,将 seq 置为 x,此时客户端状态转为 SYN_SENT
    • 服务端收到后 SYN 抱文后返回 SYN+ACK 报文,将 seq 置为 y,ack 置为 x+1,此时服务器状态转为 SYN_RCVD
    • 客户端收到 SYN+ACK报文,此时客户端已经知道双方的收发都没有问题,但为了让服务端知道故返回 ACK 报文,将 ack 置为
    • y+1,此时客户端状态为 ESTABLISHED,并可以发送数据
    • 服务端收到 ACK报文,此时服务端已经知道双方的收发都没有问题,此时服务端状态为 ESTABLISHED
    • 至此连接建立成功
      在这里插入图片描述
  5. SYN Flood 的原理?有哪些防范的方法?

    客户端发送三次握手的第一个 SYN 报文后收到服务器的报文却不回应,从而导致服务器的半开资源浪费直到超时释放

    可以使用 SYN Cookie,即通过将源目地址及 IP 地址和端口号哈希为序列号,将返回的 ACK-1 得到原来的序列号判断是否正确,直到连接建立才分配资源

  6. 三次握手可以携带数据吗

    第一次、第二次握手不可以携带数据,而第三次握手是可以携带数据的。

    我们可以思考一个问题,假如第一次握手可以携带数据的话,如果有人要恶意攻击服务器,那他每次都在第一次握手中的 SYN 报文中放入大量的数据,疯狂着重复发 SYN 报文,这会让服务器花费大量的内存空间来缓存这些报文,这样服务器就更容易被攻击了。

    对于第三次握手,此时客户端已经处于连接状态,他已经知道服务器的接收、发送能力是正常的了,所以可以携带数据是情理之中。

TCP UDP HTTP 三者的关系

原文连接:http://t.csdn.cn/lgj1v

TCP/IP是个协议组,可分为四个层次:网络接口层、网络层、传输层和应用层。

在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。

在传输层中有TCP协议与UDP协议。

在应用层有HTTP、FTP、TELNET、SMTP、DNS等协议。

TCP 传送控制协议(Transmission Control Protocol):

TCP是传输层的一个协议,基于IP协议,用来传输类似HTTP的信息。如果把IP协议类比为一个“公路”的话,那TCP协议可以看成是在公路上行驶的“卡车”。TCP协议是面向连接的协议,通过三次握手机制,尽量保证连接的可靠性。tcp的链接需要进行三次握手,释放连接需要四次挥手。

UDP 用户数据报协议 (User Datagram Protocol) :

UDP也是传输层的一个协议。但是与TCP不同的是,UDP不是面向连接的,并不保证传输的可靠性,没有TCP的建立连接的三次握手机制,对于传输效率上面有了提升。

个人理解:

这个就比较简单粗暴了,A要给B传数据,然后就直接传了。

HTTP 超文本传输协议(HyperText Transfer Protocal):

HTTP是在应用层的一个协议,本身就是一个协议,是从Web服务器传输超文本到本地浏览器的传输协议。
  HTTP协议基于请求\响应模型的,并且是基于TCP协议的。

HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。

个人理解:

一个协议,是从Web服务器传输超文本到本地浏览器的传输协议。
  HTTP协议基于请求\响应模型的,并且是基于TCP协议的。

HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。

个人理解:

应用层的协议,支持服务器和web浏览器进行交互,响应结束后请求对象和响应请求对象立刻被销毁。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-09-04 01:45:01  更:2022-09-04 01:47:46 
 
开发: 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:31:26-

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