[TOC]
## TCP報文請求頭部


## UDP報文請求頭部

1. 源端口號,目的端口號:發送端和接收端的端口號
2. 長度:UDP用戶數據報的長度,最小值是8字節(只有首部)
3. 校驗和:檢測UDP用戶數據報在傳輸中是否出錯,出錯就丟棄
## TCP和UDP有啥區別?
\*\* UDP 的主要特點\*\*
* UDP 是`無連接的`,即發送數據之前不需要建立連接(發送數據結束時也沒有連接可釋放),減少了開銷和發送數據之前的時延
* UDP 使用`盡最大努力交付`,即不保證可靠交付,主機不需要維持復雜的連接狀態表
* UDP 是`面向報文`的,發送方的 UDP 對應用程序交下來的報文,在添加首部后就向下交付 IP 層。UDP 對應用層交下來的報文,既不合并,也不拆分,而是`保留這些報文的邊界`
* UDP`沒有擁塞控制`,網絡出現的擁塞不會使源主機的發送速率降低。這對某些實時應用是很重要的
* UDP 支持一對一、一對多、多對一和多對多的交互通信
* UDP 的`首部開銷小`,只有8個字節,比 TCP 的20個字節的首部要短
\*\* TCP 的主要特點\*\*
* TCP 是`面向連接的運輸層協議`。應用程序在使用 TCP 協議之前,必須先建立 TCP 連接。在傳送數據完畢后,必須釋放已經建立的 TCP 連接
* 每一條 TCP 連接只能有兩個`端點`,每一條 TCP 連接只能是`點對點`的(一對一)
* TCP 提供`可靠交付`的服務。通過 TCP 連接傳送的數據,無差錯、不丟失、不重復,并且按序到達
* TCP 提供`全雙工通信`。TCP 允許通信雙方的應用進程在任何時候都能發送數據。TCP 連接的兩端都設有發送緩存和接受緩存,用來臨時存放雙向通信的數據
* `面向字節流`。TCP 中的“流”指的是`流入到進程或從進程流出的字節序列`
| 對比項 | UDP | TCP |
| --- | --- | --- |
| 連接性 | 無連接 | 面向連接 |
| 可靠性 | 不可靠 | 可靠 |
| 報文 | 面向報文-數據報模式 | 面向字節流-流模式 |
| 雙工性 | 一對一、一對多、多對一、多對多 | 全雙工 |
| 流量控制 | 無 | 有(滑動窗口) |
| 擁塞控制 | 無 | 有(慢開始、擁塞避免、快重傳、快恢復) |
| 傳輸速度 | 快 | 慢 |
| 資源要求 | 較少 | 較多 |
| 首部開銷 | 8字節 | 20字節 |
| 數據順序 | 不保證 | 保證 |
## UDP、TCP適用場景
UDP 適用場景
面向數據報方式、網絡數據大多為短消息、擁有大量 Client、對數據安全性無特殊要求、網絡負擔非常重,但對響應速度要求高
TCP 適用場景
文件傳輸(FTP HTTP 對數據準確性要求較高,速度可以相對慢)
發送或接收郵件(POP IMAP SMTP 對數據準確性要求高,非緊急應用)
遠程登錄(telnet SSH 對數據準確性有要求,有連接的概念)
- 消息隊列
- 為什么要用消息隊列
- 各種消息隊列產品的對比
- 消息隊列的優缺點
- 如何保證消息隊列的高可用
- 如何保證消息不丟失
- 如何保證消息不會重復消費?如何保證消息的冪等性?
- 如何保證消息消費的順序性?
- 基于MQ的分布式事務實現
- Beanstalk
- PHP
- 函數
- 基礎
- 基礎函數題
- OOP思想及原則
- MVC生命周期
- PHP7.X新特性
- PHP8新特性
- PHP垃圾回收機制
- php-fpm相關
- 高級
- 設計模式
- 排序算法
- 正則
- OOP代碼基礎
- PHP運行原理
- zavl
- 網絡協議new
- 一面
- TCP和UDP
- 常見狀態碼和代表的意義以及解決方式
- 網絡分層和各層有啥協議
- TCP
- http
- 二面
- TCP2
- DNS
- Mysql
- 鎖
- 索引
- 事務
- 高可用?高并發?集群?
- 其他
- 主從復制
- 主從復制數據延遲
- SQL的語?分類
- mysqlQuestions
- Redis
- redis-question
- redis為什么那么快
- redis的優缺點
- redis的數據類型和使用場景
- redis的數據持久化
- 過期策略和淘汰機制
- 緩存穿透、緩存擊穿、緩存雪崩
- redis的事務
- redis的主從復制
- redis集群架構的理解
- redis的事件模型
- redis的數據類型、編碼、數據結構
- Redis連接時的connect與pconnect的區別是什么?
- redis的分布式鎖
- 緩存一致性問題
- redis變慢的原因
- 集群情況下,節點較少時數據分布不均勻怎么辦?
- redis 和 memcached 的區別?
- 基本算法
- MysqlNew
- 索引new
- 事務new
- 鎖new
- 日志new
- 主從復制new
- 樹結構
- mysql其他問題
- 刪除
- 主從配置
- 五種IO模型
- Kafka
- Nginx
- trait
- genergtor 生成器
- 如何實現手機掃碼登錄功能
- laravel框架的生命周期