TCP UDP Socket

TCP(Transmission Control Protocol,传输控制协议) 
TCP是基于链接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的链接。一个TCP连接必须要经过三次”对话”才能建立起来,其中的过程非常复杂,我们这里只做简单,行象的介绍,你只要做到能够理解这个过程即可。

三次连接过程: 
  1.主机A向主机B发出连接请求数据包:”我想给你发数据,可以吗?” 
  2.主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作)的数据包:”可以,你什么时候发?” 
  3.主机A再发出一个数据包确认主机B的要求同步:”我现在就发,你接着吧!” 
三次”对话”的目的是使数据包的发送和接收同步,经过三次”对话”之后,主机A才向主机B正式发送数据。

UDP(User Data Protocol,用户数据报协议) 
UDP是于TCP相对应的协议。它是面向非连接的协议,它不与对方建立接连,而是直接把数据包发送过去! 
UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境。比如,我们经常使用“ping”命令来测试两台主机之间TCP/IP通信是否正常,其实“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。例如,在默认状态下,一次“ping”操作发送4个数据包(如图2所示)。大家可以看到,发送的数据包数量是4包,收到的也是4包(因为对方主机收到后会发回一个确认收到的数据包)。这充分说明了UDP协议是面向非连接的协议,没有建立连接的过程。正因为UDP协议没有连接的过程,所以它的通信效果高;但也正因为如此,它的可靠性不如TCP协议高。QQ就使用UDP发消息,因此有时会出现收不到消息的情况。 

概念 
TCP(传输控制协议)和UDP(用户数据报协议) 
TCP:一种面向连接的协议,给用户进程提供可靠的全双工的字节流,TCP套接口是字节流套接口(stream socket)的一种。 
UDP:一种无连接协议。UDP套接口是数据报套接口(datagram socket)的一种。

TCP和UDP介绍 
1.基于TCP客户——服务器程序设计基本框架 
这里写图片描述 
说明:(三路握手) 
  (1).客户端发送一个SYN段(同步序号)指明客户打算连接的服务器端口,以及初始化序号(ISN)。 
  (2).服务器发回包含服务器的初始化序号的SYN报文段作为应答。同时,将确认序号(ACK)设置为客户端的ISN加1以对客户的SYN报文段进行确认。一个SYN将占用一个序号。 
  (3).客户必须将确认序号设置为服务器的ISN加1以对服务器的SYN报文进行确认。 
这里写图片描述

2.基于UDP客户——服务器程序设计基本框架流程图 
这里写图片描述

3.UDP和TCP的对比 
从上面的流程图比较我们可以很明显的看出UDP没有三次握手过程。 
简单点说,UDP处理的细节比TCP少。UDP不能保证消息被传送到(它也报告消息没有传送到)目的地。UDP也不保证数据包的传送顺序。UDP把数据发出去后只能希望它能够抵达目的地。

TCP优缺点: 
优点: 
  1.TCP提供认可的方式显式地创建和终止连接。 
  2.TCP保证可靠的,顺序的(数据包以发送的顺序接收)以及不会重复的数据传输。 
  3.TCP处理流控制。 
  4.允许数据优先 
  5.如果数据没有传送到,则TCP套接口返回一个出错状态条件。 
  6.TCP通过保持连续并将数据块分成小的分片来处理大数据块。无需程序员知道。 

缺点: 
  1.TCP在转移数据时必须创建(并保持)一个连接。这个连接给通信进程增加了开销,让它比UPD速度要慢。

UDP优缺点: 
  1.UDP不要求保持一个连接。 
  2.UDP没有因接收认可收到数据包(或者当数据包没有正确抵达而自动重传)而带来的开销。 
  3.设计UDP的目的是用于短应用和控制消息。 
  4.在一个数据包连接一个数据包的基础上,UDP要求的网络带宽比TCP更小。

Socket编程 
Socket接口是TCP/IP网络的API,Socket接口定义了许多函数,程序员可以用它们来开发TCP/IP网络上的应用程序。要学Internet上的TCP/IP网络编程,必须理解Socket接口。 
Socket接口设计者最先是将接口放在Unix操作系统里面的。如果了解Unix系统的输入和输出的话,就很容易了解Sokcet了。网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的链接建立,数据传输等操作都是通过该Socket实现的。常用的Socket类型有两种:流失Socket(SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)。流式是一种面向链接的Socket,针对于面向链接的TCP服务应用;数据报式Socket是一种无链接的Socket,对应于无链接的UDP服务应用。

TCP/IP工作流程 
服务器的工作流程: 
首先调用Socket函数创建一个Socket,然后调用bind函数将其与本机地址以及一个本地端口号绑定,然后调用listen在相应的Socket上监听,当accpet接收到一个链接服务请求时,将生成一个新的Socket。服务器显示该客户机的IP地址,并通过新的Socket向客户端发送字符串”hi,I am server!”。最后关闭该Socket。

客户端的工作流程: 
首先调用Socket函数创建一个Socket,然后调用bind函数将其与本机地址以及一个本地端口号绑定,请求链接服务器,通过新的Socket向服务器发送字符串”hi,I am client!”。最后关闭该Socket。

UDP工作流程 
服务器的工作流程: 
首先调用Socket函数创建一个Socket,然后调用bind函数将其与本机地址以及一个本地端口号绑定,接收到一个客户端时,服务器显示该客户端的IP地址,并将字符串返回给客户端。

客户端的工作流程: 
首先调用Socket函数创建一个Socket,填写服务器地址及端口号,从标准输入设备中取得字符串,将字符串传送给服务器端,并接收服务器端返回的字符串。最后关闭该Socket。

猜你喜欢

转载自www.cnblogs.com/jiuyi/p/10114934.html