【计算机网络】传输层协议——TCP(上)

这篇具有很好参考价值的文章主要介绍了【计算机网络】传输层协议——TCP(上)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

TCP

TCP协议段格式

【计算机网络】传输层协议——TCP(上),计算机网络,tcp/ip,计算机网络,网络

TCP报文 等于报头 加 有效载荷
TCP的标准报头长度 整体为20字节

报头的宽度是0-31,表示报头所对应的字节数 (4字节)报文对应的宽度 为0-31
有效的标准报头长度一共 5行,所以 整体为20字节


选项
如:客户端和服务器建立好了链接,但这个链接长时间不关,并且也不发数据,所以 操作系统 就会使用一定的策略
保证链接在一定时间内自动断开

报头和有效载荷如何分离?

考虑两种情况
第一种 没有选项时
标准报头的长度为20字节,剩下的都是有效载荷

第二种 有选项时
将标准报头长度20字节 与选项大小去掉,剩下的就是 有效载荷


所以就需要借助4位首部长度,来确定是否存在选项
若不存在选项,则使用第一种方法
若存在选项,则使用第二种方法


4位首部长度

TCP中存在4位首部长度,占的是4个比特位 (采用的是位段,所以有比特位)
首部长度 基本单位为:4字节
4位首部长度 表示 TCP报头一共有多少4字节对应的行
即整个报头长度的大小


二进制的取值范围为[0000,1111],转化为 十进制的取值范围为[0,15]
取值范围乘以4后,变为 [0,60]

由于标准报头长度20字节,所以最终 选项的取值范围是[20,60]
即 选项可从20字节开始,最多到60字节


【计算机网络】传输层协议——TCP(上),计算机网络,tcp/ip,计算机网络,网络

若为标准报头,4为首部长度应该填充多少?
假设填充x
x*4=20 x=5 转化为 二进制是 0101


提取报文的前20个字节(前20个字节一定是标准报头)
在提取首部长度字段
根据首部长度字段* 4 减去20字节
若为0,说明没有选项,报文就是标准报头,直接读取有效载荷即可
若不为0,剩下几个字节,就说明有几个字节的选项,整个报文长度 减去 标准报头以及 选项长度
即可获得 有效载荷

TCP可靠性

确认应答机制的提出

TCP通信时,那些是不可靠的?
丢包、乱序、重复、校验失败、发送太快/太慢
单纯的就是因为 通信双方 距离太远

在这些不可靠的问题中,最核心的就是丢包问题


如何知道丢包了?
就需要正确理解 确认应答机制

确认应答机制的本质:确认是否丢包
如:给你发个报文,需要对该报文进行确认,只要收到了确认,就认为 发的报文被收到了


【计算机网络】传输层协议——TCP(上),计算机网络,tcp/ip,计算机网络,网络

客户端给服务器发了一条消息,可服务器是否收到报文,客户端是不清楚的
客户端为了保证 消息被服务器收到了,就要求 服务器对客户端做应答

虽然无法保证此时的ACK 是否丢失的问题,但是可以保证
只要客户端收到了应答,客户端向服务器发送的数据,对方一定能收到
若客户端收不到应答, 客户端就认为报文丢失


结论:可靠性是通过收到应答保证的

在TCP中 客户端和服务器端,双方的地位是对等的
如:客户端想给服务器端发消息,服务器端必须应答 ,才能保证客户端给服务器发的消息的可靠性


序号和确认序号

如果发一个接收一个,效率太低了,所以就采用一次向对方塞满大量数据

【计算机网络】传输层协议——TCP(上),计算机网络,tcp/ip,计算机网络,网络

这样的话,服务器的每一个报文都要应答


这样来看效率是提高了,但是会出现两个问题
1. 发送的顺序,不一定是接收的顺序
2. 当服务器收到多个确认的时候, 并不知道哪一个应答,对应哪一个请求报文

为了解决这两个问题, 就需要给报文 带上编号

结论:
TCP报头中必定要包含 序号


【计算机网络】传输层协议——TCP(上),计算机网络,tcp/ip,计算机网络,网络

客户端要对众多要发送的报文数据 进行编号


【计算机网络】传输层协议——TCP(上),计算机网络,tcp/ip,计算机网络,网络

假设 客户端 给服务器发送一个序号为10的报文 ,服务器给客户端的确认应答中 要有 确认序号
此时的确认序号 为 11

确认序号的含义
确认序号X:X-1之前的报文,已经全部收到了,下次发送请从X编号开始发送


【计算机网络】传输层协议——TCP(上),计算机网络,tcp/ip,计算机网络,网络

若在确认应答时,序号10对应的确认序号11丢失了
而确认序号12是应答成功的

