传输层TCP协议详解(一)

TCP服务 :

tcp协议与其他协议族中其他协议的关系,:tcp位于应用层和网络层之间,提供介于应用程序和网络功能之间的服务.



1.进程到进程的通信 :

和UDP一样TCP也是用端口号,提供进程间通信的服务.

tcp使用的熟知端口 :



2.流交付服务 :

和UDP不通,tcp是一种面向流的协议,在UDP中,进程把已预订好边界的报文发送给UDP以便进行交付.UDP对每个报文都添加自己的首部,然后传递给IP来传输.

从进程发来的报文称为用户数据报,并最终成为IP数据报,不论是UP还是IP,都不认为这些数据报之间存在任何的关联.


TCP则允许发送进程以字节流的形式来传递数据,并且也允许接受进程把数据作为字节流来接收,TCP创造了一种环境,它使两个进程好像被一个假想的”管道”所连接

而这个管道经过因特网传输两个进程之间的数据.这个假想的环境如图:

发送进程产生字节流,而接收进程消耗字节流 : 

发送缓存和接收缓存

因为发送进程和接收进程可能以不同的速度写入数据和读取数据,因此TCP需要缓存来存储数据, 此处有两个缓存 ,发送缓存 和 接收缓存 .这些缓存还被TCP用来进行流量控制和

差错控制. 其实现方法之一是由一字节位置组成的环形阵列:


发送缓存有三种槽:

白色的是空槽,

黑色的是保存的发送出去但还没收到确认的字节,发送tcp在缓存中保存这些字节,直至收到相应的确认,注意黑色字节被确认后可以被回收再次利用,所以用环状.

灰色的是tcp将要发送出去的字节,tcp只被允许发送灰色区域的一部分数据,有可能是因为接受进程速度较慢,也有可能网络拥塞,


接收缓存有两种槽:

白色的是空槽将被网络中接收到的字节填入,

黑色的是已接收到的字节.这些字节将被进程读取,当一个字节被接收1后,相应槽被回收加入到空槽池中.


报文段 :

IP层作为tcp服务的提供者,它必须以分组为单位发送数据,而不是按字节流来发送,在运输层tcp把若干字节组成一个分组,称为报文段,tcp给每个报文段添加一个首部(用于控制),然后把报文段交付给IP层组成IP数据报传输,后面我们会看到这些报文段可能会失序,丢失,或受到损伤和重传,所有这些都是由tcp来处理的,而接收进程并不知道tcp这些活动,


3.全双工 :

tcp提供全双工服务,即数据可在同一时间双向流动,TCP的两个端点分别有自己的发送缓存和接受缓存.


4.面向连接的服务 :

TCP是面向连接的服务,需要经过一下三个阶段: 

1.这两个TCP之间建立一条虚连接

2.数据在两个方向上交换

3.连接被终止.

注意 :TCP是一条虚连接,不是物理连接.TCP报文段被封装成IP数据报后,有可能在发送时会失序,丢失,损坏,或被重传,每一个IP数据报可以走不同的路径到达终点.这里没有物理连接.TCP只是创建了面向流的环境,它负责把这些字节按顺序交付到终点.


5.可靠的服务:

TCP是一个可靠的运输协议,它使用确认机制检查数据是否安全完好的到达.



报文段

Tcp的分组称为报文段

报文段的格式如下图 所示, 这个报文段 包括了 20 ~60字节的首部,紧随其后的是应用层传来的数据。 首部在没有选项时 是 20个字节 ,包含选项 最多可达60个字节。





源端口地址  :  一个16位字段, 定义了发送这个报文段的主机中应用程序的端口号 。

目的端口号  : 16位字段 , 定义了接收这个报文段的主机中应用程序的端口号 。

序号  : 32位字段 , 定义了指派给本报文段第一个数据字节 的编号 。 Tcp 是 流运输协议 ,为了保证连接性, 要发送的每一个字节都要编上号 。 序号 可以告诉终点, 报文段中的第一个字节是这个序号的哪一个字节。在连接建立时, 双方使用各自的随机数产生器产生一个 初始序号(init sequence number)。通常, 两个方向上的ISN是不同的。

确认号 : 32位字段, 定义了报文段的接收方期望从对方接收的字节编号。如果报文段的接收方成功地接收了对方发来的编号为x的字节。那么它就返回x+1作为确认号。确认可以和数据捎带一起发送。

首部长度 HLEN : 4位字段, (1~15)指出Tcp首部一共有多少个4字节字。

保留 : 6位字段, 保留今后使用。

控制 : 该6位字段定义了6种不同的控制位或标志, 同一时间可设置一位或多为标志。 这些标志用在tcp流量控制,连接建立,和终止,连接异常终止,及数据传送方式等方面。
URG :紧急至真有效   RST : 连接复位   ACK : 确认是有效的   SYN:同步序号   PSH:请求推送  FIN:终止连接 

