【TCP/IP 协议】 TCP/IP 基础(二)

简介: 【TCP/IP 协议】 TCP/IP 基础(二)

二. TCP / IP 相关网络知识





1. 互联网地址





(1) 按照 IP 地址格式分类



IP 地址分类 : IP 地址长度 32bit, 4 个字节, 每个 IP 地址都由 标识位, 网络号, 和 主机号三部分组成;


-- 点分十进制 : 32 位二进制数, 每个十进制整数对应一个字节;


-- 网络区分 : 第一个十进制整数即可区分 IP 地址类型, 0 ~ 127 A类, 128 ~ 191 B类, 192 ~ 223 C类, 224 ~ 239 D类, 240 ~ 225 E类;




A类地址 :


-- 组成 : 标识位 0, 网络号 7 位, 主机号 24 位,


-- 十进制取值范围 : 0.0.0.0 ~ 127.255.255.255;


-- 二进制取值范围 : 0(标识位) 0000000(网络号) 00000000 00000000 00000000(主机号) ~ 0(标识位) 1111111(网络号) 11111111 11111111 11111111(主机号);




B类地址 :


-- 组成 : 标识位 10, 网络号 14 位, 主机号 16 位;


-- 十进制取值范围 : 128.0.0.0 ~ 191.255.255.255;


-- 二进制取值范围 : 10(标识位) 000000 00000000(网络号) 00000000 00000000(主机号) ~ 10(标识位) 111111(网络号) 11111111 11111111 11111111(主机号);




C类地址 :


-- 组成 : 标识位 110, 网络号 21位, 主机号 8位;


-- 十进制取值范围 : 192.0.0.0 ~ 223.255.255.255;


-- 二进制取值范围 : 110(标识位) 00000 00000000 00000000(网络号) 00000000(主机号) ~ 110(标识位) 11111 11111111 11111111(网络号) 11111111(主机号)





D类地址 :


-- 组成 : 标识位 1110, 多播组号 28 位;


-- 十进制取值范围 : 224.0.0.0 ~ 239.255.255.255;


-- 二进制取值范围 : 1110(标识位) 0000 00000000 00000000 00000000 00000000(多播组号) ~ 1110(标识位) 1111 11111111 11111111 11111111(多播组号);





E类地址 :


-- 组成 : 标识位 11110, 保留 27 位;


-- 十进制取值范围 : 240.0.0.0 ~ 255.255.255.255;


-- 二进制取值范围 : 11110(标识位) 000 00000000 00000000 00000000(保留位) ~ 11110(标识位) 111 11111111 11111111 11111111(保留位);






(2) 按照 目的地址 分类



按目的地址分类 IP 地址 :


-- 单播地址 : 目的端为单个主机;


-- 广播地址 : 目的端是给定网络的所有主机;


-- 多播地址 : 目的端是同一组的所有主机;






(3) IP 地址管理机构



互联网络信息中心 (Internet Network Information Center) 简称 InterNIC, 职责是 分配网络号;





2. 域名



DNS (域名系统) : DNS 是一个分布式数据库, 提供 IP 地址 和 主机名之间的映射;




地址解析函数 :


-- 正函数 : 给定主机名, 查询主机 IP 地址;


-- 逆函数 : 给定主机 IP 地址, 查询主机名;






3. 端口号



端口号简介 : 端口号是 TCP UDP 协议识别主机上的应用程序用的;


-- 端口号位数 : 端口号是 16 bit 的数字, 取值范围 1 ~ 65535;


-- 端口号所在层 : 端口号是 运输层 使用的, 主要配合 TCP UDP 使用, 脱离这两个协议端口号将毫无用处;




客户端口号 (临时端口号) : TCP/IP 提供给客户端的临时端口号是 1024 ~ 5000;


-- 临时端口不重要 : 客户端对临时端口号不关心, 保证端口号唯一即可;




服务端口号 :


-- 端口号定义位置 : 在 UNIX 系统的文件的 /etc/services 包含了系统服务的端口号, 使用 sudo vim /etc/services 命令查看 Ubuntu 系统的端口号;


-- 服务端口号规律 : TCP/IP 提供的服务端口号都使用的 知名端口号, 即 1 ~ 1023 之间;


-- 服务端口号示例 :  FTP 服务 TCP 端口号 : 21, Telnet 服务 TCP 端口号 : 23, TFTP 服务 UDP 端口号 : 69;



tcpmux  1/tcp    # TCP port service multiplexer

echo  7/tcp

echo  7/udp

discard  9/tcp  sink null

discard  9/udp  sink null

systat  11/tcp  users

daytime  13/tcp

daytime  13/udp

netstat  15/tcp

qotd  17/tcp  quote

msp  18/tcp    # message send protocol

msp  18/udp

chargen  19/tcp  ttytst source

chargen  19/udp  ttytst source

ftp-data 20/tcp

ftp  21/tcp

fsp  21/udp  fspd

