TCP和UDP基本原理

TCP/IP 协议族的传输层协议主要包括TCP(Transfer Control Protocol,传输控制协议)和UDP(User Datagram Protocol,用户数据报协议)。​TCP是面向连接的可靠的传输层协议​。它支持在并不可靠的网络上实现面向连接的可靠的数据传输。​UDP是无连接的传输协议,主要用于支持在较可靠的链路上的数据传输,或用于对延迟较敏感的应用​。

​一、TCP/IP传输层的作用​

TCP/IP 的传输层位于应用层和网络层之间,为终端主机提供端到端的连接。TCP/IP 的传输层有TCP(Transfer Control Protocol,传输控制协议)和UDP(User Datagram Protocol,用户数据报协议)两种主要协议。TCP 和UDP 都基于相同的网络层协议IP。传输层协议的主要作用包括:

提供面向连接或无连接的服务:传输层协议定义了​通信两端点之间是否需要建立可靠的连接关系​。

维护连接状态:如果必须在通信前建立连接关系,传输层协议必须在其数据库中记录这种连接关系,并且通过某种机制维护连接关系,及时发现连接故障等。

对应用层数据进行分段和封装:​应用层数据往往是大块的或持续的数据流,而网络只能发送长度有限的数据包,传输层协议必须在传输应用层数据之前将其划分成适当尺寸的段(segment),再交给IP 协议发送​。

实现多路复用(Multiplexing):一个IP 地址可以标识一个主机,一对“源-目的”IP地址可以标识一对主机的通信关系,而一个主机上却可能同时有多个程序访问网络,因此​传输层协议采用端口号(port number)来标识这些上层的应用程序,从而使这些程序可以复用网络通道​。

可靠地传输数据:数据在跨网络传输过程中可能出现错误、丢失、乱序等种种问题,传输层协议必须能够检测并更正这些问题。

执行流量控制(flow control) :当发送方的发送速率超过接受方的接受速率时,或者当资源不足以支持数据的处理时,传输层负责将流量控制在合理的水平;反之,当资源允许时,传输层可以放开流量,使其增加到适当的水平。

​二、TCP协议基本原理(1)TCP 协议的特点​

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、端到端的可靠传输协议。TCP 的主要特点包括:

三次握手(Three-Way Handshake)建立连接:​确保连接建立的可靠性​。

端口号:​通过端口号标识上层协议和服务,实现了网络通道的多路复用​。

完整性校验:通过对协议和载荷数据计算校验和(Checksum),​保证了接收方能检测出传输过程中可能出现的差错​。

确认机制:​对于正确接收到的数据,接收方通过显式应答通告发送方,超出一定时间之后,发送方将重传没有被确认的段,确保传输的可靠性​。

序列号:​发送的所有数据都拥有唯一的序列号,这样不但唯一标识了每一个段(segment),而且明确了每个段在整个数据流中的位置,接收方可以利用这些信息实现确认、丢失检测、乱序重排等功能​。

窗口机制:​通过可调节的窗口,TCP 接收方可以通告期望的发送速度,从而控制数据的流量​。

TCP的这些功能特点通过TCP报文携带的字段实现,具体见下。

​(2)TCP 封装​

TCP 段的头格式如上图所示,其协议头最少20 个字节。其中主要字段如下:

源端口(Source Port):16位的源端口字段包含初始化通信的端口号。源端口和源IP地址的作用是标识报文的返回地址。

目的端口(Destination Port):16位的目的端口字段定义传输的目的。这个端口指明接收方计算机上的应用程序接口。

序列号(Sequence Number):该字段用来标识TCP 源端设备向目的端设备发送的字节流,它表示在这个报文段中的第一个数据字节。如果将字节流看作在两个应用程序间的单向流动,则TCP 用序列号对每个字节进行计数。序列号是一个32 位的数。

确认号(Acknowledgement Number):TCP 使用32 位的确认号字段标识期望收到的下一个段的第一个字节,并声明此前的所有数据都已经正确无误地收到,因此,确认序号应该是上次已成功收到的数据字节序列号加1。收到确认号的源计算机会知道特定的段已经被收到。确认号的字段只在ACK 标志被设置时才有效。

