数据报

浅谈 TCP 四次挥手

半城伤御伤魂 提交于 2019-12-01 19:16:33
之前自己学习的网络都是浅尝辄止,最近被人反复问起 TCP 相关的挥手问题的相关问题,有必要整理下自身所学,以提供自己和别人查阅。 下图是 TCP 挥手的一个完整流程,这里引用了 tcpipguide 的流程图,更加直观的了解下挥手过程。 首先不要被这里的图给迷惑了,因为连接的主动断开是可以发生在客户端,也同样可以发生在服务端。 FIN_WAIT1 由图可知,当一方接受到来自应用断开连接的信号时候,就发送 FIN 数据报来进行主动断开,并且该连接进入 FIN_WAIT1 状态,连接处于半段开状态(可以接受、应答数据,当不能发送数据),并将连接的控制权托管给 Kernel,程序就不再进行处理。一般情况下,连接处理 FIN_WAIT1 的状态只是持续很短的一段时间。 我这里通过对数据包的拦截(不对 FIN 请求进行应答)来实现 FIN_WAIT1 状态,下图是主动断开一遍的 FIN 数据发送抓包记录。 在 18:12.43 的时间点,这台机器主动断开连接,并发送 FIN 请求,并且达到 RTO 后未收到响应后,一共重试了9次,每次重试时间是上一次的2倍,这条连接额外占用了 54 秒的时间。如果在服务中,这类连接数据一多就会消耗大量的服务器资源,我这里简单的提供 2 个参数来处理这个问题。 tcp_orphan_retries :Integer,这里系统参数默认为 9(文档里面默认值为7

SpringMVC+Hibernate返回JSON数据报No serializer found错误

僤鯓⒐⒋嵵緔 提交于 2019-12-01 07:16:52
在使用SpringMVC+Hibernate环境中返回JSON数据有时会出现如下错误:Handler execution resulted in exception: Could not write content: No serializer found for class org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) ) (through reference chain:.................cn.harmel.lms.system.domain.XXX_$$_jvst988_0["handler"]) 还有...........cn.harmel.lms.system.domain.XXX_$$_jvst988_0["hibernateLazyInitializer"]) 这是因为你需要序列化对象有一个属性是一类类型,而你使用了Hibernate的延迟加载所以这里是个Hibernate的代理对象。该代理对象有些属性不能被序列化所以会报错。

TCP/IP协议栈

可紊 提交于 2019-11-30 06:15:52
文章目录 一、参考书籍 二、必须掌握的内容 1.TCP/IP协议体系的认知 2.数据链路层 3.网络层 4.传输层 5.应用层 三、常见面试题目 1.分层的概念 2.数据链路层 3.网络层 (1)IP协议 (2)ICMP协议 四、传输层 1.UDP协议 2.TCP协议 五、应用层 1.DNS 2.http基本格式 六、参考 一、参考书籍 (1)TCP/IP详解 卷1:协议 (2)计算机网络:自顶向下方法 二、必须掌握的内容 1.TCP/IP协议体系的认知 (1)分层。一部分处于用户态,一部分处于内核态。数据链路层,网络层,传输层封装于操作系统内核态。应用层存在于操作系统的用户空间,包括DNS,FTP,HTTPs,HTTP,工作中接触较多的是应用层的部分。但其它层的原理必须理解,面试考察。 (2)层与层之间下层对上层是透明的,传输在每一层是对等的。 2.数据链路层 (1)以太网帧的格式。 (2)MTU(最大传输单元)的概念。 (3)ARP协议和RARP协议(地址协议和逆地址协议,网卡MAC地址和IP地址互查机制)(网络层和链路层的中间层)ARP报文格式,查询原理,缓存机制 3.网络层 (1)掌握IP首部格式:如16位分片标识、DF不分片标志、MF更多分片标志、13位片偏移、8位生存时间TTL、16位的首部检验和等等。 (2)掌握如何IP分片:如总长大于MTU值,画分片情况

UDP 协议解析 - 1