确认序号12 表示 11号之前的报文已经全部收到了,下次从12序号 开始发送
就可以告诉 客户端 10序号的数据发送成功了,只是应答丢了

为什么序号和确认序号在不同的字段?

TCP是全双工的,既能读,又能写
看似服务器只做了一个确认应答,实际上 服务器做了两个工作
1.给客户端做出应答,2.给客户端发送数据
被压缩成了一个请求/应答,被称为 捎带应答(提高通信效率)
如:有人问你吃了吗? 你说吃了,并反问你呢?
两个人各自只张了一次口,通信效率就提高了


确认应答并不纯粹,在相当大的情况下
确认应答即是对客户端的确认,又携带了服务器给客户端发送的数据
该报文必须要有32位序号,表示 服务器给客户端发送数据时 数据序号的问题
必须要有32位确认序号,服务器对客户端的历史数据的确认


【计算机网络】传输层协议——TCP(上),计算机网络,tcp/ip,计算机网络,网络

为了32位序号和32位确认序号同时存在,所以必须要在不同的字段

16位窗口大小

传输层的TCP中包括 发送缓冲区 和 接收缓冲区

在传输层与应用层之间有一个 系统接口
如:send/ write read/recv


【计算机网络】传输层协议——TCP(上),计算机网络,tcp/ip,计算机网络,网络

调用系统接口之前,应用层有自己的应用层缓冲区


【计算机网络】传输层协议——TCP(上),计算机网络,tcp/ip,计算机网络,网络

如果TCP发送数据时,发送太快, 接收缓冲区很快就满了,报文就会被丢弃掉

虽然说TCP有重传机制,技术上没有问题,但是这样做不合理
因为 这些报文 经过 各种网络资源的转发,已经消耗很多的网络资源了,才到达了目标主机

为了不出现当前情况,让发送方 控制 一下自己的发送速度,这种策略 称之为 流量策略


【计算机网络】传输层协议——TCP(上),计算机网络,tcp/ip,计算机网络,网络

接受方 在收到报文时,对每一个 收到的报文 都会进行应答

为了不使 接收方 来不及接收,所以需要将自己的接收能力 告诉对方
如:你回家 你妈给你做了一桌子菜,当你吃饭时,你妈一直给你加菜,直到你吃不动时,就跟你妈说,吃饱了,但如果你妈依旧给你加菜,你肯定受不了

发送方发送的策略,是要受接收方接收的能力 影响的

而接收方的接收能力 取决于 接收缓冲区的剩余空间的大小

每个报文都有应答 以及 自己是知道自己的接收能力的 ,两者合在一起 ,就对应 TCP的16位窗口大小


【计算机网络】传输层协议——TCP(上),计算机网络,tcp/ip,计算机网络,网络

客户端给服务器发送消息时,服务器要给客户端做出响应,响应中携带对应的TCP报文,TCP报文中包含TCP报头
报头中包含 16位窗口大小, 会把服务器中 接收缓冲区的剩余空间大小 填入窗口大小中
根据 16位窗口大小 来决定发送方 还能发送多少数据

6个标志位

【计算机网络】传输层协议——TCP(上),计算机网络,tcp/ip,计算机网络,网络

每一个标志位在报头中 只占一个比特位

标志位本质

【计算机网络】传输层协议——TCP(上),计算机网络,tcp/ip,计算机网络,网络

可能存在很多的客户端给服务器 发消息
所有的客户端在任何时刻 都可能发送大量消息

TCP是面向链接的,服务器在收到数据时,这些收到的数据 有相当一部分是链接请求
当通信完成时,可能会断开链接,此时客户端要给服务器发送一些断开链接的请求

在建立链接之后,断开链接之前,客户端要给服务器 正常的数据通信


【计算机网络】传输层协议——TCP(上),计算机网络,tcp/ip,计算机网络,网络

绿色建立链接 蓝色发送消息 红色断开链接
服务器在同一时刻 会收到各种各样的报文请求,报文之间是不同的

如:你是一家餐厅的老板,在餐厅中有各种各样的人,有的人是来吃饭的,有的人是来找人的,有的人是来拿外卖的
你每天都会面对各种各样不同的人,这些各种各样不同的人是你观察到的现象
来吃饭的,会进行推荐店里最好吃的东西
来找人的,就会询问是什么样子的

不同的人 来到店里 提供不同的处理动作
你把人划分成不同的类型,所以 报文也是有类型的


标志位的本质就是 标识不同类型的报文,所以服务器就会有不同的处理动作

具体标志位

【计算机网络】传输层协议——TCP(上),计算机网络,tcp/ip,计算机网络,网络

ACK:该报文 是一个确认应答报文,可能会携带数据 (捎带应答)

