运输层协议通常具有几种责任。一种是创建进程到进程的通信;UDP和TCP使用端口来完成这种通信。另一种责任就是在运输层提供控制机制。UDP在一个非常低的水平上完成这个功能。UDP没有流量控制机制,在收到分组时也没有确认。但是,UDP提供了某种程度的差错控制。如果UDP检测出在收到的分组中有差错,它就悄悄地丢弃这个分组。而TCP使用滑动窗口协议来完成流量控制。TCP使用确认分组,超时和重传来完成差错控制。
运输层还应负责为应用程序提供连接机制。这些应用程序应当能够向运输曾发送数据流。在发送站运输层分责任是和接收站建立连接,把数据流分割成可运输地单元,把它们编号,然后逐个发送它们。运输层在接收端的责任是等待属于同一个进程的所有不同单元的到达,检查并放过那些没有差错的单元,并以流的方式把它们交付给接收进程。当全部的流都发送完毕后,运输层应当关闭这个连接TCP完成所有上面的工作,而UDP不完成!
UDP叫做无连接的、不可靠的运输协议。TCP叫做面向连接的、可靠的运输协议,它给IP服务提供了面向连接和可靠性的特点。TCP/IP协议族为运输层指明了两个协议:TCP和UDP。它们都是作为应同程序和网络 *** 作的中介物。
运输层协议通常具有几种责任。一种是创建进程到进程的通信;UDP和TCP使用端口来完成这种通信。另一种责任就是在运输层提供控制机制。UDP在一个非常低的水平上完成这个功能。UDP没有流量控制机制,在收到分组时也没有确认。但是,UDP提供了某种程度的差错控制。如果UDP检测出在收到的分组中有差错,它就悄悄地丢弃这个分组。而TCP使用滑动窗口协议来完成流量控制。TCP使用确认分组,超时和重传来完成差错控制。
运输层还应负责为应用程序提供连接机制。这些应用程序应当能够向运输曾发送数据流。在发送站运输层分责任是和接收站建立连接,把数据流分割成可运输地单元,把它们编号,然后逐个发送它们。运输层在接收端的责任是等待属于同一个进程的所有不同单元的到达,检查并放过那些没有差错的单元,并以流的方式把它们交付给接收进程。当全部的流都发送完毕后,运输层应当关闭这个连接TCP完成所有上面的工作,而UDP不完成!
UDP叫做无连接的、不可靠的运输协议。TCP叫做面向连接的、可靠的运输协议,它给IP服务提供了面向连接和可靠性的特点。
UDP分组叫做用户数据报。有8个字节的固定首部,源端口号、目的端口号、长度和检验和各2个字节。
UDP长度 = IP长度 - IP首部长度
下面是UDP的某些用途:
UDP适用于这样的进程,它需要简单的请求-响应通信,而较少考虑流量控制和差错控制。对于需要传送成块数据的进程,如FTP,通常不使用UDP。
UDP适用于具有内部流量控制和差错控制机制的进程。例如,简单文本传送协议(TFTP)的进程就包括流量控制和差错控制。它能够很容易地使用UDP。
对多播和广播来说,UDP是个合适的运输协议。多播和广播能力已经嵌入在UDP软件中,但没有嵌入在TCP软件中。
UDP可用于管理进程,如SNMP
UDP可用于某些路由选择更新协议,如路由信息协议(RIP) 补充: 根据微软的资料,简单 TCP/IP 服务内容为:
简单TCP/IP 服务为下表中列出的可选 TCP/IP 协议服务提供支持。
Character Generator (CHARGEN)
发送由 95 个可打印 ASCII 字符集组成的数据。作为调试工具用于行式打印机的测试或疑难解答。
864Daytime返回包含星期几、月、日、年、当前时间(以 hh:mm:ss 格式),以及时区信息的消息。有些程序能使用该服务的输出调试或监视系统时钟时间或在另一台主机上的变化。
867Discard丢弃在此端口收到的所有消息,不进行响应或确认。可以充当空端口,在网络安装和配置期间接收和路由 TCP/IP 测试消息,或在某些情况下,可以被程序用作消息丢弃功能。
863Echo回显在此服务器端口收到的任何消息的数据。Echo 可用作网络调试和监视工具。
862Quote of the Day (QUOTE)
返回对消息中一行或多行文本的引用。引用是从以下文件中随机选取的:systemroot\System32\Drivers\Etc\Quotes。示例引用文件随简单 TCP/IP 服务一起安装。如果该文件丢失,引用服务将无法使用。这个简单,利用websocket,轻松搞定。
private async Task ProcessWSChat(AspNetWebSocketContext arg)
{
var sw = new Stopwatch();
swStart();
WebSocket socket = argWebSocket;
while (true)
{
ArraySegment<byte> buffer = new ArraySegment<byte>(new byte[1024]);
WebSocketReceiveResult result = await socketReceiveAsync(buffer, CancellationTokenNone);
if (socketState == WebSocketStateOpen)
{
string message = EncodingUTF8GetString(bufferArray, 0, resultCount);
string returnMessage = "You send :" + message + " at" + DateTimeNowToLongTimeString();
buffer = new ArraySegment<byte>(EncodingUTF8GetBytes(returnMessage));
await socketSendAsync(buffer, WebSocketMessageTypeText, true, CancellationTokenNone);
}
else
{
break;
}
}
swStop();
//swElapsed;
}s:为绑定的套接字。
addr:为TCP应该是一个有效的SOCKADDR_IN的地址,如果是其他协议就应该是相应的SOCKADDR结构。
addr:为SOCKADDR_IN结构体的长度。
返回值:其返回一个新的套接字描述符,其后与客服端的所有 *** 作都应该使用该新的套接字。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)