窗口大小:16位字段, 定义了发送Tcp窗口的大小,以字节位单位,16位,意味着窗口最大长度是65535字节。通常被称为接收窗口,并有接收方来决定。此情况下,发送方必须服从街上方的指示。

检验和 : 16位字段。检验和是强制性的。

紧急指针 :只有紧急标志位置位时,此字段才生效,此时报文段中包含了紧急数据。

选项:在Tcp首部中可以有多达40字节的可选信息。

TCP的特点:

1.编号系统:

字节号:

每条连接上传送的数据字节都被TCP编了号,编号从一个随机产生的数开始.


序号:

当字节都被编上号以后,TCP就给每一个要发送的报文段指派一个序号.每个报文段的序号就是这个报文段的第一个数据字节的序号.

报文段序号的值的定义是这个报文段包含的第一个数据字节所分配的编号.(373)


确认号:

报文段中确认字段的值定义了某一方期望接收的下一个字节的编号.确认号是累积的.(373)


例如 :一条tcp连接要传送一个5000字节的文件。第一个字节的编号是10001。如果该数据用5个报文段来发送,且每个报文段携带1000字节的数据,那么每个报文段的序号分别是什么。

报文段1     :       序号10001(10001~11000) 

报文段2     :       序号11001 (11001~12000)

报文段3     :       序号12001(12001~13000) 

报文段4     :       序号13001 (13001~14000)

报文段5     :       序号14001 (14001~15000)

2.流量控制:

和UDP不通TCP提供了流量控制,发送TCP要对能够接受多少从发送进程传来的数据进行控制,接收TCP则要对发送TCP能够发送多少数据进行控制,这样做是为了防止接收方因数据过多而来不及处理,编号系统使得TCP能够使用面向字节的流量控制.


3.差错控制:

为了提供可靠的服务,TCP需要实现差错控制机制,差错控制把报文看做差错检测的数据单元(报文段丢失或受损伤),正如我们以后会看到的,TCP差错控制是面向字节的.

4.拥塞控制:

和UDP不同,TCP要考虑网络的拥塞状况.发送方的数据量不仅要受接受方的控制(流量控制),而且还要由网络的拥塞状况(如果有的话)来决定.

5.封装:



TCP连接

Tcp以全双工方式传送数据,当两台主机的两个tcp建立连接后,它们应当能够同时向对方发送报文段。也就是说,在任何数据传送之前,双方都必须对通信进行初始化,并得到对方认可。

三次握手   : 在tcp中使用的连接建立过程。
被动打开   : 服务器程序告诉它的Tcp自己做好接受连接的准备。这个请求称为被动打开。
主动打开   : 客户端程序发出的的请求。






数据传送

连接建立之后,双向的数据传送就可以开始了,客服可以再两个方向上传送数据和确认。

我们知道,发送Tcp利用缓存来存储从发送应用程序传来的数据流。发送Tcp可以选择报文段的长度。接收tcp在数据到达时也要将这些数据进行缓存,并在接收应用程序就绪时或者接收tcp认为方便时,再把这些数据交付给应用程序。这种灵活性提高了Tcp的效率。
但是有些场合,应用程序不想要这种灵活性。发送方就可以请求 推送数据




连接终止

参与数据交换的双方都可以关闭连接,虽然一般是客户启动。现在大多数Tcp实现连接终止时有两种选择 :
三次握手和具有半关闭选项的四次握手。

三次握手

现在大多数实现都允许在连接终止时使用三次握手 。



半关闭

在TCP中,连接的一方可以停止发送数据,但仍然可以接收数据,这就称为 半关闭




  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
TCP/IP协议是一种网络通信协议,它是由多个协议组成的协议族,用于实现互联网的数据传输。TCP/IP协议栈是指将数据按照协议进行封装和解开的过程,其中包含了四个层次的通信协议。这些层次分别是网络接口层、网络层、传输层和应用层。在平时的物联网项目开发中,常用的协议TCP协议和UDP协议,以及一些应用层协议如HTTP、DHCP、DNS、FTP、SMTP和NTP协议。此外,测试网络可以用于分析一些常见的协议,如ARP协议、IP协议、ICMP协议TCP协议和DNS协议,通过抓取网络数据包的头部信息,可以获取网络通信的细节。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [TCP/IP 协议详解](https://blog.csdn.net/PitBXu/article/details/88822361)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [一文详解 TCP/IP 协议](https://blog.csdn.net/m0_37697335/article/details/115221360)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [tcp/ip协议详解](https://blog.csdn.net/weixin_50539337/article/details/121365312)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值