导航菜单

  • 0.api
  • 0.Async
  • 0.module
  • 1.ES2015
  • 2.Promise
  • 3.Node
  • 4.NodeInstall
  • 5.REPL
  • 6.NodeCore
  • 7.module&NPM
  • 8.Encoding
  • 9.Buffer
  • 10.fs
  • 11.Stream-1
  • 11.Stream-2
  • 11.Stream-3
  • 11.Stream-4
  • 12-Network-2
  • 12.NetWork-3
  • 12.Network-1
  • 13.tcp
  • 14.http-1
  • 14.http-2
  • 15.compress
  • 16.crypto
  • 17.process
  • 18.yargs
  • 19.cache
  • 20.action
  • 21.https
  • 22.cookie
  • 23.session
  • 24.express-1
  • 24.express-2
  • 24.express-3
  • 24.express-4
  • 25.koa-1
  • 26.webpack-1-basic
  • 26.webpack-2-optimize
  • 26.webpack-3-file
  • 26.webpack-4.tapable
  • 26.webpack-5-AST
  • 26.webpack-6-sources
  • 26.webpack-7-loader
  • 26.webpack-8-plugin
  • 26.webpack-9-hand
  • 26.webpack-10-prepare
  • 28.redux
  • 28.redux-jwt-back
  • 28.redux-jwt-front
  • 29.mongodb-1
  • 29.mongodb-2
  • 29.mongodb-3
  • 29.mongodb-4
  • 29.mongodb-5
  • 29.mongodb-6
  • 30.cms-1-mysql
  • 30.cms-2-mysql
  • 30.cms-3-mysql
  • 30.cms-4-nunjucks
  • 30.cms-5-mock
  • 30.cms-6-egg
  • 30.cms-7-api
  • 30.cms-8-roadhog
  • 30.cms-9-yaml
  • 30.cms-10-umi
  • 30.cms-12-dva
  • 30.cms-13-dva-ant
  • 30.cms-14-front
  • 30.cms-15-deploy
  • 31.dva
  • 31.cms-13-dva-antdesign
  • 33.redis
  • 34.unittest
  • 35.jwt
  • 36.websocket-1
  • 36.websocket-2
  • 38.chat-api-1
  • 38.chat-api-2
  • 38.chat-3
  • 38.chat-api-3
  • 38.chat
  • 38.chat2
  • 38.chat2
  • 39.crawl-0
  • 39.crawl-1
  • 39.crawl-2
  • 40.deploy
  • 41.safe
  • 42.test
  • 43.nginx
  • 44.enzyme
  • 45.docker
  • 46.elastic
  • 47.oauth
  • 48.wxpay
  • index
  • 52.UML
  • 53.design
  • index
  • 54.linux
  • 57.ts
  • 56.react-ssr
  • 58.ts_react
  • 59.ketang
  • 59.ketang2
  • 61.1.devops-linux
  • 61.2.devops-vi
  • 61.3.devops-user
  • 61.4.devops-auth
  • 61.5.devops-shell
  • 61.6.devops-install
  • 61.7.devops-system
  • 61.8.devops-service
  • 61.9.devops-network
  • 61.10.devops-nginx
  • 61.11.devops-docker
  • 61.12.devops-jekins
  • 61.13.devops-groovy
  • 61.14.devops-php
  • 61.15.devops-java
  • 61.16.devops-node
  • 61.17.devops-k8s
  • 62.1.react-basic
  • 62.2.react-state
  • 62.3.react-high
  • 62.4.react-optimize
  • 62.5.react-hooks
  • 62.6.react-immutable
  • 62.7.react-mobx
  • 62.8.react-source
  • 63.1.redux
  • 63.2.redux-middleware
  • 63.3.redux-hooks
  • 63.4.redux-saga
  • 63.5.redux-saga-hand
  • 64.1.router
  • 64.2.router-connected
  • 65.1.typescript
  • 65.2.typescript
  • 65.3.typescript
  • 65.4.antd
  • 65.4.definition
  • 66-1.vue-base
  • 66-2.vue-component
  • 66-3.vue-cli3.0
  • 66-4.$message组件
  • 66-5.Form组件
  • 66-6.tree
  • 66-7.vue-router-apply
  • 66-8.axios-apply
  • 66-9.vuex-apply
  • 66-10.jwt-vue
  • 66-11.vue-ssr
  • 66-12.nuxt-apply
  • 66-13.pwa
  • 66-14.vue单元测试
  • 66-15.权限校验
  • 67-1-network
  • 68-2-wireshark
  • 7.npm2
  • 69-hooks
  • 70-deploy
  • 71-hmr
  • 72.deploy
  • 73.import
  • 74.mobile
  • 75.webpack-1.文件分析
  • 75.webpack-2.loader
  • 75.webpack-3.源码流程
  • 75.webpack-4.tapable
  • 75.webpack-5.prepare
  • 75.webpack-6.resolve
  • 75.webpack-7.loader
  • 75.webpack-8.module
  • 75.webpack-9.chunk
  • 75.webpack-10.asset
  • 75.webpack-11.实现
  • 76.react_optimize
  • 77.ts_ketang_back
  • 77.ts_ketang_front
  • 78.vue-domdiff
  • 79.grammar
  • 80.tree
  • 81.axios
  • 82.1.react
  • 82.2.react-high
  • 82.3.react-router
  • 82.4.redux
  • 82.5.redux_middleware
  • 82.6.connected
  • 82.7.saga
  • 82.8.dva
  • 82.8.dva-source
  • 82.9.roadhog
  • 82.10.umi
  • 82.11.antdesign
  • 82.12.ketang-front
  • 82.12.ketang-back
  • 83.upload
  • 84.graphql
  • 85.antpro
  • 86.1.uml
  • 86.2.design
  • 87.postcss
  • 88.react16-1
  • 89.nextjs
  • 90.react-test
  • 91.react-ts
  • 92.rbac
  • 93.tsnode
  • 94.1.JavaScript
  • 94.2.JavaScript
  • 94.3.MODULE
  • 94.4.EventLoop
  • 94.5.文件上传
  • 94.6.https
  • 94.7. nginx
  • 95.1. react
  • 95.2.react
  • 96.1.react16
  • 96.2.fiber
  • 96.3.fiber
  • 97.serverless
  • 98.websocket
  • 100.1.react-basic
  • 101.1.monitor
  • 101.2.monitor
  • 102.java
  • 103.1.webpack-usage
  • 103.2.webpack-bundle
  • 103.3.webpack-ast
  • 103.4.webpack-flow
  • 103.5.webpack-loader
  • 103.6.webpack-tapable
  • 103.7.webpack-plugin
  • 103.8.webpack-optimize1
  • 103.9.webpack-optimize2
  • 103.10.webpack-hand
  • 103.11.webpack-hmr
  • 103.11.webpack5
  • 103.13.splitChunks
  • 103.14.webpack-sourcemap
  • 103.15.webpack-compiler1
  • 103.15.webpack-compiler2
  • 103.16.rollup.1
  • 103.16.rollup.2
  • 103.16.rollup.3
  • 103.16.vite.basic
  • 103.16.vite.source
  • 103.16.vite.plugin
  • 103.16.vite.1
  • 103.16.vite.2
  • 103.17.polyfill
  • 104.1.binary
  • 104.2.binary
  • 105.skeleton
  • 106.1.react
  • 106.2.react_hooks
  • 106.3.react_router
  • 106.4.redux
  • 106.5.redux_middleware
  • 106.6.connected-react-router
  • 106.6.redux-first-history
  • 106.7.redux-saga
  • 106.8.dva
  • 106.9.umi
  • 106.10.ketang
  • 106.11.antdesign
  • 106.12.antpro
  • 106.13.router-6
  • 106.14.ssr
  • 106.15.nextjs
  • 106.16.1.cms
  • 106.16.2.cms
  • 106.16.3.cms
  • 106.16.4.cms
  • 106.16.mobx
  • 106.17.fomily
  • 107.fiber
  • 108.http
  • 109.1.webpack_usage
  • 109.2.webpack_source
  • 109.3.dll
  • 110.nest.js
  • 111.xstate
  • 112.Form
  • 113.redux-saga
  • 114.react+typescript
  • 115.immer
  • 116.pro5
  • 117.css-loader
  • 118.1.umi-core
  • 119.2.module-federation
  • 119.1.module-federation
  • 120.create-react-app
  • 121.react-scripts
  • 122.react-optimize
  • 123.jsx-runtime
  • 124.next.js
  • 125.1.linux
  • 125.2.linux-vi
  • 125.3.linux-user
  • 125.4.linux-auth
  • 125.5.linux-shell
  • 125.6.linux-install
  • 125.7.linux-system
  • 125.8.linux-service
  • 125.9.linux-network
  • 125.10.nginx
  • 125.11.docker
  • 125.12.ci
  • 125.13.k8s
  • 125.14.k8s
  • 125.15.k8s
  • 125.16.k8s
  • 126.11.react-1
  • 126.12.react-2
  • 126.12.react-3
  • 126.12.react-4
  • 126.12.react-5
  • 126.12.react-6
  • 126.12.react-7
  • 126.12.react-8
  • 127.frontend
  • 128.rollup
  • 129.px2rem-loader
  • 130.health
  • 131.hooks
  • 132.keepalive
  • 133.vue-cli
  • 134.react18
  • 134.2.react18
  • 134.3.react18
  • 135.function
  • 136.toolkit
  • 137.lerna
  • 138.create-vite
  • 139.cli
  • 140.antd
  • 141.react-dnd
  • 142.1.link
  • 143.1.gulp
  • 143.2.stream
  • 143.3.gulp
  • 144.1.closure
  • 144.2.v8
  • 144.3.gc
  • 145.react-router-v6
  • 146.browser
  • 147.lighthouse
  • 148.1.basic
  • 148.2.basic
  • 148.3.basic
  • 148.4.basic
  • 148.5.basic
  • 149.1.vite
  • 149.2.vite
  • 149.3.vite
  • 149.4.vite
  • 150.react-window
  • 151.react-query
  • 152.useRequest
  • 153.transition
  • 154.emotion
  • 155.1.formily
  • 155.2.formily
  • 155.3.formily
  • 155.3.1.mobx.usage
  • 155.3.2.mobx.source
  • 156.vue-loader
  • 103.11.mf
  • 157.1.react18
  • 158.umi4
  • 159.rxjs
  • 159.rxjs2
  • 160.bff
  • 161.zustand
  • 162.vscode
  • 163.emp
  • 164.cors
  • 1. 协议的概念和作用
    • 1.1 服务+协议实现数据传输
  • 2. OSI七层模型
  • 3. TCP/IP参考模型
    • 常用协议
    • 3.1 网络接口层
      • 3.1.1 物理层
      • 3.1.2 数据链路层
      • 3.1.3 MAC地址
    • 3.2 互联网层(网络层)
      • 3.2.1 选址
      • 3.2.2 路由
      • 3.2.3 IP
        • 3.2.3.1 IP头部
        • 3.2.3.2 IP地址格式
        • 3.2.3.3 IP地址组成
        • 3.2.3.4 IP地址表示
        • 3.2.3.5 IP地址的分类
        • 3.2.3.6 公有地址和私有地址
        • 3.2.3.7 子网掩码
    • 3.3 传输层
      • 3.3.1 传输层的功能
      • 3.3.2 对可靠性要求高的上层协议,实现可靠性的保证
      • 3.3.3 协议分类
      • 3.3.4 TCP功能
        • 3.3.4.1 TCP数据包封装
        • 3.2.4.2 握手和断开
          • 3.2.4.2.1 三次握手
          • 3.2.4.2.2 四次断开
          • 3.2.4.2.3 抓包
    • 3.4 UDP
      • 3.4.1 UDP的封装格式
      • 3.4.2 UDP的应用
      • 3.4.3 DNS服务器
        • 3.4.3.1 域名
        • 3.4.3.2 DNS服务器
        • 3.4.3.3 查找过程
    • 3.5 应用层
      • 3.5.1 协议
      • 3.5.2 应用层常见协议
    • 3.6 案例
      • 3.6.1 发送方是从高层到低层封装数据
      • 3.6.2 接收方是从低层到高层解封装
      • 3.6.3 真实网络环境
  • 4. 附录
    • 4.1 不同层中的称谓:
    • 4.2 IP头服务类型
    • 4.3 握手和断开
  • 5. 参考

