作业二
TCP与UDP的区别与联系TCP
是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。
一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂,这里只做简单、形象的介绍。
我们来看看这三次对话的简单过程:
1.主机A向主机B发出连接请求数据包,这是第一次对话;
2.主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作)的数据包,这是第二次对话;
3.主机A再发出一个数据包确认主机B的要求同步,这是第三次对话。
三次“对话”的目的是使数据包的发送和接收同步,经过三次“对话”之后,主机A才向主机B正式发送数据。
UDP是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去!
UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境。
比如,我们经常使用“ping”命令来测试两台主机之间TCP/IP通信是否正常,其实“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。例如,在默认状态下,一次“ping”操作发送4个数据包。大家都知道,发送的数据包数量是4包,收到的也是4包(因为对方主机收到后会发回一个确认收到的数据包)。
这充分说明了UDP协议是面向非连接的协议,没有建立连接的过程。正因为UDP协议没有连接的过程,所以它的通信效果高;
但也正因为如此,它的可靠性不如TCP协议高。
TCP和UDP是OSI模型中的运输层中的协议。TCP提供可靠的通信传输,而UDP则常被用于让广播和细节控制交给应用的bai通信传输。
TCP与UDP基本区别:
1、基于连接与无连接。
2、TCP要求系统资源较多,UDP较少。
3、UDP程序结构较简单。
4、流模式(TCP)与数据报模式(UDP)。
5、TCP保证数据正确性,UDP可能丢包。
6、TCP保证数据顺序,UDP不保证。
7、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接。
8、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付。
9、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的,UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)。
10、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信。
11、TCP首部开销20字节;UDP的首部开销小,只有8个字节。
12、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道。
TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。在简化的计算机网络OSI模型中,完成第四层传输层所指定的功能。
UDP, 中文名是用户数据报协议,是OSI参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范。UDP在IP报文的协议号是17。
网络字节序与网络字节序的转换函数实践
字节序指的是多字节数据在内存中的存储顺序。分为两种
1.小端字节序
2.大端字节序
依照不同的存储顺序,本地字节序分为小端字节序和大端字节序。本地字节序指的是本机存储连续字节数据的顺序。小端字节序指的是低位字节存入低位内存,高位字节存入高位内存的存储方式;大端字节序反之,将低位字节存入高位内存,将高位字节存入低位内存。实际上网络字节序(Network Byte Order)就是网络中间设备(比如路由器)的本地字节序。
由于网络字节序和本地字节序(叫主机字节序也可以)的客观存在,我们在进行网络编程时为了增强程序的可移植性都会使用字节序转换函数来转换字节序。
int inet_pton(int af, const char *src, void *dst);
inet_pton=internet_
presentation_to_numerical
af: 可选值为AF_INET或是AF_INET6(分别表明带转换的点分十进制IP地址为ipv4或是ipv6)
src: 点分十进制形式的IP地址所在的字符数组
dst:数值形式的IP地址所在整型的地址
将点分十进制(字符串)的ipv4/ipv6地址转化为数值形式、网络字节序的IP地址存储在整形中。
#include <arpa/inet.h>
#include <stdio.h>
int main(){
char ip_local[20] = "192.55.0.2";
long ip_network = 1;
int a = inet_pton(AF_INET,ip_local,(void *)&ip_network);
printf("%d\n%s\n%ld\n",a,ip_local,ip_network);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!