ssh  22/tcp    # SSH Remote Login Protocol

ssh  22/udp

telnet  23/tcp

smtp  25/tcp  mail





三. TCP/IP 分层通信处理过程





1. 数据包首部信息





(1) 首部信息结构



首部信息结构 : TCP/IP 中每个分层都会对数据附加一个首部, 首部包含了该层的相关信息;


-- 传输层 : (TCP 包首部)(TCP 中的数据) ;


-- 网络层 : (IP 包首部)( IP 数据 : (TCP 包首部)(TCP 中的数据)) ;


-- 链路层 : (以太网 包首部) ( 以太网数据 : (IP 包首部)( IP 数据 : (TCP 包首部)(TCP 中的数据))) ;






(2) TCP/IP 数据相关概念



包 : TCP / IP 协议中, 每一层的数据都可以成为包, 是一个全能术语;


帧 (以太网数据帧) : 链路层包的单位;


数据包 (IP数据报) : 网络层以上包的单位, IP 给 链路层的数据包称为 IP 数据报 (IP datagram);


段 (TCP 报文段) : TCP 数据包, TCP 传递给 IP 的数据包成为 TCP 报文段 (TCP segment);


消息 : 应用层的数据包;






2. 封装 和 分用





(1) 封装



以太网数据帧 : 链路层的 数据帧长度在 46 ~ 1500 字节之间;




每个首部的大小 : 以太网首部 | IP 首部 | TCP 首部 | 应用数据(Appl | 用户数据) | 以太网尾部 ;


-- 以太网首部 : 14字节, 需要发送 接收 IP ARP RARP 数据, 上面三种数据包需要标识;


-- IP 首部 : 20字节, 该首部 有一个 8bit 的数值, 用于标识 TCP(标识6) UDP(标识17) ICMP(标识1) IGMP(标识2) 协议;


-- TCP 首部 : 20字节, 这里也可以是 UDP 首部, 由于 UDP 首部是不可靠的, 数据量比较少, 只有 8字节, TCP 和 UDP 需要 16bit 的端口号标识应用程序;






(2) 分用



分用定义 : 主机在链路层接收到 以太网数据帧, 该数据会逐层上升, 在每层都去掉该层的首部信息, 并校验首部信息是否正确, 该过程就是分用;






(3) 封装 和 分用 总结



封装分用总结 : 发送数据 从应用层到链路层 逐层加数据包 是封装, 接收数据 从链路层到应用层 逐层解包 是分用;








四. TCP / IP 通信示例





1. 数据包发送过程





(1) 应用层处理



准备数据 : 应用层经过用户应用程序处理, 准备要发送的信息;






(2) 传输层处理 (TCP模块)



TCP 连接管理 : 应用层发送数据时, TCP 模块建立连接, 使用这个连接发送数据, 发送完毕之后断开连接;




封装 TCP 首部 : 为了实现可靠的 TCP 传输, 需要在应用层的信息的前端附加一个 TCP 首部;


-- TCP 首部组成 : 源端口号, 目的端口号, 序号, 校验和;






(3) 网络层处理 (IP 模块)



封装 IP 首部 : TCP 模块将 TCP首部 和 TCP 数据合成 TCP 报文段, 传入到 IP 模块, IP 模块在 TCP 报文段前端加上 IP 首部;


-- IP 首部组成 : 接收端 IP 地址, 发送端 IP 地址, 紧随其后的是 UDP/TCP 协议识别标识;




送到链路层 :


-- 查找路径 : IP 数据报 生成后, 参考路由控制表决定该 IP 数据报的 路由 或 主机 路径;


-- 查询 MAC 地址 : 利用 ARP 查找 MAC 地址;


-- 提交到链路层 : IP 数据报提交给链路层 需要将 MAC 地址 和 IP 地址一起提交到下一层;






(4) 链路层处理



封装 以太网 首部 : 网络层传递 IP 数据报到链路层, 在该层给 IP 数据报附加 以太网首部 并发送出去;


-- 以太网首部组成 : 发送端 MAC 地址, 接收端 MAC 地址, 标识以太网类型(PPP, 令牌环等)的以太网数据协议;




封装 以太网 尾部 : 封装完首部之后, 还需要加上一个 FCS 尾部, 该 FCS 由硬件计算生成, 判断是否因为物理介质干扰而导致数据被破坏;






(5) 包首部添加流程



添加流程 : 应用层信息 -> TCP (UDP) 包首部 -> IP 包首部 -> 以太网包首部 -> 以太网包尾部;




包首部信息规律 : 每层添加的包首部 一般都包含 发送 和 接收 地址信息, 上一层的协议类型;


-- 链路层 : 使用 发送端 和 接收端的 MAC 地址;


-- 网络层 : 使用 发送段 和 接收端的 IP 地址, 该层还需要一个 协议类型, 说明在传输层使用的是 TCP 还是 UDP 协议;


-- 传输层 : 使用 发送段 和 接收端的 端口号;






