当前位置: 首页 > news >正文

TCP传输层详解(计算机网络复习)

介绍:TCP/IP包含了一系列的协议,也叫TCP/IP协议族,简称TCP/IP。该协议族提供了点对点的连接机制,并将传输数据帧的封装、寻址、传输、路由以及接收方式都予以标准化

TCP/IP的分层模型

在讲TCP/IP协议之前,首先介绍一下七层ISO模型:

七层框架通信协议
应用层

http、smtp、snmp、ftp、telent、sip、ssh、nfs等

表示层xdr、asn.1、smb、afp、ncp等
会话层ASAP、ssh、rpc、netbios、asp、winsock、bsd socket等
传输层tcp、udp、tls、rtp、sctp、spx、atp、IL等
网络层ip、icmp、igmp、ipx、bgp、ospe、rip等
数据链路层以太网、HDLC、令牌环、帧中继、ISDN等
物理层铜缆、网缆、光缆、无线电等

TCP/IP协议是互联网最基本的协议,在一定程度上参考了七层ISO模型,有些复杂,所以在TCP/IP协议中的七层被简化为四个层次。

1、TCP\IP协议的应用层

应用层包含所有和应用程序协同工作并利用基础网络交换应用程序的业务数据的协议。一些特定的程序被认为运行在这个层上,该层协议所提供的服务能直接支持用户应用。应用层协议包含HTTP(万维网服务)、ftp(文件传输)、smtp(电子邮箱)、ssh(安全远程登录)、dns(域名解析)等诸多协议。

2、TCP/IP协议的传输层

(1)传输层的协议解决了端与端连接提供传输服务。

(2)这种传输服务分为可靠和不可靠的,其中TCP就是可靠传输、udp是不可靠传输。

(3)为端与端连接提供流量控制、差错控制、服务质量等管理服务。

传输层主要有两个性质不同的协议:tcp(控制传输协议)和UDP(用户数据协议)。

TCP那边有一个接受数据的缓存区,通过这个缓存可以解决以下两个问题:

  1. 流量控制:接收端可以通过控制缓存区的大小来控制发送端的发送速率,从而避免发送端发送过快导致接收端无法处理的情况。
  2. 确认机制:接收端可以将已经接收到的数据存放在缓存区中,等待后续的数据到达,当接收到后续的数据时,可以通过确认机制通知发送端已经接收到了哪些数据,从而保证数据的可靠传输。

而UDP是一个无连接的数据报协议,它没有缓存区,实现不了TCP上面的功能,UDP的主要目的是尽力传递,其不需要搞这些复杂的操作,所以其传输效率是最高的。

3、TCP/IP协议的网络层

TCP/IP协议网络层的作用是在复杂的网络环境中为要发送的数据报找到一个合适的路径进行传输。简单来说,网络层负责将数据传输到目的地址,目的地址可以是多个网络通过路由器连接而成的某一地址。路由转发应该也是由该层完成。网络协议的代表包括ICMP、IP、IGMP等。

4、TCP/IP协议的链路层

链路层有时也被称为数据链路层或网络接口层,用来处理连接网络的硬件部分。该层既包括操作系统硬件的设备驱动、NIC(网卡)、光纤等物理可见部分,也包括连接器等一切传输媒介。在这一层中,数据的传输单位为bit(比特)。其主要协议有ARP、RARP等。

HTTP报文传输原理

利用TCP/IP进行网络通信时,数据包会按照分层顺序与对方进行通信。发送端从应用层往下走,接收端从链路层往上走。从客户端到服务端的数据,每一帧的传输顺序都为应用层->传输层->网络层->链路层->链路层->网络层->传输层->应用层。

接下来为大家介绍一下数据封装和分用。

数据通过互联网传输时不可能是光秃秃的不加标识(数据会乱),所以在发送数据时需要加上特定的标识(数据封装),在使用数据时候在去掉特定标识(数据分用)。

1、TCP报文格式

源端口号:

(1)源端口号表示报文的发送端口,占16位。源端口号和源ip地址组合起来,可以标识报文的发送地址。

(2)目的端口号表示报文的接收端口,占16位。目的端口号和目的IP地址相结合,可以标识报文的接收地址

(3)序号,TCP传输过程中,在发送端出的字节流中,传输报文中的数据部分的每一个字节都有它的编号。序号占32位,发起方发送数据时,都需要标记序号。

序号的语义与syn控制标志(Control bits)的值有关。根据控制标志中的SYN来表示不同的序号含义:

当syn=1时,为连接建立阶段

当syn=0时,为数据传输正式开始时,第一个报文的序号为isn+1,后面的报文序号为前一个报文的SN值+TCP报文的净荷字节数(不包含TCP头)。如果发送端发送的一个TCP帧的净荷为12B,序号为5 ,则发送端接着发送下一个数据包时,序号的值应该为5+12=17。

在数据传输中,tcp通过序号来对上层提供有序的数据流。

