第8章 传输层(3)_TCP协议

3. 传输控制协议(TCP)

3.1 TCP协议的主要特点

(1)TCP是面向连接的传输层协议。即使用TCP协议之前必须先建立TCP连接。在传送数据完毕之后,必须释放己经建立的TCP连接。

(2)每一条TCP连接只能有两个端点,即只能是一对一的。

(3)TCP提供可靠交付服务,也就是说通过TCP连接传送的数据,无差错、不丢失、不重复且按序发送。

(4)TCP提供全双工通信。TCP连接的两端都设有发送缓存和接收缓存,用来临时存放双向通信的数据。这就允许通信双方在任何时候都可以发送数据。

(5)面向字节流

  ①TCP中的“流”是指流入到进程或从进程流出的字节序列。“面向字节流”的含义是:是指TCP把应用程序交下来的数据仅仅看成是一连串的无结构的字节流。它并不知道所传送的字节流的含义(如是一个整型或自定义的结构体),其含义由应用层的接收双方自行协商的,但到了传输层其意义就不存在了

  ②UDP发送的报文长度是应用程序给了的。但与UDP不同,如果应用程传送到TCP缓存的数据块太长,TCP就会把它划分得短一些再传送。如果应用程序一次只发一个字节,TCP会等待积累到足够多字节后再构成报文发送出去。一个TCP报文段的大小,只是根据对方给出的窗口值和当前网络的拥塞程度来决定的。

3.2 TCP报文的首部格式

(1)抓包分析TCP

(2)TCP首部

  ①TCP报文分为首部和数据两个部分。TCP的全部功能都体现在它首部的各个字段的作用,只有弄清首部各字段的作用才能掌握TCP的工作原理。

  ②TCP首部的前20个字节是固定的,后面的4N个字节是根据需要而增加的(N为整数),因此TCP首部的最小长度是20字节。

3.3 TCP首部各字段含义

(1)源端口和目的端口:各占2个字节。和UDP一样,使用端口号来标识不同的应用层协议。

(2)序号:占4个字节,共232个序号,序号从0开始,增到最大时,下一个序号会循环回到0。一个TCP连接中传送的字节流的每一个字节都按顺序编号。而序号字段表示本报文段所发送的数据的第一个字节的序号。

(3)确认号:占4个字节,是期望收到下一个报文段的第一个数据字节的序号应记住:若确认号为N,则表明到序号N-1为止的所有数据都已正确收到

(4)数据偏移:占4位二进制,单位是4字节。它指出TCP报文段的数据起始处距离TCP报文段的起始的偏移,实际上就是指出TCP报文段的首部长度。

(5)保留:占6位。保留为今后使用,但目前应置为0。

(6)紧急URG(Urgent)。当URG=1时,表示紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据),而不要按原来的排队顺序传送。(注意,该标志位只是告诉TCP,优先发送本报文段。但接收方是否优先把该数据报尽快交付(推送)给应用程序是由push标志位来决定的)

(7)确认ACK(Acknowlegment)当ACK=1时确认号字段才有效。当ACK=0时,确认号无效。TCP规定,在连接建立后所有传送的报文段都必须把ACK置1。

(8)推送(Push):当两个应用进程进行交互的通信时有时在一端的应用进程希望在键入一个命令后立即就能够收到对方的响应。(即接收方优先接收这个数据包,就优先交付给其上的应用程序,而不再等到整个缓存都填满后再向上交付!)。实际中很少使用该字段。

(9)复位RST(Reset):当RST=1时,表明TCP连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立传输连接。

(10)同步SYN(Synronization):在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文段。对方若同意建立连接,则应在响应的报文段中使用SYN=1和ACK=1。因此,SYN置1就表示这是一个连接请求或连接接受报文

(11)终止FIN(Finish)用来释放一个连接。当FIN=1时,表明此报文段的发送方的数据己发送完毕,并要求释放传输连接。

(12)窗口 。占2个字节。窗口值是[0,216-1]之间的整数,主要起着流量控制的作用。其意义在于告诉对方:从本报文段首部中的确认号算起,接收方目前允许对方发送的数据量(单位是字节)。

  ①由于TCP的确认机制也让TCP连接双方的数据传输速度变慢,也就是说,一方发送数据需要等待对方的确认才继续发送后续数据。为了充分利用双方的带宽及缓冲区(Buffer),发送方不必等待对方的确认,可以连续发送多个数据包给对方,而对方可以暂时把这些数据存放在缓冲区,并给对方一个总确认。这样,可以大大增加数据传输的速度

  ②可见,之所以要有这个限制,是因为接收方的数据缓存空间是有限的。总之,窗口值作为接收方让发送方设置其发送窗口的依据。使用TCP协议传输数据的计算机会根据自己的接收能力让对方参数这个窗口值来调整数据发送的速率,从而达到流量控制的功能。

(13)检验和。占2个字节。检验的范围包括首部和数据这两个部分。其检验方法与UDP类似,也要临时添加一个伪首部。只是伪首部的第4个字段的17改为16,第5个字段的UDP长度改为TCP长度。若使用IPv6,则伪首部也要相应的改变。

(14)紧急指针。占2个字节。紧急指针仅在URG=1时才有意义,它指出本报文段中的紧急数据的字节数(紧急数据结束后就是普通数据),由于紧急数据是从数据部分的开始处算起,因此,紧急指针也是紧急数据的长度。

(15)选项:长度可变,最长可达40个字节。当没有使用选项时,TCP的首部长度是20个字节。该选项中通常可以设置MMS、窗口扩大选项和时间戳等。

  ①TCP最长报文段长度(MMS),并不是整个TCP报文段的最大长度,而是数据字段的最大长度

  ②受数据链路层最大传输单元(MTU)的限制,以太网的MTU默认是1500字节。因此TCP报文段数据部分的最大长度(MMS)为1460字节

  ③若选择较小的TCP报文段太小,则网络的利用率就低反之,如果TCP报文段太长,那么在IP层就可能被分解成多个短数据报片,当传输出错时要进行重传以及到达终点还要还原成原来的TCP报文,这些都会使网络开销增大

  ④因此,MMS应尽可能设置大些,只要在IP层传输时不需要再分片就行。若主机未填写MMS,默认为536字节。因此所有因特网上的主机都应能接受的报文长度是536+20(固定首部长度)=556字节。

时间: 2024-10-12 22:48:45

第8章 传输层(3)_TCP协议的相关文章

第8章 传输层(1)_TCP/UDP协议的应用场景

1. 传输层的两个协议 1.1 TCP和UDP协议的应用场景 (1)TCP协议:如果要传输的内容比较多,需要将发送的内容分成多个数据包发送.这就要求在传输层用TCP协议,在发送方和接收方建立连接,实现可靠传输.流量控制和拥塞避免.(如下载500M电影.QQ好友传输文件.浏览网页.发送电子邮件等) (2)UDP协议:一个数据包就能发送全部内容,不需要持续发送,发送方和接收方不需要建立连接.由于就一个数据包不需要流量控制和拥塞避免,在传输层不需要负责可靠传输.如果数据包发送出去,应用程序没有收到返回

传输层:UDP协议

传输层:UDP 协议 一.传输层协议 从之前介绍的网络层协议来看,通信的两端是两台主机,IP 数据报首部就标明了这两台主机的 IP 地址.但是从传输层来看,是发送方主机中的一个进程与接收方主机中的一个进程在交换数据,因此,严格地讲,通信双方不是主机,而是主机中的进程.主机中常常有多个应用进程同时在与外部通信(比如你的浏览器和 QQ 在同时运行),下图中,A 主机的 AP1 进程在于 B 主机的 AP3 进程通信,同时主机 A 的 AP2 进程也在与 B 主机的 AP4 进程通信.两个主机的传输层

第五章 传输层

传输层的两个协议 TCP(Transmission Control Protocol,传输控制协议)需要将要传输的        文件分段传输   建立会话     可靠传输      流量控制 UDP(User Data Protocol,用户数据报协议)  一个数据包就能够完成数据通信 不分段 不需要建立会话 不可靠传输  不需要流量控制 常见使用UDP协议:QQ消息  屏幕广播 多播 广播  DNS解析 查看会话 netstat -n 查看建立会话的进程 netstat -nb 传输层协议

Linux内核--网络栈实现分析(五)--传输层之UDP协议(上)

本文分析基于Linux Kernel 1.2.13 原创作品,转载请标明出处http://blog.csdn.net/yming0221/article/details/7532512 更多请看专栏,地址http://blog.csdn.net/column/details/linux-kernel-net.html 作者:闫明 注:标题中的”(上)“,”(下)“表示分析过程基于数据包的传递方向:”(上)“表示分析是从底层向上分析.”(下)“表示分析是从上向下分析. 这里看看数据包从IP层是如何

传输层:TCP 协议

传输层:TCP 协议 一.概述 TCP 和 UDP 处在同一层——运输层,但是它们有很多的不同.TCP 是 TCP/IP 系列协议中最复杂的部分,它具有以下特点: (1) TCP 提供 可靠的 数据传输服务,TCP 是 面向连接的 .应用程序在使用 TCP 通信之前,先要建立连接,这是一个类似“打电话”的过程,通信结束后还要“挂电话”. (2) TCP 连接是 点对点 的,一条 TCP 连接只能连接两个端点. (3) TCP 提供可靠传输,无差错.不丢失.不重复.按顺序. (4) TCP 提供 

数据通讯与网络 第五版第24章 传输层协议-TCP协议部分要点

上一博客记录了UDP协议的关键要点,这部分记录TCP协议的关键要点. 24.3 传输控制协议(TRANSMISSION CONTROL PROTOCOL) TCP(Transmission Control Procotol )协议是一个面向连接,可靠的协议.TCP为了提供面向连接的服务,专门定义了连接创建,数据传输.连接终止阶段.TCP使用GBN和SR协议来提供可靠性.为了实现可靠性这个目标,TCP使用检验和来进行误差控制.重传来处理数据包丢失和冲突.同时还利用了应答和计数机制.在本节,首先讨论

【知识强化】第五章 传输层 5.3 TCP协议

这节课我们来学习一下TCP协议的特点以及TCP报文段的格式. 首先呢我们来看一下TCP有哪些特点呢.之前我们说过TCP它是一个比较可靠的面向连接的协议,所以最主要的特点它是可以面向连接的一种传输层协议.那之所以说面向连接呢就是指应用程序在使用这个TCP协议之前,必须要先建立好一个TCP的连接,在传输数据完毕之后呢再释放这个已经建立的连接.也就是说俩应用进程之间的通信啊好像就是在打call一样,啊只要两个人电话打通了才可以进行数据的传输,也就是TCP它面向连接的一个特点.那这里面为什么说它是虚连接

计算机网络 学习笔记-传输层:TCP协议简介

概述: TCP传输前先要建立连接 TCP在传输层 点对点,一条TCP只能连接两个端点 可靠传输.无差错.不丢失.不重复.按顺序 全双工 字节流 TCP报文段 TCP报文段的报头前20字节是固定的,后面4n字节是根据需要而添加的. 20字节的固定部分: 源端口和目的端口:分别写入源端口号和目的端口号 序号:0-(2^32-1),本报文段数据的第一个字节的序号,用来解决乱序问题 确认序号:期望收到对方下一个报文段的第一个数据字节的序号,用来解决丢包问题 数据偏移:TCP报头长度,包括固定的20字节和

传输层:UDP 协议

一.传输层协议 从之前介绍的网络层协议来看,通信的两端是两台主机,IP 数据报首部就标明了这两台主机的 IP 地址.但是从传输层来看,是发送方主机中的一个进程与接收方主机中的一个进程在交换数据,因此,严格地讲,通信双方不是主机,而是主机中的进程. 主机中常常有多个应用进程同时在与外部通信(比如你的浏览器和 QQ 在同时运行),下图中,A 主机的 AP1 进程在与 B 主机的 AP3 进程通信,同时主机 A 的 AP2 进程也在与 B 主机的 AP4 进程通信. 两个主机的传输层之间有一个灰色双向