tcp协议

简单理解TCP三次握手

橙三吉。 提交于 2020-03-20 19:47:15
3 月,跳不动了?>>> 先上一段大学书本内容: 这幅图大家应该并不陌生吧,引用下结论 为了实现可靠数据传输, TCP 协议的通信双方, 都必须维护一个序列号, 以标识发送出去的数据包中, 哪些是已经被对方收到的。 三次握手的过程即是通信双方相互告知序列号起始值, 并确认对方已经收到了序列号起始值的必经步骤 结论应该还算可以简单理解吧,没理解也没关系,其实3次握手我们可以理解为是确定双方接收发送能力的过程,也就是说作为看客户端你需要知道你自己的接收发送能力没问题,也需要知道服务端的接收发送能力没问题,反之亦然,也就是对应每方都需要知道四种状态,三次握手的过程就总共要确认这8种状态,具体过程是:第一次客户端发送命令给服务端,服务端收到,这一过程服务端确认了客户端的发送能力和自己的接收能力;第二次服务端发送命令回客户端,这一过程客户端确认了自己的发送能力和接收能力以及服务端的发送能力和接收能力没问题都没问题;至此,我们只剩下服务端方面确认客户端的接收能力和它自己的发送能力了,所以第三次握手的作用就体现在此了。当然这个过程是用什么来确认的,那就是上面提到的序列号啦。会不会有点绕,其实按着这个流程画一下图应该就能理解了,2的立方不就等于8嘛。 来源: oschina 链接: https://my.oschina.net/u/4247262/blog/3207314

nginx 代理 tcp协议 mysql 连接

僤鯓⒐⒋嵵緔 提交于 2020-03-20 14:03:49
使用nginx代理mysql连接有个好处就是,如果做了容灾处理的话, 可以瞬间平滑切换到可用服务上。 1. vi /etc/nginx/nginx.conf ,在 http{} 结构体外(也就是文件末尾)添加如下配置: stream { upstream cloudsocket { hash $remote_addr consistent; # $binary_remote_addr; server 192.168.182.155:3306 weight=5 max_fails=3 fail_timeout=30s; } server { listen 3306;#数据库服务器监听端口 proxy_connect_timeout 10s; proxy_timeout 300s;#设置客户端和代理服务之间的超时时间,如果5分钟内没操作将自动断开。 proxy_pass cloudsocket; } } 2. cat /etc/nginx/nginx.conf ,内容如下: worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; server { listen 80;

tcp/ip网络协议学习

穿精又带淫゛_ 提交于 2020-03-19 17:28:46
链路层介绍 网络层协议的数据单元是 IP 数据报 ,而数据链路层的工作就是把网络层交下来的 IP 数据报 封装为 帧(frame)发送到链路上,以及把接收到的帧中的数据取出并上交给网络层。 以太网 以太网(Ether-net)是指 DEC 公司、Intel 公司和 Xerox 公司在 1982 年联合公布的一个标准(链路层数据帧的的封装格式)。 PPP(点对点协议) PPP(点到点协议)是为在同等单元之间传输数据设计的链路层协议。这种链路提供全双工操作,并按照顺序传递数据。设计目的主要是用来通过 拨号或专线 方式建立 点对点 连接发送数据,使其成为各种主机、网桥和路由器之间简单连接的一种共通的解决方案。 点对点协议(PPP)为在点对点连接上传输多协议数据包提供了一个标准方法。PPP 最初设计是为两个对等节点之间的 IP 流量传输提供一种封装协议。在 TCP/IP 协议集中它是一种用来同步调制连接的数据链路层协议。 SLIP 与 PPP SLIP 的全称为 Serial Line IP(串行线路 IP)。它是一种对 IP 数据报进行封装的简单形式。 MTU 为了提供足够快的响应时间,以太网和 IEEE802.3 对数据帧长度都有限制,其最大值分别为 1500 字节和 1492 字节, 链路层的这个特性称作 MTU ,即 最大传输单元 。 IP 网际协议 IP 协议位于网络层,它是

QUIC,快速UDP网络连接协议

时光毁灭记忆、已成空白 提交于 2020-03-19 12:57:51
3 月,跳不动了?>>> QUIC ,即 快速UDP网络连接 ( Quick UDP Internet Connections ), 是由 Google 提出的实验性网络传输协议 ,位于 OSI 模型传输层。 QUIC 旨在解决 TCP 协议的缺陷,并最终替代 TCP 协议, 以减少数据传输,降低连接建立延迟时间,加快网页传输速度。 QUIC 主要特点有: 多流设计; 低等待延迟; 加密性能更优; 前向纠错; 应用程序实现; 连接保持; 多流设计 采用 多路复用 思想,一个连接可以同时承载多个 流 ( stream ),同时发起多个请求。 请求间完全 独立 ,某个请求阻塞甚至报文出错均不影响其他请求。 对比 HTTP 长连接,由于 TCP 是只实现一个字节流,如果请求阻塞,新请求无法发起。 低等待延迟 先考察典型的 TLS 连接建立过程: 首先,执行三次握手,建立 TCP 连接(蓝色部分); 然后,执行 TLS 握手,建立 TLS 连接(黄色部分); 此后开始传输业务数据; 客户端和服务器之间要进行好几轮协议交互,才能建立 TLS 连接,延迟相当严重。 平时访问 https 网站明显比 http 网站慢,三次握手和 TLS 握手难辞其咎。 > 注解: > > 注意到,三次握手中的 ACK 包与 ClientHello 合并在一起发送。 这是 TCP 实现中使用的 延迟确认 技术

Linux命令 - ss

你离开我真会死。 提交于 2020-03-19 08:56:23
ss命令用来显示处于活动状态的套接字信息。 (1)用法: 用法: ss [参数]      ss [参数] [过滤] (2)功能: 功能: ss是类似netstat的工具。能显示查看网络状态信息,包括TCP、UDP连接,端口。   ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容。但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。 注意: 当服务器的socket连接数量变得非常大时,无论是使用netstat命令还是直接cat /proc/net/tcp,执行速度都会很慢。 可能你不会有切身的感受,但请相信我,当服务器维持的连接达到上万个的时候,使用netstat等于浪费生命,而用ss才是节省时间。ss快的秘诀在于,它利用到了TCP协议栈中tcp_diag。tcp_diag是一个用于分析统计的模块,可以获得Linux 内核中第一手的信息,这就确保了ss的快捷高效。当然,如果你的系统中没有tcp_diag,ss也可以正常运行,只是效率会变得稍慢。 (3)选项参数 1) -t, --tcp         仅显示TCP套接字(sockets) 2) -a, --all         显示所有套接字(sockets) 3) -s, --summary      显示套接字(socket)使用概况 4) -l

