tcp协议

Linux网络编程视频 百度网盘

為{幸葍}努か 提交于 2020-03-06 23:36:13
Linux网络编程(总共41集) 讲解Linux网络编程知识,分以下四个篇章。 Linux网络编程之TCP/IP基础篇 Linux网络编程之socket编程篇 Linux网络编程之进程间通信篇 Linux网络编程之线程篇 Linux网络编程之TCP/IP基础篇 01TCPIP基础(一) ISO/OSI参考模型 TCP/IP四层模型 基本概念(对等通信、封装、分用、端口) 02TCPIP基础(二) 最大传输单元(MTU)/路径MTU 以太网帧格式 ICMP ARP RARP 03TCPIP基础(三) IP数据报格式 网际校验和 路由 04TCPIP基础(四) TCP特点 TCP报文格式 连接建立三次握手 连接终止四次握手 TCP如何保证可靠性 05TCPIP基础(五) 滑动窗口协议 UDP特点 UDP报文格式 Linux网络编程之socket编程篇 06socket编程(一) 什么是socket IPv4套接口地址结构 网络字节序 字节序转换函数 地址转换函数 套接字类型 07socket编程(二) TCP客户/服务器模型 回射客户/服务器 socket、bind、listen、accept、connect 08socket编程(三) SO_REUSE AD DR 处理多客户连接(process-per-conection) 点对点聊天程序实现 09socket编程(四)

tcpdump抓取HTTP包

你说的曾经没有我的故事 提交于 2020-03-06 14:17:25
tcpdump -XvvennSs 0 -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x4854 0x4745 为"GET"前两个字母"GE" 0x4854 为"HTTP"前两个字母"HT" 说明: 通常情况下:一个正常的TCP连接,都会有三个阶段:1、TCP三次握手;2、数据传送;3、TCP四次挥手 里面的几个概念: SYN: (同步序列编号,Synchronize Sequence Numbers) ACK: (确认编号,Acknowledgement Number) FIN: (结束标志,FINish) TCP三次握手(创建 OPEN) 客户端发起一个和服务创建TCP链接的请求,这里是SYN(J) 服务端接受到客户端的创建请求后,返回两个信息: SYN(K) + ACK(J+1) 客户端在接受到服务端的ACK信息校验成功后(J与J+1),返回一个信息:ACK(K+1) 服务端这时接受到客户端的ACK信息校验成功后(K与K+1), 不再返回信息,后面进入数据通讯阶段 数据通讯 客户端/服务端 read/write数据包 TCP四次握手(关闭 finish) 客户端发起关闭请求,发送一个信息:FIN(M) 服务端接受到信息后,首先返回ACK(M+1),表明自己已经收到消息。 服务端在准备好关闭之前,最后发送给客户端一个 FIN(N)消息

用 Wireshark 图解:TCP 三次握手

那年仲夏 提交于 2020-03-06 14:08:35
摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! “snow warn throughout the winter” 一、什么是 Wireshark ? 简单地说,Wireshark 是抓包工具。官网说,“Wireshark 是一个网络包分析工具。 网络数据包分析仪将尝试捕获网络数据包并试图尽可能详尽显示该数据包。” 推荐一本书《Wireshark 网络分析就这么简单》,Wireshark 工具下载地址 https://www.wireshark.org/download.html。 Wireshark 不单单能抓包,主要的 Features 是对数据包进行各种的分析。下载打开界面非常简单直观: 最上面是 Packet List 窗口,它列出了所有网络包。 在 Packet List 中选定的网络包会详细地显示在中间的 Packet Details 窗口中。 最底下是 Packet Bytes Details 窗口(16 进制数据),我们一般不会用到它。 二、我们抓什么包呢?如题 TCP TCP 一脸懵逼。记得上次在 《 图解Http协议 》得知,HTTP 是一个客户端和服务器端请求和响应的标准TCP。其实建立在 TCP 之上的。那我们就抓 HTTP,这很简单。 三、实操 Wireshark 选择 Capture –

