第一范文网 - 专业文章范例文档资料分享平台

tcp协议与udp协议的区别

来源:用户分享 时间:2025/10/9 7:29:10 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

while(fgets(sendline, MAXLINE, fp) != NULL) {

/* read a line and send to server */

write(sockfd, sendline, strlen(sendline)); /* receive data from server */

n = read(sockfd, recvline, MAXLINE); if(n == -1) {

perror(\exit(1); }

recvline[n] = 0; /* terminate string */ fputs(recvline, stdout); } }

int main(int argc, char **argv) {

int sockfd;

struct sockaddr_in srvaddr; /* check args */ if(argc != 2) {

printf(\exit(1); }

/* init servaddr */

bzero(&servaddr, sizeof(servaddr)); = AF_INET;

= htons(SERV_PORT);

if(inet_pton(AF_INET, argv[1], & <= 0) {

printf(\exit(1); }

sockfd = socket(AF_INET, SOCK_DGRAM, 0);

do_cli(stdin, sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)); return 0; }

运行例子程序 1、编译例子程序

使用如下命令来编译例子程序: gcc -Wall -o udpserv gcc -Wall -o udpclient

编译完成生成了udpserv和udpclient两个可执行程序。

2、运行UDP Server程序

执行./udpserv &命令来启动服务程序。我们可以使用netstat -ln命令来观察服务程序绑定的IP地址和端口,部分输出信息如下: Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0 TEN

可以看到udp处有“0.0.0.0:8888”的内容,说明服务程序已经正常运行,可以接收主机上任何IP地址且端口为8888的数据。

如果这时再执行./udpserv &命令,就会看到如下信息: bind error: Address already in use

说明已经有一个服务程序在运行了。 运行UDP Client程序

Hello, World! Hello, World! this is a test this is a test ^d

输入的数据都正确从服务程序返回了,按ctrl+d可以结束输入,退出程序。 如果服务程序没有启动,而执行客户程序,就会看到如下信息: test

read error: Connection refused

说明指定的IP地址和端口没有服务程序绑定,客户程序就退出了。这就是使用connect()的好处,注意,这里错误信息是在向服务程序发送数据后收到的,而不是在调用connect()时。如果使用tcpdump程序来抓包,会发现收到的是ICMP的错误信息。

TCP 目录

1 传输控制协议 ? 2 运作方式

o 通路的建立和终结 o 数据传输 o 通路的终结

? 3 TCP的端口 ? 4 TCP的封包结构 ? 5 TCP的发展过程 ? 6 对TCP的选用情况 TCP-传输控制协议

传输控制协议(Transmission Control Protocol, TCP)是一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transport layer)通信协议,由IETF的RFC 793说明(specified)。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,UDP是同一层内另一个重要的传输协议。

在因特网协议族(Internet protocol suite)中,TCP层是位于IP层之上,应用层之下的中间层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。

应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流分割成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传送单元(MTU)的限制)。之后TCP把结果包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。TCP为了保证不发生丢包,就给每个字节一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的字节发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传。TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。 TCP-运作方式 通路的建立和终结

TCP连接包括三个状态:连接建立、数据传送和连接终止。TCP用三路握手(three-way handshake)过程建立一个连接,用四路握手(four-way handshake)过程来拆除一个连接。在连接建立过

?

tcp建立连接

程中,很多参数要被初始化,例如序号被初始化以保证按序传输和连接的强壮性。

TCP连接的正常建立一对终端同时初始化一个它们之间的连接是可能的。但通常是由一端打开一个接口(socket)然后监听来自另一方的连接,这就是通常所指的被动打开(passive open)。服务器端被被动打开以后,用户端就能开始建立主动打开(active open)。

1.客户端通过向服务器端发送一个SYN来建立一个主动打开,作为三路握手的一部分。 2.服务器端应当为一个合法的SYN回送一个SYN/ACK。

3.最后,客户端再发送一个ACK。这样就完成了三路握手,并进入了连接建立状态。 数据传输

在TCP的数据传送状态,很多重要的机制保证了TCP的可靠性和强壮性。它们包括:使用序号,对收到的TCP报文段进行排序以及检测重复的数据;使用校验和来检测报文段的错误;使用确认和计时器来检测和纠正丢包或延时。

序列号和确认

在TCP的连接建立状态,两个主机的TCP层间要交换初始序号 (ISN:initial sequence number)。这些序号用于标识字节流中的数据,并且还是对应用层的数据字节进行记数的整数。通常在每个TCP报文段中都有一对序号和确认号。TCP报文发送者认为自己的字节编号为序号,而认为接收者的字节编号为确认号。TCP报文的接收者为了确保可靠性,在接收到一定数量的连续字节流后才发送确认。这是对TCP的一种扩展,通常称为选择确认(Selective Acknowledgement)。选择确认使得TCP接收者可以对乱序到达的数据块进行确认。每一个字节传输过后,ISN号都会递增1。

通过使用序号和确认号,TCP层可以把收到的报文段中的字节按正确的顺序交付给应用层。序号是32位的无符号数,在它增大到232-1时,便会回绕到0。对于ISN的选择是TCP中关键的一个操作,它可以确保强壮性和安全性。

数据传输举例

1.发送方首先发送第一个包含序列号为1(可变化)和1460字节数据的TCP报文段给接收方。接收方以一个没有数据的TCP报文段来回复(只含报头),用确认号1461来表示已完全收到并请求下

TCP数据传输

一个报文段。

2.发送方然后发送第二个包含序列号为1461和1460字节数据的TCP报文段给接收方。正常情况下,接收方以一个没有数据的TCP报文段来回复,用确认号2921(1461+1460)来表示已完全收到并请求下一个报文段。发送接收这样继续下去。

3.然而当这些数据包都是相连的情况下,接收方没有必要每一次都回应。比如,他收到第1到5条TCP报文段,只需回应第五条就行了。在例子中第3条TCP报文段被丢失了,所以尽管他收到了第4和5条,然而他只能回应第2条。

4.发送方在发送了第三条以后,没能收到回应,因此当时钟(timer)过时(expire)时,他重发第三条。(每次发送者发送一条TCP报文段后,都会重启动一次时钟:RTT)。 5.这次第三条被成功接收,接收方可以直接确认第5条,因为4,5两条已收到。

搜索更多关于: tcp协议与udp协议的区别 的文档
tcp协议与udp协议的区别.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c35pbo4lsum4mg6283nif6msol1o4p300uwh_3.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top