1. 协议的概念和作用 #

  • 为了让计算机能够通信,计算机需要定义通信规则,这些规则就是协议
  • 规则是多种,协议也有多种
  • 协议就是数据封装格式+传输

1.1 服务+协议实现数据传输 #

  • 摩尔斯电码

2. OSI七层模型 #

Open System Interconnection,适用于所有的网络

  • 分工带来效能
    • 松江黄金大劫案
  • 将复杂的流程分解为几个功能相对单一的子进程
  • 整个流程更加清晰,复杂问题简单化
  • 更容易发现问题并针对性的解决问题
    • 应用层(Application) 提供网络与用户应用软件之间的接口服务
    • 表示层(Presentation) 提供格式化的表示和转换数据服务,如加密和压缩
    • 会话层(Session) 提供包括访问验证和会话管理在内的建立和维护应用之间通信的机制
    • 传输层(Transimission) 提供建立、维护和取消传输连接功能,负责可靠地传输数据(PC)
    • 网络层(Network) 处理网络间路由,确保数据及时传送(路由器)
    • 数据链路层(DataLink) 负责无错传输数据,确认帧、发错重传等(交换机)
    • 物理层(Physics) 提供机械、电气、功能和过程特性(网卡、网线、双绞线、同轴电缆、中继器)

