【Android网络编程-TCP/IP协议】在Android网络编程-计算机网络基础一文中得知 , IP协议属于网络层 , TCP、UDP协议属于传输层 。
IP协议是TCP/IP协议族的动力 , 它为上层协议提供无状态、无连接、不可靠的服务 。
TCP协议是面向连接的传输层协议 , 提供一种面向连接的、可靠的字节流服务 。
UDP协议是面向无连接的传输层协议 , 提供面向事务的简单不可靠信息传输服务 。
数据报文在不同层传输的数据单位名称不同 , 在网络层传输的叫数据报 , 在传输层传输的叫报文段 。
IP数据报
IP数据报格式如下图:
文章插图
IP数据报
各个字段的详细说明:名称长度说明版本4bitIP协议的版本 , 目前的IP协议版本号为4 , 下一代IP协议版本号为6首部长度4bitIP报头的长度 , 最大长度60字节(15*4) , <br>分为固定部分的长度(20字节)和可变部分的长度服务类型8bitType Of Service总长度16bitIP报文的总长度 。数据报的最大长度为 65535 字节标识16bit它是一个计数器 , 用来产生数据报的标识 。<br>当IP报文长度超过传输网络的MTU(最大传输单元)时必须分片 , <br>此标识表示同一个数据报的分片 。标志3bitR、DF、MF三位 , 目前只有后两位有效 。<br>DF位:为1表示不分片 , 为0表示分片 。<br>MF:为1表示“更多的片” , 为0表示这是最后一片 。片偏移13bit本分片在原先数据报文中相对首位的偏移位 。<br>片偏移以8个字节为偏移单位 。生存时间8bitTTL (Time To Live)表示数据报在网络中的寿命 , 其单位为秒 。<br>在目前的实际应用中 , 常以“跳”为单位 。协议8bit指出IP报文携带的数据使用的哪种协议 , <br>以便目的主机的IP层能知道要将数据报上交到哪个进程 。<br>TCP的协议号为6 , UDP的协议号为17 。<br>ICMP的协议号为1 , IGMP的协议号为2.首部校验和16bit计算IP头部的校验和 , 检查IP报头的完整性 。源地址32bit标识IP数据报的源端设备 。目的地址32bit标识IP数据报的目的地址 。可选字段长度可变1~40 字节 , 用于增加IP数据报的控制功能 。填充保证IP首部长度是4字节的整倍数
TCP报文
文章插图
TCP报文
名称长度说明源端口16bit数据发送方的端口号目的端口16bit数据接受方的端口号序号32bit本数据报文中的的第一个字节的序号<br>(在数据流中每个字节都对应一个序号)确认号32bit希望收到的下一个数据报文中的第一个字节的序号数据偏移4bit表示本报文数据段距离报文段有多远保留字段6bit保留为今后使用 , 但目前应置为0紧急比特URG当值为1时表示次报文段中有需要紧急处理确认比特ACK值为1时确认号有效 , 值为0时确认号无效复位比特RST值为1时表示TCP连接存在严重的错误 , 需要重新进行连接同步比特SYN值为1表示这是一个连接请求或连接接受报文终止比特FIN值为1表示要发送的数据报已经发送完毕 , 需要释放传送连接窗口16bitTCP连接的一端根据缓存空间的大小来确定自己接受窗口的大小<br>限制发送放的窗口上限检验和16bit用来检验首部和数据两部分的正确性紧急指针字段16bit紧急指针指出在本报文段中的紧急数据的最后一个字节的序号选项字段长度可变TCP 首部可以有多达40字节的可选信息 , <br>用于把附加信息传递给终点 , 或用来对齐其它选项
UDP报文
相对于TCP报文 , UDP报文简单了很多 。
文章插图
UDP报文
名称长度说明源端口16bit数据发送方的端口号目的端口16bit数据接受方的端口号包长度16bitUDP首部的长度和数据的长度之和 。单位为字节校验和16bit用来检验首部和数据两部分的正确性
TCP三次握手和四次挥手TCP用三次握手来创建连接 , 使用四次分手来释放连接 。
文章插图
三次握手
三次握手
三次握手的目的是同步连接双方的序列号和确认号并交换TCP窗口大小的信息 。
推荐阅读
- Android视频技术探索之旅:美团外卖商家端的实践
- Android NDK-深入理解JNI
- Android如何使用注解进行代码检查
- 抖音 Android 性能优化系列:启动优化之理论和工具篇
- Android缩放手势的检测
- 自动识别 Android 不合理的内存分配
- Android面试题集锦之 Service
- 怎样搭高质量的Android项目框架,框架的结构具体描述?
- 谷歌Android 12L的适配机型,看得我们有点懵
- 浅谈Android类加载器