2. 数据包接收过程





(1) 链路层处理



链路层处理流程 : 判定地址有效行 -> 确定上层协议类型 -> 传递给上层对应协议处理模块;


-- 判定地址有效性 : 主机收到 以太网数据帧后, 解析以太网包头, 查看 目的端 MAC 地址是否为本机地址, 如果不是丢弃该 帧;


-- 判定协议类型 : 查找 以太网数据包首部中的 类型域, 确定该数据包是 IP 数据报, 还是 ARP 协议, 如果无法识别协议类型, 丢弃;


-- 传递给对应模块处理 : 如果是 IP 数据报, 传递给 IP 模块处理, 如果是 ARP 协议, 就传递给 ARP 模块处理;






(2) 网络层处理 (IP 模块)



IP 模块处理流程 (没有路由器的情况) : 判定 IP 地址 -> 判定协议;


-- 判定 IP : 分析 IP 包首部的 目的 IP 地址, 如果 IP 地址是本机地址, 就进行下面的操作;


-- 判定协议 : 判定 上层协议是 TCP 还是 UDP,  交给对应模块处理;




有路由器的情况 : 如果有路由器, 接收端地址一般是 路由器的 IP 地址, 需要查询路由表, 查询到 目的主机 或 路由器 后在转发数据包;






(3) 传输层处理 (TCP 模块)



传输层处理流程 : 校验数据完整性 -> 校验数据次序 -> 校验程序端口 -> 发送回执 -> 送到应用层;


-- 校验完整性 : TCP 模块接收到数据包后, 首先计算校验和, 判断数据是否被破坏;


-- 校验次序 : 检查数据包的序号, 查看是否在按照次序接收数据;


-- 校验端口号 : 通过端口号获取具体的应用程序;


-- 发送回执 : 数据接收完毕后, 发送一个回执给发送端, 如果发送端未收到回执, 发送端会一直发送数据给接收端;


-- 传递给应用层 : 数据被接收以后, 会根据端口号识别应用程序, 将数据传递给那个应用程序;


目录
相关文章
|
5月前
|
缓存 网络协议 Linux
手把手实现tcp/ip用户态协议栈,帮你实践网络知识(网络必备,面试项目)
手把手实现tcp/ip用户态协议栈,帮你实践网络知识(网络必备,面试项目)
|
6天前
|
网络协议 Java API
深度剖析:Java网络编程中的TCP/IP与HTTP协议实践
【4月更文挑战第17天】Java网络编程重在TCP/IP和HTTP协议的应用。TCP提供可靠数据传输,通过Socket和ServerSocket实现;HTTP用于Web服务,常借助HttpURLConnection或Apache HttpClient。两者结合,构成网络服务基础。Java有多种高级API和框架(如Netty、Spring Boot)简化开发,助力高效、高并发的网络通信。
|
11月前
|
消息中间件 网络协议 安全
TCP/IP 应用层常用协议
TCP/IP 应用层常用协议
293 0
|
负载均衡 网络协议 网络安全
TCP/IP:有层次的协议栈
TCP/IP:有层次的协议栈
175 0
TCP/IP:有层次的协议栈
|
网络协议
TCP/IP协议的介绍
TCP/IP协议是众多协议的统称,通过分层结构来管理。可分为七层模型或四层结构
|
网络协议 算法
【网络篇】第十二篇——TCP协议通讯流程
【网络篇】第十二篇——TCP协议通讯流程
【网络篇】第十二篇——TCP协议通讯流程
|
网络协议 网络架构
六、TCP/IP模型 和 5层参考模型
六、TCP/IP模型 和 5层参考模型
六、TCP/IP模型 和 5层参考模型
|
域名解析 网络协议
IP协议, TCP协议 和DNS 服务分别是干什么的?
大家好,我是阿萨。昨天讲解了网络四层协议[TCP/IP协议族分为哪4层?]今天我们学习下IP 协议, TCP 协议和DNS 协议分别是干什么的。
211 0
IP协议, TCP协议 和DNS 服务分别是干什么的?
|
网络协议
TCP/IP协议族有哪些?
大家好,我是阿萨。昨天我们学习了[URI 和URL 的区别是什么?]了解了URI 和URL的区别。 学习HTTP, 绕不开TCP/IP,那么TCP/IP 协议族分为哪4层?
254 0
TCP/IP协议族有哪些?
|
网络协议 网络性能优化 网络安全
网络协议报文理解刨析篇二(再谈Http和Https), 加上TCP/UDP/IP协议分析(理解着学习), 面试官都惊讶你对网络的见解(2)
网络协议报文理解刨析篇二(再谈Http和Https), 加上TCP/UDP/IP协议分析(理解着学习), 面试官都惊讶你对网络的见解(2)
网络协议报文理解刨析篇二(再谈Http和Https), 加上TCP/UDP/IP协议分析(理解着学习), 面试官都惊讶你对网络的见解(2)