TCP协议详解及实战解析【精心整理收藏】
TCP协议是在TCP/IP协议模型中的运输层中很重要的一个协议、负责处理主机端口层面之间的数据传输。主要有以下特点:1.TCP是面向链接的协议,在数据传输之前需要通过三次握手建立TCP链接,当数据传递完成之后,需要通过四次挥手进行连接释放。2.每一条TCP通信都是两台主机和主机之间的,是点对点传输的协议。3.TCP提供可靠的、无差错、不丢失、不重复,按序到达的服务。4.TCP的通信双方在连接建立的任何时候都可以发送数据。TCP连接的两端都设有发送缓存和接收缓存,用来临时存放双向通信的数据。5.面向字节流。在数据传输的过程中如果报文比较长的话TCP会进行数据分段传输,每一条分段的TCP传输信息都带有分段的序号,每一段都包含一部分字节流。接收方根据每段携带的的序号信息进行数据拼接,最终拼接出来初始的传输数据。但是在整个传输的过程中每一段TCP携带的都是被切割的字节流数据。所以说TCP是面向字节流的。a.TCP和UDP在发送报文时所采用的方式完全不同。TCP并不关心应用程序一次把多长的报文发送到TCP缓存中,而是根据对方给出的窗口值和当前网络拥塞的程度来决定一个报文段应包含多少个字节(UDP发送的报文长度是应用程序给出的)。b.如果应用程序传送到TCP缓存的数据块太大,TCP就可以把它划分短一些再传。TCP也可以等待积累有足够多的字节后再构建成报文段发送出去。各字段含义:源端口:发送端的端口号目的端口:接收端的端口号序号:TCP将发送报文分段传输的时候会给每一段加上序号,接收端也可以根据这个序号来判断数据拼接的顺序,主要用来解决网络报乱序的问题确认号:确认号为接收端收到数据之后进行排序确认以及发送下一次期待接收到的序号,数值 = 接收到的发送号 + 1数据偏移:占4比特,表示数据开始的地方离TCP段的起始处有多远。实际上就是TCP段首部的长度。由于首部长度不固定,因此数据偏移字段是必要的。数据偏移以32位为长度单位,因此TCP首部的最大长度是60(15*4)个字节。控制位:URG:此标志表示TCP包的紧急指针域有效,用来保证TCP连接不被中断,并且督促 中间层设备要尽快处理这些数据;ACK:此标志表示应答域有效,就是说前面所说的TCP应答号将会包含在TCP数据包中;有两个取值:0和1, 为1的时候表示应答域有效,反之为0;PSH:这个标志位表示Push操作。所谓Push操作就是指在数据包到达接收端以后,立即传送给应用程序, 而不是在缓冲区中排队;RST:这个标志表示连接复位请求。用来复位那些产生错误的连接,也被用来拒绝错误和非法的数据包;SYN:表示同步序号,用来建立连接。SYN标志位和ACK标志位搭配使用,当连接请求的时候,SYN=1, ACK=0;连接被响应的时候,SYN=1,ACK=1;这个标志的数据包经常被用来进行端口扫描。扫描者发送 一个只有SYN的数据包,如果对方主机响应了一个数据包回来 ,就表明这台主机存在这个端口;但是由于这 种扫描方式只是进行TCP三次握手的第一次握手,因此这种扫描的成功表示被扫描的机器不很安全,一台安全 的主机将会强制要求一个连接严格的进行TCP的三次握手;FIN: 表示发送端已经达到数据末尾,也就是说双方的数据传送完成,没有数据可以传送了,发送FIN标志 位的TCP数据包后,连接将被断开。这个标志的数据包也经常被用于进行端口扫描。窗口:TCP里很重要的一个机制,占2字节,表示报文段发送方期望接收的字节数,可接收的序号范围是从接收方的确认号开始到确认号加上窗口大小之间的数据。后面会有实例讲解。校验和:校验和包含了伪首部、TCP首部和数据,校验和是TCP强制要求的,由发送方计算,接收方验证紧急指针:URG标志为1时,紧急指针有效,表示数据需要优先处理。紧急指针指出在TCP段中的紧急数据的最后一个字节的序号,使接收方可以知道紧急数据共有多长。选项:最常用的选项是最大段大小(Maximum Segment Size,MSS),向对方通知本机可以接收的最大TCP段长度。MSS选项只在建立连接的请求中发送。放在以太网帧里看TCP的位置TCP 数据包在 IP 数据包的负载里面。它的头信息最少也需要20字节,因此 TCP 数据包的最大负载是 1480 - 20 = 1460 字节。由于 IP 和 TCP 协议往往有额外的头信息,所以 TCP 负载实际为1400字节左右。因此,一条1500字节的信息需要两个 TCP 数据包。HTTP/2 协议的一大改进, 就是压缩 HTTP 协议的头信息,使得一个 HTTP 请求可以放在一个 TCP 数据包里面,而不是分成多个,这样就提高了速度。以太网数据包的负载是1500字节,TCP 数据包的负载在1400字节左右一个包1400字节,那么一次性发送大量数据,就必须分成多个包。比如,一个 10MB 的文件,需要发送7100多个包。发送的时候,TCP 协议为每个包编号(sequence number,简称 SEQ),以便接收的一方按照顺序还原。万一发生丢包,也可以知道丢失的是哪一个包。第一个包的编号是一个随机数。为了便于理解,这里就把它称为1号包。假定这个包的负载长度是100字节,那么可以推算出下一个包的编号应该是101。这就是说,每个数据包都可以得到两个编号:自身的编号,以及下一个包的编号。接收方由此知道,应该按照什么顺序将它们还原成原始文件。收到 TCP 数据包以后,组装还原是操作系统完成的。应用程序不会直接处理 TCP 数据包。对于应用程序来说,不用关心数据通信的细节。除非线路异常,否则收到的总是完整的数据。应用程序需要的数据放在 TCP 数据包里面,有自己的格式(比如 HTTP 协议)。TCP 并没有提供任何机制,表示原始文件的大小,这由应用层的协议来规定。比如,HTTP 协议就有一个头信息Content-Length,表示信息体的大小。对于操作系统来说,就是持续地接收 TCP 数据包,将它们按照顺序组装好,一个包都不少。操作系统不会去处理 TCP 数据包里面的数据。一旦组装好 TCP 数据包,就把它们转交给应用程序。TCP 数据包里面有一个端口(port)参数,就是用来指定转交给监听该端口的应用程序。应用程序收到组装好的原始数据,以浏览器为例,就会根据 HTTP 协议的Content-Length字段正确读出一段段的数据。这也意味着,一次 TCP 通信可以包括多个 HTTP 通信。服务器发送数据包,当然越快越好,最好一次性全发出去。但是,发得太快,就有可能丢包。带宽小、路由器过热、缓存溢出等许多因素都会导致丢包。线路不好的话,发得越快,丢得越多。最理想的状态是,在线路允许的情况下,达到最高速率。但是我们怎么知道,对方线路的理想速率是多少呢?答案就是慢慢试。TCP 协议为了做到效率与可靠性的统一,设计了一个慢启动(slow start)机制。开始的时候,发送得较慢,然后根据丢包的情况,调整速率:如果不丢包,就加快发送速度;如果丢包,就降低发送速度。Linux 内核里面 设定 了(常量TCP_INIT_CWND),刚开始通信的时候,发送方一次性发送10个数据包,即"发送窗口"的大小为10。然后停下来,等待接收方的确认,再继续发送。默认情况下,接收方每收到 两个TCP 数据包,就要 发送 一个确认消息。"确认"的英语是 acknowledgement,所以这个确认消息就简称 ACK。ACK 携带两个信息。发送方有了这两个信息,再加上自己已经发出的数据包的最新编号,就会推测出接收方大概的接收速度,从而降低或增加发送速率。这被称为"发送窗口",这个窗口的大小是可变的。注意,由于 TCP 通信是双向的,所以双方都需要发送 ACK。两方的窗口大小,很可能是不一样的。而且 ACK 只是很简单的几个字段,通常与数据合并在一个数据包里面发送。即使对于带宽很大、线路很好的连接,TCP 也总是从10个数据包开始慢慢试,过了一段时间以后,才达到最高的传输速率。这就是 TCP 的慢启动。TCP 协议可以保证数据通信的完整性,这是怎么做到的?前面说过,每一个数据包都带有下一个数据包的编号。如果下一个数据包没有收到,那么 ACK 的编号就不会发生变化。举例来说,现在收到了4号包,但是没有收到5号包。ACK 就会记录,期待收到5号包。过了一段时间,5号包收到了,那么下一轮 ACK 会更新编号。如果5号包还是没收到,但是收到了6号包或7号包,那么 ACK 里面的编号不会变化,总是显示5号包。这会导致大量重复内容的 ACK。如果发送方发现收到 三个 连续的重复 ACK,或者超时了还没有收到任何 ACK,就会确认丢包,即5号包遗失了,从而再次发送这个包。通过这种机制,TCP 保证了不会有数据包丢失。TCP是一个滑动窗口协议,即一个TCP连接的发送端在某个时刻能发多少数据是由滑动窗口控制的,而滑动窗口的大小实际上是由两个窗口共同决定的,一个是接收端的通告窗口,这个窗口值在TCP协议头部信息中有,会随着数据的ACK包发送给发送端,这个值表示的是在接收端的TCP协议缓存中还有多少剩余空间,发送端必须保证发送的数据不超过这个剩余空间以免造成缓冲区溢出,这个窗口是接收端用来进行流量限制的,在传输过程中,通告窗口大小与接收端的进程取出数据的快慢有关。另一个窗口是发送端的拥塞窗口(Congestion window),由发送端维护这个值,在协议头部信息中没有,滑动窗口的大小就是通告窗口和拥塞窗口的较小值,所以拥塞窗口也看做是发送端用来进行流量控制的窗口。滑动窗口的左边沿向右移动称为窗口合拢,发生在发送的数据被确认时(此时,表明数据已被接收端收到,不会再被需要重传,可以从发送端的发送缓存中清除了),滑动窗口的右边沿向右移动称为窗口张开,发生在接收进程从接收端协议缓存中取出数据时。随着发送端不断收到的被发送数据的ACK包,根据ACK包中的确认序号和通告窗口大小使滑动窗口得以不断的合拢和张开,形成滑动窗口的向前滑动。如果接收进程一直不取数据,则会出现0窗口现象,即滑动窗口左边沿与右边沿重合,此时窗口大小为0,就无法再发送数据。在TCP里,接收端(B)会给发送端(A)报一个窗口的大小,叫Advertised window。1.在没有收到B的确认情况下,A可以连续把窗口内的数据都发送出去。凡是已经发送过的数据,在未收到确认之前都必须暂时保留,以便在超时重传时使用。2.发送窗口里面的序号表示允许发送的序号。显然,窗口越大,发送方就可以在收到对方确认之前连续发送更多数据,因而可能获得更高的传输效率。但接收方必须来得及处理这些收到的数据。3.发送窗口后沿的后面部分表示已发送且已收到确认。这些数据显然不需要再保留了。4.发送窗口前沿的前面部分表示不允许发送的,应为接收方都没有为这部分数据保留临时存放的缓存空间。5.发送窗口后沿的变化情况有两种:不动(没有收到新的确认)和前移(收到了新的确认)6.发送窗口前沿的变化情况有两种:不断向前移或可能不动(没收到新的确认)TCP的发送方在规定时间内没有收到确认就要重传已发送的报文段。这种重传的概念很简单,但重传时间的选择确是TCP最复杂的问题之一。TCP采用了一种自适应算法,它记录一个报文段发出的时间,以及收到响应的确认的时间这两个时间之差就是报文段的往返时间RTT。TCP保留了RTT的一个加权平均往返时间。超时重传时间RTO略大于加权平均往返时间RTT:即Round Trip Time,表示从发送端到接收端的一去一回需要的时间,tcp在数据传输过程中会对RTT进行采样(即对发送的数据包及其ACK的时间差进行测量,并根据测量值更新RTT值,具体的算法TCPIP详解里面有),TCP根据得到的RTT值更新RTO值,即Retransmission TimeOut,就是重传间隔,发送端对每个发出的数据包进行计时,如果在RTO时间内没有收到所发出的数据包的对应ACK,则任务数据包丢失,将重传数据。一般RTO值都比采样得到的RTT值要大。如果收到的报文段无差错,只是未按序号,中间还缺少一些序号的数据,那么能否设法只传送缺少的数据而不重传已经正确到达接收方的数据?答案是可以的,选择确认就是一种可行的处理方法。如果要使用选项确认SACK,那么在建立TCP连接时,就要在TCP首部的选项中加上“允许SACK”的选项,而双方必须都事先商定好。如果使用选择确认,那么原来首部中的“确认号字段”的用法仍然不变。SACK文档并没有明确发送方应当怎么响应SACK.因此大多数的实现还是重传所有未被确认的数据块。一般说来,我们总是希望数据传输的更快一些,但如果发送方把数据发送的过快,接收方就可能来不及接收,这会造成数据的丢失。所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。在计算机网络中的链路容量,交换节点中的缓存和处理机等,都是网络的资源。在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种情况就叫做拥塞。拥塞控制方法:1.慢开始和拥塞避免2.快重传和快恢复3.随机早期检测1.一开始,客户端和服务端都处于CLOSED状态2.先是服务端主动监听某个端口,处于LISTEN状态(比如服务端启动,开始监听)。3.客户端主动发起连接SYN,之后处于SYN-SENT状态(第一次握手,发送 SYN = 1 ACK = 0 seq = x ack = 0)。4.服务端收到发起的连接,返回SYN,并且ACK客户端的SYN,之后处于SYN-RCVD状态(第二次握手,发送 SYN = 1 ACK = 1 seq = y ack = x + 1)。5.客户端收到服务端发送的SYN和ACK之后,发送ACK的ACK,之后处于ESTABLISHED状态(第三次握手,发送 SYN = 0 ACK = 1 seq = x + 1 ack = y + 1)。6.服务端收到客户端的ACK之后,处于ESTABLISHED状态。(需要注意的是,有可能X和Y是相等的,可能都是0,因为他们代表了各自发送报文段的序号。)TCP连接释放四次挥手1.当前A和B都处于ESTAB-LISHED状态。2.A的应用进程先向其TCP发出连接释放报文段,并停止再发送数据,主动关闭TCP连接。3.B收到连接释放报文段后即发出确认,然后B进入CLOSE-WAIT(关闭等待)状态。TCP服务器进程这时应通知高层应用进程,因而从A到B这个方向的连接就释放了,这时TCP连接处于半关闭状态,即A已经没有数据发送了。从B到A这个方向的连接并未关闭,这个状态可能会持续一些时间。4.A收到来自B的确认后,就进入FIN-WAIT-2(终止等待2)状态,等待B发出的连接释放报文端。5.若B已经没有向A发送的数据,B发出连接释放信号,这时B进入LAST-ACK(最后确认)状态等待A的确认。6.A再收到B的连接释放消息后,必须对此发出确认,然后进入TIME-WAIT(时间等待)状态。请注意,现在TCP连接还没有释放掉,必须经过时间等待计时器(TIME-WAIT timer)设置的时间2MSL后,A才进入CLOSED状态。7。B收到A发出的确认消息后,进入CLOSED状态。以请求百度为例,看一下三次握手真实数据的TCP连接建立过程我们再来看四次挥手。TCP断开连接时,会有四次挥手过程,标志位是FIN,我们在封包列表中找到对应位置,理论上应该找到4个数据包,但我试了好几次,实际只抓到3个数据包。查了相关资料,说是因为服务器端在给客户端传回的过程中,将两个连续发送的包进行了合并。因此下面会按照合并后的三次挥手解释,若有错误之处请指出。第一步,当主机A的应用程序通知TCP数据已经发送完毕时,TCP向主机B发送一个带有FIN附加标记的报文段(FIN表示英文finish)。第二步,主机B收到这个FIN报文段之后,并不立即用FIN报文段回复主机A,而是先向主机A发送一个确认序号ACK,同时通知自己相应的应用程序:对方要求关闭连接(先发送ACK的目的是为了防止在这段时间内,对方重传FIN报文段)。第三步,主机B的应用程序告诉TCP:我要彻底的关闭连接,TCP向主机A送一个FIN报文段。第四步,主机A收到这个FIN报文段后,向主机B发送一个ACK表示连接彻底释放。这是因为服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,当收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方也未必全部数据都发送给对方了,所以己方可以立即close,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送。原因有二:一、保证TCP协议的全双工连接能够可靠关闭二、保证这次连接的重复数据段从网络中消失先说第一点,如果Client直接CLOSED了,那么由于IP协议的不可靠性或者是其它网络原因,导致Server没有收到Client最后回复的ACK。那么Server就会在超时之后继续发送FIN,此时由于Client已经CLOSED了,就找不到与重发的FIN对应的连接,最后Server就会收到RST而不是ACK,Server就会以为是连接错误把问题报告给高层。这样的情况虽然不会造成数据丢失,但是却导致TCP协议不符合可靠连接的要求。所以,Client不是直接进入CLOSED,而是要保持TIME_WAIT,当再次收到FIN的时候,能够保证对方收到ACK,最后正确的关闭连接。再说第二点,如果Client直接CLOSED,然后又再向Server发起一个新连接,我们不能保证这个新连接与刚关闭的连接的端口号是不同的。也就是说有可能新连接和老连接的端口号是相同的。一般来说不会发生什么问题,但是还是有特殊情况出现:假设新连接和已经关闭的老连接端口号是一样的,如果前一次连接的某些数据仍然滞留在网络中,这些延迟数据在建立新连接之后才到达Server,由于新连接和老连接的端口号是一样的,又因为TCP协议判断不同连接的依据是socket pair,于是,TCP协议就认为那个延迟的数据是属于新连接的,这样就和真正的新连接的数据包发生混淆了。所以TCP连接还要在TIME_WAIT状态等待2倍MSL,这样可以保证本次连接的所有数据都从网络中消失。硬件速度网络和服务器的负载请求和响应报文的尺寸客户端和服务器之间的距离TCP 协议的技术复杂性TCP 连接建立握手;TCP 慢启动拥塞控制;数据聚集的 Nagle 算法;用于捎带确认的 TCP 延迟确认算法;TIME_WAIT 时延和端口耗尽。介绍完毕,就这?是的,就这。补充:大部分内容为网络整理,方便自己学习回顾,参考文章:TCP 协议简介TCP协议图文详解什么是TCP协议?wireshark抓包分析——TCP/IP协议TCP协议的三次握手和四次挥手TCP协议详解TCP带宽和时延的研究(1)