£可爱£侵袭症+ 提交于 2020-03-06 13:57:11
wireshark进行过滤时,按照过滤的语法可分为协议过滤和内容过滤。 对标准协议,既支持粗粒度的过滤如HTTP,也支持细粒度的、依据协议属性值进行的过滤如tcp.port==53、http.request.method=="GET"。 对内容的过滤,既支持深度的字符串匹配过滤如http contains "Server",也支持特定偏移处值的匹配过滤如tcp[20:3] == 47:45:54。 wireshark有两种过滤器: 捕捉过滤器(CaptureFilters):用于决定将什么样的信息记录在捕捉结果中。 显示过滤器(DisplayFilters):用于在捕捉结果中进行详细查找。 捕捉过滤器在抓抱前进行设置,决定抓取怎样的数据;显示过滤器用于过滤抓包数据,方便stream的追踪和排查。 捕捉过滤器仅支持协议过滤,显示过滤器既支持协议过滤也支持内容过滤。 两种过滤器它们支持的过滤语法并不一样。 捕捉过滤器-- 捕捉前依据协议的相关信息进行过滤设置 语法: Protocol Direction Host(s) Value Logical Operations Other expression 例子: tcp dst 10.1.1.1 80 and tcp dst 10.2.2.2 3128 示例: (host 10.4.1.12 or src net 10.6.0.0/16)

OSi模型与TCP/IP模型

邮差的信 提交于 2020-03-06 08:51:00
OSI模型和TCP/IP模型几乎应该说是网络通信领域中使用频率最高的两个术语。特别是TCP/IP,它几乎成了网络通信的代名词。从整体上先大致了解一下OSI模型和TCP/IP模型,对于深入学习各种网络通信知识,具有非常重要的指导性作用 OSI模型 OSI(Open System Interconnect),即开放式系统互联。 一般都叫OSI参考模型,是ISO(国际标准化组织)组织在1985年研究的网络互连模型。 OSI是一个7层功能协议模型,分别是物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。 物理层:实现物理信号的发送、接收,以及该介质的传输过程。 数据链路层:建立逻辑意义上的数据链路,实现数据的点到点或点到多点方式直接通信。 网络层:实现数据从任何一个节点到任何另外一个节点的整个传输过程 传输层:建立、维护和取消一次端到端的数据传输过程,控制传输节奏的快慢,调整数据的排序 会话层:在通信双方之间建立、管理和终止会话,确定双方是否应该开始进行某一方发起的通信。 表示层:进行数据格式的转换,以确保一个系统生成的应用数据能够被另一个系统的应用层所识别和理解。 应用层:向用户应用软件提供丰富的系统应用接口 从OSI模型的观点来看,计算机发送数据时,数据会从高层向底层逐层传递,在传递过程中进行相应的封装,并最终通过物理层转换为光/电信号发送出去。计算机接收到数据时

TCP机制 流量控制和拥堵控制

别来无恙 提交于 2020-03-06 02:12:06
流量控制 如果发送者发送数据过快,接收者来不及接收,那么就会有分组丢失。为了避免分组丢失,控制发送者的发送速度,使得接收者来得及接收,这就是流量控制。流量控制根本目的是防止分组丢失,它是构成TCP可靠性的一方面。 滑动窗口协议(连续ARQ协议) 滑动窗口协议既保证了分组无差错、有序接收,也实现了流量控制。   接收方返回的 ACK 中会包含自己的接收窗口的大小,并且利用大小来控制发送方的数据发送。 流量控制导致死锁 原因:   当发送者收到了一个窗口为0的应答,发送者便停止发送,等待接收者的下一个应答。但是如果这个窗口不为0的应答在传输过程丢失,发送者一直等待下去,而接收者以为发送者已经收到该应答,等待接收新数据,这样双方就相互等待,从而产生死锁。 解决死锁的办法:   TCP使用了 持续计时器 。每当发送者收到一个零窗口的应答后就启动该计时器。时间一到便主动发送报文询问接收者的窗口大小。若接收者仍然返回零窗口,则重置该计时器继续等待;若窗口不为0,则表示应答报文丢失了,此时重置发送窗口后开始发送,这样就避免了死锁的产生。 拥塞控制和流量控制的区别 拥塞控制:拥塞控制是作用于网络的,它是防止过多的数据注入到网络中,避免出现网络负载过大的情况;常用的方法就是:( 1 )慢开始、拥塞避免( 2 )快重传、快恢复。 流量控制:流量控制是作用于接收者的

OSI七层模型和TCP/IP四层模型