(4)确认序号标识了报文接收端期望接收的字节序列。如果设置了ACK控制位,确认序号的值表示下一个准备接收的包的序号码。举个例子

(5)头部长度,该字段占4位,用来表示tcp报文的首部长度。

(6)保留字段,暂时没什么用。

(7)控制标志占6位,具体的标志位为URG、ACK、psh、rst、syn、fin

(8)窗口,长度为16位,共两个字节,用来进行流量控制的。

(9)校验和长度位16位,共两个字节,对整个tcp报文段,即tcp头部和tcp数据进行校验和计算,接收端用于对收到的数据包进行验证。

(10)紧急指针,长度16位,共两个字节,是一个偏移量,和sn序号值相加表示紧急数据最后一个字节的序号。

以上10项内容是TCP报文首部必需字段,也叫固有字段,长度为20字节。接下来就是可选项和填充部分。

2、TCP的三次握手

TCP连接建立时,双方需要经过三次握手;断开连接时,双方需要经过四次挥手。

通常情况下,建立连接的双方由一端监听来自请求方的TCP连接,当服务端监听开始时,必须准备好接受外来的连接,在java中该操作通过创建一个ServerSocket服务监听套接字实例来完成。此操作会调用操作系统(如linux)c代码的三个函数socket()、bind()、listen()来完成