不问归期 提交于 2019-11-30 05:54:54
目录 1. 概述 2. UDP 的主要特点 3. UDP 的首部格式 3. UDP 校验和 3.1 伪首部 3.2 UDP 校验和计算方法 [参考文献] 1. 概述 用户数据报协议(UDP,User Datagram Protocol)为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据报的方法。UDP是一种保留消息边界的简单的面向数据报的协议。UDP不提供差错纠正、队列管理、重复消除、流量控制和拥塞控制,但提供差错检测(包含我们在传输层中碰到的第一个真实的端到端(end-to-end)校验和)。这种协议自身提供最小功能,因此使用它的应用程序要做许多关于数据报如何发送和处理的控制工作。想要保证数据被可靠传递或正确排序,应用程序必须自己实现这些保护功能。一般来说,每个被应用程序请求的UDP输出操作只产生一个UDP数据报,从而发送一个IP数据报。而对于面向数据流的传输层协议(例如TCP),应用程序写入的全部数据与真正在单个IP数据报里传送的或接收方接收的内容可能没有联系。 2. UDP 的主要特点 1). UDP 是 无连接的 ,即发送数据之前不需要建立连接,因此减少了开销和发送数据之前的时延。 2). UDP 使用 尽最大努力交付 ,即不保证可靠交付,因此主机不需要维持复杂的连接状态表。 3). UDP 是 面向报文 的。发送方的UDP对应用程序交下来的报文

基于tcp和udp的socket实现

江枫思渺然 提交于 2019-11-29 22:15:49
本文介绍如何用Java实现Socket编程。首先介绍Java针对Socket编程提供的类,以及它们之间的关系。然后分别针对TCP和UDP两种传输层协议实现Socket编程。 1 Java中的Socket编程接口介绍 Java为Socket编程封装了几个重要的类。 1.1 Socket类 Socket类实现了一个客户端socket,作为两台机器通信的终端,默认采用的传输层协议为TCP,是一个可靠传输的协议。Socket类除了构造函数返回一个socket外,还提供了connect, getOutputStream, getInputStream和close方法。connect方法用于请求一个socket连接,getOutputStream用于获得写socket的输出流,getInputStream用于获得读socket的输入流,close方法用于关闭一个流。 1.2 DatagramSocket类 DatagramSocket类实现了一个发送和接收数据报的socket,传输层协议使用UDP,不能保证数据报的可靠传输。DataGramSocket主要有send, receive和close三个方法。send用于发送一个数据报,Java提供了DatagramPacket对象用来表达一个数据报。receive用于接收一个数据报,调用该方法后,一直阻塞接收到直到数据报或者超时

UDP协议详解

笑着哭i 提交于 2019-11-29 22:09:44
原 UDP协议的详细解析 2018年12月26日 17:16:34 一只小菜鸟z 阅读数 6220 更多 分类专栏: 计算机网络-传输层 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/aa1928992772/article/details/85240358 UDP数据报 一、UDP的概述(User Datagram Protocol,用户数据报协议) UDP是传输层的协议,功能即为在IP的数据报服务之上增加了最基本的服务:复用和分用以及差错检测。 UDP提供不可靠服务,具有TCP所没有的优势: UDP无连接,时间上不存在建立连接需要的时延。空间上,TCP需要在端系统中维护连接状态,需要一定的开销。此连接装入包括接收和发送缓存,拥塞控制参数和序号与确认号的参数。UCP不维护连接状态,也不跟踪这些参数,开销小。空间和时间上都具有优势。 举个例子: DNS如果运行在TCP之上而不是UDP,那么DNS的速度将会慢很多。 HTTP使用TCP而不是UDP,是因为对于基于文本数据的Web网页来说,可靠性很重要。 同一种专用应用服务器在支持UDP时,一定能支持更多的活动客户机。 分组首部开销小**,TCP首部20字节,UDP首部8字节。 UDP没有拥塞控制

IP协议详解

