一、 Socket概念  Socket本质上就是在2台网络互通的电脑之间,架设一个通道,两台电脑通过这个通道来实现数据互相传递。  我们知道网络通信都是基于IP+Port方能定位目标的具体服务,操作系统有0-65535个端口,每个端口都是独立对外提供服务;建立一个socket必须至少有2端,一个服务端,一个客户端,服务器端被动等待并接收请求,客户端主动发起请求,连接建立后,就可以互相发送数据了。二            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-09-06 23:20:01
                            
                                35阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            TCP协议有两个比较重要的控制算法,一个是流量控制,另一个就是阻塞控制(详见学习笔记-TCP拥塞控制)。为什么需要流量控制双方在通信的时候,发送方的速率与接收方的速率是不一定相等,如果发送方的发送速率太快,会导致接收方处理不过来,这时候接收方只能把处理不过来的数据存在缓存区里(失序的数据包也会被存放在缓存区里)。如果缓存区满了发送方还在疯狂着发送数据,接收方只能把收到的数据包丢掉,大量的丢包会极大            
                
         
            
            
            
            今天使用wireshark来分析一下tcp的一些原理。首先我们建立一个tcp服务器。const net = require('net');
net.createServer().listen(11111);再建立一个tcp客户端。const net = require('net');
net.connect({port: 11111, host: '192.168.8.226'})我们逐个情况分析            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-07-03 06:01:06
                            
                                724阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            问题背景首先,案例来自于互联网,数据包分析过程相对简单,但对个人来说,算是之前没实际碰到的情况,因此分享一下。 问题描述当第一次查看数据包文件时,一眼就能看到 “Bad TCP” 的鲜艳着色,这说明或多或少存在着问题。 打开分析-专家信息: 看到了 Previous segment not captured,可能都知道发生丢包了,99.99%的情况下包丢失发生在互连设备上,有可能是设备过载,也有可            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-02-23 19:06:27
                            
                                933阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            第二次握手:服务端返回一个ACK(对客户端连接请求的应答)+SYN(表示服务端发起连接请求),并且包含服务端的一个初始序列号seq=0,同时返回一个确认号ack=1第三次握手:客户端给服务端返回一个ACK(对服务端连接请求的应答),并更新自己的序列号seq=1,返回一个确认号ack=1Wireshark分析握手过程这是我发起连接请求后抓到的数据包第一次握手:可以看到,客户端发起一个SYN请求,初始            
                
         
            
            
            
            一、丢包这个丢包不是网卡级别的丢包,在每个网卡中也会显示丢失的包的数据。这个一般是由于网卡在中断处理中需要通过skbuff来存储新来的包。此时是直接通过内存管理接口申请结构,此时这个地方并没有办法做限制,因为此时的中断处理程序并不理解上层的协议,更不用说进程或者是socket这些逻辑概念。所以当网卡收到数据之后就分配一个包结构,此时分配失败就认为是丢掉一个包,计入网卡的报文统计中。TCP和UDP是            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-09-10 16:43:13
                            
                                264阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            JAVA实现TCP协议传输
    JAVA为客户端提供了Socket类,为服务器端提供了SeverSocket类发送数据package cn.tcp;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.So            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-05-24 15:29:17
                            
                                112阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            伪代码:ss = socket()                 #创建服务器套接字
ss.bind()                     #把地址绑定到套接字上
ss.listen()                   #监听连接(最大连接数)
info_loop:                    #服务器无限循环
   cs = ss.accept()           #接            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-06-16 16:09:15
                            
                                153阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            在网络性能问题排查思路那一节里,我提到了查看系统网络瓶颈的方法以及排查丢包问题的手段。 但就此分析网络问题还不够精细,有时网络资源并没有达到瓶颈,或者并没有丢包产生,但是网络传输速率就是很慢,或者有丢包产生,但无法知道丢包的详细过程,无法知道整个tcp传输过程的具体情况。如何更加精细的查看网络包传输过程,答案就是抓包。这一节我将用上传文件的抓包文件举例,用wireshark来分析tcp的传输过程以            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-03-28 10:43:08
                            
                                208阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            TCP可靠性表现在以下七个方面:
1、应用数据被分割成TCP认为最适合发送的数据块。(这和UDP完全不同,应用程序产生的数据报长度将保持不变)。2、确认响应:对于一个收到的请求,将发送一个确认。这个确认通常要延迟几分之一秒。2、超时重传: 当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。
3、TCP给发送的每一一个包进行编号 ,接收            
                
         
            
            
            
            前端最常用的网络协议中,应该就是UDP和TCP了。一、UDP协议UDP(UserDatagramProtocol)是一个简单的面向消息的传输层协议。UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法。UDP因为不保证向上层提供消息传递,且UDP层在发送后不会保留UDP消息状态,因此,在传输数据上,不靠谱,会有丢包的情况,UDP丢包指网卡接收到数据包后,linux内核的tc            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-10-01 10:53:13
                            
                                95阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            保证顺序性,每一个包都有一个 ID。在建立连接的时候,会商定起始的 ID 是什么,然后按照 ID 一个个发送。假设A发给B的数据流由一个500 000字节的文件组成,MSS为1000字节。数据流的首字节ID为0,那么TCP会将这个文件分为500个报文段,每一个报文段的首部序号字段中分别为0、1000、2000... 如果第二个报文段先于第一个到B,也就是包的顺序出错。TCP RFC中并没            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-01-04 06:02:45
                            
                                94阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            使用tcp协议在任何时候都不会丢包,因为:       tcp/ip模型中,ip层负责发送包但不保证正确接收,而tcp层在ip层上,保证每个包正确接收。         在应用程序中,如果用socket的send发送一段数据,只要函数返回ok,对方肯定正确接收            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-02-20 22:25:00
                            
                                53阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            弱网环境是丢包率较高的特殊场景,TCP 在类似场景中的表现很差,当 RTT 为 30ms 时,一旦丢包率达到了 2%,TCP 的吞吐量就会下降 89.9%[3],从下面的表中我们可以看出丢包对 TCP 的吞吐量极其显著的影响:概念理解4种计时器1.重传计时器:Retransmission Timer A发报文时创建计时器,计时器到期内收到回报文ACK,就撤销计时器2.持久计时器:Persisten            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-02-03 07:31:53
                            
                                203阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            一、介绍iperf是一个基于Client/Server的网络性能测试工具,可以测试TCP、UDP和SCTP带宽质量,能够提供网络吞吐率信息,以及震动、丢包率,最大段和最大传输单元大小等统计信息,帮助我们测试网络性能,定位网络瓶颈。其中抖动和丢包率适应于UDP测试,二带宽测试适应于TCP和UDP。     Iperf可以说是嵌入式设备里网络接口测试的一个利器。这里的网络接口不但可以是一般的以太网,也            
                
         
            
            
            
               1、引言    传输控制协议(TransportControlProtocol,TCP)是目前Internet中广泛采用的一种传输协议,它为各个主机之间提供可靠、按序传输、端到端的数据包传输服务。TCP拥塞控制是其成功的重要因素。TCP拥塞控制的前提是网络拥塞为数据丢失的唯一原因,即只要终端检测出有数据丢失,均认为是网络拥塞所致,于是调用拥塞            
                
         
            
            
            
                   TCP是基于不可靠的网络实现可靠的传输,肯定也会存在掉包的情况,如果通信中发现缺少数据或者丢包,那么,最大的可能在于程序发送的过程或者接收的过程出现问题。         例如服务端要给客户端发送大量数据,Send频率很高,那么就很有可能在Send环节出现错误(1.程序处理逻辑错误,2.多线程同            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-04-21 17:19:08
                            
                                539阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            关键参数syn 重传多少次后放弃
net.ipv4.tcp_syn_retries
syn ack 重传多少次后放弃
net.ipv4.tcp_synack_retries
syn 包队列
net.ipv4.tcp_max_syn_backlog
tcp TIME-WAIT状态数量上限 
net.ipv4.tcp_max_tw_buckets = 5000内核TCP网络状态记录cat /proc/            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2023-12-04 19:03:14
                            
                                267阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            这节我们就将这两个功能:丢包重发和流量控制。  一、数据包重发 1. 数据发送丢包重发的前提是发送方能够知道接收方是否成功的接收了消息。所以,在TCP协议中接收方会给发送方返回一个通知,也叫做确认应答(ACK),这表示接收方已经接收到了数据包。
根据之前对TCP首部的分析得知,ACK确认应答包中的Ack(确认应答号)应该与发送方下次发送的数据包的序列号(Seq)相等。因此Ack可以理解为:“发送方            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-07-14 20:51:42
                            
                                84阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            概述:       在平时的运维过程中,我们经常会遇到一些数据传输的问题,在我们平时遇到的数据传输问题中定位难度从难到易基本为:数据传输慢不符合预期、数据传输过程有丢包、数据传输被终止或网络断开连接。       如果要对数据流分析抓包是最直接的办法,它可以帮助你更快的定位问题。最常用的抓包工具:wireshark(w            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-03-28 21:55:29
                            
                                345阅读