浅析TCP协议与UDP协议

TCP(Transmission Control Protocol),全称传输控制协议。工作在TCP/IP协议栈中的传输层,为主机层对主机层的连接提供了可靠的链接服务。此协议通过三个步骤使客户机与服务器建立一个连接,并通过四个步骤关闭此连接,这个过程我们分别称之为三次握手和四次挥手。

UDP((User Datagram Protocol),全称用户数据报协议。同样工作在传输层,是一种非面向连接的协议,因为其无恢复数据功能,所以是一种不可靠的网络访问。但因为发送数据时无需向TCP一样反复建立连接,所以内存占用率小,传输性能高。

一:何为TCP/IP协议栈?

1.名词解释

TCP(Transmission Control Protocol 传输控制协议)/IP(Internet Protocol  因特网互联协议)栈,是以TCP和IP协议为重要代表的多个协议的集合,该集合中还包括UDP、ICMP、RIP、TELNET、
FTP、SMTP、ARP等许多协议。

2.历史:

最早发源于美国国防部(缩写为DoD)的
因特网的前身ARPA网项目,1983年1月1
日,TCP/IP取代了旧的网络控制协议NCP,成为今天的互联网和局域网的基石和标准,由互联网工程任务组负责维护。

3.TCP/IP协议栈结构:

我们知道,早期的OSI参考模型将网络分为七层,而TCP/IP模型将网络分为了五层,如下图:

图一 : TCP/IP与OSI参考模型对比图(点击查看高清大图)

二:深入理解TCP协议的三次握手和四次挥手

首先让我们了解TCP首部组成结构,如下图:

图二 :  TCP首部结构 (点击查看高清大图)

(1)源端口和目标端口:

一般情况下,源端口为客户端,目标端口为服务器端。由图二可知源端口和目标端口各占16位,也就是2^16-1=65535,所以客户端理论上来说可以打开65535个程序来访问服务器端。其中客户机端口号随机生成,而服务器端口固定不变。可以通过 cat /etc/service 配合grep查看常见服务所用端口号。

(2)序号(seq):

表示本报文段所发送数据的第一个字节的编号。在TCP连接中所传送的字节流的每一个字节都会按顺序编号。由于序列号由32位
表示,所以每2^32个字节,就会出现序列号回绕,再次从 0 开始

(3)确认号(ack  acknowledgement character):

表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。

总的来说,seq和ack都是数据包的序号。

(4)重要标记位:

从图二我们可以看出,标记位共有六个,每一个只占一位,所以标记位取值只有0 、1种情况。

URG: 是否包含紧急数据(urgent)

PSH: 传送(push)

RST:释放连接并重置(reset)

ACK:表示前面的确认号字段(ack)是否有效。连接建立后,ACK=1。

SYN:在建立连接时使用,用来同步序号。当SYN=1,ACK=0时,表示这是一个请求建立连接的报文段;当SYN=1,ACK=1时,表示对方同意建立连接。SYN=1
,说明这是一个请求建立连接或同意建立连接的报文。只有在前两次握手中SYN才置为1,带SYN标志的TCP报文段称为同步报文段

FIN:表示通知对方本端要关闭连接了,标记数据是否发送完毕。如果FIN=1,即
告诉对方:“我的数据已经发送完毕,你可以释放连接了”,带FIN标志的TCP报
文段称为结束报文段

好,了解完TCP首部结构中常用知识点后,让我们以客户端的三次握手和四次挥手为例,来具体了解建立连接和断开连接的具体过程。

建立连接(三次握手)

                                                                    图三:三次握手(点击查看高清大图)          

第一步:处于close状态的客户端A主动打开,并对服务器B说:“我向你发送了序号为x的包(seq=x),请求建立连接(SYN=1),over”,并转为同步已发送状态(SYN-SENT),等待B确认。

第二步:服务器B每隔一段时间就会转为侦听(LISTEN)状态,这时B收到来自A的请求,于是他向客户端A说:“我同意建立连接(SYN=1),并且确认已经收到了你的包(ACK=1),并向你发送了y包(seq=y),请求你继续给我发你下一个包(ack=x+1)“,并转为同步收到(SYN-RCVD)状态。

第三步:到此,AB都第一次收到了对方的包,第一次同步全部完成。

A收到B包后对B说:“我知确认你的请求了(ACK=1),并继续向你发送序号为X+1的包(seq=x+1),请求你继续向我发送你下一个包吧(ack=y+1)。”并转为已建立连接(ESTABLISHED)状态。B在收到A的包后,也转为已建立连接(ESTABLISHED)状态。

至此,AB都进入了ESTABLISHED(已建立连接)状态。三次握手已全部完成,AB双方将进入数据传送状态。

断开连接(四次挥手)

图四:四次挥手(点击查看高清大图)

第一步: 客户机A对服务器B说:”我要和你断开连接(FIN=1)“。与此同时,向B发送了一个序号为u的包,并将状态由建立连接状态(ESTABLISHED)转换为终止等待1(FIN-WAIT-1)状态。

第二步: B收到A的包时,得知A要与自己单方面分手,于是先通知应用程序关闭,接着对A说:”我已经收到你的分手请求了(ACK=1),但并不代表我同意分手,请你向我发送你的下一个包(ack=u+1)“,并向A发送序号为v的包。并被迫将状态转为关闭等待状态(CLOSE-WAIT)。

第三步: 由于B可能还有一些属于A残留数据没有发送给A,所以,B还会发数据给A,这中间A将处于终止等待2状态(FIN-WAIT-2),直到B发完。当财产分割完成以后,B对A说:”好啦,我已经接收到了你的分手请求包(ACK=1),属于你的数据我也都还给你了,我同意和你分手(FIN=1),你可以给我发你下一个包啦(ack=u+1)“,并向A发送第w个包。并且转为最后确认状态( LAST-ACK)。

第四步:A收到B的w包,并对B说:”我已经收到了你的分手确认(ACK=1),请你给我个回复(ack=w+1),“,并向B发送序号为u+1的包。

从图四中我们可以看出,当服务器B收到u+1这个包时,就立即转换为closed状态了;而A却没有立即转为closed状态,而是转为了时间等待状态(TIME-WAIT),这个等待时间为2倍的MSL(最长数据传输时间)。所以客户端A留出了足够时间来接受来自B的残留数据。

当服务器将属于A的残留数据全部归还后,客户端A最终转换为closed关闭状态,四次挥手结束,连接关闭成功。

时间: 2025-01-02 16:40:03

浅析TCP协议与UDP协议的相关文章

(转)DNS使用的是TCP协议还是UDP协议

转自:DNS使用的是TCP协议还是UDP协议 DNS同时占用UDP和TCP端口53是公认的,这种单个应用协议同时使用两种传输协议的情况在TCP/IP栈也算是个另类.但很少有人知道DNS分别在什么情况下使用这两种协议. 先简单介绍下TCP与UDP.     TCP是一种面向连接的协议,提供可靠的数据传输,一般服务质量要求比较高的情况,使用这个协议.UDP---用户数据报协议,是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务. TCP与UDP的区别:     UDP和TCP协议的主要区

TCP协议与UDP协议的区别

TCP协议与UDP协议的区别 首先咱们弄清楚,TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UDP协议的区别,我觉得这是没有从本质上弄清楚网络通信! TCP/IP协议是一个协议簇.里面包括很多协议的.UDP只是其中的一个.之所以命名为TCP/IP协议,因为TCP,IP协议是两个很重要的协议,就用他两命名了.   常用的网络协议 -UDP:概念来自于"电报"     -只管发送,不确认对方是否收到     -以数据包的形式发送,每个数据包不能

tcp协议和udp协议的差别

tcp协议和udp协议的差别 是否连接          面向连接                 面向非连接 传输可靠性       可靠                       不可靠 应用场合         传输少量数据         大量数据 速度                   慢                            快 TCP要求和服务器保持连接  UDP不需要   TCP数据是有序的(先写的数据对方一低昂先收到)UDP数据是无序的 AsyncSocke

TCP协议和UDP协议的区别

转载:http://www.cnblogs.com/obama/p/3292335.html  作者: 曾见绝美的阳光 第一部分:TCP/IP相关知识点 对TCP/IP的整体认 链路层知识点 IP层知识点 运输层知识点 应用层知识点 (这些知识点都可以参考:http://www.cnblogs.com/newwy/p/3234536.html) 第二部分:常见面试题 TCP协议和UDP协议的区别是什么 TCP协议是有连接的,有连接的意思是开始传输实际数据之前TCP的客户端和服务器端必须通过三次握

DNS使用的是TCP协议还是UDP协议简析

DNS同时占用UDP和TCP端口53是公认的,这种单个应用协议同时使用两种传输协议的情况在TCP/IP栈也算是个另类.但很少有人知道DNS分别在什么情况下使用这两种协议. 先简单介绍下TCP与UDP.     TCP是一种面向连接的协议,提供可靠的数据传输,一般服务质量要求比较高的情况,使用这个协议.UDP---用户数据报协议,是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务. TCP与UDP的区别: UDP和TCP协议的主要区别是两者在如何实现信息的可靠传递方面不同.TCP协议中

TCP协议与UDP协议的区别(转)

TCP协议与UDP协议的区别(转)    首先咱们弄清楚,TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UDP协议的区别,我觉得这是没有从本质上弄清楚网络通信!TCP/IP协议是一个协议簇.里面包括很多协议的.UDP只是其中的一个.之所以命名为TCP/IP协议,因为TCP,IP协议是两个很重要的协议,就用他两命名了.TCP/IP协议集包括应用层,传输层,网络层,网络访问层.其中应用层包括:超文本传输协议(HTTP):万维网的基本协议.   文件传输(

转!!DNS域名解析使用的是TCP协议还是UDP协议?

原文地址:https://segmentfault.com/a/1190000006100959 DNS同时占用UDP和TCP端口53是公认的,这种单个应用协议同时使用两种传输协议的情况在TCP/IP栈也算是个另类.但很少有人知道DNS分别在什么情况下使用这两种协议. 先简单介绍下TCP与UDP. TCP是一种面向连接的协议,提供可靠的数据传输,一般服务质量要求比较高的情况,使用这个协议.UDP---用户数据报协议,是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务. TCP与UDP

TCP协议和UDP协议

TCP协议和UDP协议 TCP协议和UDP协议 TCP(Transmission Control Protocol)可靠的.面向连接的协议(eg:打电话).传输效率低全双工通信(发送缓存&接收缓存).面向字节流.使用TCP的应用:Web浏览器:电子邮件.文件传输程序. UDP(User Datagram Protocol)不可靠的.无连接的服务,传输效率高(发送前时延小),一对一.一对多.多对一.多对多.面向报文,尽最大努力服务,无拥塞控制.使用UDP的应用:域名系统 (DNS):视频流:IP语

(1)网络编程的常识 (2)基于tcp协议的编程模型 (3)tcp协议和udp协议的比较 (4)基于udp协议的编程模型

1.网络编程的常识 目前主流的网络通讯软件有:微信.QQ.YY.陌陌.探探.飞信.阿里旺旺.... 在吗? 1.1 七层网络模型(熟悉) 为了保证数据传递的可靠安全等等,ISO(国际标准委员会组织)将数据的传递从逻辑上划分为以下七层: 应用层.表示层.会话层.传输层.网络层.数据链路层.物理层. 在发送数据之前要按照上述七层协议从上到下一层一层进行加包处理,再发送出去; 在接收数据之后要按照上述七层协议从下到上一层一层进行拆包处理,再解析出来: 1.2 常用的协议(熟悉) http协议 - 超文

TCP协议,UDP协议,Utp,双绞线,DHCP协议,子网掩码,LAN,VLAN,网口,服务器,UI设计,Linux系统,Unix系统,名词解释

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