TCP/IP的层次结构以及各层数据封装的过程 (一)

2023-10-27

(参考文献)TCP/IP详解,卷1:协议

Tcp/ip协议的四个层次:

 

在以上的图中,FTP属于应用层的协议,TCP、UDP属于运输层的协议。

在TCP/IP协议族中,网络层IP提供的是一种不可靠的服务,,它尽可能的把分组从源节点送到目的节点,但是并不提供任何可靠保证。而TCP在不可靠的IP层上提供了一个可靠的运输层(参见TCP三次握手),为了提供这种可靠的服务,TCP采用了超时重传,发送和接收的端到端的确认分组等机制。

TCP、IP协议的分层结构图:


在以上图中,ICMP(控制报文协议)是IP协议的附属协议,IP层用它来与其他主机或路由器交换错误报文和其他重要信息。

ICMP是Internet组管理协议,它用来把一个UDP数据多播到多个主机上。

互联网地址分类:


数据包的封装:


当应用程序用TCP传数据时,数据被送入协议栈中,由上到下对每一层的数据进行加工(主要是增加一些首部信息和尾部信息);TCP串给IP的数据单元被称为TCP报文段;IP传为网络接口层的数据单元被称为IP数据报;通过以太网传输的比特流称作帧。

 

封装流程图图下图:

 

UDP数据与TCP数据基本一致,唯一不同的是,UDP传给IP的信息单元称为UDP数据包,并且UDP的首部长为8字节。

在上面的TCP、IP的分层结构图中我们可以看见,用户程序、TCP、UDP、ICMP等都会向IP传送数据,因此在IP的首部加入了长度为8bit的标识;1表示ICMP协议,2表示IGMP协议,6表示TCP,17表示UDP协议。

TCP、和UDP在传送数据的过程中都会用到一个16bit的端口号来表示不同的应用程序TCP和UDP把源端口号和目的端口号分别存入报文首部中。(216= 65536)

网络接口通常要发送和接收IP、ARP、RARP数据,因此在以太网的首部(及帧的首部)也有一个16bit的标识。

 

数据帧的解析过程:


端口号的分配(216 = 65536):

在上面说了TCP和UDP采用了16bit的端口号来识别应用程序。

知名端口号一般位于:1 ---  255 之间

256 --- 1023的端口号,通常是由Unix系统占用(系统占用)

1024 ---5000 是大多数TCP、IP实现的临时分配