我怕爱的太早我们不能终老 提交于 2019-11-29 22:08:46
IP协议详解 目录 Internet地址结构 表示IP地址 基本的IP地址结构 IP协议 IPv4首部 IP转发 IP分片 回到顶部 Internet地址结构 表示IP地址 目前的IP版本有4和6。 目前最流行的就是IPv4,有十进制和二进制两种表示方法。分别是: 点分四组十进制。每一组范围是[0~255],如:255.255.255.255 二进制。如:11111111 11111111 11111111 11111111 IPv6地址长度是128位, 由8块(或8个字段)组成,每一块都包含四个16进制数,每块由冒号分隔。 有以下特点: 1、一个块中前导的0不必书写。 2、全0的块可以省略,并用符号::代替。 3、IPv6可以兼容IPv4地址,即可以用IPv6格式表示IPv4地址。 表示方式为:IPv6块值为ffff,其后面紧跟“点分四组”的格式。如: ::ffff:10.0.0.1 可以代表IPv4:10.0.0.1 4、IPv6的低32位通常采用点分四组(就是上面那样)的表示法。 基本的IP地址结构 分类寻址 IPV4被分为五大类:ABCDE A类为:点分四组中的第一组地址范围为0~127的IP地址。已二进制来看就是“首位为0” B类:128~191.二进制首位为10 C类:192~223.二进制首位为110 D类:224~239.二进制首位为1110 E类:240~255

UDP

荒凉一梦 提交于 2019-11-29 21:45:47
UDP 是一个简单的传输层协议。有如下特点: UDP 缺乏可靠性。 UDP 本身不提供确认,序列号,超时重传等机制。UDP 数据报可能在网络中被复制,被重新排序。即 UDP 不保证数据报会到达其最终目的地,也不保证各个数据报的先后顺序,也不保证每个数据报只到达一次。 UDP 数据报是有长度的。 每个 UDP 数据报都有长度,如果一个数据报正确地到达目的地,那么该数据报的长度将随数据一起传递给接收方。而 TCP 是一个字节流协议,没有任何(协议上的)记录边界。 UDP 是无连接的。 UDP 客户和服务器之前不必存在长期的关系。UDP 发送数据报之前也不需要经过握手创建连接的过程。 UDP支持多播和广播。 来源: https://www.cnblogs.com/zty-lyq/p/11535927.html

4.2 PCIe体系结构的组成部件 分类: 浅谈PCI-E ...

爱⌒轻易说出口 提交于 2019-11-29 18:07:35
PCIe 总线作为处理器系统的局部总线,其作用与 PCI 总线类似,主要目的是为了连接处理器系统中的外部设备,当然 PCIe 总线也可以连接其他处理器系统。在不同的处理器系统中, PCIe 体系结构的实现方法略有不同。但是在大多数处理器系统中,都使用了 RC 、 Switch 和 PCIe-to-PCI 桥这些基本模块连接 PCIe 和 PCI 设备。在 PCIe 总线中,基于 PCIe 总线的设备,也被称为 EP (Endpoint) 。 4.2.1 基于 PCIe 架构的处理器系统 在不同的处理器系统中, PCIe 体系结构的实现方式不尽相同。 PCIe 体系结构以 Intel 的 x86 处理器为蓝本实现,已被深深地烙下 x86 处理器的印记。在 PCIe 总线规范中,有许多内容是 x86 处理器独有的,也仅在 x86 处理器的 Chipset 中存在。在 PCIe 总线规范中,一些最新的功能也在 Intel 的 Chipset 中率先实现。本节将以一个虚拟的处理器系统 A 和 PowerPC 处理器为例简要介绍 RC 的实现,并简单归纳 RC 的通用实现机制。 1 处理器系统 A 在有些处理器系统中,没有直接提供 PCI 总线,此时需要使用 PCIe 桥,将 PCIe 链路转换为 PCI 总线之后,才能连接 PCI 设备。在 PCIe 体系结构中,也存在 PCI

Qt 网络编程

非 Y 不嫁゛ 提交于 2019-11-29 03:07:03
Qt 网络编程 UDP发送数据报的一种方式 QUdpSocket::writeDatagram(const char *data, qint64 size, const QHostAddress &address, quint16 port) 将大小为size的数据报发送到端口port的主机地址。返回成功时发送的字节数;否则返回-1。 数据报总是作为一个块写入。数据报的最大大小是高度依赖于平台的,但可以低至8192字节。如果数据报太大,此函数将返回-1,error()将返回DatagramTooLargeError。 一般情况下,发送大于512字节的数据报是不可取的,因为即使它们发送成功,它们也可能在到达最终目的地之前被IP层分段。 警告:在已连接的UDP套接字上调用此函数可能会导致错误,并且不会发送任何数据包。如果使用的是已连接的套接字,请使用write()发送数据报。 来源: CSDN 作者: Colin_cao666 链接: https://blog.csdn.net/weixin_43327696/article/details/103244791