TCP 和 UDP

TCP/IP五层网络结构模型

  • 物理层:物理层创建在物理通讯介质的基础上,做为系统和通讯介质的接口,用来实现数据链路实体间透明的比特 (bit) 流传输。只有该层为真实物理通讯,其它各层为虚拟通讯api

  • 数据链路层:在物理层提供比特流服务的基础上,创建相邻结点之间的数据链路,经过差错控制提供数据帧(Frame)在信道上无差错的传输,并进行各电路上的动做系列。数据的单位称为帧(frame)服务器

  • 网络层:选择合适的路由,使数据分组(packet)能够交付到目的主机网络

  • 传输层:负责主机中进程间的通讯并发

  • 应用层:直接为用户的应用程序提供服务less

UDP详解

如下内容来自wiki - 最英俊的百科全书tcp

用户数据报协议(英语:User Datagram Protocol,缩写为UDP),又称使用者资料包协定,是一个简单的面向数据报的传输层协议,正式规范为RFC 768。
在TCP/IP模型中,UDP为网络层以上和应用层如下提供了一个简单的接口。UDP只提供数据的不可靠传递,它一旦把应用程序发给网络层的数据发送出去,就不保留数据备份(因此UDP有时候也被认为是不可靠的数据报协议)。UDP在IP数据报的头部仅仅加入了复用和数据校验(字段)。函数

UDP的优势

  • 无需创建链接(减小延迟)
  • 实现简单:无需维护链接状态
  • 头部开销小(最小值为8byte)
  • 没有拥塞控制:应用能够更好的控制发送时间和发送速率

UDP头部:


UDP的头部是由源端口号、目标端口号、包长和校验4个部分组成,其中两个是可选的。各16bit的来源端口和目的端口用来标记发送和接受的应用进程。由于UDP不须要应答,因此来源端口是可选的,若是来源端口不用,那么置为零。在目的端口后面是长度固定的以字节为单位的长度域,用来指定UDP数据报包括数据部分的长度,长度最小值为8byte。首部剩下地16bit是用来对首部和数据部分一块儿作校验和(Checksum)的,checksum主要是用来检测UDP段在传输中是否发生了错误。还有就是,校验和计算中也须要计算UDP伪头部,伪头部包含IP头部的一些字段。咱们刚才介绍了识别一个通讯须要5项信息,而UDP头部只有端口号,余下的三项在IP头部,因此引入了伪头部的概念。(IPv6的IP头部没有校验和字段)ui

基于UDP协议的有:

  • 域名系统(DNS)
  • 简单网络管理协议(SNMP)
  • 动态主机配置协议(DHCP)
  • 路由信息协议(RIP)
  • 自举协议(BOOTP)
  • 简单文件传输协议(TFTP)

TCP详解

如下内容来自wiki - 最英俊的百科全书
传输控制协议(英语:Transmission Control Protocol)是一种面向链接的、可靠的、基于字节流的传输层通讯协议,由IETF的RFC 793定义。
在因特网协议族(Internet protocol suite)中,TCP层是位于IP层之上,应用层之下的中间层。不一样主机的应用层之间常常须要可靠的、像管道同样的链接,可是IP层不提供这样的流机制,而是提供不可靠的包交换。
应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,而后TCP把数据流分区成适当长度的报文段(一般受该计算机链接的网络的数据链路层的最大传输单元(MTU)的限制)。以后TCP把结果包传给IP层,由它来经过网络将包传送给接收端实体的TCP层。TCP为了保证不发生丢包,就给每一个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。而后接收端实体对已成功收到的包发回一个相应的确认(ACK);若是发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包就被假设为已丢失将会被进行重传。TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和编码

三次握手

TCP用三路握手(three-way handshake)过程建立一个链接。在链接建立过程当中,不少参数要被初始化,例如序号被初始化以保证按序传输和链接的强壮性。3d

  • 客户端经过向服务器端发送一个SYN来建立一个主动打开,做为三路握手的一部分。客户端把这段链接的序号设定为随机数A。
  • 服务器端应当为一个合法的SYN回送一个SYN/ACK。ACK的确认码应为A+1,SYN/ACK包自己又有一个随机序号B。
  • 最后,客户端再发送一个ACK。当服务端受到这个ACK的时候,就完成了三路握手,并进入了链接建立状态。此时包序号被设定为收到的确认号A+1,而响应则为B+1。