SYN:是一个连接请求的报文 (三次握手)

FIN: 是一个连接断开的请求报文 (四次挥手)

这三个后面会详细说


PSH

催促对方,让对方尽快将接收缓冲区的数据 向上交付

如:当你正在写作业,你的爸爸过来催促你,让你赶紧做
所以每一个人在完成一件事情时,在一定的情况下,别人会催促你,让你尽快把一件事情做成


【计算机网络】传输层协议——TCP(上),计算机网络,tcp/ip,计算机网络,网络

同理,客户端给服务器发送消息时, 服务器要给客户端做出应答,
通告客户端 ,服务器中的接收缓冲区的剩余空间的大小,使客户端进行 流量控制

若服务器的TCP报文 在的 窗口大小为0, 则客户端就不能发送数据了
所以客户端就需要 定期给服务器 发送一些询问报文(不携带数据)
客户端就会确认应答,同时也会告知对应的 窗口大小依旧为0

客户端再次发起询问报文,就可以将自己对应的PSH置为1
表示让服务器中的应用层赶紧把接收缓冲区的内容取走,把接收缓冲区的空间腾出来,以方便客户端发送数据

RST

TCP三次握手时,需要进行三次报文交互,不一定能握手成功
但握手成功了,一定是经历了三次握手

【计算机网络】传输层协议——TCP(上),计算机网络,tcp/ip,计算机网络,网络

当客户端 与服务器 进行链接时,双方都认为有链接,服务器端因为一些原因 而释放了对应的链接
而客户端还不知道,客户端还会一直维护这个链接


【计算机网络】传输层协议——TCP(上),计算机网络,tcp/ip,计算机网络,网络

过了一会,服务器又把对应的网线插上了,客户端又向服务器发起请求
服务器并没有接收到 获取到三次握手的任何细节,所以服务器意识到客户端的链接是异常的


【计算机网络】传输层协议——TCP(上),计算机网络,tcp/ip,计算机网络,网络

所以服务器就会给客户端发送 一个 RST置为1的TCP报头
当客户端接收到 当前报头时,将自己老的链接释放掉,再重新发起三次握手

RST 全称 为 reset,作用为 对链接进行重置

【计算机网络】传输层协议——TCP(上),计算机网络,tcp/ip,计算机网络,网络
URG

紧急指针标志位

【计算机网络】传输层协议——TCP(上),计算机网络,tcp/ip,计算机网络,网络

TCP本身包含了序号,就可以将TCP报文按序号排序,就可以按序号由小到大入队列,这样就保证上层拿到的数据是有序的

若报文中携带了特殊数据,让接收方将特殊数据插队处理,就需要使用URG标志位

作用为:告诉接收方, 当前报文中的有效载荷里面 有紧急数据存在的,并且16位紧急指针是有效的
(大部分情况下 16位紧急指针是无效的)

若URG被置1,则表示报文中包含了紧急数据

16位紧急指针 本质为 一个偏移量,紧急数据(只有1个字节) 在有效载荷中的偏移量

超时重传机制

【计算机网络】传输层协议——TCP(上),计算机网络,tcp/ip,计算机网络,网络

若主机A向主机B发送消息,是有可能造成丢包的,但如何知道丢包呢?
在特定的时间范围有没有收到应答,若收到应答,则说明收到了
若没收到应答,则说明报文在网络中丢失了


主机A收不到应答的情况 分为两种

第一种:
虽然主机A给主机B发送数据,但主机B没有接收到数据,所以主机B就不会应答
所以主机A在等待一段时间后,就会把对应的数据重发一次
这个重发的过程就叫做 超时重传

【计算机网络】传输层协议——TCP(上),计算机网络,tcp/ip,计算机网络,网络

TCP发送数据时,必须把暂时没有得到反馈的数据 维护一段时间,支持超时重传

最理想的情况下,找到一个最小的时间, 保证 确认应答一定再这个时间内返回
若超时时间设置太长,会影响整体的重传效率
若超时时间设置太短,有可能会频繁发送重复的包


第二种:

【计算机网络】传输层协议——TCP(上),计算机网络,tcp/ip,计算机网络,网络

主机A给主机B发送数据时,主机B接收到了数据,但是应答丢失了
主机A在特定时间内若没有收到对应的应答,主机A会重新再发送对应的数据
主机B有可能收到 重复报文
就需要主机B进行对应报文的去重
文章来源地址https://www.toymoban.com/news/detail-709020.html