服务端伪代码如下:

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;public class SocketServer {public static void main(String[] args) {try {ServerSocket socket=new ServerSocket(8080);while (true){Socket socket1=socket.accept();//开启线程进行连接的IO操作ServerThread thread=new ServerThread();thread.start();}} catch (IOException e) {throw new RuntimeException(e);}}
}

客户端伪代码如下:

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;public class SocketClient {public static void main(String[] args) {try {Socket socket =new Socket("localhost",8080);//写入给监听方的输出流。OutputStream os=socket.getOutputStream();//读取监听方的输入流InputStream inputStream=socket.getInputStream();} catch (UnknownHostException e) {throw new RuntimeException(e);} catch (IOException e) {throw new RuntimeException(e);}}
}

(1)第一次握手:Client进入SYN_SENT状态,发送一个SYN帧来主动打开传输通道,该帧被设置为1

(2)第二次握手:Server在收到SYN帧之后,会进入SYN_RCVD状态,同时返回SYN+ACK帧给client。

(3)第三次握手:Client在收到Server的第二次握手SYN+ACK确认帧之后,首先将自己的状态从SYN_SEND变成ESTABLISHED,表示自己的放向的连接通道已经建立成功。

3、TCP的四次挥手

相关文章:

TCP传输层详解(计算机网络复习)

介绍:TCP/IP包含了一系列的协议,也叫TCP/IP协议族,简称TCP/IP。该协议族提供了点对点的连接机制,并将传输数据帧的封装、寻址、传输、路由以及接收方式都予以标准化 TCP/IP的分层模型 在讲TCP/IP协议之前,首先介绍一…...

【LuatOS】简单案例网页点灯

材料 硬件:合宙ESP32C3简约版,BH1750光照度模块,0.96寸OLED(4P_IIC),杜邦线若干 接线: ESP32C3.GND — OLED.GND — BH1750.GND ESP32C3.3.3V — OLED.VCC — BH1750.VCC ESP32C3.GPIO5 — OLED.SCL — BH1750.SCL E…...

百度APP iOS端包体积50M优化实践(七)编译器优化

一. 前言 百度APP iOS端包体积优化系列文章的前六篇重点介绍了包体积优化整体方案、图片优化、资源优化、代码优化、无用类优化、HEIC图片优化实践和无用方法清理,图片优化是从无用图片、Asset Catalog和HEIC格式三个角度做深度优化;资源优化包括大资源…...

STM32-新建工程(标准库)

目录 STM32F10x新建工程(标准库) 移植文件夹 新建工程 添加启动文件和必需文件 在工程中加载新添加的文件 在工程中添加文件路径 在工程中添加main函数 添加lib库 添加必需文件 添加宏定义 点亮LED(标准库) STM32F10x新…...

Android集成科大讯飞语音识别与语音唤醒简易封装

目录 一、语音唤醒部分 1、首先在科大讯飞官网注册开发者账号 2、配置唤醒词然后下载sdk 3、选择对应功能下载 4、语音唤醒lib包全部复制到工程目录下 5、把语音唤醒词文件复制到工程的assets目录 6、复制对应权限到AndroidManifest.xml中 7、唤醒工具类封装 二、语音识…...

【Linux】telnet命令使用

telnet命令 telnet命令用于使用telnet协议与另一台主机进行通信。如果在没有主机参数的情况下调用telnet,它将进入命令模式,由其提示(telnet>)指示。在这种模式下,它接受并执行下面列出的命令。如果使用参数调用它…...

VCG 标记使用(BitFlags)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 对于网格的每个单形,我们都有一个称为BitFlags的组件,该组件存储固定大小的32位向量,用于各种需求。管理这些标志的相关类:vcg::tri::UpdateFlags与vcg::tri::UpdateSelection。主要的标记有:删除标记、边界标记…...

Pandas中的Series(第1讲)

Pandas中的Series(第1讲)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔…...

从手工测试进阶中高级测试?如何突破职业瓶颈...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、手工测试如何进…...

【链表Linked List】力扣-114 二叉树展开为链表

目录 题目描述 解题过程 官方题解 题目描述 给你二叉树的根结点 root ,请你将它展开为一个单链表: 展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。展开后的单链表应…...

Go (一) 基础部分4 -- 文件处理

一、文件基本介绍 1.1、打开一个文件 基本介绍:打开一个文件用于读取,如果操作成功,返回的文件对象的方法可用于读取文件数据。如果出错,错误底层类型是"*.PathError" func Open(name string) (*File, error) name stri…...

集合03 Collection (List) - Java

List ArrayListArrayList注意事项ArrayList底层操作机制-源码分析(重点) VectorVector基本介绍 ——Vector和ArrayList比较Vector底层结构和源码分析 LinkedList基本介绍LinkedList的底层结构和操作机制LinkedList的增删改查 ——LinkedList和ArrayList比…...

国产化软件突围!怿星科技eStation产品荣获2023铃轩奖“前瞻优秀奖”

11月11日,2023中国汽车供应链峰会暨第八届铃轩奖颁奖典礼在江苏省昆山市举行。怿星科技凭借eStation产品,荣获2023铃轩奖“前瞻智能座舱类优秀奖”,怿星CEO潘凯受邀出席铃轩奖晚会并代表领奖。 2023铃轩奖“前瞻智能座舱类优秀奖” 铃轩奖&a…...

如何解决Redis热Key问题?

Redis热点key是指访问频率较高的key,当大量的请求集中在一个或少数几个热点key上时,会导致这些key所在的Redis节点的CPU、内存和网络带宽等资源被大量消耗,影响Redis集群的整体性能和稳定性。 热点Key带来的问题 Redis节点负载过高&#xff1…...

react Hooks之useId

当我们在编写React组件时,有时需要为元素生成唯一的ID。这种情况经常出现在表单元素、标签和用于无障碍性的目的上。React提供了一个名为useId的自定义Hook,它可以帮助我们生成唯一的ID。 1、作用: 用于生成一个唯一的 ID。这个 ID 可以用于…...

2023年全球软件开发大会(QCon广州站2023)-核心PPT资料下载

一、峰会简介 本次峰会包含:泛娱乐时代的边缘计算与通讯、稳定性即生命线、下一代软件架构、出海的思考、现代数据架构、AGI 与 AIGC 落地、大前端技术探索、编程语言实战、DevOps vs 平台工程、新型数据库、AIGC 浪潮下的企业出海、AIGC 浪潮下的效能智能化、数据…...

MicroSD 卡 使用读卡器 读取速度测试

设备 - - 电脑为m.2固态硬盘 usb口为USB3.2 gen2接口(即支持1GB/s的接口) cpu: amd3600 测试方案1 直接MicroSD卡放入读卡器测试 38MB/s 从sd卡复制到本地C盘 测试方案2 MicroSD卡使用闪迪的SD卡套套上之后一起插入读卡器 76MB/s 从sd卡复制到本地C盘...

Selenium+Unittest+HTMLTestRunner框架更改为Selenium+Pytest+Allure(一)

背景:之前的框架,Selenium是3.x版本,现在更新到4.15版本后,一些写法如find_element_by_xxx 不再支持,改为find_element(By.xxx)的方式,同时由于Unittest不如Pytest在执行方面灵活(比如只执行冒烟…...

LoRA(Low-Rank Adaptation)

LoRA(Low-Rank Adaptation) LoRA(Low-Rank Adaptation)是一种针对深度学习模型的参数调整方法,特别适用于大型预训练模型如GPT-3或BERT。它通过在模型的原有权重上添加低秩(low-rank)矩阵&…...

【银行测试】第三方支付功能测试点+贷款常问面试题(详细)

前言 1、第三方支付功能测试点 支付流程: 我们在测试一个功能时,需要先了解一下这个逻辑,而订单支付逻辑普遍都会有以下内容: 1)创建本地唯一订单号; 2)去调用支付,在支付平台生…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

2025季度云服务器排行榜

在全球云服务器市场&#xff0c;各厂商的排名和地位并非一成不变&#xff0c;而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势&#xff0c;对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析&#xff1a; 一、全球“三巨头”…...

02.运算符

目录 什么是运算符 算术运算符 1.基本四则运算符 2.增量运算符 3.自增/自减运算符 关系运算符 逻辑运算符 &&&#xff1a;逻辑与 ||&#xff1a;逻辑或 &#xff01;&#xff1a;逻辑非 短路求值 位运算符 按位与&&#xff1a; 按位或 | 按位取反~ …...