TCP与UDP应用的例子有哪些?
1、TCP应用(1)FTP:文件传输协议;(2)SSH:安全登录、文件传送(SCP)和端口重定向;(3)Telnet:不安全的文本传送;(4)SMTP:简单邮件传输协议Simple Mail Transfer Protocol (E-mail);(5)HTTP:超文本传送协议 (WWW);2、UDP应用(1)流媒体采用TCP,一旦发生丢包,TCP会将后续包缓存起来,等前面的包重传并接收到后再继续发送,延迟会越来越大。基于UDP的协议如WebRTC是极佳的选择。(2)实时游戏对实时要求较为严格的情况下,采用自定义的可靠UDP协议,比如Enet、RakNet(用户有sony online game、minecraft)等,自定义重传策略,能够把丢包产生的延迟降到最低,尽量减少网络问题对游戏性造成的影响。采用UDP的经典游戏如FPS游戏Quake、CS,著名的游戏引擎Unity3D采用的也是RakNet。(3)物联网2014年google旗下的Nest建立Thread Group,推出了物联网通信协议Thread,完善物联网通信。全球将近50%的人都在使用互联网,人们不断的追求更快、更好的服务,一切都在变化,在越来越多的领域,UDP将会抢占TCP的主导地位。(4)QQ 文件传输、QQ语音、QQ视频对于网络通讯质量要求不高的情况下,要求网络通讯速度能尽量快捷方便,就可以使用UDP技术。
呵呵,收到你的求助,非常感谢你对我的信任! 首先还是把协议特性说一下,明白了特性自然知道应用场合了,嘿嘿!两种协议都是传输层协议,为应用层提供信息载体。TCP协议是基于连接的可靠协议,有流量控制和差错控制,也正因为有可靠性的保证和控制手段,所以传输效率比UDP低;UDP协议是基于无连接的不可靠协议,没有控制手段,仅仅是将数据发送给对方,因此效率比TCP要高。基于上述特性,不难得到结论,TCP协议适用于对效率要求相对低,但对准确性要求相对高的场景下,或者是有一种连接概念的场景下;而UDP协议适用于对效率要求相对高,对准确性要求相对低的场景。好了,现在回到你的问题,举几个应用的例子。TCP一般用于文件传输(FTP HTTP 对数据准确性要求高,速度可以相对慢),发送或接收邮件(POP IMAP SMTP 对数据准确性要求高,非紧急应用),远程登录(TELNET SSH 对数据准确性有一定要求,有连接的概念)等等;UDP一般用于即时通信(QQ聊天 对数据准确性和丢包要求比较低,但速度必须快),在线视频(RTSP 速度一定要快,保证视频连续,但是偶尔花了一个图像帧,人们还是能接受的),网络语音电话(VoIP 语音数据包一般比较小,需要高速发送,偶尔断音或串音也没有问题)等等。作为知识的扩展,可以再说一些其他应用。比如,TCP可以用于网络数据库,分布式高精度计算系统的数据传输;UDP可以用于服务系统内部之间的数据传输,因为数据可能比较多,内部系统局域网内的丢包错包率又很低,即便丢包,顶多是操作无效,这种情况下,UDP经常被使用。 回答完毕,嘿嘿,希望对你有所帮助!
两种协议都是传输层协议,为应用层提供信息载体.TCP协议是基于连接的可靠协议,有流量控制和差错控制,也正因为有可靠性的保证和控制手段,所以传输效率比UDP低;UDP协议是基于无连接的不可靠协议,没有控制手段,仅仅是将数据发送给对方,因此效率比TCP要高. TCP一般用于文件传输(FTP HTTP 对数据准确性要求高,速度可以相对慢),发送或接收邮件(POP IMAP SMTP 对数据准确性要求高,非紧急应用),远程登录(TELNET SSH 对数据准确性有一定要求,有连接的概念)等等
TCP/IP协议族包含了很多功能各异的子协议。为此我们也利用上文所述的分层的方式来剖析它的结构。TCP/IP层次模型共分为四层:应用层、传输层、网络层、数据链路层。 TCP/IP网络协议TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网间网协议)是目前世界上应用最为广泛的协议,它的流行与Internet的迅猛发展密切相关—TCP/IP最初是为互联网的原型ARPANET所设计的,目的是提供一整套方便实用、能应用于多种网络上的协议,事实证明TCP/IP做到了这一点,它使网络互联变得容易起来,并且使越来越多的网络加入其中,成为Internet的事实标准。* 应用层—应用层是所有用户所面向的应用程序的统称。ICP/IP协议族在这一层面有着很多协议来支持不同的应用,许多大家所熟悉的基于Internet的应用的实现就离不开这些协议。如我们进行万维网(WWW)访问用到了HTTP协议、文件传输用FTP协议、电子邮件发送用SMTP、域名的解析用DNS协议、 远程登录用Telnet协议等等,都是属于TCP/IP应用层的;就用户而言,看到的是由一个个软件所构筑的大多为图形化的操作界面,而实际后台运行的便是上述协议。* 传输层—这一层的的功能主要是提供应用程序间的通信,TCP/IP协议族在这一层的协议有TCP和UDP。* 网络层—是TCP/IP协议族中非常关键的一层,主要定义了IP地址格式,从而能够使得不同应用类型的数据在Internet上通畅地传输,IP协议就是一个网络层协议。* 网络接口层—这是TCP/IP软件的最低层,负责接收IP数据包并通过网络发送之,或者从网络上接收物理帧,抽出IP数据报,交给IP层。1.TCP/UDP协议TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)协议属于传输层协议。其中TCP提供IP环境下的数据可靠传输,它提供的服务包括数据流传送、可靠性、有效流控、全双工操作和多路复用。通过面向连接、端到端和可靠的数据包发送。通俗说,它是事先为所发送的数据开辟出连接好的通道,然后再进行数据发送;而UDP则不为IP提供可靠性、流控或差错恢复功能。一般来说,TCP对应的是可靠性要求高的应用,而UDP对应的则是可靠性要求低、传输经济的应用。TCP支持的应用协议主要有:Telnet、FTP、SMTP等;UDP支持的应用层协议主要有:NFS(网络文件系统)、SNMP(简单网络管理协议)、DNS(主域名称系统)、TFTP(通用文件传输协议)等。IP协议的定义、IP地址的分类及特点什么是IP协议,IP地址如何表示,分为几类,各有什么特点?为了便于寻址和层次化地构造网络,IP地址被分为A、B、C、D、E五类,商业应用中只用到A、B、C三类。IP协议(Internet Protocol)又称互联网协议,是支持网间互连的数据报协议,它与TCP协议(传输控制协议)一起构成了TCP/IP协议族的核心。它提供网间连接的完善功能, 包括IP数据报规定互连网络范围内的IP地址格式。Internet 上,为了实现连接到互联网上的结点之间的通信,必须为每个结点(入网的计算机)分配一个地址,并且应当保证这个地址是全网唯一的,这便是IP地址。目前的IP地址(IPv4:IP第4版本)由32个二进制位表示,每8位二进制数为一个整数,中间由小数点间隔,如159.226.41.98,整个IP地址空间有4组8位二进制数,由表示主机所在的网络的地址(类似部队的编号)以及主机在该网络中的标识(如同士兵在该部队的编号)共同组成。为了便于寻址和层次化的构造网络,IP地址被分为A、B、C、D、E五类,商业应用中只用到A、B、C三类。* A类地址:A类地址的网络标识由第一组8位二进制数表示,网络中的主机标识占3组8位二进制数,A类地址的特点是网络标识的第一位二进制数取值必须为“0”。不难算出,A类地址允许有126个网段,每个网络大约允许有1670万台主机,通常分配给拥有大量主机的网络(如主干网)。* B类地址:B类地址的网络标识由前两组8位二进制数表示,网络中的主机标识占两组8位二进制数,B类地址的特点是网络标识的前两位二进制数取值必须为“10”。B类地址允许有16384个网段,每个网络允许有65533台主机,适用于结点比较多的网络(如区域网)。* C类地址:C类地址的网络标识由前3组8位二进制数表示,网络中主机标识占1组8位二进制数,C类地址的特点是网络标识的前3位二进制数取值必须为“110”。具有C类地址的网络允许有254台主机,适用于结点比较少的网络(如校园网)。为了便于记忆,通常习惯采用4个十进制数来表示一个IP地址,十进制数之间采用句点“.”予以分隔。这种IP地址的表示方法也被称为点分十进制法。如以这种方式表示,A类网络的IP地址范围为1.0.0.1-127.255.255.254;B类网络的IP地址范围为:128.1.0.1-191.255.255.254;C类网络的IP地址范围为:192.0.1.1-223.255.255.254。由于网络地址紧张、主机地址相对过剩,采取子网掩码的方式来指定网段号。 TCP/IP协议与低层的数据链路层和物理层无关,这也是TCP/IP的重要特点。正因为如此 ,它能广泛地支持由低两层协议构成的物理网络结构。目前已使用TCP/IP连接成洲际网、全国网与跨地区网。