到了这里,关于【计算机网络】传输层协议——TCP(上)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [计算机网络]深度学习传输层TCP协议

    💓 博客主页:从零开始的-CodeNinja之路 ⏩ 收录专栏:深度学习传输层TCP协议 🎉欢迎大家点赞👍评论📝收藏⭐文章 TCP全称为\\\"传输控制协议(Transmission Control Protocol\\\"),要对数据的传输进行⼀个详细的控制; 端口号(Port):标识了⼀个主机上进行通信的不同的应用程序; 端口号范围划

    2024年02月20日
    浏览(77)
  • 【计算机网络】TCP传输控制协议——三次握手

    一开始,客户端和服务端都处于CLOSE状态,先是服务端监听某个端口,处于LISTEN状态。 然后客户端主动发起连接SYN,之后处于SYN-SEND状态。 服务端收到发起的连接,返回SYN,并且ACK客户端的SYN,之后处于SYN-RECV状态。 客户端收到服务端发送的SYN和ACK之后,发送ACK的ACK,之后处

    2024年02月09日
    浏览(41)
  • 计算机网络笔记:TCP协议 和UDP协议(传输层)

    TCP 和 UDP都是传输层协议,他们都属于TCP/IP协议族。 TCP的全称是 传输控制协议 是一种 面向连接的、可靠的、基于字节流 的 传输层 通信协议。TCP 是面向连接的、可靠的流协议(流就是指不间断的数据结构) TCP报文 是TCP层传输的数据单元,也称为 报文段 ,一个TCP报文段由

    2024年02月02日
    浏览(45)
  • 【计算机网络】TCP|IP协议

    目录 前言 什么是TCP/IP协议? TCP/IP协议的层次结构 TCP/IP协议的工作原理 TCP/IP协议的重要性 结语   TCP/IP协议是当今互联网世界中最重要的网络协议之一,它是网络通信的基石,为数据在网络中的传输提供了可靠性和有效性。本文将深入探讨TCP/IP协议的重要性、基本原理以及其

    2024年02月03日
    浏览(50)
  • 计算机网络—网络原理之<TCP/IP 五层协议 >图解+详述

    当应用程序间需要进行网络通讯,在 TCP/IP 五层协议的应用层需要做的工作是,程序员 自定义应用层协议 。 当前要开发一个关于“点外卖软件”的一个项目,其中有一个功能为:获取用户的订单历史(后端服务器从数据库中取出数据返回给前端页面),类似像这样的功能,

    2024年02月07日
    浏览(53)
  • 计算机网络参考模型(OSI七层与TCP/IP协议)

    目录 1 为什么要分层 1.1 层次划分的必要性 1.2 层次划分的方法 1.2 层次划分的优点 2 七层和四层的定义 2.1 七层的介绍 2.1.1 OSI七层参考模型 2.1.2 OSI七层工作原理 2.1.3 PDU 2.2 四层的介绍 2.2.1 TCP/IP 参考模型 2.2.2 TCP/IP协议族的组成 2.2.3 数据封装和解封过程 2.2.4 设备与层的对应

    2024年02月08日
    浏览(43)
  • 计算机网络之TCP/IP协议第一篇:网络基础知识

    😉😉 学习交流群: ✅✅1:这是孙哥suns给大家的福利! ✨✨2:我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料 🥭🥭3:QQ群:583783824   📚📚  工作微信:BigTreeJava 拉你进微信群,免费领取! 🍎🍎4:本文章内容出自上述:Spring应用课程!💞💞

    2024年02月09日
    浏览(52)
  • 计算机网络笔记:计算机网络体系结构(OSI七层模型、TCP/IP五层协议)

    计算机网络是一个复杂的、具有综合性技术的系统,它由计算机系统、通信处理机、通信线路和通信设备、操作系统以及网络协议等组成。为了更好地描述计算机网络结构,使计算机网络系统有条不紊地处理工作,需要定义一种较好的网络体系结构。分层结构就是一种较好地

    2024年02月07日
    浏览(44)
  • 【计算机网络】网络协议五层模型下的各层数据传输的结构(以TCP包为例)

    1.应用层      应用层的数据就是我们写的代码的内容。比如我要传一个字符串 “hello wolrd” 到目的主机,那么 报文M 就表示的是 hello world 的二进制(0 1)形式。      应用层就是我们主机的应用程序的那一层。比如你用 visual studio运行了你写好的代码程序,正在运行的代

    2024年02月03日
    浏览(39)
  • 【网络】- 计算机网络体系结构 - OSI七层模型、TCP/IP四层(五层)协议

    但凡学习计算机网络知识,肯定绕不过网络协议的,而说的计算机网络协议,总是会听到 OSI七层模型 、 TCP/IP四层协议 ,有些文章又会说成是 TCP/IP五层协议 ,刚入门学这些网络协议时,给我整得一愣一愣的。 这篇文章的目的就是把计算机网络体系的这几个协议给尽可能讲清

    2024年02月03日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包