[译]TCP和UDP的区别
译者:华科小涛:http://www.cnblogs.com/hust-ghtao/
最近开始学习计算机网络的知识,找了些英文的资料,翻译过来,一是为了深入学习网络,也是为了锻炼自己看英文文档的能力。
原文链接:http://blog.pluralsight.com/networking-basics-tcp-udp-tcpip-osi-models,(如果侵权的话,大家告诉我哦)。
译文:
传输控制协议/互联网协议(TCP/IP)套件(suite翻译成套件有点奇怪啊!)是由美国国防部(DoD)发明的,旨在确保通信在任何情况下都能进行,在遭受恶意攻击时,数据完整性也能保证啊。
传说中的开放互联参考模型(OSI Model)是对网络协议设计的抽象描述,目的就是为了规范网络。
这篇文章,我会阐述DoD和OSI模型的区别,更进一步还会介绍DoD版TCP/IP模型的细节。我还会介绍DoD各层协议,当然重点会放在TCP和UDP。通过这篇文章,你会找到关于TCP/IP套件的干货哦。
如果你正在准备CCENT货CCNA(不知道是啥)的考试,或者你对网络很感兴趣,那就千万不要错过呀。记好安全带,have a good ride,(懂意思,不会翻译!)。
TCP/IP和OSI模型的比较
让我们从比较TCP/IP和OSI模型开始。TCP/IP模型是OSI模型的简化版,用四层取代OSI的七层。尽管存在结构上的差异,但两种模型有可互换的传输层和网络层,它们的操作也都是基于分组交换技术。下图就表明两种模型的不同之处:

(译者注:按照惯例呢,Application译成应用层,Host-to-Host传输层,Internet网络层,NetworkAccess链路层。)
- 应用层: 应用层负责表示、编码、和对话控制。所有这些问题集中起来在TCP/IP模型中就是一层,在OSI模型中是三层。
- 传输层: TCP/IP中的Host-to-Host 协议功能和OSI模型中的模型差不多,包括应用数据的分割,传输可靠性保证,流和错误控制。
- 网络层:TCP/IP中的网络层和OSI模型中的网络层提供相同的服务。主要目的就算是将数据包送到目的地,而且和所选路径无关。
- 链路层:链路层处理一切和网络媒介上的数据终端有关的物理问题。是OSI模型中DataLink和Physical概念的和。
下图显示了TCP/IP模型和TCP/IP协议族之间的关系:

传输层的网络协议
两个协议:传输控制协议(TCP)和用户数据报协议(UDP)是被设计用来传输数据报的。我们将着眼于它们的细节和与上层的交互。
1.传输控制协议(TCP)
TCP是面向连接的协议,在传输数据之前必须建立连接。TCP协议的数据单元叫做数据段,以段的形式接受和发送数据实体,这些段由一个固定20-byte头后面跟着一个变量大小数据字段组成。
TCP负责将字节流分解成数据段发送,并在另一端合并,重新发送任何可能丢失的数据并将数据段按正确的顺序组织。数据段大小由链路层技术决定的最大传送单元严格限制。(1500字节通常是以太网的最大有效载荷大小)。
下图就是TCP数据段的格式:

其中:
- Source Port and Destination Port 为源端口和目的端口,确定特定链接的两个端点。一个端口加上主机的IP地址就可以确定一个端点啦。端口用来和上层通信,还可以用来区分同一台电脑上不同的应用程序。
- The Sequence Number and Acknowledgment Number 指定字节流中的字节。The Sequence Number用来重新排序或重新发送丢失的数据段。The Acknowledgment number 被设定为预期的下一个段。
- Data offset or TCP header length 表明在TCP的头信息中有多少word(一个word 4 字节哦)。
- The Window field 表明在收到确认之前可以传输多少字节。
- The Checksum field 提供额外的可靠性和安全性。
- 用户数据就跟在头的后面。
让我们来看下抓包器是怎么捕获TCP数据包的,下图显示了一个TCP的请求信息。注意上面提到的字段:Source Port, Destination Port, Sequence number, Acknowledgement number, Window size and checksum.

用户数据报协议 (UDP)
UDP 协议包含的头部信息较少. 是因为有些数据类型不需要可靠的交付和额外的开销. 例如实时交通系统,为了确保实时传送数据,就没有采用纠错和重传机制。
UDP是一种无连接的协议。它的可靠性由应用层处理。它所在乎的就是尽可能快的传输数据。UDP数据段格式如下图所示:

Let’s see how a UDP segment is captured by Ethereal. Notice the small header size:

该用哪种协议呢?
要传输的数据的性质决定了要采用的协议. 如果信息要可靠、有顺序的、完整的传输,那就用TCP协议呗。如果数据对实时性要求很高,为了减少开销和处理,那就用UDP协议。
下面的表格简单总结了TCP和UDP的特点,将它们牢记于心,选择时就不用纠结了:

[译]TCP和UDP的区别的更多相关文章
- OSI参考模型及各层功能,TCP与UDP的区别
OSI参考模型:ISO/IEC 7498标准定义了网络互联的7层结构模型,即开放系统互连参考模型. OSI参考模型定义了开放系统的层次结构.层次之间的相互关系,以及各层所包括的可能的服务.OSI的服务 ...
- TCP与UDP的区别
TCP与UDP的区别 TCP面向连接:UDP是无连接,即发送数据之前不需要建立连接 TCP提供可靠的服务,TCP连接传送的数据,无差错.不丢失.不重复,且按顺序到达:UDP尽最大努力交付,即不保证可靠 ...
- TCP和UDP的区别(转)
TCP协议与UDP协议的区别 首先咱们弄清楚,TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UDP协议的区别,我觉得这是没有从本质上弄清楚网络通信! ...
- TCP与UDP的区别(转)
源:http://blog.chinaunix.net/uid-20745340-id-1878774.html 参考:TCP协议与UDP协议的区别 TCP与UDP的区别 中国移动.中国联通推行的GP ...
- 【基础网络】TCP与UDP 的区别
TCP协议与UDP协议的区别 首先咱们弄清楚,TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UDP协议的区别,我觉得这是没有从本质上弄清楚网络通信! ...
- TCP和UDP的区别(Socket)
TCP和UDP区别 TCP和UDP编程区别 TCP编程的服务器端一般步骤是: 1.创建一个socket,用函数socket(): 2.设置socket属性,用函数setsockopt(); * 可 ...
- 【转】TCP/IP协议中TCP和UDP的区别
TCP协议与UDP协议的区别 首先咱们弄清楚,TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UDP协议的区别,我觉得这是没有从本质上弄清楚网络通信! ...
- 知其所以然~tcp和udp的区别
TCP UDP TCP与UDP基本区别 基于连接与无连接 TCP要求系统资源较多,UDP较少: UDP程序结构较简单 流模式(TCP)与数据报模式(UDP); TCP保证数据正确性,UDP可能丢包 T ...
- 一文搞懂TCP与UDP的区别
摘要:计算机网络基础 引言 网络协议是每个前端工程师都必须要掌握的知识,TCP/IP 中有两个具有代表性的传输层协议,分别是 TCP 和 UDP,本文将介绍下这两者以及它们之间的区别. 一.TCP/I ...
随机推荐
- php定时自动执行 需启动第一次
1 2 3 4 5 6 7 8 9 10 11 12 <? ignore_user_abort(); //即使Client断开(如关掉浏览器),PHP脚本也可以继续执行. set_time_li ...
- [LeetCode]题解(python):022-Generate Parentheses
题目来源: https://leetcode.com/problems/generate-parentheses/ 题意分析: 题目输入一个整型n,输出n对小括号配对的所有可能性.比如说,如果输入3, ...
- TextView textSize 文字大小
TextView,很常见的控件.关于文字大小的方法有: android.widget.TextView#getTextSize 返回值的单位是PX /** * @return the size (i ...
- STL front() ,back()和begin(),end()区别
首先看看vector里面的: reference front(); const_reference front() const; queue里面的: value_type& front(); ...
- boost库学习随记六:使用同步定时器、异步定时器、bind、成员函数回调处理、多线程的同步处理示例等
一.使用同步定时器 这个示例程序通过展示如何在一个定时器执行一个阻塞等待. //makefile #-------------------------------------------------- ...
- 数学之路(3)-机器学习(3)-机器学习算法-SVM[9]
我们应用SVM的非线性分类功能对手写数字进行识别,我们在这应用poly做为非线性核 svm = mlpy.LibSvm(svm_type='c_svc', kernel_type='poly',gam ...
- 小猪猪C++笔记基础篇(六)参数传递、函数重载、函数指针、调试帮助
小猪猪C++笔记基础篇(六) ————参数传递.函数重载.函数指针.调试帮助 关键词:参数传递.函数重载.函数指针.调试帮助 因为一些事情以及自己的懒惰,大概有一个星期没有继续读书了,已经不行了,赶紧 ...
- [GDUT 决赛]--GCD,LCM——我是好人(数论)
Description 众所周知,我是好人!所以不会出太难的题,题意很简单 给你两个数n和m,问你有多少对正整数对最大公约数是n,最小公倍数是m最后友情提供解题代码(我真是太好人了) void sol ...
- 基于Sql Server 2008的分布式数据库的实践(三)
原文 基于Sql Server 2008的分布式数据库的实践(三) 配置PHP 1.打开PHP配置文件,找到extension=php_mssql.dll,将前面的注释符号去掉 2.找到mssql.s ...
- oschina程序开发
程序开发 102脚本编程语言 36地图相关 7Epub电子图书工具 109UI组件库 16代码生成工具 25SVG开发包 17推荐引擎 3指纹识别 23拼音转换工具包 24蓝牙开发 295GUI开发框 ...