分层模型

3. TCP/IP参考模型 #

  • TCP/IP是传输控制协议/网络互联协议的简称
  • 早期的TCP/IP模型是一个四层结构,从下往上依次是网络接口层、互联网层、传输层和应用层
  • 后来在使用过程中,借鉴OSI七层参考模型,将网络接口层划分为了物理层和数据链路层,形成五层结构

tcpip

常用协议 #

  • TCP/IP协议被称为传输控制协议/互联网协议,又称网络通讯协议
  • 是由网络层的IP协议和传输层的TCP协议组成,是一个很大的协议集合
  • 物理层和数据链路层没有定义任何特定协议,支持所有的标准和专用的协议
  • 网络层定义了网络互联也就是IP协议
    • 网际协议IP(Internet Protocal) 负责主机和网络之间寻址和路由数据包
    • 地址解析协议ARP(Address Resolution Protocol) 获得同一物理网络中的硬件主机MAC地址
    • 反向地址转换协议(Reverse Address Resolution Protocol) 允许局域网的物理机器从网关服务器的ARP表或者缓存上请求其IP地址
    • 网际控制消息协议ICMP(Internet Control Message Protocol) 发送消息,并报告有关数据包的传送错误
    • 互联组管理协议IGMP(Internet Group Management Protocol) IP主机向本地多路广播路由器报告主机组成员
  • 传输层定义了TCP(传输控制协议)和UDP(用户数据报)协议
  • 应用层定义了HTTP(超文本传输协议)、FTP(文件传输协议)、DNS(域名系统)等协议