大于5000的一般是给其他服务预留的(Internet上并不常用的服务)


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TCP/IP的层次结构以及各层数据封装的过程 (一) 的相关文章

  • WCF TCP 客户端 - 如何使用它们的基本指南?

    我有一个 WCF 服务并希望使用 TCP 绑定连接到它 这一切都很好 但是你应该如何处理客户呢 我注意到 如果您为每个调用创建一个新客户端 它不会重新使用该通道 并会留下一堆 TCP 连接 直到超时 创建客户端 调用其方法 然后关闭它是正常
  • TCPServer 具有同时全双工通信

    我正在尝试编写一个 C 服务器 客户端 它将同时通过 TCP 相互发送字节数组 我正在努力思考如何实现这一目标 我见过的所有示例都等待消息 然后发送响应 我需要同时进行沟通 我是否需要为服务器和客户端上的传入和传出创建 2 个单独的 TCP
  • 套接字编程Python:如何确保收到完整消息?

    我正在使用 python 3 x 和套接字模块 服务器在 ipv4 地址上运行并使用 tcp 我阅读了一些有关如何发送和接收数据的教程 对于服务器或客户端 要确保发送整个消息 您可以简单地检查发送的数据量是否等于消息的大小 def myse
  • 无法通过 ngrok ssh 进入远程 Linux

    远程Linux计算机位于内部网络中 没有公共IP地址 所以我安装了ngrok ngrok tcp 22 ngrok by inconshreveable Ctrl C 退出 在线隧道状态版本2 0 19 2 0 17网页界面http 127
  • TCP 代理:在后端不可用时保持连接

    在 Docker 设置的上下文中 我想使用类似大使的模式来允许某些容器 例如数据库服务器 正常重新启动 而不必重新启动所有依赖的容器 例如 Web 服务器 并且没有错误消息 因为 数据库服务器不可用 因此 我想知道 是否有一个 TCP 代理
  • 很难理解带有 async_read 和 async_write 的 Boost ASIO TCP 的一些概念

    我很难理解使用 async read 和 async write 时构建 tcp 客户端的正确方法 这examples http www boost org doc libs 1 38 0 doc html boost asio examp
  • 如何在 MAC OS X 中获得最大 TCP 接收/发送窗口?

    如何在 MAC OS X 中获得最大 TCP 接收 发送窗口 Linux中有两个ctl proc sys net core rmem max 最大 TCP 接收窗口 NET CORE RMEM MAX proc sys net core w
  • tcp_max_syn_backlog 和 somaxconn 有什么区别?

    我一直在阅读一些关于 Linux 上的 TCP 实现的文章 我很困惑 它们之间有什么区别net ipv4 tcp max syn backlog and net core somaxconn和backlog作为参数传递给listen 系统调
  • Scapy 不需要的 RST TCP 数据包

    为了理解TCP是如何工作的 我尝试伪造自己的TCP SYN SYN ACK ACK 基于教程 http www thice nl creating ack get packets with scapy http www thice nl c
  • 如何模拟客户端和服务器之间的套接字断开连接(在 Windows 上)?

    我已经实现了一种 心跳解决方案 我想看看在实际情况下网络 故障 时会发生什么 特别是当套接字上没有流量时发生这种情况 问题 我只有一台电脑 我在windows java上 我想简单地拔掉网线 停用网卡不会影响这两个进程 因为它们在同一个盒子
  • net.TCPConn 允许在 FIN 数据包后写入

    我正在尝试为一些服务器端代码编写单元测试 但我在确定关闭测试用例时遇到了困难 环回 TCP 连接似乎无法正确处理干净关闭 我在一个示例应用程序中重现了这一点 该应用程序按顺序执行以下操作 创建客户端和服务器连接 通过从客户端向服务器成功发送
  • Go TCP 读取是非阻塞的

    我正在尝试用 Go 创建服务器和客户端 我已经成功地与服务器和客户端进行通信 但我遇到的问题是golang中的TCP读取是非阻塞的 我想知道 golang 中的读取是否有可能像 C 中的读取一样阻塞 谢谢 EDIT 这是服务器的源代码 fu
  • C# - 从客户端检查 TCP/IP 套接字状态

    我想为我的 TCP IP 客户端类提供 CheckConnection 函数 以便我可以检查是否发生了错误 我自己的客户端断开连接 服务器断开连接 服务器卡住等 我有类似的东西 bool isConnectionActive false i
  • 构建多线程 TCP/IP 服务器

    我想构建一个可供最多 100 个并发客户端使用的 TCP IP 服务器 但仍不确定如何开始 至少我需要服务器 监听客户端 并将它们全部存储在数组或列表中 对于每个客户端 它需要根据其客户端状态接收和发送数据 当有人连接或断开连接时 服务器应
  • 视频流上的 TCP 与 UDP

    我刚从网络编程考试回来 他们问我们的问题之一是 如果您要传输视频 您会使用 TCP 还是 UDP 请解释一下存储视频和实时视频流 对于这个问题 他们只是希望得到一个简短的答案 TCP 用于存储视频 UDP 用于实时视频 但我在回家的路上想到
  • 为什么turn服务器不支持tcp连接?

    我是 WebRTC 新手 我需要为我的 webrtc 应用程序配置我自己的 Turn 服务器 我使用以下命令安装了我的转弯服务器 apt get install coturn 我只需要通过 tcp 运行转变服务器 它不必使用 UDP 进行任
  • 是否可以找到哪个用户位于 localhost TCP 连接的另一端?

    这是一个编程问题 但它是 Linux Unix 特定的 如果我从本地主机获得 TCP 连接 是否有一种简单的方法可以告诉哪个用户在 C 程序内建立了连接而无需 shell 我知道这对于 Unix 域套接字来说并不太难 我已经知道远程 IP
  • 我应该害怕使用 UDP 进行客户端/服务器广播通话吗?

    我在过去的两天里阅读了每一篇StackOverflow问题和答案 以及googling当然 关于印地TCP and UDP协议 以便决定在我的用户应用程序和 Windows 服务之间的通信方法中应该使用哪一种 从我目前所看到的来看 UDP是
  • 序列化是通过套接字发送数据的最佳选择吗?

    有人告诉我 序列化不是通过套接字发送数据的最佳方法 但他们说他们在一本书上读过一次 并且不确定更好的方法 因为他们以前没有真正做过网络 那么序列化是最好的方法还是有更好的方法 如果这有很大的不同的话 这也是一个游戏 通过搜索有关通过它发送对
  • 使用 boost 异步发送和接收自定义数据包?

    我正在尝试使用 boost 异步发送和接收自定义数据包 根据我当前的实现 我有一些问题 tcpclient cpp include tcpclient h include