网络-传输层

余生长醉 提交于 2020-03-19 07:28:29
1.常用的应用层协议使用的端口(号): http = TCP + 80 Https = TCP + 443 RDP = TCP + 3389 ftp = TCP + 21 共享文件夹 = TCP + 445 SMTP = TCP + 25 POP3 = TCP + 110 telnet = TCP + 23 SQL = TCP + 1433 DNS = UDP + 53 如何查看服务侦听的端口 netstat -a netstat -an 以数字的形式查看端口 netstat -n 查看建立的会话 netstat -nb 查看建立会话的进程 telnet 192.168.80.100 3389 测试到远程计算机某个端口是否打开 2.ARP/RARP协议 地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。 逆地址解析协议,即RARP,功能和ARP协议相对,其将局域网中某个主机的物理地址转换为IP地址。 3.路由选择协议 常见的路由选择协议有:RIP协议、OSPF协议。 RIP协议 :底层是贝尔曼福特算法,它选择路由的度量标准(metric)是跳数,最大跳数是15跳,如果大于15跳,它就会丢弃数据包。 OSPF协议 :Open Shortest Path First开放式最短路径优先,底层是迪杰斯特拉算法

[转]linux超级服务器inetd详解

蹲街弑〆低调 提交于 2020-03-19 02:15:51
原文: http://blog.chinaunix.net/uid-21411227-id-1826876.html ---------------------------------------------------------------------------------------- 1 .引言: 它可以为多种服务管理连接,当 inetd 接到连接时,它能够确定连接所需的程序,启动相应的进程,并把 socket 交给它 (服务 socket 会作为程序的标准输入、 输出和错误输出描述符)。 使用inetd 来运行那些负载不重的服务有助于降低系统负载,因为它不需要为每个服务都启动独立的服务程序。   一般说来, inetd 主要用于启动其它服务程序,但它也有能力直接处理某些简单的服务, 例如chargen、 auth, 以及 daytime。 inetd 是通过rc系统启动的。 inetd_enable 选项默认设为 NO,但可以在安装系统时, 由用户根据需要通过 sysinstall 来打开。 inetd.conf则是inetd的配置文件。 inetd.conf文件告诉inetd监听哪些网络端口,为每个端口启动哪个服务。在任何的网络环境中使用 Linux 系统,第一件要做的事就是了解一下服务器到底要提供哪些服务。不需要的那些服务应该被禁止掉,最好卸载掉

