最近刚看完TCP与UDP的相关知识,并进行整理了一下共大家讨论。有什么意见尽管提出,一起讨论。
TCP与UDP的介绍及应用
目录:
一:什么是TCP/IP?
二:TCP/IP整体构架概述。
三:TCP的定义及特点。
四:建立TCP连接的工作原理。
五:什么是面向连接?什么是面向无连接?
六:UDP的定义及其特点。
七:TCP端口及UDP端口介绍。
1.什么是软件的端口?
2.端口的主要类型:
3.关于端口映射问题:
八:TCP,UDP能否穿透NAT的问题。
1.什么是NAT?
2.NAT的作用:
3.TCP不能够穿透NAT,而UDP可以穿透NAT。
九:TCP,UDP的具体应用实例(通过QQ进行分析)。
1. 具体说明QQ如何实现通信;
2. 具体说明QQ怎样处理NAT;
3.简要说明两个用户每次建立QQ通信的模式;
十:关于QQ通信的几个问题
一:什么是TCP/IP?
TCP/IP(Transmission Control Protocol/Internet Protocol) 即传输控制协议/网间协议,是一组包括TCP协议和IP协议,UDP(User Datagram Protocol)协议、ICMP(Internet Control Message Protocol)协议和其他一些协议的协议组。
注解:该协议主要用于在主机间建立一个虚拟连接,以实现高可靠性的数据包交换。IP协议可以进行IP数据包的分割和组装,但是通过IP协议并不能清楚地了解到数据包是否顺利地发送给目标计算机。而使用TCP协议就不同了,在该协议传输模式中在将数据包成功发送给目标计算机后,TCP会要求发送一个确认;如果在某个时限内没有收到确认,那么TCP将重新发送数据包。另外,在传输的过程中,如果接收到无序、丢失以及被破坏的数据包,TCP还可以负责恢复。
二:TCP/IP整体构架概述:
TCP/IP协议并不完全符合OSI的七层参考模型,而是采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。这4层分别为:
应用层:应用程序间沟通的层,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。
传输层:在此层中,它提供了节点间的数据传送服务,如传输控制协议(TCP)、用户数据报协议(UDP)等,TCP和UDP给数据包加入传输数据并把它传输到下一层中,这一层负责传送数据,并且确定数据已被送达并接收。
互连网络层:负责提供基本的数据封包传送功能,让每一块数据包都能够到达目的主机(但不检查是否被正确接收),如网际协议(IP)。
网络接口层:对实际的网络媒体的管理,定义如何使用实际网络(如Ethernet、Serial Line等)来传送数据。
三:TCP的定义及特点:
TCP---传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。
四:建立TCP连接的工作原理:
一个TCP连接必须要经过三次“对话”才能建立起来,简单的介绍一下:
主机A向主机B发出连接请求数据包:“我想给你发数据,可以吗?”,这是第一次对话;
主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作)的数据包:“可以,你什么时候发?”,这是第二次对话;
主机A再发出一个数据包确认主机B的要求同步:“我现在就发,你接着吧!”,这是第三次对话。三次“对话”的目的是使数据包的发送和接收同步,经过三次“对话”之后,主机A才向主机B正式发送数据。
五:什么是面向连接?什么是面向无连接?
面向连接就是在正式通信前必须要与对方建立起连接。比如你给别人打电话,必须等线路接通了、对方拿起话筒才能相互通话。
面向无连接就是在正式通信前不必与对方先建立连接,不管对方状态就直接发送。比如发送手机短信:你在发短信的时候,只需要输入对方手机号就OK了。
六:UDP的定义及特点:
UDP---用户数据报协议,是一个简单的面向数据报的运输层协议。提供的是非面向连接的、不可靠的数据流传输。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。
举例:一个UDP的简单应用。
我们经常使用“ping”命令来测试两台主机之间TCP/IP通信是否正常,其实“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。
七:TCP端口及UDP端口介绍:
1.什么是软件领域的端口?
软件领域的端口一般指:网络中面向连接服务和无连接服务的通信协议端口,是一种抽象的软件结构,包括一些数据结构和I/O(基本输入输出)缓冲区。
2.端口的主要类型:
端口主要分为两种,一种是TCP端口,一种是UDP端口。计算机之间相互通信的时候,分为两种方式:一种是发送信息以后,可以确认信息是否到达,也就是有应答的方式,这种方式大多采用TCP协议;一种是发送以后就不管了,不去确认信息是否到达,这种方式大多采用UDP协议。对应这两种协议的服务提供的端口,也就分为TCP端口和UDP端口。
TCP/IP协议中的端口范围是从0 到65535比较常见的有:8080端口—WWW
端口:21 ----FTP 端口:23 ---Telnet 端口80---HTTP
3.关于端口映射问题:
内网的一台电脑要上因特网,就需要端口映射。端口映射分为动态和静态两种,动态端口映射其实也就是NAT网关的工作方式。(后面的实例中会具体应用) 静态端口映射:就是在NAT网关上开放一个固定的端口,然后设定此端口收到的数据要转发给内网哪个端口,不管有没有连接,这个映射关系都会一直存在。就可以让公网主动访问内网的一个电脑。
八:关于TCP,UDP能否穿透NAT问题:
1.什么是NAT?
NAT英文全称是“Network Address Translation”,中文意思是“网络地址转换”,它是一个IETF(Internet Engineering Task Force, Internet工程任务组)标准,允许一个整体机构以一个公用IP(Internet Protocol)地址出现在Internet上。顾名思义,它是一种把内部私有网络地址(IP地址)翻译成合法网络IP地址的技术。如图:
2.NAT的作用:
NAT就是在局域网内部网络中使用内部地址,而当内部节点要与外部网络进行通讯时,就在网关(可以理解为出口,打个比方就像院子的门一样)处,将内部地址替换成公用地址,从而在外部公网(internet)上正常使用,NAT可以使多台计算机共享Internet连接,这一功能很好地解决了公共IP地址紧缺的问题。通过这种方法,您可以只申请一个合法IP地址,就把整个局域网中的计算机接入Internet中。这时,NAT屏蔽了内部网络,所有内部网计算机对于公共网络来说是不可见的,而内部网计算机用户通常不会意识到NAT的存在。如图所示。这里提到的内部地址,是指在内部网络中分配给节点的私有IP地址,这个地址只能在内部网络中使用,不能被路由。NAT将这些无法在互联网上使用的保留IP地址翻译成可以在互联网上使用的合法IP地址。
3.TCP不能够穿透NAT,而UDP可以穿透NAT。
九:TCP,UDP的具体应用实例:(通过QQ聊天进行分析)
如图所示:有两台主机A,B分别位于两所不同学校的内部网,A B两台主机通过QQ进行相互聊天,视频,传输文件,在整个网络中是如何实现的呢?
1.北大内网中的电脑B要访问QQ,会向NAT网关(路由器)发送数据包,包头中包括对方(就是QQ)IP、端口和本机IP、端口,NAT网关会把本机IP、端口替换成自己的公网IP、一个未使用的端口,并且会记下这个映射关系,为以后转发数据包使用。
而此时飞洋学院的电脑A也正在访问QQ,想通过QQ与异地的B取得联系,这时QQ服务器会把B的映射数据传送到A的NAT网关那个未使用的端口,(通常路由器的一个端口会对应内网主机的许多端口)然后NAT网关会通过端口将数据转发给内网中的主机A,然后A就获得B的IP信息并与B取得联系(形成点对点通信)。当连接关闭时,NAT网关会释放分配给这条连接的端口,以便以后的连接可以继续使用。
2.具体说一下QQ怎样处理NAT的?
在处理NAT时,对于每一个内部IP,在请求时,都在会QQ服务器中留下一个有效的外部IP+Port 这个外部IP就是那个内网的服务器IP,而端口号则映射子网中的某一台机器。QQ服务器就通过那个IP来找到双方所在的服务器,再通过端口号来定位相应子网的计算机,从而实现双方通信的。
3.简要说明两个用户每次建立QQ通信的模式?
当用户登陆QQ时,用户需要首先与qq服务器进行连接进行登录,服务器会向客户返回一些信息,比如你的好有的在线情况以及ip的信息,然后客户可以与你所请求的朋友进行点对点连接,两者互相通信。如图所示:
S------C1
|
| C1每次想和C2通信,先向S递一个申请,然后S同意,把信息转交C2
C2 以后每次通信都这样
S------C1
|
| C1第一次想和C2通信,向S递一个申请,S同意,告诉C1,C2,然后
C2
S-----C1
| /
| / C1和C2之间建立了一条连接,可以直接通信,无需经过S.
C2
十:问题思考:
1.QQ传文件是用什么协议传输?UDP还是TCP?
2.在局域网内用QQ通信,(即在同一个NAT下)需要用到TCP协议吗?还是用UDP直连?
问题分析:
1.大家都知道TCP不能穿透NAT,而UDP可以穿透NAT和防火墙。(不过已经有研究者们通过大量的渠道去尝试TCP穿透NAT,依赖于NAT回复的大量TCP和ICMP包的顺序,终于有方法得以成功打通NAT。有兴趣的可以去看一个相关技术)
QQ传文件和视频TCP和UDP都在使用。从QQ的提示信息可以看到有TCP中转,UDP中转,UDP直连三种方式。TCP直连除非是能在NAT上开固定的端口映射(或者使用uPnp之类的自动开指定的端口映射),否则靠双发同时发起连接是不可能的(这个概率可能比彗星撞地球的概率还少)。当TCP可以连接时是用TCP,当位于不同的NAT后面时是通过应用层用UDP仿照TCP的模式进行运作,所以相对速度会慢。
2.局域网的QQ通信的话就不经过QQ服务器可以直接通过UDP进行直连通信,否则就要经过QQ服务器转发数据。但发现QQ都涉及了TCP和UDP两种方式,之所以这样好像是为了保证数据的完整性而使用了类似TCP的东西吧。