百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

图解TCP/UDP原理(tcp,udp)

nanshan 2025-03-20 17:07 11 浏览 0 评论

引言:TCP UDP在OSI的七层模型,属于传输层,在通信行业,在软件开发行业,都是必须熟知的,那我们怎么去了解这两个呢。

TCP和UDP

TCP和UDP是传输层的两个重要的协议

TCP(Transmission Control Protocol) 传输控制协议

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

TCP的主要特点:

  1. 面向连接
  2. 每一条TCP连接只能是点对点的(一对一)
  3. 提供可靠交付的服务
  4. 提供全双工通信
  5. 面向字节流

UDP的主要特点:

  1. 无连接
  2. 尽最大努力交付
  3. 面向报文
  4. 无拥塞控制
  5. 支持一对一、一对多、多对一和多对多的交互通信
  6. 首部开销小(只有4个字段:源端口、目的端口、长度、检验和)

TCP进行拥塞控制的算法有4种

慢开始(slow-start)、拥塞避免(congestion avoidance)、快重传(fast retransmit)、快恢复(fast recovery)

TCP 传送的数据单位协议是 TCP 报文段(segment)。

UDP 传送的数据单位协议是 UDP 报文或用户数据报。

TCP 不提供广播或多播服务

UDP的首部格式

  • 源端口:2个字节
  • 目的端口:2个字节
  • 长度:2个字节
  • 检验和:2个字节

什么是端口

硬件端口与软件端口

在协议栈层间的抽象的协议端口是软件端口。

路由器或交换机上的端口是硬件端口。

硬件端口是不同硬件设备进行交互的接口,

而软件端口是应用层的各种协议进程与运输实体进行层间交互的一种地址。

两个计算机中的进程要互相通信,不仅必须知道对方的 IP 地址(为了找到对方的计算机),

而且还要知道对方的端口号(为了找到对方计算机中的应用进程)。

服务器端使用的端口号

熟知端口,数值一般为 0~1023。

登记端口号,数值为 1024~49151,为没有熟知端口号的应用程序使用的。使用这个范围的端口号必须在 IANA 登记,以防止重复。

客户端使用的端口号

又称为短暂端口号,数值为 49152~65535,留给客户进程选择暂时使用。

常见熟知端口:

FTP(File Transfer Protocol)文件传输协议 :21

TELNET远程终端协议:23

SMTP(Simple Mail Transfer Protocol)简单邮件传送协议:25

DNS(Domain Name System)域名系统:53

TFTP(Trivial File Transfer Protocol)简单文件传送协议:69

HTTP(HyperText Transfer Protocol)超文本传送协议:80

SNMP(Simple Network Management)简单网络管理协议:161

SNMP(trap):162

TCP UDP的通信方式

虽然在 UDP 之间的通信要用到其端口号,但由于 UDP 的通信是无连接的,因此不需要使用套接字。

TCP 连接的端点不是主机,不是主机的IP 地址,不是应用进程,也不是运输层的协议端口。TCP 连接的端点叫做套接字 (socket) 或插口。

每一条 TCP 连接唯一地被通信两端的两个端点(即两个套接字)所确定。

TCP 连接 ::= {socket1, socket2} = {(IP1: port1),(IP2: port2)}

可靠传输的工作原理:

  1. 停止等待协议
  2. 连续ARQ协议

1)“停止等待”

就是每发送完一个分组就停止发送,等待对方的确认。在收到确认后再发送下一个分组。

出现差错的情况:

在接收方 B 会出现两种情况:

B 接收 M1 时检测出了差错,就丢弃 M1,其他什么也不做(不通知 A 收到有差错的分组)。M1 在传输过程中丢失了,这时 B 当然什么都不知道,也什么都不做。在这两种情况下,B 都不会发送任何信息。

如何保证 B 正确收到了 M1 呢?

解决方法:超时重传

A 为每一个已发送的分组都设置了一个超时计时器。

A 只要在超时计时器到期之前收到了相应的确认,就撤销该超时计时器,继续发送下一个分组 M2 。

自动重传请求 ARQ (Automatic Repeat reQuest)。意思是重传的请求是自动进行的,接收方不需要请求发送方重传某个出错的分组。

2) 连续ARQ协议:

发送方维持的发送窗口,它的意义是:位于发送窗口内的分组都可连续发送出去,而不需要等待对方的确认。这样,信道利用率就提高了。

连续 ARQ 协议规定,发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置。

TCP运输连接建立:

TCP 是面向连接的协议。