HTTP相关:TCP/IP、DNS

北城余情 提交于 2020-03-19 01:59:31
最近在看HTTP的书,看得有点慢,而且断断续续的,很多东西看完就忘了。知识点多且零散,感觉要多看几遍才能消化。 TCP/IP协议族按层次分为4层:   应用层:     应用层决定了向用户提供应用服务时通信的活动。   传输层:     传输层为应用层提供处于网络连接中的两台计算机之间的数据传输。   网络层:     网络层用来处理在网络上流动的数据包。   链路层:     链路层用来处理连接网络的硬件部分。 TCP/IP通信传输流: IP协议:   Internet Protocol的作用是把各种数据包传送给对方,有两个条件(MAC地址、IP地址)保证了数据能准确传输给对方。   MAC地址:     网卡所属的固定地址(物理地址) 。IP间通信依赖MAC地址,通信时一般要进行多次中转才能连接对方,中转过程就会用到MAC地址和ARP协议(ARP协议根据对方IP地址,寻找中转设备的MAC地址,通过中转设备传送,从而连接对方)。   IP地址:     指明节点被分配到的地址。IP地址是可以和MAC地址配对的,且IP地址可以变换。 TCP三次握手: 为了准确无误地将数据传送给目标,TCP协议采用了三次握手的机制。发送端先发送一个带SNY(synchronize)标志的数据包给对方,接收端收到后,会回传一个带有SYN/ACK(acknowledgement)标志的数据包表示确认收到

socket、tcp/ip协议、udp协议

巧了我就是萌 提交于 2020-03-18 17:35:50
原文地址: https://www.cnblogs.com/xiaowenshu/p/9916755.html socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求。 socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,对于文件用【打开】【读写】【关闭】模式来操作。 socket就是该模式的一个实现,socket是一种特殊的文件,一些socket函数就是对其进行的操作(打开、读/写IO、关闭)。 socket和file的区别: 文件是都是在同一台计算机上,两个进程之间传输数据。 socket可以实现在不同的计算机之间传输数据,也就是网络传输数据。比如说qq、打开一个网页,这些都是socket来实现通信的。 那网络通信呢又要说到tcp/ip协议和udp协议,socket里面已经封装好了upd和tcp/ip协议,直接使用就可以了。 简单说下tcp/ip协议是干嘛的,网络刚出来的时候,一片混乱,那要传输数据就得大家都遵守一个规则,大家都按照这个,然后就出现了tcp/ip协议。也许你听过3次握手,4次断开,说的就是tcp/ip连接的一个过程。加入a计算机要和b计算机通信,过程是这样的 a:在吗,我可以连你吗 b:在,你连吧 a:好的,我要给你发数据了 #这就是3次握手

chapter 16 网络编程

混江龙づ霸主 提交于 2020-03-18 17:18:19
3 月,跳不动了?>>> 套接字:通讯端点 什么是套接字? 书上说的端口是数据结构和I/O缓存区”是指硬件端口,网络编程里的端口可以理解为应用程序的ID。 说得形象点,套接字就类似我们人类的门 我们打开门,通过门外面的人可以进来 我们推开门,里面的人也可以出去 同样,外面的数据可以通过socket把它存储在本地机器的缓冲区里等待本地机器接收 本地机器的数据可以通过socket放在缓冲区里等待发送到对方机器上 当我们把门给关上时,就拒绝了和外面世界的交往。 套接字是一种具有之前所说的“通讯端点”概念的计算机网络数据结构。网络化的应用程序在开始任何通 讯之前都必需要创建套接字。就像电话的插口一样,没有它就完全没办法通讯。 套接字有两种,分别是基于文件型的和基于网络型的。 基于文件型的: Unix 套接字是我们要介绍的第一个套接字家族。其“家族名”为AF_UNIX,由于两个进程都运行在同一台 机器上,而且这些套接字是基于文件的。所以,它们的底层结构是由文件系统来支持的。这样做相当有道 理,因为,同一台电脑上,文件系统的确是不同的进程都能访问的。 基于网络型的 它有自己的家族名字:AF_INET,或叫“地址家族:Internet”。 Python 只支持AF_UNIX,AF_NETLINK,和AF_INET 家族。由于我们只关心网络编程,所以在本章的大部分 时候,我们都只用AF_INET。