TCP状态编码

下表为TCP状态码列表,以S指代服务器,C指代客户端,S&C表示二者,S/C表示二者之一:[1]

  • LISTEN S
    等待从任意远程TCP端口的链接请求。侦听状态。
  • SYN-SENT C
    在发送链接请求后等待匹配的链接请求。经过connect()函数向服务器发出一个同步(SYNC)信号后进入此状态。
  • SYN-RECEIVED S
    已经收到并发送同步(SYNC)信号以后等待确认(ACK)请求。
  • ESTABLISHED S&C
    链接已经打开,收到的数据能够发送给用户。数据传输步骤的正常状况。此时链接两端是平等的。
  • FIN-WAIT-1 S&C
    主动关闭端调用close()函数发出FIN请求包,表示本方的数据发送所有结束,等待TCP链接另外一端的确认包或FIN请求包。
  • FIN-WAIT-2 S&C
    主动关闭端在FIN-WAIT-1状态下收到确认包,进入等待远程TCP的链接终止请求的半关闭状态。这时能够接收数据,但再也不发送数据。
  • CLOSE-WAIT S&C
    被动关闭端接到FIN后,就发出ACK以回应FIN请求,并进入等待本地用户的链接终止请求的半关闭状态。这时能够发送数据,但再也不接收数据。
  • CLOSING S&C
    在发出FIN后,又收到对方发来的FIN后,进入等待对方对链接终止(FIN)的确认(ACK)的状态。少见。
  • LAST-ACK S&C
    被动关闭端所有数据发送完成以后,向主动关闭端发送FIN,进入等待确认包的状态。
  • TIME-WAIT S/C
    主动关闭端接收到FIN后,就发送ACK包,等待足够时间以确保被动关闭端收到了终止请求的确认包。【按照RFC 793,一个链接能够在TIME-WAIT保证最大四分钟,即最大分段寿命(maximum segment lifetime)的2倍】
  • CLOSED S&C
    彻底没有链接。

基于TCP实现的协议有

  • HTTP/HTTPS,
  • Telnet
  • FTP
  • SMTP

TCP(Transmission Control Protocol)和UDP(User DataGram Protocol)的区别

下面咱们主要从链接性(Connectivity)、可靠性(Reliability)、有序性(Ordering)、有界性(Boundary)、拥塞控制(Congestion or Flow control)、传输速度(Speed)、量级(Heavy/Light weight)、头部大小(Header size)等8个方面来对比它们:

  1. TCP是面向链接(Connection oriented)的协议,UDP是无链接(Connection less)协议;
    TCP用三次握手创建链接:1) Client向server发送SYN;2) Server接收到SYN,回复Client一个SYN-ACK;3) Client接收到SYN_ACK,回复Server一个ACK。到此,链接建成。UDP发送数据前不须要创建链接。
  2. TCP可靠,UDP不可靠;TCP丢包会自动重传,UDP不会。
  3. TCP有序,UDP无序;消息在传输过程当中可能会乱序,后发送的消息可能会先到达,TCP会对其进行重排序,UDP不会。
  4. TCP无界,UDP有界;TCP经过字节流传输,UDP中每个包都是单独的。
  5. TCP有流量控制(拥塞控制),UDP没有;主要靠三次握手实现。
  6. TCP传输慢,UDP传输快;由于TCP须要创建链接、保证可靠性和有序性,因此比较耗时。这就是为何视频流、广播电视、在线多媒体游戏等选择使用UDP。
  7. TCP是重量级的,UDP是轻量级的;TCP要创建链接、保证可靠性和有序性,就会传输更多的信息,如TCP的包头比较大。
  8. TCP的头部比UDP大;TCP头部须要20字节,UDP头部只要8个字节
相关文章
相关标签/搜索