分层模型

3.1 网络接口层 #

网络接口层是TCP/IP模型的最底层,负责接收从上一层交来的数据报并将数据报通过底层的物理网络发送出去,比较常见的就是设备的驱动程序,此层没有特定的协议 网络接口层又分为物理层和数据链路层

3.1.1 物理层 #

计算机在传递数据的时候传递的都是0和1的数字,而物理层关心的是用什么信号来表示0和1,是否可以双向通信,最初的连接如何建立以及完成连接如何终止,物理层是为数据传输提供可靠的环境。

  • 为数据端设备提供传送数据的通路
  • 传输数据
    • 激活物理连接,在连接的设备之间连接起来形成通路
    • 传输数据,关心如何打包数据和控制传输速度
    • 关闭物理连接

物理层

3.1.2 数据链路层 #

数据链路层们于物理层和互联网层之间,用来向网络层提供数据,就是把源计算机网络层传过来的信息传递给目标主机。

  • 如何将数据组合成数据帧(Frame),帧是数据链路层的传输单位
  • 数据链路的建立、维护和拆除
  • 帧包装、帧传输、帧同步
  • 帧的差错恢复
  • 流量控制

3.1.3 MAC地址 #

  • 在通信过程中是用内置在网卡内的地址来标识计算机身份的
  • 每个网卡都有一个全球唯一的地址来标识自己,不会重复
  • MAC地址48位的二进制组成,通常分为6段,用16进制表示