红外通信协议的典型案例
针对便携产品应用的红外数据通信模块(图)作者:解放军理工大学刘荣何敏 日期:2005-6-1摘要:红外通信有着成本低廉、连接方便、简单易用和结构紧凑的特点,因此在小型的移动设备中获得了广泛的应用。目前大多数作为采样数据的终端希望通过串口或红外接口与移动设备(如掌上电脑等)进行通信。和传统的遥控器中采用的红外相比较,红外数据传输的实现方式是不同的。在笔记本电脑,手机,PDA和数码相机上的红外传输均采用红外数据传输。本文介绍了红外数据通信实现的原理,标准和方法。以实现和PDA(奥克码—桑夏PPC2188型)的红外数据通信为例介绍了该模块的实现原理和方法。 关键词:IrDA;红外通信;PDA---传统的红外通信设备主要是指红外遥控器和早期的PDA中采用的38kHz红外调制和解调方式。这种方式实现简单,但是误码率较高,不适合进行数据传输,特别是数据量大的时候。为此,IrDA组织(InfraredDataAssociation)规定了红外数据传输的标准IrDA,它规定了通过红外设备进行无线传输的方法。1994年,第一个IrDA的红外数据通信标准发布,即IrDA1.0。IrDA规范包含两个设备之间通信的标准以及与其他设备进行通信的协议。IrDA标准包含设备之间通信数据的格式以及与其他设备进行通信的协议。目前符合IrDA的设备有:笔记本电脑,手机,掌上电脑,数码相机等。Linux操作系统支持IrDA。目前,很多公司根据该标准生产了各种用于红外数据传输的芯片,如HP公司生产的HSDL-1000、HSDL-4230、HSDL-4220和HSDL-7000,Zilog生产的ZHX1010、ZHX1210、ZHX1810、ZHX1820。在桑夏公司的奥克码—桑夏PPC2188型PDA上采用的就是ZHX1810芯片。下面分别介绍传统的红外通信和红外数据通信的实现原理和方法。1传统的红外通信 ---1.1原理 ---传统的红外设备传输数据时,可以采用38kHz的载波进行调制和解调。采用调幅的方式对数据进行调制,通过发光二极管将数据发送出去;采用专门的解调芯片接受红外发送来的数据。 ---1.2实现方法 ---在终端上实现数据的红外通信中,采用了图1中的电路图。其中IFR_CLK输出频率为38kHz的方波,TXD为待发送的数据,两个信号通过有MC9013组成的电路进行调制,通过TSAL6200调制过的信号发送出去; ---SFH5110—38为载波为38kHz的解调芯片,接受外部来的信号,将解调后的数据送到RXD; ---在终端中,采用了以上的电路和单片机进行连接,就可以实现传统的载波(38kHz)调制解调的红外通信。其中TXD和RXD分别接在单片机的串口的发送端和接受端,IFR_CLK接在一般的IO口上。 ---在单片机的软件实现中,最主要的是在需要发送数据的时候用定时器在IFR_CLK口线上产生38kHz的方波。在这里,串口的速率一般较低。---1.3缺点 ---(1)采用调幅进行传输,抗干扰能力差; ---(2)在发送数据时,输出的功率一定时,用于信号传输的功率小,接收到的数据的信噪比小,容易误判数据; ---(3)受到输出功率的影响,数据传输的距离短,速度慢; ---(4)受到传输速率的影响,传输的数据量不能太大; ---(5)由于没有相应的协议支持,将接收到的所有数据(包括正常的数据和干扰引起的非正常数据)送到RXD。2红外数据通信 ---2.1红外数据通信的速率和物理层的数据帧格式 ---在红外数据传输中,对串口发送的数据采用脉冲进行调制的方式。在IrDA标准1.0中,脉冲的宽度为3/16的BIT占空比或者为固定的1.63μs的脉冲宽度。IrDA1.0简称为SIR,以系统的异步通信收发器(UART)为依托,由于受到UART通信速率的限制,SIR的最高通信速率只有115.2Kbps,也就是大家熟知的电脑串行端口的最高速率。在图2中给出了脉冲调制前的异步串口UART的数据帧格式和进行脉冲调制后的红外IR帧格式,其中,红外脉冲调制中的没有脉冲代表UART中的“1”,红外脉冲调制中有脉冲代表UART中的“0”;在没有串口数据传送时,红外数据帧中没有脉冲。---1996年,颁布了IrDA标准1.1,即快速红外通信,简称为FIR。与SIR相比,由于FIR不再依托UART,其最高通信速率有了质的飞跃,可达到4Mbps的水平。FIR采用了全新的4PPM调制解调(PulsePositionModulation),即通过分析脉冲的相位来辨别所传输的数据信息,其通信原理与SIR是截然不同的,但由于FIR在115.2Kbps以下的速率依旧采用SIR的那种编码解码过程,所以它仍可以与支持SIR的低速设备进行通信,只有在通信对方也支持FIR时,才将通信速率提升到更高水平。对4Mbps的速率,需要使用1/4的脉冲的相位进行调制(即所谓的4PPM调制),利用脉冲四个不同的相位(位置)的一个脉冲对两个BIT进行编码。因此,前面利用脉冲有无进行调制,这里利用脉冲及脉冲的位置确定调制和解调的信号。例如,两个BIT00调制为1000(一个BIT,其中第一个1/4BIT时间有脉冲,其他3/4时间无脉冲),两个BIT01调制为0100(一个BIT,其中第二个1/4BIT时间有脉冲,其他3/4时间无脉冲)。这样,用4个脉冲就可以传输一个字节的数据量。在和终端进行通信的设备中,数据的传输通常以系统的异步通信收发器(UART)为依托,我们只需要采用符合IrDA标准1.0的红外器件。目前,红外数据传输芯片包括两种,一种以HP公司HSDL-1000芯片为代表,HSDL-1000的一端输入为符合IrDA1.0标准的红外数据,一端为异步通信(UART)数据,可以直接用在终端中作为UART和红外数据的转换器。另外一种以Zilog生产的ZHX1810为代表,只是将红外信号转换为电信号,或将电信号转换为红外信号的红外收发器件,这种芯片在终端设备中需要应用时,需要将脉冲转换为异步通信的数据,或将异步通信的数据转换为脉冲信号方可使用。 ---2.2采用脉冲进行调制的原因 ---红外接收器需要一种方式来区分周围的干扰,噪声和信号。为了这个目的,通常利用尽可能高的输出功率:高的功率表示在接收器中的大电流,有好的信噪比。然而,IR-LED(红外灯)不可能在全部的时间连续的以高功率进行数据的发送。因此,使用每个BIT只有3/16或1/4脉冲宽度的信号进行传输。这样,输出的功率可以达到IR-LED(红外灯)连续闪烁的最大功率的4~5倍。另外,传输的途径不会携带直流成分(由于接收器连续的适应周围的环境,只检测环境变化),这样必须利用脉冲调制。 ---2.3红外数据通信的协议 ---在红外数据通信中,很容易受到外界的干扰,只有符合一定格式的数据才是正确的数据。为此,IrDA标准指定三个基本的规范和协议,包括:物理层规范(PhysicalLayerLinkSpecification),连接建立协议(LinkAccessProtocol:IrLAP)和连接管理协议(LinkManagementProtocol:IrLMP)。物理层规范制定了红外通信硬件设计上的目标和要求,IrLAP和IrLMP为两个软件层,负责对连接进行设置、管理和维护。在IrLAP和IrLMP基础上,针对一些特定的红外通信应用领域,IrDA还陆续发布了一些更高级别的红外协议,如TinyTP、IrOBEX、IrCOMM、IrLAN、IrTran-P等。它们之间的关系如图3所示。---奥克码—桑夏PPC2188型PDA的操作系统为桑夏2000操作系统,该操作系统为嵌入式的中文操作系统,其中有支持红外通信的IrDA红外通信协议栈。终端需要和PDA进行红外通信的时候,也需要有支持红外通信的IrDA红外通信协议栈。有了支持红外通信的IrDA红外通信协议栈,终端不仅可以和PDA进行通信,也可以同带有红外通信口的笔记本电脑、手机、掌上电脑、数码相机等进行红外通信。3实现终端与PDA的红外通信 ---在终端设备中,要实现和PDA的红外通信,除了要实现将红外数据转换为UART数据,还需要编制IrLAP和IrLMP层的协议。为了降低成本,我们直接采用了红外收发器件ZiLOG生产的红外收发器作为物理层的部分器件,而将脉冲和UART之间的数据转换用软件来实现。目前,实现了以下的硬件和软件的研制和测试,这种终端与PDA的红外通信是可靠的。 ---3.1ZHX1810---ZiLOG为OEM客户和最终用户提供了完整的红外数据收发方案。ZiLOG的红外收发器被广泛的应用于各种PDA产品,移动电话以及相关领域中。 ---最新公布的几款红外收发器ZHX1403,ZHX3403,以及ZHX1203,他们都具有极小巧的外型尺寸,ZiLOG称之为Ultraslim结构。此外ZHX1403和ZHX3403还具有AlwaysOn技术,使得长时间的红外功能开启成为了可能,这无疑为红外设备的应用增加了更多的可能性。 ---在本系统的设计中,采用了ZiLOG的ZHX1810。由于红外收发器也可以接收到自己发出的数据,实现的红外数 据通信是半双工的。 ---在图4中给出了ZHX1810的内部结构。 ---LEDA:通过一个外接的电阻接到电源上,给LED提供电流。 ---TXD:用来传输串行数据。通过一个电阻接到地上,当关闭模式时处于开路状态。 ---RXD:用来接收串行数据(在关闭模式时处于三态),不需要外接电阻。 ---SD:用来将内部的电路控制在关闭模式。 ---在Vcc和GND之间接一个0.33μF的电容。 ---3.2硬件组成 ---为了使终端的功能和红外通信之间相对独立,我们利用了单独的单片机AT89C2051实现红外协议栈中的相关协议。AT89C2051接收到TXD发来的数据,进行处理之后将UART数据转换为对应的脉冲数据,通过ZHX1810发送出去;AT89C2051接收到ZHX1810发送来的脉冲数据,根据IrDA的相关协议栈进行解释后,将数据通过RXD以UART数据形式发送出去。从而实现红外通信。 ---图5中的硬件电路是实现红外通信的最低硬件配置。如果需要适应不同的波特率,需要在硬件图中加跳线来识别。如果需要实现完整的IrDA协议栈,需要在电路中加上IIC总线的存储单元;或者采用带有数据总线和地址总线的单片机,加上RAM(如HM6116)来实现。 ---在这里,由于桑夏公司的奥克码—桑夏PPC2188型PDA可以跳过IrDA协议栈中的连接建立协议层和连接管理协议层,只需要实现物理层的部分功能,终端采用如下的电路图就可以实现和奥克码—桑夏系列的PDA之间的红外通信。---3.3软件实现的功能和流程 ---软件实现的功能如下。 ---软件的编写是终端和PDA进行红外通信的重点,考虑到软件的可移植性和程序执行的速度,采用了C语言进行编写,主要需要实现的功能如下: ---(1)根据跳线识别不同的波特率,支持的波特率的传输范围为1200bps~57600bps; ---(2)由于设置红外默认的状态为接收状态; ---(3)物理层判断红外口有无接收到脉冲数据,将接收到的脉冲进行解释后送到红外数据接收缓存区; ---(4)实现连接建立协议层IrLAP,和PDA建立连接;注意,这种建立的连接是单工的,只有在该次通信完成时才建立下次的连接; ---(5)实现连接管理协议层IrLMP的功能; ---(6)将从红外接收的数据通过RXD送到终端的异步串口接收端; ---(7)从终端的异步串口发送端接收数据,根据IrDA协议栈,和PDA建立连接后,将从终端接收到的数据通过红外发送到PDA; ---在软件的实现中,对终端的数据传输而言,数据是进行半双工的透明的传输。 ---软件的流程如图6所示。4总结 ---为了便于将这样的模块应用于各种带有红外的移动终端设备的红外数据通信,我们采用了单独的MCU来实现串口数据和红外数据之间的转换。由于波特率的传输范围为1200~57600bps,我们只实现了目前广泛使用的SIR标准通信。该模块已经应用在和PDA红外通信的电路中,性能稳定。参考文献 1何立民.MCS-51系列单片机应用系统设计.北京航空航天大学出版社,1998 2InfraredDataAssociationSerialInfraredPhysicalLayerSpecification 3ZHX1810SlimLine(tm)SIRTransceiver