数据偏移(Data Offset):这个4 位字段包括TCP头大小,以32 位数据结构(字)为单位。

保留(Reserved):6 位置0 的字段。为将来定义新的用途保留。

控制位(Control Bits):共6位,每1位标志可以打开一个控制功能,这六个标志从左至右是URG(Urgent Pointer field significant ,紧急指针字段标志)、ACK(Acknowledgment field significant,确认字段标志)、PSH(Push Function,推功能)、RST(Reset the connection ,重置连接)、SYN(Synchronize sequence numbers,同步序列号)、 FIN (No more data from sender  ,数据传送完毕)。

窗口(Window):目的主机使用16位的窗口字段告诉源主机它期望每次收到数据的字节数。窗口段是一个 16 位字段。
校验和(Checksum):TCP头包括16位的校验和字段用于错误检查。源主机基于部 分 IP 头信息、TCP头和数据内容计算一个校验,目的主机也要进行相同头和数据内容计算一个校验,目的主机也要进行相同计算,目的主机也要进行相同头和数据内容计算一个校验,目的主机也要进行相同头和数据内容计算一个校验,如果收到的内容没有错误过,两个计算结应该完全一样,从而证明数据的有效性。
紧急指针(Urgent Pointer):紧急指针字段是一个可选的16位指针,指向段内的最后一个字节位置,这个字段只在URG标志被设置时才有效。
选项(Options):至少1字节的可变长字段,标识哪个选项(如果有的话)有效。如果没有选项,这个字节等于0,说明选项字段的结束。这个节等于1表示无需再有操作;等于2表示下四个字节包括源机器的最大段长度( Maximum Segment Size)。MSS是数据字段中可包含的最大量,源和目机器要对此达成一致。当一个TCP连接建立时,连接的双方都要通告各自MSS,协商可以传输的最大段长度。常见的MSS有1024字节,以太网可达1460字节。
数据(Data):从技术上讲,它并不是TCP头的一部分,但应该了解到数据字段位于紧急指针/或选项字段之后,填充字段之前。字段的大小是最大的MSS,MSS可以在源和目的机器之间协商。数据段可能比MSS小,但却不能比MSS大。
填充(Padding):这个字段中加入额外的零 ,以保证TCP头是 32 位的整数倍。


​(3)TCP/UDP 端口号​

在 IP 网络中,一个IP 地址可以唯一地标识一个主机。但一个主机上却可能同时有多个程序访问网络,要标识这些程序,只用IP 地址就不够了。因此​TCP/UDP 采用端口号(port number)来标识这些上层的应用程序,从而使这些程序可以复用网络通道​。而为了区分TCP 和UDP 协议,IP 用协议号6 标识TCP,用协议号17 标识UDP。

在实际的端到端通信中,通信的双方实际上是两个应用程序,这两个程序都需要用各自的端口号进行标识。所以,一个通信连接可以用双方的IP 地址以及双方的端口号来标识,而每一个数据报内也必须包含源IP 地址、源端口、目的IP 地址和目的端口。IP 地址在IP 头中标出,而端口号在TCP/UDP 头中标出。

TCP/UDP 的端口号是一个16 位二进制数,即端口号范围可以为0~65535。其中,端口0~1023 由IANA(Internet Assigned Numbers Authority,Internet 号码分配机构)统一管理,分配或保留给众所周知的服务使用,这些端口称为众所周知端口(Well-known port)。​大于1023的端口号没有统一的管理,可以由应用程序任意使用​。详细分配信息可参见RFC 1700。

保留众所周知端口的必要性显而易见。例如,若HTTP 服务的端口号是任意值,则用户在访问Internet 网站时就会遇到麻烦,因为浏览器不知道目的网站所使用的端口号,用户就要自己输入端口号。但是这并不意味着众所周知的协议必须使用众所周知的端口号。例如管理员也可以为HTTP 协议分配端口8080,目的恰恰是避免任何人都能随意访问其网页。

保留端口(0-1023)分配给知名的服务了,比如telent23,ssh22。比如在访问互联上的https服务时,源端口是随机产生的1024以上的端口,目的端口是443。

在电脑上用netstat -ano命令可以看端口的使用情况。
 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rqaz123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值