信号

3.2 互联网层(网络层) #

  • 位于传输层和网络接口层之间,用于把数据从源主机经过若干个中间节点传送到目标主机,并向传输层提供最基础的数据传输服务,它要提供路由和选址的工作

网络层

3.2.1 选址 #

交换机是靠MAC来寻址的,而因为MAC地址是无层次的,所以要靠IP地址来确认计算机的位置,这就是选址

网络层

信封

3.2.2 路由 #

在能够选择的多条道路之间选择一条最短的路径就是路由的工作

网络层

3.2.3 IP #

在网络中,每台计算机都有一个唯一的地址,方便别人找到它,这个地址称为IP地址。

3.2.3.1 IP头部 #

ipheader

  • 版本
  • 首部长部
  • 优先级与服务类型
  • 总长度 该字段用以指示整个IP数据包的长度,最长为65535字节,包括头和数据
  • 标识符 唯一标识主机发送的每一份数据报
  • 标志 分为3个字段,依次为保留位、不分片位和更多片位
    • 保留位:一般被置为0
    • 不分片位:表示该数据报是否被分片,如果被置为1,则不能对数据报进行分片,如果要对其进行分片处理,就应将其置为0
    • 更多片位:除了最后一个分片,其他每个组成数据报的片都要将该位置设置为1.
  • 段偏移量 该分片相对于原始数据报开始处位置的偏移量
  • TTL(Time to Live生存时间) 该字段用于表示IP数据包的生命周期,可以防止一个数据包在网络中无限循环地发下去。TTL的意思是一个数据包在被丢弃之前在网络中的最大周转时间。该数据包经过的每一个路由器都会检查该字段中的值,当TTL的值为0时此数据包会被丢弃。TTL对应于一个数据包通过路由器的数目,一个数据包每经过一个路由器,TTL将减去1。
  • 协议号 用以指示IP数据包中封装的是哪个协议
  • 首部校验和 检验和是16位的错误检测字段。目的主机和网络中的每个网关都要重新计算报头的校验和,一样表示没有改动过.
  • 源IP地址 该字段用于表示数据包的源地址,指的是发送该数据包的设备的网络地址
  • 目标IP地址 该字段用于表示数据包的目标的地址,指的是接收节点的网络地址
3.2.3.2 IP地址格式 #
  • IP地址是一个网络编码,用来确定网络中的一个节点。
  • IP地址是由32位二进制(32bit)组成

IP地址

3.2.3.3 IP地址组成 #
  • 网络部分(NETWORK)
  • 主机部分(HOST)

compose

3.2.3.4 IP地址表示 #

compose

