pdu过大导致tcptcp客户端主动断开开么

IP 协议的主要内容如下图该例子將会在本部分的最后一小节详细介绍。

在电信技术中 协议数据单元(Protocol Data Unit, PDU) 表示在计算机网络的对等实体间作为单个单元传输的信息。

网络层接收到上层协议的协议数据单元(Protocol Data Unit, PDU) 后会在前面加上 IP 协议首部,封装成 IP 数据包

MTU网络层会将上层协议的 PDU 拆分给多个 IP 数据包这个操作被称之為分片(Fragment)

IP 协议 本身是不保证数据顺序传输因此需要分片后的 IP 首部 能提供 IP 数据包 的相关字段来复原上层协议 PDU。这些字段包括:

  • 标记(Flag):用于判断当前分片后面是否还有分片以及是否不能分片
  • 片偏移(Fragment Offset):用于记录当前分片在原上层 PDU 中的相对位置

最大传输单元(MTU) 是用八位字节指定嘚可以用在基于传输的网络,如因特网传输的最大的大小。在 Windows 95

将数据传输到当前局域网网关(Gateway)

网关接收到数据后拆开数据,查看 IP 数据包 首部的目的 IP 地址然后根据目的 IP 地址以及路由协议转发该数据

IP 网络中客户端自动将目标地址在给定子网掩码指定的网络之外的 IP 数据包发送给网关。如一个网络号为 192.168.0.0, 子网掩码为 255.255.255.0 的私有网络中目的地址不是 192.168.0.X 的数据将会被发送给该网络的网關。在转发 IP 数据包到其他网络时网关可能会执行网络地址转换(Network

IP 数据包在网络间转发过程中,很可能会“迷路”或进入循环网络造成网絡堵塞。在 IP 首部TTL字段通过控制 IP 数据包 存活的 跳数以避免“迷路”的 IP 数据包长期占据网络带宽。

数据帧到达目标主机/路由器后会拆掉它的MAC 首部尾部,恢复成 IP 数据包然后根据 IP 首部首部校验和简单地校验数据传输是否正确。如果正确则路由器会继续将其封装成,传输给下一跳

字段将分片的上层 PDU 重组。

  • 分片主机 A 将上层 PDU 分片打包成 IP 数据包然后封装成,发送到局域网
  • 转发数据帧主机 A 所在的局域网 L1中找不到地址为 IP(B) 的主机,于是将该数据帧发给网关路由器 R1路由器 R1 拆开该数据帧,查看IP 数据包 首部的目的 IP 地址 然后根据IP 地址将该数据帧转发到相应的网络 Net1
  • TTL路由器转发数据帧时会打开其负载的数据包,查看 TTL 值当 TTL 值为 0 时,路由器会丢弃该数据包否则路甴器会将 TTL的值减一,然后封装成传输给下一跳。
  • 首部校验和数据帧Net1 路由到 路由器 R1发送到 局域网 L2中。根据局域网协议该数据帧朂终被主机 B 接收。在传输过程中遇到的 路由器/主机 将拆掉数据帧MAC 首部尾部得到其负载的 IP 数据包。然后根据 IP 首部首部校验和简单地校验数据传输是否正确如果不正确,则直接丢弃该 IP 数据包不做差错处理(上层协议会做处理)。
  • 总长度(Total Length):16位IP 数据包首部和数据的总长喥(单位:字节)。
  • 标识(Identification): 16位对数据包进行编号,同一个的上层 PDU 分片得到的各个 IP 数据包 编号相同标识字段用于分片后的重组。
  • 标志(Flag):3位最低位记为 MF(More Fragment), 当 MF = 1 时表示后面还有与当前数据包分片自同一上层 PDU数据包。中间为记为
  • 片偏移(Fragment Offset):13位上层 PDU 分片后的 IP 数据包 在原 PDU 中的相对偏移位置。偏移单位是 8 字节也就是说,每个分片的长度一定是 8 字节(64 位) 的整数倍
  • 生存时间(Time To Live, TTL):8位。该 数据包 最多经过的路由器个数每经过一個路由器,该值减一当 TTL 为 0 时,路由器丢弃该 数据包
  • 首部校验和(Header Checksum):16位。简单校验数据包首部是否出差错如果出错,则直接丢弃每经過一个路由器都会计算一下首部校验和,因为首部TTL 等字段可能会发生改变
}

基于TCP协议的短信数据包打包与解包及应用

这个部分主要是短信的接收与发送,分别在两个不同进程中实现3888中为:cmcc.cpp和recv.cpp,其实发送与接收的程序基本相同,主要是接收recv.cpp中把发送的代码屏蔽了.

在02166中是CMPPClient.cpp发送与接收代码同在一个进程中进行运行.

下面主要就02166的代码进行说明:

CMPP.cpp的主要功能是,对数据打包解包以及各种数据的更改进行葑装到具体函数内,CMPP.cpp主要是调用CMPPduCode.cppSocket.cpp里面的函数进行数据的打包,解包,发送与接收.

CMPP.cpp的主要函数及功能说明如下:

根据已保存的参数重新绑定到短訊中心

提交短信回复信息(提交完信息后回复过来的信息,进行解包)

接收从短信中心发送过来或者从其他网关转发过来的短信传给SP

对接收到数據是短信下发进行解包处理

活动测试(活动测试要求(10~15秒)就需发送测试)

对接收到数据是活动测试进行解包处理

对接收到数据是请求拆除连接进行解包处理

发送(1)与发送(2)不同之处在于没有发送信息的长度

接收(1)与接收(2)不同之处在于没有接受信息的长度

包头解码(整型数据转主机字節序)//网络字节转化为主机字节

包头编码(整型数据转网络字节序)//主机字节转化为网络字节

连接到短信中心数据打包  //连接到短信中心的數据进行打包

连接到短信中心返回数据解包

接收短信返回数据解包(CMPP_DELIVER是ISMG把从短信中心或其他ISMG转发来的短信交给SP

接收短信后要返回信息,进行数據打包

请求拆除连接返回数据解包

请求拆除连接返回数据打包

}

我要回帖

更多关于 tcp客户端主动断开 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信