馋奶兔 提交于 2020-03-06 00:47:58
给自己学习 OSI七层模型及其包含的协议如下: 应用层: 允许访问OSI环境的手段,传输单位为APDU,主要包括的协议为FTP HTTP DNS HTTPS TFTP 表示层 : 对数据进行翻译、加密和压缩,传输单位为PPDU,主要包括的协议为JPEG ASII 会话层 :建立、管理和终止会话,传输单位为SPDU,主要包括的协议为RPC NFS RPC,就是 Remote Procedure Call,远程过程调用。 详细请见这位大佬: https://www.jianshu.com/p/2accc2840a1b 传输层 :提供端到端的可靠报文传递和错误恢复,传输单位为报文,主要包括的协议为TCP UDP TCP:参考这位大佬: https://blog.csdn.net/sinat_36629696/article/details/80740678 UDP:参考这位大佬: https://www.cnblogs.com/sxiszero/p/11565108.html 网络层 :负责数据包从源到宿的传递和网际互连,传输单位为包,主要包括的协议为IP ARP ICMP ip和MAC : https://blog.csdn.net/NO_9583/article/details/100801404 数据链路层 : 将比特组装成帧和点到点的传递,传输单位为帧,主要包括的协议为MAC

Http 1.x弊端与Http 2.0比较

混江龙づ霸主 提交于 2020-03-06 00:04:26
本博客转载自 https://www.cnblogs.com/barrywxx/p/8570006.html HTTP2.0作为新版协议,改动细节必然很多,不过对应用开发者和服务提供商来说,影响较大的就几点。 新的二进制格式(Binary Format) http1.x诞生的时候是明文协议,其格式由三部分组成:start line(request line或者status line),header,body。要识别这3部分就要做协议解析,http1.x的解析是基于文本。基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多,二进制则不同,只认0和1的组合。基于这种考虑http2.0的协议解析决定采用二进制格式,实现方便且健壮。 有人可能会觉得基于文本的http调试方便很多,像firebug,chrome,charles等不少工具都可以即时调试修改请求。实际上现在很多请求都是走https了,要调试https请求必须有私钥才行。http2.0的绝大部分request应该都是走https,所以调试方便无法作为一个有力的考虑因素了。curl,tcpdump,wireshark这些工具会更适合http2.0的调试。 http2.0用binary格式定义了一个一个的frame,和http1.x的格式对比如下图: [图10] http2

Python 网络编程之 TCP 与 UDP

血红的双手。 提交于 2020-03-05 23:35:22
Socket(套接字) 介绍 UDP 和 TCP 协议之前,先熟悉下 socket 的基本概念。 基本概念 Socket 是通信的基石,是支持 TCP/IP 协议的网络通信的基本操作单元,在网络通信过程中端点的一种抽象表示。网络中使用 Socket 传输数据是一种特殊的网络 I/O。 工作模式 打开open -> 读写write/read -> 关闭close 五种信息 socket 包括了数据传输必须的五元组,分别为源IP、源端口、目的IP、目的端口和协议号 通信机制 基于流(stream)或者基于数据报(datagram) python 中使用 import socket socket.socket(...) UDP UDP(User Datagram Protocol) 用户数据报协议,是一种面 向无连接 的协议,提供简单不可靠的信息传输服务,发送后不会确认信息是否到达。 UDP 通信模型中,在通信开始之前,不需要建立相关的链接,只需要发送数据即可,类似于生活中"写信"。 使用 socket 使用 UDP 的收发数据,先看原理图 客户端代码实现 # 客户端 发送数据 # 1.创建udp套接字 udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) while True: send_data = input(

记一次惊心的网站TCP队列问题排查经历

那年仲夏 提交于 2020-03-05 22:51:50
问题描述: 监控系统发现电商网站主页及其它页面间歇性的无法访问; 查看安全防护和网络流量、应用系统负载均正常; 系统重启后,能够暂时解决,但持续一段时间后间歇性问题再次出现。 此时问题已经影响到整个网站的正常业务,我的那个心惊的呀,最主要报警系统没有任何报警,服务运行一切正常,瞬时背上的汗已经出来了。但还是要静心,来仔细寻找蛛丝马迹,来一步一步找问题。 问题初步判断: 1. 检查dev 和 网卡设备层,是否有error和drop cat /proc/net/dev 和 ifconfig,分析在硬件和系统层,未发现异常 2. 观察socket overflow 和 socket droped(如果应用处理全连接队列(accept queue)过慢 socket overflow,影响半连接队列(syn queue)溢出socket dropped) netstat -s |grep -i listen ,发现SYN socket overflow 和 socket droped 急增加。 3. 检查sysctl内核参数:backlog,somaxconn,file-max 和 应用程序的backlog ss -lnt查询,SEND-Q会取上述参数的最小值,发现当时队列已经超过网站80端口和443端口默认值 4. 检查 selinux 和NetworkManager 是否启用