3.2.3.5 IP地址的分类 #
  • IP地址的网络部分是由Internet地址分配机构来统一分配的,这样可以保证IP的唯一性。
  • ip地址中全为1的ip即255.255.255.255,它称为限制广播地址,如果将其作为数据包的目标地址可以理解为发送到所有网络的所有主机
  • ip地址中全为0的ip即0.0.0.0,它表示启动时的ip地址,其含义就是尚未未分配时的ip地址
  • 127是用来进行本机测试的,除了127.255.255.255外,其它的127开头的地址都代表本机

compose

3.2.3.6 公有地址和私有地址 #

私有IP

  • A类私有IP:10.0.0.0 ~ 10.255.255.255
  • B类私有IP:172.16.0.0 ~ 172.31.255.255
  • C类私有IP:192.168.0.0 ~ 192.168.255.255

其他范围的IP均为公有IP地址

3.2.3.7 子网掩码 #

子网掩码(subnet mask)又叫子网络遮罩,它是一种用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机位的掩码。 子网掩码不能单独存在,它必须结合IP地址一起使用。 子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。

  • 子网掩码也是32个二进制位
  • 对应IP的网络部分用1表示
  • 对应IP地址的主机部分用0表示
  • IP地址和子网掩码做逻辑与运算得到网络地址
    • 0和任何数相与都是0
    • 1和任何数相与都等于任何数本身
  • A B C 三类地址都有自己默认的子网掩码
    • A类 255.0.0.0
    • B类 255.255.0.0
    • C类 255.255.255.0

transfer

3.3 传输层 #

位于应用层和网络接口层之间

  • 是面向连接的、可靠的的进程到进程通信的协议
  • TCP提供全双工服务,即数据可在同一时间双向传播
  • TCP将若干个字节构成一个分组,此分组称为报文段(Segment)

transfer

3.3.1 传输层的功能 #

提供了一种端到端的连接

connect

3.3.2 对可靠性要求高的上层协议,实现可靠性的保证 #

  • 如果数据丢失、损坏的情况下如何保证可靠性
  • 网络层只管传递数据,成功与否并不关心

3.3.3 协议分类 #

  • TCP(Transimision Control Protocal)
    • 传输控制协议
    • 可靠的、面向连接的协议
    • 传输效率低
  • UDP(User Datagram Protocal)
    • 用户数据报协议
    • 不可靠的、无连接的服务
    • 传输效率高

3.3.4 TCP功能 #

  • 将数据进行分段打包传输
  • 对每个数据包编号控制顺序
  • 运输中丢失、重发和丢弃处理
  • 流量控制避免拥塞
3.3.4.1 TCP数据包封装 #

connect

  • 源端口号和目标端口号,计算机通过端口号识别访问哪个服务,比如http服务或ftp服务,发送方端口号是进行随机端口,目标端口号决定了接收方哪个程序来接收 connect
  • 32位序列号 TCP用序列号对数据包进行标记,以便在到达目的地后重新重装,假设当前的序列号为 s,发送数据长度为 l,则下次发送数据时的序列号为 s + l。在建立连接时通常由计算机生成一个随机数作为序列号的初始值 connect
  • 确认应答号 它等于下一次应该接收到的数据的序列号。假设发送端的序列号为 s,发送数据的长度为 l,那么接收端返回的确认应答号也是 s + l。发送端接收到这个确认应答后,可以认为这个位置以前所有的数据都已被正常接收。
  • 首部长度:TCP 首部的长度,单位为 4 字节。如果没有可选字段,那么这里的值就是 5。表示 TCP 首部的长度为 20 字节。 connect

  • 控制位 TCP的连接、传输和断开都受这六个控制位的指挥

    • PSH(push急迫位) 缓存区将满,立刻传输速度
    • RST(reset重置位) 连接断了重新连接
    • URG(urgent紧急位) 紧急信号
  • 紧急指针:尽在 URG(urgent紧急) 控制位为 1 时有效。表示紧急数据的末尾在 TCP 数据部分中的位置。通常在暂时中断通信时使用(比如输入 Ctrl + C)。