运输连接有三个阶段:

  1. 连接建立
  2. 数据传送
  3. 连接释放

TCP 建立连接的过程叫做三报文握手

A 的 TCP 向 B 发出连接请求报文段,其首部中的同步位 SYN = 1,并选择序号 seq = x,表明传送数据时的第一个数据字节的序号是 x。
B 的 TCP 收到连接请求报文段后,如同意,则 发回确认。
B 在确认报文段中应使 SYN = 1,使 ACK = 1,其确认号ack = x + 1,自己选择的序号 seq = y。
A 收到此报文段后向 B 给出确认,其 ACK = 1, 确认号 ack = y +1。
A 的 TCP 通知上层应用进程,连接已经建立。
B 的 TCP 收到主机 A 的确认后,也通知其上层应用进程:TCP 连接已经建立。

数据传输结束后,通信的双方都可释放连接。

TCP 连接释放过程是四报文握手。

数据传输结束后,通信的双方都可释放连接。
 现在 A 的应用进程先向其 TCP 发出连接释放报文段,并停止再发送数据,主动关闭 TCP 连接。
 A 把连接释放报文段首部的 FIN = 1,其序号 seq = u,等待 B 的确认。
B 发出确认,确认号 ack = u +1,而这个报文段自己的序号 seq = v。
TCP 服务器进程通知高层应用进程。
从 A 到 B 这个方向的连接就释放了,TCP 连接处于半关闭状态。B 若发送数据,A 仍要接收。
若 B 已经没有要向 A 发送的数据, 其应用进程就通知 TCP 释放连接。

面试题:Tomcat 、Nginx 、Apache的区别?各自的优点是什么?

原创2019-05-28 18:27·老王谈运维

Tomcat 、Nginx 、Apache 的区别? 各自的优点是什么? 什么场景下用合适?

Apache

Apache HTTP服务器是一个模块化的服务器,可以运行在几乎所有广泛使用的计算机平台上。其属于应用服务器。Apache支持支持模块多,性能稳定,Apache本身是静态解析,适合静态HTML、图片等,但可以通过扩展脚本、模块等支持动态页面等。

Apache相对于Tomcat的优点:

服务器来说处理静态文件是它的优势,速度快。Apache是静态解析,适合静态HTML、图片等。

Apache 相对于 Nginx 的优点:

apache的 rewrite 比nginx 的强大;支持动态页面;支持的模块多,基本涵盖所有应用;性能稳定。

缺点:配置相对复杂,自身不支持动态页面。

Tomcat:

Tomcat是应用(Java)服务器,它只是一个Servlet(JSP也翻译成Servlet)容器,可以认为是Apache的扩展,但是可以独立于Apache运行。

缺点:可以说Tomcat 只能用做java服务器

优点:动态解析容器,处理动态请求,是编译JSP/Servlet的容器。

Nginx

Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器。

nginx相对于apache的优点:

轻量级,同样起web服务,比apache占用更少的内存及资源;抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能;高度模块化的设计,编写模块相对简单;提供负载均衡

缺点Nginx 只适合静态和反向代理。

应用场景:

  • 反向代理
  • 负载均衡
  • HTTP服务器(包含动静分离)
  • 正向代理

三者之间的区别:

1)Nginx和tomcat的区别

nginx常用做静态内容服务和代理服务器,直接外来请求转发给后面的应用服务器(tomcat,Django等),tomcat更多用来做一个应用容器,让java web app泡在里面的东西。

注意:nginx只是把请求做了分发,不做处理!!!

2)nginx和Apache的区别

Apache是同步多进程模型,一个连接对应一个进程,而nginx是异步的,多个连接(万级别)可以对应一个进程。

Nginx轻量级,抗并发,处理静态文件好Apache超稳定,对PHP支持比较检单,nginx需要配合其他后端用,处理动态请求有优势,建议使用前端nginx抗并发,后端apache集群,配合起来。

应用场景分析:

Tomcat结合Apache、Nginx实现高性能的web服务器

Tomcat虽然是一个servlet和jsp容器,但是它也是一个轻量级的web服务器。它既可以处理动态内容,也可以处理静态内容。但是,tomcat的最大优势在于处理动态请求,处理静态内容的能力不如apache和nginx,我们可以利用nginx的高并发,低消耗的特点与tomcat一起使用。

通常情况下,tomcat与nginx、Apache结合使用,nginx、apache既可以提供web服务,也可以转发动态请求至tomcat服务器上。通常nginx、apache只提供代理的功能,也就是转发请求至tomcat服务器上,而对于静态内容的响应,则由前端负载均衡器来转发至专门的静态服务器上进行处理。其架构类似于如下图:

相关推荐

轻量级分析利器再升级:解读 DuckDB 1.3.0 新特性

DuckDB团队近日正式发布了最新版本——DuckDB1.3.0,代号“Ossivalis”。此次版本以金眼鸭的远古祖先BucephalaOssivalis命名,象征项目在演化和成长过...

C++跨平台编译的终极奥义:用Docker把环境差异按在地上摩擦

"代码在本地跑得飞起,一上服务器就coredump?"——每个C++程序员都经历过的《编译器的复仇》事件!大家好,我是Henry,废话少说,今天来简单谈一下跨平台编译的那些事儿,...

全网最全-Version Script以及__asm__((".symver xxx"))使用总结

首先提醒一点,一切的前提建立在你的名字必须要mangling,不然无论你写的versionscript还是__asm__都不会起任何效果VersionScript简单用法:这是一个典型例子,这个例...

Ubuntu 25.04 Beta发布:Linux 6.14内核

IT之家3月28日消息,Canonical昨日(3月27日)放出了Beta版Ubuntu25.04系统镜像,代号“PluckyPuffin”,稳定版预估将于2025年...

不同平台CRT的区别?什么是UCRT?如何看libc源代码?

若文章对您有帮助,欢迎关注程序员小迷。助您在编程路上越走越好!CRT运行时库C标准规定例如输入输出函数、字符串函数、内存操作等接口,一般采用C运行时库实现。微软的CRT微软有两套CRT,早期的MS...

信创力量,中兴绽放——中兴新支点桌面操作系统安装与使用全攻略

原文链接:「链接」Hello,大家好啊,今天给大家带来一篇中兴新支点桌面操作系统安装使用的文章,欢迎大家分享点赞,点个在看和关注吧!中兴新支点桌面操作系统是一款基于Linux内核、面向政企和信创环...

Linux下安装常用软件都有哪些?做了一个汇总列表,你看还缺啥?

1.安装列表MySQL5.7.11Java1.8ApacheMaven3.6+tomcat8.5gitRedisNginxpythondocker2.安装mysql1.拷贝mysql安装文件到...

一篇文章解决Linux系统安全问题排查,另配实操环境

实操地址:https://www.skillup.host/1/linux/safe/command.md#Linux安全检查排查指南##1.系统账户安全检查###1.1检查异常账户``...

程序员必备的学习笔记《TCP/IP详解(一)》

为什么会有TCP/IP协议在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别。就好像圣经中上帝打乱了各地人的口音,让他们无法合作一样...

《Linux常用命令》(linux的常用命令总结)

一、文件与目录操作1.目录导航pwd:显示当前工作目录路径示例:pwd关键词:当前路径、工作目录cd:切换目录示例:cd/home/user#切换到绝对路径cd..#...

Kubernetes 教程之跟着官方文档从零搭建 K8S

前言本文将带领读者一起,参照者Kubernetes官方文档,对其安装部署进行讲解.Kubernetes更新迭代很快,书上、网上等教程可能并不能适用于新版本,但官方文档能.阅读这篇文章你...

电脑网卡坏了怎么修复(电脑网卡坏了怎么修复win7系统)

当电脑网卡出现故障时,无论是有线网络还是无线网络,都可能无法正常连接。下面从软件、硬件等方面,分步骤为你介绍排查与修复的解决方案。一、初步排查:锁定问题源头检查网络环境将手机、平板等其他设备连接至同一...

如何查询电脑/手机的物理地址(如何找手机的物理地址)

一、要查询电脑的物理地址(也称为MAC地址),可以按照以下步骤进行操作:1.打开命令提示符(Windows)或终端(Mac):-在Windows上,点击“开始”按钮,搜索“命令提示符”,然后点击打...

IPv4 无网络访问权限全流程解决方案

当设备出现IPv4无网络访问权限问题时,多由网络配置错误、连接故障或服务异常导致。以下提供系统化的排查步骤与解决方案,帮助用户快速定位并修复问题。一、基础故障快速检查1.物理连接确认有线网络:检...

Python教程(十九):文件操作(python操作文件夹)

昨天,我们学习了列表推导式,掌握了Python中最优雅的数据处理方式。今天,我们将学习文件操作—Python中读写文件的基础技能。文件操作是编程中的核心技能,无论是读取配置文件、保存用户数据,还是...

取消回复欢迎 发表评论: