TCP协议

TCP简介

TCP全称为“传输控制协议(transmission control protocol)”,它为两台主机提供可靠的数据通信,所做的工作是把应用层交给它的数据分成合适的小块交给下面的网络层,确认接收到的分组,设置发送最后确认分组的超时时钟等。

1、TCP协议段格式

2、报头数据名称解释

源/目的端口号:

表示数据是从哪个进程来,到哪个进程去。

 序列号:

分段的序列号,表示该分段在发送方的数据流中的位置,用来保证数据顺序到达的编号

确认序号:

当发送方发送来数据后,接收方对发送的数据进行应答,告诉发送方下次发送数据的序号

报文长度:

TCP头长,相当于数据在数据段中的开始时位置

16位窗口大小:

窗口的大小表示发送方可以接受的数据量,单位是字节,使用可变大小的滑动窗口协议来进行流量控制

6位标志位:从左往右

URG:紧急指针是否有效

ACK:确认号是否有效

PAH:提示接收端应用程序立刻从TCP缓冲区把数据读走

RST:对方要求重新建立连接;携带RST标识的称为复位报文段

SYN:请求建立连接,携带SYN标识的称为同步报文段

FIN:通知对方,本端要关闭了,携带FIN标识的称为结束报文段

16位校验和

用于对分段首部和数据进行校验。通过将所有的16b以补码形式相加,然后再对相加和取补。发送端填充,CRC校验。接受端校验不通过,则认为数据有问题,此处的校验和不光包含TCP首部,因为包含TCP数据部分。

16位紧急指针

标识哪部分数据是紧急数据,给出从当前序列号到紧急数据位置的偏移量

3、TCP/IP网络分层

 

  1. 应用层
  2. 传输层
  3. 网络层
  4. 网络接口层

1、应用层:

应用层是在之传输层上的,是提供在两个设备的应用程序之间进行信息交换的,这层定义了信息交换的格式,消息会交给下一层的传输层来传输,在应用层的交互的数据单元叫报文。

网络的通信规则就是在应用层协定的,不同的网络应用要用到不同的应用层协议。

1)HTTP:超文本传输协议,基于TCP,是用于从WWW服务器传输超文本到本地浏览器的传输协议。它可以使浏览器更加高效,使网络传输减少。
2)SMTP:简单邮件传输协议,是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。
3)SNMP:简单网络管理协议,由一组网络管理的标准组成,包含一个应用层协议、数据库模型和一组资源对象。
4)FTP:文件传输协议,用于Internet上的控制文件的双向传输。同时也是一个应用程序。
5)Telnet:是Internet远程登陆服务的标准协议和主要方式。为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。
6)SSH:安全外壳协议,为建立在应用层和传输层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。
7)NFS:网络文件系统,是FreeBSD支持的文件系统中的一种,允许网络中的计算机之间通过TCP/IP网络共享资源。


2、传输层:

传输层的任务是负责向两台设备的进程之间进行通信时提供“通用的”的数据传输服务

 应用的进程利用的就是这个的服务进行报文(应用层的报文)的传输。

“通用的”不是针对某个特定的网络应用,是多个应用都可以使用同一个运输层服务。

运输层使用的两种协议:

(1)传输控制协议TCP(Transmisson Control Protocol):是提供面向连接的,可靠的数据传输服务,也就是说是安全的。

(2)用户数据协议UDP(User Datagram Protocol):是提供无连接的,尽最大努力的传输服务(但是不保证数据传输的可靠性,也就是说这个是不安全的)
 

3、网络层:

 网络层是负责分组交换网络上的不同主机提供的通信服务。

发送数据时进行封装数据(报文或用户数据),网络层使用的是IP协议,所以分组也叫IP数据报(数据报)。

⚠️注意 :不要把运输层的“用户数据报 UDP”和网络层的“IP 数据报”弄混。

网络层的另外一个任务就是选择合适的路由,使源主机运输层所传下来的分组,能通过网络层中的路由器找到目的主机

网络层使用的协议:

IP:TCP/IP 协议的基础,分为 IPv4 和 IPv6
ARP:地址解析协议(Address Resolution Protocol)用于解析 IP 地址和 MAC 地址之间的映射
ICMP:控制报文协议,用于发送控制消息
NAT:NAT协议(Network Address Translation)网络地址转换
OSPF:
RIP:路由选择协议
BGP:路由选择协议

4、网络接口层:

网络接口层是数据的数据链路层(线路)和物理层的合集。

(1)数据链路层(data link layer)通常简称为链路层( 两台主机之间的数据传输,总是在一段一段的链路上传送的)。数据链路层的作用是将网络层交下来的 IP 数据报组装成帧,在两个相邻节点间的链路上传送帧。每一帧包括数据和必要的控制信息(如同步信息,地址信息,差错控制等)。

(2)物理层的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异

网络接口层:

        MAC
        CSMA/CD
        多线路访问
        差错检测
        以太网
协议总图:

分层的好处

  • 各层独立:限制了依赖关系的范围,各层之间使用标准化的接口,不需要知道上下层是如何工作的,增加或者修改一个应用层协议不影响传输层协议
  • 易于测试和维护:提高了可测试性,可以独立测试特定层,某一层有了更好的实现可以整体替换掉,可插拔性
  • 标准化:每一职责清楚,方便进行标准化

4、保证可靠性的机制

1)确认应答机制

当发送方向接收方发送数据时,接收方要对接收的数据进行应答,若是发送方未收到接收方的应答数据,则发送方会重新发送数据。

        

2)超时重发机制

在网络传输中,会因为各种原因造成数据丢失,当接收方对发送方做出的应答报文丢失时,发送方没有接收到接收方的应答报文,会在一段时间后进行重复。

2.1原理:

TCP每发送一个报文段,就会对这个报文段设置一次计时器,只要计时器设置的重传时间到,但发送端还没有收到接收端发来的确认,此时就会重传此报文段。

2.2发送方未接收到数据有两种情况:

2.2.1发送方发送的数据在发送途中丢失

这种情况下,发送方在一段时间后重新发送就行。

 2.2.2接受方接收到数据后,发送的确认数据在发送途中丢失

 因此,发送方重新发送的数据就会重复,TCP协议需要能够识别出哪些包是重复的,并且把重复的丢弃掉,这时前面提到的序列号就可以很容易做到去重的效果。

 2.3超时重传的时间确认:

最理想的状态下找到一个最小的时间,保证”确认应答一定能在这个事件内返回“,但是这个时间的长短会随着网络环境的不同,是有差异的。如果事件设置的太长,会影响整体的传输效率;如果设置的事件过短,有可能会频繁发送重复的包。

为了保证在任何环境下都有比较高效性能的通信,因此TCP会动态的计算这个最大超时时间

超时以500ms为一个单位进行控制,每次判定超时重发的超时时间都是500ms的整数倍

如果重发一次后,仍然得不到应答,等待2*500ms后再进行重传

如果仍然得不到应答,等待4*500ms进行重传,依次类推,以指数形式递增

累计到一定的重传次数,TCP认为网络或者对端主机出现异常,强制关闭连接

3)连接管理

TCP通过3次握手4次挥手保证连接的可靠性

4)流量控制

每次发送报文时,会在窗口大小中将自己的接收缓冲区中剩余空间的大小发给对方,对方会根据窗口大小控制发送数据的速度。

接收端处理数据是有限的,如果发送的太快,导致接收端的缓冲区被充满,这个时候如果发送端继续发送,就会造成丢包,继而引起丢包重传等一系列的连锁反映,因此TCP支持根据接收端的处理能力来决定发送端的速度,这个机制就叫做流量控制(Flow Control)
接收端将自己可以接收的缓冲区大小放入 TCP 首部中的 “窗口大小” 字段, 通过ACK端通知发送端;
窗口大小字段越大, 说明网络的吞吐量越高;
接收端一旦发现自己的缓冲区快满了, 就会将窗口大小设置成一个更小的值通知给发送端;
发送端接受到这个窗口之后, 就会减慢自己的发送速度;
如果接收端缓冲区满了, 就会将窗口置为0; 这时发送方不再发送数据, 但是需要定期发送一个窗口探测数据段, 使接收端把窗口大小告诉发送端。

5)拥塞控制

由于网络中有许多的主机,可能当前的网络状况就已已经比较拥堵,在不清楚网络状态的情况下,贸然发送大量的数据由可能会使网络更加拥堵。TCP引入慢启动机制,先发送少量的数据测试当前的网络状态,再决定按照多大的数据传输数据。

TCP通过滑动窗口,能够高效可靠的发送大量数据,但是如果刚开始就发送大量的数据,就会产生一些问题。由于网络中有大量的计算机,可能当前网络状态就已经比较拥堵,在不清楚网络状态的情况下,贸然发送大量的数据可能会使得网络更加拥堵,使得数据发送不了。因此,为解决此问题,TCP引入了慢启动机制,先发送少量的数据,探探路,摸清当前的网络状态,在决定按照多大的速度发送传输数据。
此处引入拥塞窗口,在数据刚开始发送时先定义拥塞窗口的大小是1,每次接收一个ACK应答,拥塞窗口变为原来的2倍,每次发送数包的时候,将拥塞窗口和接受端主机反馈的窗口大小做对比,取较小的值作为实际发送的窗口大小
像上面的拥塞窗口增长速度是指数级别的,“慢启动”指初始时慢,但是增长速度非常快

6)序号

在网络中发送的数据由于各种原因,导致接收方收到的数据顺序和发送数据的顺序不同,为了保证数据的有序性引入了序号,接收方接收数据时就会根据序号进行读取。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值