网络的基本概念TCP, UDP, 单播(Unicast), 多播(多播)(Multicast)
章相当低级,但相当重要!
我们周围一切差点儿都依赖于把事情抽象成低等级,并在某一点把它详细化,在一些设计概念中。接口层十分清晰而且目标非常集中,应用程序不用考虑操作系统怎样工作,操作系统也不用考虑硬件怎样工作,OSI模型的第4层不须要考虑第三层怎样工作。所以我们仅仅须要集中精力在某一层,就当以下的层正常工作,但这样能行吗?假设你写一个应用,你最好知道OS是怎么样工作的。而且要考虑数据库怎样存储字符的,相同。一个好的操作系统必须要了解硬件是怎样工作的。假设你觉得TCP不须要考虑IP的实现那就搞错了。
所以,这里即使我们如果web应用和服务都执行在OSI第7层。如今我们住以下走走,到第4层(或更低层),看看那里在干什么。我们会讨论TCP和UDP的差别,什么是组播(multicast)。它怎样工作与怎样不工作。相信我。这些东西非常实用。
先说一下HTTP,我们如今正在用的直接与这个协议相关,HTTP和一些其他网络应用(SQL*NET, WCI搜索)一起工作在网络第7层,应用层,在第4层的TCP之上,那什么是TCP呢? TCP(传输控制协议)和UDP是internet的主要低层网络协议。它们都建立在还有一层IP(Internet协议)之上。IP比它们差一层,在第3层。所以要理解TCP,要先看下IP,然后再回头看看TCP在上面干什么。
IP:(Internet协议)
IP拥有把一个数据包从一个地方发送到还有一个地方的能力。通过提供一种”地方“或“设备”一个特定的地址(IP地址),并指定如何通过地址在设备之间移动数据包来实现这个协议。如今,IP和下一层的协议之间的差别在于,在第2层的设备总是确切知道如何给其他网络设备发送信息,(第2层为链路层。通常表示为以太网或WiFi)在第2层。设备不但知道如何发送数据到目的地(通常由MAC地址表示地址),同一时候也知道是否数据能不能到达目的地。(举个样例。以太网和WiFi简单地把整个数据包广播到整个网络。目的设备如果都在监听这个MAC地址,然后提取数据包。如果目的地不存在或者不在监听,以太网数据就无法到达。顺便提下,网络“嗅探器”正是利用这个广播机制来工作。用于调制解调器拨号连接的PPP协议能够发送不论什么东西到单个目标:你拨号的号码。
IP提供了发送数据到其他网络的途径。一个设备不须要知道详细路径就能够把一个东西到还有一个到还有一个网络,这就是“inter-net ”的由来:“在网络之间”。它通过指定一个路由规则,定义一个带有目标地址的数据包。这是主要的规则:假设目标在本地就直接发送(你知道目标在哪,由于它们在同一个网络),否则在一堆路由列表中找一个地址来发送。一个路由仅仅遵守一个协议。除非地址同一时候属于两个或多个不同的网络,这样的情况下会有不同的本地目的地址,也会产生一个更长的路由列表指向很多其他的未知地址。
眼下为止,IP除了能够发送单个数据包到单个地址外不能干其他不论什么事情,当然它能够接收从不论什么一个网络发过来的包(不像其他低级的协议),但仅此而已。
明显缺点例如以下:
- IP不提供发送、接收、出错等通知。
- IP不提供“port号”之类的标记来隔离发到目标IP地址的数据包。
- IP不提供双向通讯。
- IP不会用不论什么方式对多个包排序或分组。
最简单的比喻是IP好比邮政服务。你住邮箱里扔一张带地址的明信片,然后它就照着你写的地址寄过去了。寄到。或者没寄到,你并不知道。当明信片寄到时家时,你并不知道别的室友是不是读过它了。假设你想到一个回复,你的收件人不能在同一个卡片上写东西然后还给邮递员,他们要在自己的卡片上写字,贴上邮票,写上地址。最后自己寄出。
TCP:传输控制协议
尽管IP协议不提供这些功能,但TCP能够。
假设你先看一下IP不提供的那些特性,再看看邮递然后能够说:“嗯?当然能够做双向通信!
人们写信来来回回就像一直在对话一样”。或者,“你能够直接要求收信人或者邮局给你回一封信”。或者说:“算了笨蛋,你能够把明信片标上数字记号然后告诉收信人按顺序阅读,假设有丢失就告诉你”。好吧,你是对的,这就是TCP做的事情。它使用主要的IP(或邮政服务)并指定通过何种方式加入一些附加信息。以便实现这些特性。
所以,TCP真正解决的是怎样实如今多个IP设备间进行可靠的多次通信。
神马意思?这意味着你能够发送一系列消息(包)。基于一个选定的会话(port或连接),这个包会以相同的顺序接收,发送时不会丢包,相同也不会有反复。 它是这样做的:给所有的包都写一个port号。用来把其他连接和会话差别开。同一时候给每一个包一个序列号,接收方就能知道传输中是否有丢失。
之后,TCP指定接收方响应每一个接收的数据(并不强制每一个包都响应。能够简单的回复:“我收到第13456个字节之前的所有数据,或者“我收到845到13433之间的数据”),这样发送方就知道是否要又一次发送。最后。通信是双向的。不唯独应答。还能够让接收方不用指定地址就能够直接住回发信息,有点像给每一个包附加一个写好自己地址的回复信封。
能够看到,假设丢包或顺序不正确,TCP实际上须要做非常多工作。假设我们继续邮局理论。TCP就像一个私人助理,他帮你收集、分类邮件,排好序。获取并阅读。再回复回去。假设邮政服务超级可靠,TCP的任务就非常easy。仅仅须要做一个中间人把文件分发出去就好。假设邮政服务损失了很多员工。或者有非常多邮件要处理。TCP就要做非常多工作,把丢失的包发回去,跟踪并存储很多信息。
UDP:用户数据协议
UDP就比TCP简单多了, 它和IP做的一样,并加上port的概念。这样你就把消息发给还有一个有IP地址的接收者。它没有顺序或连接,或双向连接,也没有应答。 你应该会认为UDP不靠谱,由于你知道TCP是一个可靠的连接方案,可是实际上在同一个网段,或者在信号非常好的局域网,UDP实际上是非常可靠的。
如没有丢包并包的按顺序依次到达(这个差点儿是短局域网的常态)。并不须要又一次传输包。所以TCP的全部应答和等待仅仅会浪费时间。添加网络延时。对于能够包容丢包的应用(实时音频和视频)来说,即使网络不给力。UDP也一般是一个好方案。
它也经经常使用于小消息和通知。比方DHCP和DNS都使用UDP。
值得一提的是,Unix网络文件系统(NFS)在局域网使用的是UDP。
可能你认为一个文件系统应该须要一个可靠的TCP连接,可是NFS的实现者认为用UDP能够得到更好的性能。并建立一个专门的机制来保证可靠性。
顺便提一下。它被称作“用户数据报协议”是有原因的。由于它是由一帮系统管理员设计的。“数据报”是“包”的还有一个名字,“用户”没有什么实际意思,就和“你”一样。
就是说这个计算机程序和操作系统没什么关系。原因是低级的IP是写OS的人写,可是UDP提供了很多和数据报同样的功能,为“用户”程序(非OS)服务。
多播(Multicasting)
这里能够简化下TCP/IP/UDP的相关讨论,默认我们知道IP(UDP和TCP一样)能够把数据包在一个网络中发到还有一个设备。更准确点就是IP把数据包从一个IP地址发到还有一个IP地址。多播的决窍就是在同一时间把一个数据包发送到多个设备,能够把一个特定的IP地址指定为多播地址,并同一时候发送到多个设备。
IP多播首先要知道的是仅仅有UDP有多播,没有TCP多播这种东西,为什么呢?多播的重点是高效的把同一个包尽可能多的发送到不同的,甚至可能是未知的设备。可是TCP连接可能要求丢包重发或者延时或重组顺序。这些操作可能很消耗资源。不适于很多使用多播的应用场景。
(同一时候多播不知道发出的包是不是已经到达,这个也导致不能使用TCP)。
參考前面的知道,经常使用的非多播的UDP(TCP)消息叫做单播(unicast)。
以下我们须要知道多播常常没法通过路由发到还有一个网络。以下是部分原因:
- 多数多播包的TTL比較低: 全部的IP包都有一个“生存时间”(time-to-live),或者叫TTL。和DNS记录不一样,TTL指定一个包到达目的地之前跳过网络的最大次数。单播包通常被同意穿越30个网络(比方,被路由或”跳“过29个路由),穿过网络通常小于15次”跳越“,所以30的限制经经常使用于当网络配置的非常烂时把数据包杀掉。可是很多程序发多播时把TTL设为一个非常低的值,通常为0(这样消息不会离开自身的设备)。
- 设置为1表示仅仅能发到本地网络的计算机,设置为2 表示仅仅能穿过一个路由。非常少有应用想把多播发给整个校园网络的未知设备。更不会发给整个网络。
- 诸多路由都设置了非常高的TTL阈值:非常多网络路由器。特别是WAN路由和internet网关路由都有非常高的TTL阈值,这样它们就不会发送这些低TTL(如15)的多播包。这样能够防止多播从本地网络泄漏。
- 路由器一般配置成全然不发送多播,或仅仅发一些特定的地址,或配置成堵塞多播包。
UDP多播可能有点过于邪恶,可是它使用的次数可能远远超出你的估计。它不会用于网络视频站点比方YouTube。由于它须要当用户点播时再发送视频,而不是同一时候发给全部的用户,相同也不用于VoIP语音。它用于非常多发现和自己主动配置。如Skype, iTunes 和 uPnP,也偶尔用于WCI入口。
来自https://blogs.oracle.com/lmukadam/entry/tcp_udp_unicast_multicast_i_th
网络的基本概念TCP, UDP, 单播(Unicast), 多播(多播)(Multicast)的更多相关文章
- 异常处理与网络基础中的tcp,udp协议
# 异常处理: # 什么是异常?异常和错误的区别 # Error 语法错误 比较明显的错误 在编译代码阶段就能检测出来 # Iteration 异常 在执行代码的过程中引发的异常 # 异常发生之后的效 ...
- 网络传输层之TCP/UDP详解
一.运输层协议概述 从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层. 运输层的任务就是负责主机中两个进程之间的通信,其数据传输的单 ...
- 网络协议中HTTP,TCP,UDP,Socket,WebSocket的优缺点/区别
先说一下网络的层级:由下往上分为 物理层.数据链路层.网络层.传输层.会话层.表示层和应用层 1.TCP和UDP TCP:是面向连接的一种传输控制协议.属于传输层协议.TCP连接之后,客户端和服务器可 ...
- 【深入浅出Linux网络编程】 “实践 -- TCP & UDP”
通过上一篇博客的学习,你应该对基于epoll的事件触发机制有所掌握,并且通过阅读sio.c/sio.h应该也学会了如何封装epoll以及如何通过设计令epoll更加实用(用户回调,用户参数). 简单回 ...
- 网络编程之socket(TCP,UDP)
socket层 tcp协议和udp协议 1)Socket服务器编程 主要包括下面的几步: 1.打开socket 2.绑定到一个地址和端口 3.侦听进来的连接 4.接受连接 5.读写数据 (2)Sock ...
- TCP/UDP端口列表
http://zh.wikipedia.org/wiki/TCP/UDP%E7%AB%AF%E5%8F%A3%E5%88%97%E8%A1%A8 TCP/UDP端口列表 本条目可通过翻译外语维 ...
- TCP/UDP 常用端口列表
计算机之间依照互联网传输层TCP/IP协议不同的协议通信,都有不同的对应端口.所以,利用短信(datagram)的UDP,所采用的端口号码不一定和采用TCP的端口号码一样.以下为两种通信协议的端口列表 ...
- TCP/UDP端口列表(WIKIpedia)
计算机之间依照互联网传输层TCP/IP协议不同的协议通信,都有不同的对应端口.所以,利用短信(datagram)的UDP,所采用的端口号码不一定和采用TCP的端口号码一样.以下为两种通信协议的端口列表 ...
- [网络] SOCKET, TCP/UDP, HTTP, FTP
(一)TCP/UDP,SOCKET,HTTP,FTP简析 TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层: 网络层:IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议 传 ...
随机推荐
- for循环中一个不容小觑的问题
for(int i=1;i<=100;i++) 作为程序猿,我们很喜欢使用这种for循环. 可是,当中隐含着一个重要的问题. 过多的编程经历可能使我们的思维产生了一些误解,在上面的for循环中, ...
- pcie inbound、outbound及EP、RC间的互相訪问
Inbound:PCI域訪问存储器域 Outbound:存储器域訪问PCI域 RC訪问EP: RC存储器域->outbound->RC PCI域->EP PCI域->inbou ...
- css中换行的几种方式
1.white-space:normal; 这个只针对中文有效 2.word-break:break-all; 强制换行,针对中文,数字,英文等都有效: 3.word-wrap:break-wo ...
- js实时监听input中值的变化
$(function(){ $('#inputid').bind('input propertychange', function() { // input 中的值 var params = $(th ...
- CCNA CCNP CCIE所有实验名称完整版
实验1:通过Console端口访问Cisco路由器 实验2:通过Telnet访问Cisco路由器 实验3:配置终端服务器 实验4:通过浏览器访问路由器 实验5:模式切换.上下文帮助及查看有关信 ...
- 开源企业IM-免费企业即时通讯-ENTBOOST V2014.183 Windows版本号正式宣布
ENTBOOST,VERSION 2014.183 Windows(点击下载)版本号公布.主要添加PC端P2P(点对点)文件传输功能:公布安卓Android手机clientAPP 1.0版本号.公布苹 ...
- set、env、export差分
set:显示当前shell变量,用户变量包含当前用户 env:显示用户变量 export:显示当前导出成用户变量的shell变量 举例来说: root@kali:~# aaa=bbb ...
- Keepalived 配置和使用
keepalived主要用作RealServer的健康状态检查以及LoadBalance主机和BackUP主机之间failover的实现.keepalived主要目的在于,其自身启动一个服务,能够实现 ...
- [Windows Phone] 如何在 Windows Phone 应用程式制作市集搜寻
原文:[Windows Phone] 如何在 Windows Phone 应用程式制作市集搜寻 [说明] 本文说明如何在 Windows Phone 应用程式中,加入市集搜寻的功能,主要使用了 Mar ...
- 部署Win Server 2012十项注意
博文来自 http://server.zol.com.cn/351/3511746.html Windows Server 2012是微软公司在2012年推出的面向中小企业应用一款全新的服务器操作系统 ...