一层层了解网络通信协议
互联网的实现,分为好几层,每一层都有自己特有的功能,而且每一层都靠下一层支持。用户接触到的,只是最上面的一层,我们称为应用层,要理解互联网,必须从最下层开始,自下而上的理解每一层的功能。我们常见的网络模型,有以下三种:它们之间的关系如下图所示其中, 理论五层模型 是综合 OSI七层 和 TCP/IP四层 的优点,采用的一种原理体系结构。我们接下来的探讨也是基于 理论五层模型 来展开的。理论五层模型 的结构如下图各层的作用如下:简单说,越下面的层,越靠近硬件;越上面的层,越靠近用户。每一层都是为了完成某一种功能。为了实现这些功能,需要遵守一些共同的规则,这些规则就是 协议(protocol) 。互联网的每一层,都定义了很多协议。这些协议的总称,叫做 互联网协议(Internet Protocol Suite) ,它们是互联网的核心。下面的内容中,我们通过每一层的功能的介绍,对每一层中的主要协议所起作用进行讲解。电脑要进行联网,需要把电脑通过各种设备连接进网络,设备有光缆、电缆、双绞线、无限电波等方式。物理层是用于传输信号的介质,它传输的是 0和1 的电信号。但是关于电信号如何分组,每个信号位有何意义并没有规定。这就是 数据链路层 的功能,它在 物理层 的上方,确定了0和1的分组方式,用于两个设备(同一种数据链路结点)之间进行信息传递。早期的时候,每家公司都有自己的电信号分组方式。逐渐地,一种叫做 以太网(Ethernet) 的协议,占据了主导地位。以太网规定,一组电信号构成一个数据包,叫做 帧(frame) ,每一帧分为两个部分: 标头(Head) 和 数据(Data) 。MTU是链路层对物理层的限制。由于链路层存在MTU的限制,导致网络层的报文如果超过1500字节,就必要要对其进行分片发送。上面我们提到,以太网数据包的 标头 ,包含了发送者和接受者的信息。那么,发送者和接受者是如何标识呢?以太网规定,连入网络的所有设备,都必须具有 网卡 接口。数据包必须是从一块网卡,传送到另一块网卡。网卡的地址,就是数据包的发送地址和接收地址,这叫做 MAC地址 。每块网卡出厂的时候,都有一个全世界 独一无二的MAC地址 ,长度是 48个二进制位 ,通常用 12个十六进制数 表示。前6个十六进制数是厂商编号,后6个十六进制数是该厂商的网卡流水号。有了MAC地址,就可以定位网卡和数据包的路径了。定义地址只是第一步,后面还有更多的步骤:上图中,5号计算机向3号计算机 发送一个数据包 ,同一个子网络的1号、2号、3号、4号、6号计算机 都会收到 这个包。它们读取这个包的 标头 ,找到 接收方的MAC地址 ,然后 与自身的 MAC地址相 比较 ,如果两者 相同 ,就 接收这个包 ,做进一步处理, 否则就丢弃 这个包。这种发送方式就叫做 广播 (broadcasting)。有了数据包的定义、网卡的MAC地址、广播的发送方式,"链接层"就可以在多台计算机之间传送数据了。以太网协议,依靠MAC地址发送数据。理论上,单单依靠MAC地址,成都的网卡就可以找到休斯顿的网卡了,技术上是可以实现的。但是,这样做有一个重大的缺点。 以太网 采用 广播 方式 发送数据包 ,所有成员人手一包,不仅 效率低 ,而且 局限在发送者所在的子网络 。也就是说,如果两台计算机不在同一个子网络,广播是传不过去的。这种设计是合理的,否则互联网上每一台计算机都会收到所有包,那会引起灾难。互联网是无数子网络共同组成的一个巨型网络,很像想象成都和休斯顿的电脑会在同一个子网络,这几乎是不可能的。因此,必须找到一种方法,能够区分哪些MAC地址属于同一个子网络,哪些不是。如果是 同一个子网络 ,就采用 广播 方式发送, 否则 就采用 路由 方式发送。( 路由 的意思,就是指如何向不同的子网络分发数据包,这是一个很大的主题,本文不涉及。)遗憾的是,MAC地址本身无法做到这一点。它只与厂商有关,与所处网络无关。这就导致了 网络层 的诞生。它的作用是 引进一套新的地址 ,使得我们能够 区分 不同的计算机是否属于同一个 子网络。这套地址就叫做 网络地址 ,简称 网址 。于是, 网络层 出现以后,每台计算机有了 两种地址 ,一种是 MAC地址 ,另一种是 网络地址 。两种地址之间没有任何联系,MAC地址是绑定在网卡上的,网络地址则是管理员分配的,它们只是随机组合在一起。网络地址帮助我们确定计算机所在的子网络,MAC地址则将数据包送到该子网络中的目标网卡。因此,从逻辑上可以推断,必定是先处理网络地址,然后再处理MAC地址。规定网络地址的协议,叫做 IP协议 。它所定义的地址,就被称为 IP地址 。目前,广泛采用的是IP协议的第四版和第六版,分别称为IPv4和IPv6。互联网上的每一台计算机,都会分配到一个IP地址。这个地址分成 两个部分 , 前一部分代表网络,后一部分代表主机 。比如,IP地址14.215.177.39,这是一个32位的地址,假定它的网络部分是前24位(14.215.177),那么主机部分就是后8位(最后的那个1)。处于同一个子网络的电脑,它们IP地址的网络部分必定是相同的,也就是说14.215.177.2应该与14.215.177.1处在同一个子网络。但是,问题在于单单从IP地址,我们无法判断网络部分。还是以14.215.177.39为例,它的网络部分,到底是前24位,还是前16位,甚至前28位,从IP地址上是看不出来的。那么,怎样才能从IP地址,判断两台计算机是否属于同一个子网络呢?这就要用到另一个参数 子网掩码 (subnet mask)。子网掩码:我们知道,IPv4的地址只有32位,地球上网民数量已经远远超出这个数字,那么,为啥至今还没出现地址枯竭呢?因为我们还有一些技术,可以变相的缓解地址不足,比如NAT技术。NAT(Network Address Translation,网络地址转换)IPv6拥有128位巨大的地址空间,对于那么大的空间,也不是随意的划分,而是使用按照bit位进行号段划分。IPv6地址结构如下图例如 RFC4291 中定义了n=48, m=16,也就是子网和接口ID与各占64位。IPv6没有子网掩码mask的概念,它支持的是 子网前缀标识方法 。使用 IPv6地址/前缀长度 表示方法,例如:可以看到,一个IPv6的地址有子网前缀+接口ID构成,子网前缀由地址分配和管理机构定义和分配,而接口ID可以由各操作系统实现生成。IPv6是用来解决IPv4 地址枯竭 问题的,IPv4地址为32位,而IPv6地址为 128位除了地址数量以外,IPv6还有很多优点,例如:如上所述,IP协议的作用主要有两个:根据IP协议发送的数据,就叫做 IP数据包 。我们直接把IP数据包直接放进以太网数据包的"数据"部分,不用修改以太网的规格。这就是互联网分层结构的好处:上层的变动完全不涉及下层的结构。具体来说,IP数据包也分为 标头 和 数据 两个部分:其中, 标头 范围为 20-60字节 ( IPv6固定为40字节 ), 整个 数据包的总长度 最大为65535字节 。因此, 理论上 ,一个IP数据包的 数据部分 , 最长为65515字节 。如图所示,标头中 20字节是固定不变的 ,它包含了版本、长度、IP地址等信息,另外还有可变部分的标头可选。而数据则是IP数据包的具体内容。将它放入以太网数据包后,以太网数据包就变成了下面这样:在以太网协议中,以太网数据包的数据部分,最长只有1500字节。因此,如果IP数据包超过了1500字节,它就需要分割成几个以太网数据包,分开发送了。关于网络层,还有最后一点需要说明。因为IP数据包是放在以太网数据包里发送的,所以我们必须同时知道 两个地址 ,一个是对方的 MAC地址 ,另一个是对方的 IP地址 。通常情况下,对方的IP地址是已知的,但是我们 不知道它的MAC地址 。所以,我们需要一种机制,能够从IP地址得到MAC地址。这里又可以分成两种情况:总之,有了ARP协议之后,我们就可以得到同一个子网络内的主机MAC地址,可以把数据包发送到任意一台主机之上了。ARP攻击是利用ARP协议设计时缺乏安全验证漏洞来实现的,通过伪造ARP数据包来窃取合法用户的通信数据,造成影响网络传输速率和盗取用户隐私信息等严重危害。ARP攻击主要是存在于局域网网络中,局域网中若有一台计算机感染ARP木马,则感染该ARP木马的系统将会试图通过“ARP欺骗”手段截获所在网络内其它计算机的通信信息,并因此造成网内其它计算机的通信故障。局域网中比较常见的ARP攻击包括:上网时断时续,拷贝文件无法完成,局域网内的ARP包激增。出现不正常的MAC地址,MAC地址对应多个IP地址,网络数据发不出去了,网上发送信息被窃取,个人PC中毒局域网内MAC地址泛洪使MAC地址缓存表溢出等问题。据包的协议地址不匹配,从而在网络中产生大量的ARP。在局域网环境中,ARP攻击是主要的安全威胁,在传统网络中主要是通过静态绑定的方式来解决,但是这种方式限制了网络扩展的易用性。有了MAC地址和IP地址,我们已经可以在互联网上任意两台主机上建立通信。接下来的问题是,同一台主机上有许多程序都需要用到网络,比如,你一边浏览网页,一边与朋友在线聊天。当一个数据包从互联网上发来的时候,你怎么知道,它是表示网页的内容,还是表示在线聊天的内容?也就是说,我们还需要一个参数,表示这个数据包到底供哪个 程序(进程) 使用。这个参数就叫做 端口 (port),它其实是每一个使用网卡的程序的编号。每个数据包都发到主机的特定端口,所以不同的程序就能取到自己所需要的数据。端口是0到65535之间的一个整数,正好16个二进制位。0到1023的端口被系统占用,用户只能选用大于1023的端口。不管是浏览网页还是在线聊天,应用程序会随机选用一个端口,然后与服务器的相应端口联系。传输层 的功能,就是建立 端口到端口 的通信。相比之下,网络层 的功能是建立 主机到主机的通信。只要确定主机和端口,我们就能实现程序之间的交流。因此,Unix系统就把主机+端口,叫做 套接字(socket)。有了它,就可以进行网络应用程序开发了。现在,我们必须在数据包中加入端口信息,这就需要新的协议。最简单的实现叫做UDP协议,它的格式几乎就是在数据前面,加上端口号。UDP数据包,也是由标头和数据两部分组成:UDP数据包非常简单,标头部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包。UDP协议的优点是比较简单,容易实现,但是缺点是可靠性较差,一旦数据包发出,无法知道对方是否收到。为了解决这个问题,提高网络可靠性,TCP协议就诞生了。这个协议非常复杂,但可以近似认为,它就是有确认机制的UDP协议,每发出一个数据包都要求确认。如果有一个数据包遗失,就收不到确认,发出方就知道有必要重发这个数据包了。因此,TCP协议能够确保数据不会遗失。它的缺点是过程复杂、实现困难、消耗较多的资源。TCP数据包和UDP数据包一样,都是内嵌在IP数据包的数据部分。 TCP数据包没有长度限制,理论上可以无限长 ,但是为了保证网络的效率, 通常 TCP数据包的长度 不会超过IP数据包的长度 ,以确保单个TCP数据包不必再分割。应用程序收到传输层的数据,接下来就要进行解读。由于互联网是开放架构,数据来源五花八门,必须事先规定好格式,否则根本无法解读。应用层的作用,就是规定应用程序的数据格式。举例来说,TCP协议可以为各种各样的程序传递数据,比如Email、WWW、FTP等等。那么,必须有不同协议规定电子邮件、网页、FTP数据的格式,这些应用程序协议就构成了应用层。这是最高的一层,直接面对用户。它的数据就放在TCP数据包的数据部分。因此,现在的以太网的数据包就变成下面这样:

请用最简单的话,最容易理解的话讲一下什么是TCP/IP协议,举个例子
要想容易理解,站在设计者的角度来看就行了:当你铺设一个网络时你会发现,你设计的网用起来可能会不传输信息,或传输信息时信息之间常常发生冲突,使数剧无法顺利而正确地传输。这时你会怎么办呢?你是不是会想设计一套软件,来让信息有续而且合理地传输呢?是不是想设计一套软件来处理你的信息,让它们能转化成更有效转输的信号形式呢?(比如以“曼切斯特”波的形式传就可以传时钟信号,让数剧的接与发都同步,这样才能正确地传输数剧)。为了这样你就编了一套控制数剧传播的软件,这套软件,就是一个“协议”。TCPIP就是一个这样的协议,它的本质就是一套大型的控制网络数剧传输的软件。
TCP/IP(Transmission Control Protocol,TCP)即传输控制协议或网间协议 IP负责信息的实际传送,而TCP则保证所传送的信息是正确的。 比如说在数据传送中,可以形象地理解为有两个信封,TCP和IP就像是信封,要传递的信息被划分成若干段,每一段塞入一个TCP信封,并在该信封面上记录有分段号的信息,再将TCP信封塞入IP大信封,发送上网。在接受端,一个TCP软件包收集信封,抽出数据,按发送前的顺序还原,并加以校验,若发现差错,TCP将会要求重发。因此,TCP/IP在INTERNET中几乎可以无差错地传送数据。
就是一个约定好的通信协议,就像中国人说中文一样,对一个不懂外语的人说外语他肯定不明白.TCP/IP协议也是一样,是一编定好的数据传输过程.如果不用这种方式包装并发送数据,那对方电脑就不认识了(当然还有别的协议可用).当然这只是简单来说,实际TCP/IP协议的内容是很丰富的.
就象写信寄信一样,TCP是写信,装信,IP是信封上的地址. TCP是把信息分段,打包,发送,IP是要发到的地址
先来说什么叫协议,它就好比我们日常生活中你与别人或某个行业进行交易活动时,彼此都会有一定的约定。而网络上的TCP/IP协议只是7层中的网络层与网络层间的一个通信”约定“而也。就像我们生活中处于不同层次的交易约定一样。这样说你能明白嘛?

本文由 在线网速测试 整理编辑,转载请注明出处。