tcpack

  • ACK(acknowledgement 确认)为1表示确认号 tcpsyn
  • SYN(synchronous建立联机) 同步序号位 TCP建立连接时要将这个值设为1 tcpfin
  • FIN发送端完成位,提出断开连接的一方把FIN置为1表示要断开连接 tcpwindow
  • 窗口值 说明本地可接收数据段的数目,这个值的大小是可变的。当网络通畅时将这个窗口值变大加快传输速度,当网络不稳定时减少这个值可以保证网络数据的可靠传输。它是来在TCP传输中进行流量控制的
  • 窗口大小:用于表示从应答号开始能够接受多少个 8 位字节。如果窗口大小为 0,可以发送窗口探测。 connect
  • 用来做差错控制,TCP校验和的计算包括TCP首部、数据和其它填充字节。在发送TCP数据段时,由发送端计算校验和,当到达目的地时又进行一次检验和计算。如果两次校验 和一致说明数据是正确的,否则 将认为数据被破坏,接收端将丢弃该数据
3.2.4.2 握手和断开 #
  • TCP是面向连接的协议,它在源点和终点之间建立虚拟连接,而不是物理连接
  • 在数据通信之前,发送端与接收端要先建立连接,等数据发送结束后,双方再断开连接
  • TCP连接的每一方都是由一个IP地址和一个端口组成

sequencenumber

3.2.4.2.1 三次握手 #
  • 第一次握手主机A通过一个标识为SYN标识位的数据段发送给主机B请求连接,通过该数据段告诉主机B希望建立连接,需要B应答,并告诉主机B传输的起始序列号
  • 第二次握手是主机B用一个确认应答ACK和同步序列号SYNC标志位的数据段来响应主机A,一是发送ACK告诉主机A收到了数据段,二是通知主机A从哪个序列号做标记。
  • 第三次握手是主机A确认收到了主机B的数据段并可以开始传输实际数据。
3.2.4.2.2 四次断开 #
  • 主机A发送FIN控制位发出断开连接的请求
  • 主机B进行响应,确认收到断开连接请求
  • 主机B提出反方向的关闭要求
  • 主机A确认收到的主机B的关闭连接请求
3.2.4.2.3 抓包 #

sequencenumber

3.4 UDP #

  • UDP是一个无连接、不保证可靠性的传输层协议,也就是说发送端不关心发送的数据是否到达目标主机、数据是否出错等,收到数据的主机也不会告诉 发送方是否收到了数据,它的可靠性由上层协议来保障
  • 首部结构简单,在数据传输时能实现最小的开销,如果进程想发送很短的报文而对可靠性要求不高可以使用

3.4.1 UDP的封装格式 #

connect

connect

connect

3.4.2 UDP的应用 #

  • QQ
  • 视频软件
  • TFTP 简单文件传输协议(短信)

3.4.3 DNS服务器 #

3.4.3.1 域名 #
  • 域名空间结构
  • 根域
  • 顶级域
    • 组织域
    • 国家/地区域名
  • 二级域名

域名

3.4.3.2 DNS服务器 #

DNS是Domain Name Service的缩写,DNS服务器进行域名和与之对应的IP地址转换的服务器

  • IP地址不易记忆
  • 早期使用Hosts文件解析域名
    • 主要名称重复
    • 主机维护困难
  • DNS(Domain Name System 域名系统)
    • 分布式
    • 层次性
3.4.3.3 查找过程 #

dns

  • 客户端向本地域名服务器发出请求,我要访问www.163.com,请告诉我它的IP地址
  • 本地DNS服务器向DNS根服务器发出请求,根DNS服务器会告诉本地服务器(.com)的服务器地址
  • 本地DNS服务器会向(.com域)发请求,会得到(163.com)的服务器地址
  • 本地DNS服务器会向(163.com)发请求,会得到(www.163.com)的IP地址1.1.1.1
  • 本地DNS服务器向客户端回复域名(www.163.com)对应的IP地址是1.1.1.1

3.5 应用层 #

3.5.1 协议 #

connect