随机推荐

  • 2013年8月28日星期三(8-2,裁剪Cohen_sutherland算法)

    这节就是只保留裁剪区域内的像素 这个例子用直线表示 分为4种情况 1 直线完全在裁剪区外 不用处理 2 直线完全在裁剪区之内 也无需改动 直接光栅化 3 直线的一个端点在裁剪区之外 必须进行裁剪 4 直线的两个端点都在裁剪区之外 但部分在裁
  • 两个div重叠显示

    想要将兄弟div元素进行重叠 将父元素position设置为relative 子元素position设置为absolute 使用z index设置谁显示在上层 谁显示在下层
  • TLSv1.2协议了解

    首先明确TLS的作用三个作用 1 身份认证 通过证书认证来确认对方的身份 防止中间人攻击 2 数据私密性 使用对称性密钥加密传输的数据 由于密钥只有客户端 服务端有 其他人无法窥探 3 数据完整性 使用摘要算法对报文进行计算 收到消息后校验
  • poj 3980 取模运算

    Description 编写一个C函数mod int n int m 实现取模运算 Input 输入包含多行数据 每行数据是两个整数a b 1 lt a b lt 32767 数据以EOF结束 Output 于输入的每一行输出a b Sam
  • SQLServer JDBC 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接

    网上有不少人遇到过使用jdbc连接sqlserver出错的情况 错误信息为 Caused by com microsoft sqlserver jdbc SQLServerException 驱动程序无法通过使用安全套接字层 SSL 加密与
  • 大数据开发教程——MapReduce原理及编程

    什么是MapReduce MapReduce是一种编程模型 用于大规模数据集 大于1TB 的并行运算 概念 Map 映射 和 Reduce 归约 是它们的主要思想 都是从函数式编程语言里借来的 还有从矢量编程语言里借来的特性 MapRedu
  • protobuf版本冲突问题解决

    1 proto caffe pb h 17 2 error error This file was generated by an older version of protoc 如果你装有anaconda 以及tensorflow 或者在
  • 【软件测试】—— 基础知识总结

    目录 基础篇 1 什么是软件测试 2 软件测试的目的 3 软件测试与软件开发的区别 概念篇 1 什么是需求 2 需求是软件测试的依据 3 测试用例 4 什么是BUG 5 开发模型 5个模型 1 瀑布模型 2 螺旋模型 3 4 增量模型 迭代
  • 继续谈下调用约定

    继续谈下调用约定 今天写了个DLL是用extern C 导出的 以前一直用 def文件 结果出现了以下错误 无法解析的外部符号 declspec dllimport int cdecl SetStatus int imp SetStatus
  • 原生js jquery设置输入框不可编辑,attr、prop对比

    1 设置输入框不可编辑 点击switch按钮 输入框可编辑和不可编辑切换 p E mail p
  • 期权是什么?一分钟带你玩转期权策略!

    很多人问我期权是什么 这个问题怎么回答呢 首先期权是一种交易模式 如同股票期货一样 但它又不同于股票和期货 因为它有自己的交易规则和特性 期权更多是一种工具 可以做空大盘对冲下跌风险 下文解答期权是什么 一分钟带你玩转期权策略 本文来自 期
  • 使用Python的requests库与chatGPT进行通信

    前言 在人工智能领域 自然语言处理模型如OpenAI GPT 3 5 Turbo具有广泛的应用 虽然官方提供了Python库来与这些模型进行交互 但也有一些人更喜欢使用requests库来自定义请求和处理响应 比如现在很多第三方LLM都提供
  • epoll 相对于select的优势

    epoll 相对于select的优势 分类 LinuxKnowHow 819 0 举报 收藏 这个问题至今才去查 是因为我需要用的地方真的不是很多 学习了那么多年 不知道自己究竟学了什么 觉得自己的优势就是针对特定知识点都熟悉点 一整套的软
  • 微信小程序支付踩坑notify_url(支付回调)

    最近做了微信小程序支付 支付成功之后发现notify url回调地址竟然没有访问 检查了无数次代码 下单结果里面的回调地址看了又看 都没有错啊 把回调地址复制出来到浏览器上面 外网也是可以访问的啊 然后我再分析 为什么以前公众号支付都没有出
  • Rust - 简单使用 reqwest 发起 HTTP 请求

    Rust 简单使用 reqwest 发起 HTTP 请求 一 reqwest 是什么 二 使用 reqwest 发起请求 1 在 Cargo tom 添加依赖 2 main rs 三 文章参考 一 reqwest 是什么 reqwest 是
  • Lua调用Unity完成登入注册

    今天的内容是用Lua调用Unity完成登入注册 这里只是完成了一个很简单的功能哦 注意哦 这里间的Lua文件放在同一个过程的同一个文件夹下 这里用到了一个Lua模块 a CS UnityEngine Lua调用C 需要这个前缀 One fu
  • 项目管理软件dhtmlxGantt配置教程(十):如何设置时间和范围

    1 时间单位 要设置比例的单位 请使用相应比例对象中的unit属性 可能的值是 分钟 小时 天 周 季度 月 年 gantt config scales unit month step 1 format F Y unit day step
  • vue路由history模式刷新页面出现404问题

    vue hash模式下 URL中存在 用 history 模式就能解决这个问题 但是history模式会出现刷新页面后 页面出现404 解决的办法是用nginx配置一下 在nginx的配置文件中修改 方法一 server listen 90
  • oracle中nextday,Oracle日期函数 next_day

    Oracle日期函数 next day 在Oracle是提供了next day求指定日期的下一个日期 语法 next day date weekday date is used to find the next weekday weekda
  • TCP/IP的层次结构以及各层数据封装的过程 (一)

    参考文献 TCP IP详解 卷1 协议 Tcp ip协议的四个层次 在以上的图中 FTP属于应用层的协议 TCP UDP属于运输层的协议 在TCP IP协议族中 网络层IP提供的是一种不可靠的服务 它尽可能的把分组从源节点送到目的节点 但是