精华内容
下载资源
问答
  • 【计算机网络】 数据报套接字 数据报套接字。它提供了一种无连接、不可靠的双向数据传输...在出现差错的可能性较小或允许部分传输出错的应用场合,可以使用数据报套接字进行数据传输,这样通信的效率较高。其服务灵...

    引言

    数据报套接字。它提供了一种无连接、不可靠的双向数据传输服务。数据包以独立的形式被发送,并且保留了记录边界,不提供可靠性保证。数据在传输过程中可能会丢失或重复,并且不能保证在接收端按发送顺序接收数据。在TCP/IP协议簇中,使用UDP协议来实现数据报套接字。在出现差错的可能性较小或允许部分传输出错的应用场合,可以使用数据报套接字进行数据传输,这样通信的效率较高。其服务灵活简单,在现实生活中得到了广泛的应用。

    TCP传输数据的缺点

    在了解UDP协议之前,我们需要先来了解一下TCP协议存在哪些缺陷呢?
    相当于UDP协议来说,TCP协议增加了可靠性,流量控制、拥塞控制等机制,能够保证数据传递的可靠性,那么是不是在所有情况下使用TCP协议都是最合适的呢?

    • 首先,使用TCP协议传输数据的代价相对于UDP协议而言要高许多。如果使用TCP协议实现一次请求-应答交换,由于TCP协议使用3次握手建立连接,并且再关闭连接时进行4四次挥手交互,那么最小事务处理时间将是2✖RTT+SPT,其中RTT表示客户与服务器之间的往返时间,STP表示客户请求的服务器处理时间。相比之下,UDP没有连接建立和释放时间,就单个UDP请求-应答交互而言的最小处理时间仅为RTT+SPT,比TCP减少了一个RTT。因此,传输代价是使用TCP协议时必须要考虑的一个损失。
    • 其次,连接的存在意味着连接维护的代价。服务器要为每一个已经建立连接的客户分配单独使用的资源,如用于接收和发送的TCP缓冲区、存储连接相关参数的TCP变量等,这对于有可能胃痛是来自数百个不同客户的请求提供服务的服务器来说,会严重增加该服务器的负担,甚至于造成服务器资源的过耗。
    • 最后,在每个连接的通信过程中,TCP拥塞控制中的慢启动策略会起作用,使得每个TCP连接都要起始于慢启动阶段。由此带来的结果是数据通信的效率不会马上到达TCP的最大传输性能,也因此增大了使用TCP协议进行网络通信的传输延迟。

    由此分析来看,尽管TCP提供了可靠的数据传输服务,简化了上层应用程序的设计复杂性,但同时也有一些性能和资源方面的损失,TCP协议未必是所有网络应用程序在选择传输协议时最佳的的选择。

    UDP传输特点

    UDP协议是一个无连接的传输层协议,提供面向事务的简单、不可靠的信息传送服务。

    UDP协议的传输特点表现在以下方面:
    多对多通信:UDP在通信实体的数据量上具有更大的灵活性,多个发送方可以向一个接收方发送报文,一个发送方也可以向多个接收方发送数据,更重要的是,UDP能让应用使用底层网络的广播或者组播设施交付报文。

    不可靠服务:UDP提供的服务是不可靠交付的,即报文可以丢失、重复或失序,它没有重传设施,如果发生故障,也不会通知发送方。

    缺乏流量控制:UDP不提供流量控制,当数据包到达的速度比接收系统或应用的处理速度快时,只是将其丢弃而不会发出警告。

    报文模式:UDP提供了面向报文的传输方式,在需要传输数据的时候,发送方准确指明要求发送数据的字节数,UDP将这些数据放置在一个外发送报文中,在接受方,UDP一次交付一个传入报文。因此当有数据交付时,接收到的数据拥有和发送方应用程序所指定的一样的报文边界。

    UDP首部

    UDP数据报文封装在IP数据包的数据部分,UDP数据在IP数据包中的封装如下图所示:
    在这里插入图片描述

    (1)UDP首部的数据格式如下

    在这里插入图片描述

    (2)UDP首部个字段的含义如下

    • 1.源、目的端口号。每个UDP数据的报文都包含源端口号和目的端口号,用于寻找发送端和接收端的应用进程。UDP端口号和TCP端口号是相互独立的。
    • 2.UDP长度。UDP长度字段指UDP首部和UDP数据的字节总长度,该字段的最小值是8,即数据部分位0.
    • 3.UDP校验和。UDP校验和是一个端到端的校验和。它由发送端计算,然后由接收端验证,其目的是发现UDP首部和数据在发送端到接收端之间发生的任何变动。检验和的覆盖范围包括UDP首部、UDP伪首部和UDP数据。UDP的校验和是可选的,如果UDP中校验和字段为0,表示不进行校验和计算。

    (3)数据报套接字编程的适用场合

    数据报套接字基于不可靠的报文传输服务,这种服务的特点是无连接、不可靠。无连接的特点决定了数据报套接字的传输非常灵活,具有资源消耗小、处理速度快的优点。而不可靠的特点意味着在网络质量不佳的环境下,发生数据包丢失的现象会比较严重,因此上层应用程序在设计开发时需要考虑网络应用程序运行的环境以及数据在传输过程中的丢失、乱序、重复对应用程序带来的负面影响。总体来看,数据报套接字适合于在以下场合使用:

    1)音频、视频的实时传输应用。数据报套接字适合用于音频、视频这类对实时性要求比较高的数据传输应用。传输内容通常被切分为独立的数据报,其类型多为编码后的媒体信息。在这种应用场景下,通常要求实时音视频传输,与TCP协议相比,UDP 协议减少了确认、同步等操作,节省了很大的网络开销。UDP协议能够提供高效率的传输服务,实现数据的实时性传输,因此在网络音视频的传输应用中,应用UDP协议的实时性并增加控制功能是较为合理的解决方案,如RTP和RTCP在音视频传输中是两个广泛使用的协议组合,通常RTP基于UDP传输音视频数据,RTCP基于TCP传输提供服务质量的监视与反馈、媒体间同步等功能。
    2)广播或多播的传输应用。流式套接字只能用于1对1的数据传输,如果应用程序需要广播或多播传送数据,那么必须使用UDP协议,这类应用包括多媒体系统的的多播或广播业务、局域网聊天室或者以广播形式实现的局域网扫描器等。
    3)简单高效需求大于可靠需求的传输应用。尽管UDP不可靠,但其高效的传输特点使其在一些特殊的传输应用中受到欢迎,比如聊天软件常常用到UDP协议传送文件,日志服务器通常设计位基于UDP协议来接受日志。这些应用不希望在每次传递小数据时消耗昂贵的TCP连接建立与维护代价,而且即使偶尔丢失一两个数据包,也不会对接受结果产生大影响,在这种场景下,UDP协议的简单高效特性就会非常的合适。

    数据报套接字的通信过程

    使用数据报套接字传送数据类似于生活中的邮件发送,与流式套接字的通信过程有所不同,数据报套接字不需要建立连接,而是直接根据目的地址构造数据包进行传送。

    (1)基于数据报套接字的服务器进程的通信过程

    在通信过程中,服务器进程作为服务提供方,被动接受客户的请求,使用UDP协议与客户交互,其基本通信过程如下:

    1) Windows Sockets DLL初始化,协商版本号:
    2)创建食接字,指定使用UDP (无连接的传输服务)进行通信:
    3)指定本地地址和通信端口;
    4)等待客户的数据请求;
    5)进行数据传输;
    6)关闭套接字;
    7)结束对Windows Sockets DLL的使用,释放资源。

    (2)基于数据报套接字的客户进程的通信过程

    在通信过程中,客户进程作为服务请求方,主动向服务器发送服务器请求,使用UDP协议与服务器交互,其基本通信过程如下:

    1) Windows Sockets DLL初始化,协商版本号;
    2)创建套接字,指定使用UDP (无连接的传输服务)进行通信;
    3)指定服务器地址和通信端口;
    4)向服务器发送数据请求;
    5)进行数据传输;
    6)关闭套接字;
    7)结束对Windows Sockets DLL的使用,释放资源。

    (3)数据报套接字的使用模式

    我们知道,UDP是一个无连接协议,也就是说,它仅仅传输独立的有目的地址的数据报。“连接”的概念似乎与数据报套接字无关,而实际上,在有些情况下,“连接”在数据报套接字中的使用可以帮助网络应用程序在可靠性和效率方面有一一定程度的优化。
    1.两种数据报套接字的使用模式
    在数据报套接字的使用过程中,可以有两种数据发送和接收的方式。

    • (1)非连接模式
      在非连接模式下,应用程序在每次数据发送前指定目的IP和端口号,然后调用sendto(函数或WSASendToO函数将数据发送出去,并在数据接收时调用recvfrom0函数或WSARecvFrom()函数,从函数返回参数中读取接收数据报的来源地址。这种模式通常适用于服务器的设计,服务器面向大量客户,接收不同客户的服务请求,并将数据应答发送给不同的客户地址。另外,这种模式也同样适用于广播地址或多播地址的发送。以广播方式发送数据为例,应用程序需要使用setsockopt()函数来开启SO_BROADCAST选项,并将目的地址设置为INADDR_ BROADCAST (相当于inet addr(“255.255.255.255" ))。

    非连接模式是数据报套接字默认使用的数据发送和接收方式,这种模式的优点是数据发送的灵活性较好。

    • (2)连接模式
      在连接模式下,应用程序首先调用connect()函数或WSAConnect()函数指明远端地址,即确定了唯一的通信对方地址,在之后的数据发送和接收过程中,不用每次重复指明远程地址就可以发送和接收报文。此时,send()函数、WSASend( )函数、sendto()函数和WSASendTo()函数可以通用,recv()函数、WSARecv()函数、recvfrom()函数和WSARecvFrom()函数也可以通用。处于连接模式的数据报套接字工作过程如图6-5所示,来自其他不匹配的IP地址或端口的数据报不会投递给这个已连接的套接字。如果没有相匹配的其他套接字,UDP将丢弃它们并生成相应的ICMP端口不可达错误。

    (4)"连接"在套接字中的含义

    对于TCP来说,调用connect0将导致双方进人TCP的三次握手初始化连接阶段,客户会发送SYN段给服务器,接收服务器返回的确认和同步请求,在连接建立好后,双方交换了一些初始的状态信息,包括双方的IP地址和端口号。因此,对于流式套接字的connect()函数操作而言,connect() 函数完成的功能是: 1) 在调用方为套接字关联远程主机的地址和端口号; 2)与远端主机建立连接。该函数的成功暗示着服务器是正在提供服务的且双方的路径是可达的。从使用次数上来看,connect() 函数只能在流式套接字上调用次。

    对于UDP来说,由于双方没有共享状态要交换,所以调用connect()函数完全是本地操作,不会产生任何网络数据。因此,对于数据报套接字的connect()操作而言,conect)函数完成的功能是:在调用方为套接字关联远程主机的地址和端口号。由于没有网络通信行为发生,该函数的成功并不意味着对等方- -定会对后续的数据请求产生回应,可能服务器是关闭的,也可能网络根本就没用连通。也可能网络根本就没有连通。一个 数据报套接字可以多次调用cnnect()函数,目的可能是: 1)指定新的IP地址和端口号; 2)断开套接字。对于第一个目的,通过再次调用connect(), 可以使得数据报套接字更新所关联的远端端点地址;对于第二个目的,为了断开一个已连接的数据报套接字,在再次调用connect()函数时,把套接字地址结构的地址族成品设置为AF_UNSPEC,此时,后续的send()/WSASend()、recvO/WSARecv()函数都将返回错误。

    数据报通信代码如下

    客户端:

    #define WIN32_LEAN_AND_MEAN
    #include <windows.h>
    #include <winsock2.h>
    #include <ws2tcpip.h>
    #include <stdlib.h>
    #include <stdio.h>
    
    #pragma comment (lib, "Ws2_32.lib")
    #pragma comment (lib, "Mswsock.lib")
    #pragma comment (lib, "AdvApi32.lib")
    
    #define DEFAULT_BUFLEN 512
    #define DEFAULT_PORT "27015"
    
    int __cdecl main(int argc, char **argv)
    {
    	WSADATA wsaData;
    	SOCKET ConnectLessSocket = INVALID_SOCKET;
    	struct addrinfo *result = NULL, *ptr = NULL, hints;
    	char *sendbuf = "this is a test";
    	char recvbuf[DEFAULT_BUFLEN];
    	int iResult;
    	int recvbuflen = DEFAULT_BUFLEN;
    	if (argc != 2) {
    		printf("usage: %s server-name\n", argv[0]);
    		return 1;
    	}
    
    	//初始化套接字
    	iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
    	if (iResult != 0) {
    		printf("WSAStartup failed with error: %d\n", iResult);
    		return 1;
    	}
    	ZeroMemory(&hints, sizeof(hints));
    	hints.ai_family = AF_UNSPEC;
    	hints.ai_socktype = SOCK_DGRAM;
    	hints.ai_protocol = IPPROTO_UDP;
    
    	//解析服务器地址和端口号
    	iResult = getaddrinfo(argv[1], DEFAULT_PORT, &hints, &result);
    	if (iResult != 0) {
    		printf("getaddrinfo failed with error: %d\n", iResult);
    		WSACleanup();
    		return 1;
    	}
    	//创建数据报套接字
    	ConnectLessSocket = socket(result->ai_family, result->ai_socktype, result->ai_protocol);
    	if (ConnectLessSocket == INVALID_SOCKET) {
    		printf("scoket failed with error: %ld\n", WSAGetLastError());
    		WSACleanup();
    		return 1;
    	}
    
    	//发送缓冲区中的测试数据
    	iResult = sendto(ConnectLessSocket, sendbuf, (int)strlen(sendbuf), 0, result->ai_addr, (int)result->ai_addrlen);
    	if (iResult == SOCKET_ERROR) {
    		printf("send failed with error: %d\n", WSAGetLastError());
    		closesocket(ConnectLessSocket);
    		WSACleanup();
    		return 1;
    	}
    	freeaddrinfo(result);
    	printf("Bytes Sent: %ld\n", iResult);
    
    	//接收数据 
    	iResult = recvfrom(ConnectLessSocket, recvbuf, recvbuflen, 0, NULL, NULL);
    	if (iResult > 0)
    		printf("Bytes received: %d\n", iResult);
    	else if (iResult == 0)
    		printf("Connection closed\n");
    	else
    		printf("recv failed with error: %d\n", WSAGetLastError());
    	//关闭套接字
    	closesocket(ConnectLessSocket);
    	//释放资源
    	WSACleanup();
    	system("pause");
    	return 0;
    }
    
    

    服务端:

    #define _CRT_SECURE_NO_WARNINGS 1
    #define WIN32_LEAN_AND_MEAN
    #include <windows.h>
    #include <winsock2.h>
    #include <ws2tcpip.h>
    #include <stdlib.h>
    #include <stdio.h>
    
    #pragma comment (lib, "Ws2_32.lib")
    #pragma comment (lib, "Mswsock.lib")
    #pragma comment (lib, "AdvApi32.lib")
    
    #define DEFAULT_BUFLEN 512
    #define DEFAULT_PORT "27015"
    
    int __cdecl main(int argc, char **argv)
    {
    	WSADATA wsaData;
    	int iResult;
    	SOCKET ServerSocket = INVALID_SOCKET;
    	struct addrinfo *result = NULL;
    	struct addrinfo hints;
    	sockaddr_in clientaddr;
    	int clientlen = sizeof(clientaddr);
    	int iSendResult;
    	char recvbuf[DEFAULT_BUFLEN];
    	int recvbuflen = DEFAULT_BUFLEN;
    	//初始化WinSock
    	iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
    	if (iResult != 0) {
    		printf("WSAStartup failed with error: %d\n", iResult);
    		return 1;
    	}
    	ZeroMemory(&hints, sizeof(hints));
    	//声明IPV4地址族,流式套接字,UDP协议
    	hints.ai_family = AF_INET;
    	hints.ai_socktype = SOCK_DGRAM;
    	hints.ai_protocol = IPPROTO_UDP;
    	hints.ai_flags = AI_PASSIVE;
    
    
    	//解析服务器地址和端口号
    	iResult = getaddrinfo(NULL, DEFAULT_PORT, &hints, &result);
    	if (iResult != 0) {
    		printf("getaddrinfo failed with error: %d\n", iResult);
    		WSACleanup();
    		return 1;
    	}
    
    	//为无连接的服务器创建套接字
    	ServerSocket = socket(result->ai_family, result->ai_socktype, result->ai_protocol);
    	if (ServerSocket == INVALID_SOCKET) {
    		printf("socket failed with error: %ld\n", WSAGetLastError());
    		freeaddrinfo(result);
    		WSACleanup();
    		return 1;
    	}
    
    	//为监听套接字绑定本地地址和端口号 
    	iResult = bind(ServerSocket, result->ai_addr, (int)result->ai_addrlen);
    	if (iResult == SOCKET_ERROR) {
    		printf("bind failed with error: %d\n", WSAGetLastError());
    		freeaddrinfo(result);
    		closesocket(ServerSocket);
    		WSACleanup();
    		return 1;
    	}
    	freeaddrinfo(result);
    
    	printf("UDP server starting\n");
    	ZeroMemory(&clientaddr, sizeof(clientaddr));
    
    	//recvfrom函数直接在参数中指定接收数据的源地址
    	iResult = recvfrom(ServerSocket, recvbuf, recvbuflen, 0, (SOCKADDR*)&clientaddr, &clientlen);
    	if (iResult > 0) {
    		//情况1:成功接收到数据
    		printf("Bytes received: %d\n", iResult);
    		//将缓冲区的内容回送给客户端
    		//sendto函数也是同理,在参数中指定数据要发送到的目的地址
    		iSendResult = sendto(ServerSocket, recvbuf, iResult, 0, (SOCKADDR*)&clientaddr, clientlen);
    		if (iSendResult == SOCKET_ERROR){
    			printf("send failed with error: %d\n", WSAGetLastError());
    			closesocket(ServerSocket);
    			WSACleanup();
    			return 1;
    		}
    		printf("Bytes sent: %d\n", iSendResult);
    	}
    	else if (iResult == 0)
    		//情况2:关闭连接
    		printf("Connection closing...\n");
    	else {
    		//情况3:接收发生错误
    		printf("recv failed with error: %d\n", WSAGetLastError());
    		closesocket(ServerSocket);
    		WSACleanup();
    		return 1;
    	}
    	//关闭套接字
    	closesocket(ServerSocket);
    	//释放资源
    	WSACleanup();
    	system("pause");
    	return 0;
    }
    
    
    
    
    展开全文
  • 虚电路服务数据报服务的对比

    千次阅读 2018-07-19 22:33:15
    数据报服务 思路 可靠通信应当网络来保证 可靠通讯应当用户主机来保证 连接的建立 必须有 不需要 终地址 仅在连接建立阶段使用,每个分组使用短的虚电路号 每个分组都有终点...
     虚电路服务数据报服务
    思路可靠通信应当由网络来保证

    可靠通讯应当由用户主机来保证

    连接的建立必须有不需要
    终地址仅在连接建立阶段使用,每个分组使用短的虚电路号每个分组都有终点的完整地址
    分组的转发属于同一条虚电路的分组均按照同一路由进行转发每个分组独立选择路由进行转发
    当结点出故障时所有通过出故障的结点的虚电路均不能工作出故障的结点可能会丢失分组,一些路由可能会发生变化
    分组的顺序总是按发送顺序到达终点

    到达终点时不一定按发送顺序

    差错处理和流量控制由网络负责,也可以由用户主机负责由用户主机负责
    展开全文
  • 计算机通信的一个争论焦点--可靠交付应当谁来负责到底是网络还是端系统?...2、数据报服务 二、虚电路服务 这只是原节点和目标节点建立的一条逻辑连接。可以不写地址,如从H1到H2的逻辑连接是固定了。 如...

    计算机通信的一个争论焦点--可靠交付应当由谁来负责到底是由网络还是端系统?

    实际上是端系统实现的可靠传输而不是网络,网络在比较堵的情况下有可能把数据包丢了,路由器不管,对方接受到的数据丢包了则让发送方重发。

    一、网络层应该向运输层提供什么服务?

    1、虚电路服务

    2、数据报服务

    二、虚电路服务

    这只是原节点和目标节点建立的一条逻辑连接。可以不写地址,如从H1到H2的逻辑连接是固定了。

    如果虚电路的网断开了则H1和H2将无法通信,但是两个通信设备可以建立多个虚电路连接

     

    ① 虚电路表示这只是一条逻辑上的连接,分组都沿着这条逻辑连接按照存储转发方式传送,而不是真正建立一条物理连接

    ② 需要注意的是电路交换的电话通信是先建立了一条真正的连接,因此分组交换的虚连接和电路交换的连接只是类似,但并不完全一样。

    ③ 对于虚电路服务,如果目标主机处理不过来可以通知发送主机发停止发送,处理完成后通知其继续发

    三、数据报服务

    数据报写上ip地址,由路由器选择下一次怎么走。更灵活。

    路由器不管数据发送过程是否出错,反正处理不过来就丢,比如路由器的口只能接受20个数据包,来了100个排队站不下则丢失了。

    传送过程走哪条路径也是路由器根据路由表临时决定的。如果某条网线断了可以自动选择另一条路径。

    对于数据报服务

    ① 网络层向上只提供简单灵活的、无连接的尽最大努力交付的数据报服务。 

    ② 网络在发送分组的时候不需要先建立连接,每个分组(IP数据报)独立发送,与其前后的分组无关(不进行编号)

    ③ 网络层不提供服务质量的承诺,即传送的分组可能出现出错、丢失、重复和失序(不按顺序到达终点

    尽最大努力交付

    ① 由于传输网路不提供端到端的可靠传输服务,这就使网络中路由器可以做的比较简单,而且价格低廉(与电信网的交换机相比)

    ② 如果主机(端系统)中的进程之间的通信需要可靠传输那么就由网络主机中的运输层负责可靠交付(包括差错控制,流量控制等)

     现在的计算机使用的就是数据报服务而不是虚电路服务

     更多虚电路和数据报的知识还可以参考:https://blog.csdn.net/21aspnet/article/details/7249522

    展开全文
  • 网络层提供的两种服务——虚电路服务数据报服务 1. 虚电路服务 传统电信网提供的主要业务是提供电话服务。电信网使用昂贵的程控交换机,用面向连接的通信方式,使电信网络能够向用户(实际上就是电话机)提供可靠...

    网络层提供的两种服务——虚电路服务和数据报服务

    1. 虚电路服务

    • 传统电信网提供的主要业务是提供电话服务。电信网使用昂贵的程控交换机,用面向连接的通信方式,使电信网络能够向用户(实际上就是电话机)提供可靠传输的服务。
    • 当两个计算机进行通信的步骤:
      (1)应当先建立连接(但在分组交换中是建立一条虚电路VC(Virtual Circuit)),以保证通信双方所需的一切网络资源。
      (2)然后双方就沿着已建立的虚电路发送分组。
      (3)这样的分组的首部就不需要填写完整的目的主机地址,而只需填写这条虚电路的编号(一个不大的整数),因而减少了分组的开销。
      (4)如果这种通信方式再使用可靠传输的网络协议,就可使所发送的分组无差错按序地到达终点,当然也不丢失、不重复。
      (5)在通信结束后,要释放建立的虚电路。
      这里写图片描述

    2. 数据报服务

    • 因特网在设计上就采用了和电信网完全不同的思路。
    • 由于传输网络不提供端到端的可靠传输服务,这就使网络中的路由器可以做得比较简单,而且价格低廉(与电信网的交换机相比较)。
    • 因特网的设计思路:
      (1)网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。网络在发送分组时不需要先建立连接。每个分组(也就是IP数据报)独立发送,与其前后的分组无关(不进行编号)。
      (2)网络层不提供服务质量的承诺。也就是说所传送的分组,可能出错、丢失、重复或失序,当然也不保证分组交付的时限。
    • 这种设计思路的好处:
      (1)网络的造价大大降低。
      (2)运行方式灵活。
      (3)能够适应多种应用。
      这里写图片描述

    3. 虚电路服务与数据报服务的对比

    这里写图片描述


    参考文献:
    [1]《计算机网络(第5版)》谢希仁——第四章 4.1

    展开全文
  • IP数据报格式分析

    千次阅读 2019-04-07 17:50:27
    文章目录前言NAT网络地址转换IP数据报 前言 在前面的文章中,我们知道,如果一个主机(开发板)想要访问外网,那必须经过NAT地址转换,就拿我们的电脑来说,它想要访问外网,那就必须将电脑的IP地址转换为公网的IP...
  • 虚电路服务数据报服务

    千次阅读 2020-05-19 15:49:38
    虚电路服务数据报服务 概念 虚电路 类似电话通信中的电话线路,但区别在于虚电路是逻辑上的连接,电话线是(看得见、摸得着)物理连接。 虚电路服务 两台计算机通信前,先建立一条虚电路(虚电路上的网络资源暂时...
  • IP数据报

    万次阅读 多人点赞 2018-06-08 17:03:45
    在Internet中它是能使连接到网络上的所有设备实现相互通信的一套规则,它提供了一种尽力而为、无连接的数据报交付服务。“尽力而为”的含义是不保证IP数据报能成功到达目的地,任何可靠性必须上层(例如TCP)提供...
  • TCP协议保证通信可靠性的几种方法

    千次阅读 2020-05-25 12:37:06
    可靠的传输服务是指,能够把数据准确可靠地传给对方。一言以弊之,TCP协议为了更容易传送大数据才把数据分割,而且TCP协议能够确认数据最终是否送到对方。 三次握手 这应该是面试时经常会被问到的问题,以我的理解...
  • -- 数据结构包:帧  1.数据帧(Frame):就是数据链路层的协议数据单元,它包括三部分:帧头,数据部分,帧尾。其中,帧头和帧尾包含一些必要的控制信息,比如同步信息、地址信息、差错控制信息等;...数据报(Datag...
  • ip数据报格式详解

    千次阅读 2018-12-19 11:57:34
    IP数据报 一、 固定部分 (1)版本 占4位 (2)首部长度 占4位 (3)区分服务 占8位  (4)总长度 占16位 (5)标识(identification) 占16位 (6)标志(flag) 占3位 (7)片偏移 占13位 (8)生存时间 占8位 (9)...
  • UDP数据报

    千次阅读 2020-09-10 16:58:14
    UDP是传输层的协议,功能即为在IP的数据报服务之上增加了最基本的服务:复用和分用以及差错检测。 UDP提供不可靠服务,具有TCP所没有的优势: UDP无连接,时间上不存在建立连接需要的时延。空间上,TCP需要在端...
  • 网络层提供的两种服务根据OSI参考模型,网络层关注的是如何将源端...但Internet阵营一边则主张网络层只向上提供无连接的、灵活的、尽最大努力交付的数据报服务。因为端系统比电话机智能的多,差错检测的功能完全可
  • ip数据报格式;ip数据报分片

    万次阅读 多人点赞 2018-05-28 10:33:29
    IPv4数据报格式:上图表示的数据,最高位在左边,记为0位;最低位在右边,记为31位。在网络中传输数据时,先传输0~7位,其次是8~15位,然后传输16~23位,最后传输24~31位。由于TCP/IP协议头部中所有的二进制数在网络...
  • TCP是如何保证可靠数据传输的?

    千次阅读 2018-08-08 16:14:56
    TCP为应用程序提供可靠通信连接,因为他采用了三次握手协议,三次握手协议指的是在发送数据的准备阶段,服务器端和客户端之间需要进行三次交互。 第一次握手:客户端发送SYN包到服务器,并进行SYN_SEND状态,等待...
  • 前一篇文章,Linux进程间通信——使用流套接字介绍了一些有关socket(套接字)的一些基本内容,并讲解了流套接字的使用,这篇文章将会给大家讲讲,数据报套接字的使用。 一、简单回顾——什么是数据报套接字。 ...
  • 文章目录电路交换电路交换的阶段优缺点报文交换分组交换数据报方式的分组交换虚电路方式的分组交换数据报&虚电路 1.报文交换和分组交换都采用存储转发。 2.传送数据量大,且传送时间远大于呼叫时,选择电路交换...
  • IP数据报 格式参数详解

    千次阅读 2018-09-10 10:58:04
    IP协议提供不可靠无连接的数据报传输服务,IP层提供的服务是通过IP层对数据报的封装与拆封来实现的。IP数据报的格式分为报头区和数据区两大部分,其中报头区是为了正确传输高层数据而加的各种控制信息,数据区包括...
  • 虚电路和数据报的区别以及应用

    千次阅读 2019-02-26 14:43:03
    虚电路和数据报的区别以及应用
  • 关于TCP和UDP Socket通信的区别: 应用场景: UDP传输协议效率高,但不可靠; TCP传输效率低,但可靠。 传输数据大小: UDP传输数据限定在64K以下; TCP传输数据无大小限制,可进行大数据传输。 TCP/IP协议: ...
  • 《计算机网络》 第一章 计算机网络体系结构

    千次阅读 多人点赞 2020-01-12 12:54:39
    第一章 计算机网络体系结构 一、概述 1. 计算机网络的组成 ...数据通信,资源共享,分布式处理,提高可靠性,负载均衡 3. 计算机网络的分类 按分布范回分类:广域网( WAN )、城域网( MAN )、局域网(...
  • 分组交换(1)数据报(2)虚电路(3)数据报服务和虛电路服务的比较5.报文交换与分组交换的时间消耗比较6.电路交换、报文交换、分组交换的交换方式比较 0.思维导图 1.几种传输单元名词解析 这里探讨的电路交换、...
  • 虚拟电路网络与数据报网络

    千次阅读 2018-05-08 17:16:01
    一、网络层服务概述 在传输层每个应用可以被提供使用两个服务:无连接的 ...原因就是:在计算机通信中,可靠交付应该谁来负责?是网络核心还是网络边缘的端系统? 针对上面的问题,有两种重要的服务实现,分...
  • 虚电路与数据报网络学习小记

    千次阅读 2020-03-23 19:25:44
    Tor在通信之前需要先建立虚电路,并且会频繁更换虚电路。...为了介绍虚电路网络与数据报网络,首先从网络层说起。然后分别介绍了虚电路网络与数据报网络的主要内容、核心思想。最后进行对比和总结。
  • 用户数据报协议UDP总结

    千次阅读 2017-11-09 12:14:03
    用户数据报协议UDP小结阅读目录: 一、 UDP首部格式 二、 UDP主要特点 三、 UDP校验和计算 四、 UDP编程实现
  • 报文是网络中交换与传输的数据单元,也是网络传输的单元。报文包含了将要发送的完整的数据信息,其长短不需一致。报文在传输过程中会不断地封装成分组、包、帧来传输,封装的方式就是添加一些控制信息组成的首部,...
  • 争论的实质就是:在计算机通信中,可靠交付应当谁来负责?是网络还是端系统? 对于上面的问题,现在已经有了很明确的答案——端系统来负责可靠交付 网络层提供可靠交付—虚电路服务 想法来源 一些人认为应该模仿...
  • 1.通过ip可以完成主机到目的主机数据的无连接不可靠传输。但是事实上,两台主机在网络中通信实际上是两台主机的应用进程间的通信。因此需要端口号来指明数据交付的应用进程。ip所在的网络层完成主机对主机之间的逻辑...
  • IP数据报格式详解

    万次阅读 多人点赞 2017-07-05 16:22:04
    IP协议提供不可靠无连接的数据报传输服务,IP层提供的服务是通过IP层对数据报的封装与拆封来实现的。IP数据报的格式分为报头区和数据区两大部分,其中报头区是为了正确传输高层数据而加的各种控制信息,数据区包括...
  • 1.用户数据报协议(User Datagram Protocol)简称UDP协议,它是在IP的数据报服务上增加了端口和简单的差错检测来实现进程到进程之间的数据传输。 2.UDP协议有如下几个特点: a.无连接。UDP是无连接的协议,数据传输...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 82,717
精华内容 33,086
关键字:

数据报服务的可靠通信由