3.5.2 应用层常见协议 #

  • HTTP 超文件传输协议
  • FTP 文件传输协议
  • SMTP(发送邮件)和POP3(接收邮件)

3.6 案例 #

数据->传输层(包)->网络层(段Segment)->数据链路层(帧)

3.6.1 发送方是从高层到低层封装数据 #

  • 在应用层要把各式各样的数据如字母、数字、汉字、图片等转换成二进制
  • 在TCP传输层中,上层的数据被分割成小的数据段,并为每个分段后的数据封装TCP报文头部
  • 在TCP头部有一个关键的字段信息端口号,它用于标识上层的协议或应用程序,确保上层数据的正常通信
  • 计算机可以多进程并发运行,例如在发邮件的同时也可以通过浏览器浏览网页,这两种应用通过端口号进行区分
  • 在网络层,上层数据被封装上亲的报文头部(IP头部),上层的数据是包括TCP头部的。IP地址包括的最关键字段信息就是IP地址,用于标识网络的逻辑地址。
  • 数据链路径层,上层数据成一个MAC头部,内部有最关键的是MAC地址。MAC地址就是固化在硬件设备内部的全球唯一的物理地址。
  • 在物理层,无论在之前哪一层封装的报文头和还是上层数据都是由二进制组成的,物理将这些二进制数字比特流转换成电信号在网络中传输

connect

3.6.2 接收方是从低层到高层解封装 #

  • 数据封装完毕传输到接收方后,将数据要进行解封装
  • 在物理层,先把电信号转成二进制数据,并将数据传送至数据链路层
  • 在数据链路层,把MAC头部拆掉,并将剩余的数据传送至上一层
  • 在网络层,数据的IP头部被拆掉,并将剩余的数据送至上一层
  • 在传输层,把TCP头部拆掉,将真实的数据传送至应用层

connect

3.6.3 真实网络环境 #

  • 发送方和接收方中间可能会有多个硬件中转设备
  • 中间可能会增加交换机和路由器
  • 数据在传输过程中不断地进行封装和解封装的过程,每层设备只能处理哪一层的数据
    • 交换机属于数据链路层
    • 路由器属于网络层

分层模型

4. 附录 #

4.1 不同层中的称谓: #

  • 数据帧(Frame):是一种信息单位,它的起始点和目的点都是数据链路层。
  • 数据包(Packet):也是一种信息单位,它的起始和目的地是网络层。
  • 段(Segment):通常是指起始点和目的地都是传输层的信息单元。
  • 消息(message):是指起始点和目的地都在网络层以上(经常在应用层)的信息单元。

4.2 IP头服务类型 #

  • IP首部中的服务类型(TOS)
  • TOS包括共8位,包括3 bit的优先权字段(取值可以从000-111所有值),4 bit的TOS子字段和1 bit未用位但必须置0。
  • 3bit的8个优先级的定义如下:
    • 111--Network Control(网络控制)一般保留给网络控制数据使用,如路由。
    • 110--Internetwork Control(网间控制)
    • 101--Critic(关键)语音数据使用。
    • 100--Flash Override(疾速)视频会议和视频流使用。
    • 011--Flash(闪速)语音控制数据使用。
    • 010--Immediate(快速)数据业务使用
    • 001--Priority(优先)数据业务使用
    • 000--Routine(普通)默认标记值。
  • 4 bit的TOS分别代表:最小时延、最大吞吐量、最高可靠性和最小费用。4 bit中只能置其中1 bit。如果所有4 bit均为0,那么就意味着是一般服务。
  • Telnet、Rlogin这两个交互应用要求最小的传输时延,FTP文件传输要求最大吞吐量,最高可靠性是指网络管理(SNMP)和路由选择协议。用户网络新闻要求最小费用

4.3 握手和断开 #

sequencenumber

sequencenumber

sequencenumber

5. 参考 #

  • TCP/IP 之 大明王朝邮差

访问验证

请输入访问令牌

Token不正确,请重新输入