三次握手

TCP、UDP有关函数

我与影子孤独终老i 提交于 2020-03-06 01:27:13
首先看一下上一篇三次握手四次挥手文章中提到的原理图。 其中的read对应的就是recv函数,write对应的就是send函数。 步入正题,函数的使用: 1.TCP客户端 socket : 创建套接字 函数原型 : int socket ( int family , int type , int protocol ) ; 功能:创建一个用于网络通信的socket套接字(描述符) 参数 : @family : 协议族 ( AF_INET、AF_INET6、PF_PACKET ) @type : 套接字类 ( SOCK_STREAM、SOCK_DGRAM、SOCK_RAW ) @protocol : 协议类别 ( 0 、IPPROTO_TCP、IPPROTO_UDP ) ( 一般传 0 , 自动匹配 ) 返回值 : 套接字 特点 : 创建套接字时 , 系统不会分配端口。 创建的套接字默认属性是主动的 , 即主动发起服务的请求 ; 当作为服务器时 , 往往需要修改为被动的。 ( listen ) 头文件 : # include <sys/socket.h> connect : 连接“服务器” 函数原型 : int connect ( int sockfd , const struct sockaddr * addr , socklen_t len ) ; 功能 : 主动跟服务器建立链接

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 是否启用

python16_day07【Socket网络编程】

匆匆过客 提交于 2020-03-05 02:45:41
/*--> */ /*--> */ 一、简介   1.理解C/S,B/S   2.IOS七层模型(http://www.cnblogs.com/linhaifeng/articles/5937962.html)    二、什么是Socket   我们看看Socket的位置在什么地方?   Socket是应用层与 TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中, Socket其实就是一个门面模式,它把复杂的 TCP/IP协议族隐藏在 Socket接口后面,对用户来说,一组简单的接口就是全部,让 Socket去组织数据,以符合指定的协议。 所以,我们无需深入理解tcp/udp协议,socket已经为我们封装好了,我们只需要遵循socket的规定去编程,写出的程序自然就是遵循tcp/udp标准的。 三、Socket工作流程   先从服务器端说起。服务器端先初始化 Socket,然后与端口绑定 (bind),对端口进行监听 (listen),调用 accept阻塞,等待客户端连接。在这时如果有个客户端初始化一个 Socket,然后连接服务器 (connect),如果连接成功,这时客户端与服务器端的连接就建立了。客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束 1

前端基础-HTTP,HTML,浏览器

徘徊边缘 提交于 2020-03-05 01:07:31
前端基础 一、HTTP,HTML,浏览器 1、说一下 http 和 https https 的 SSL 加密是在传输层实现的。 (1)http 和 https 的基本概念: http: 超文本传输协议,是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器 端请求和应答的标准(TCP),用于从 WWW 服务器传输超文本到本地浏览器的传输协议,它可以 使浏览器更加高效,使网络传输减少。 HTTP 是一个基于 TCP/IP 通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)HTTP 是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。 它于 1990 年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在 WWW 中使用的是 HTTP/1、0 的第六版,HTTP/1、1 的规范化工作正在进行之中,而且 HTTP-NG(Next Generation of HTTP)的建议已经提出。HTTP 协议工作于客户端-服务端架构为上。浏览器作为 HTTP 客户端通过 URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送 响应信息。 https: 是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。

面试详解TCP三次握手和四次挥手

有些话、适合烂在心里 提交于 2020-03-04 04:23:44
三次握手: 目的:特指对接的三次报文(为什么要三次握手?就是让双方都能明确自己和对方的收、发能力是正常的,互相确认),并且能够交换初始序号的一类过程。 如下图:(三次握手是客户端和服务端建立连接时) 首先需要明确几个符号: ACK:即确认字符,是一种响应。 SYN/FIN:同步序列编号,是TCP/IP建立连接的握手信号。FIN顾名思义是结束、完成的意思,是结束连接的信号标识。 SEQ:序号 三次握手1.客户端发起连接(给服务端说:我要连接了,同时给他一个ack=1,seq=a)2.服务端响应(收到你的连接信息,给你一个seq=b)3.客户端--》服务端(收到你的回话,给你seq=b+1吗,同时确认ACK) 四次挥手:(四次挥手是TCP断开连接(关闭连接)时) 四次挥手:1.客户端给服务端(我要关闭了,给你一个FIN=1(关闭信号)) 2.服务端给客户端(收到你的关闭信息,ACK=Z+1,确认,但是在此时还有数据交互,所以服务端进入close_wait阶段) 3.服务端给客户端(给客户端说:我也要关闭了,给客户端一个FIN=1,seq=Y) 4.客户端给服务端(收到你要关闭的信号,给你一个确认信息ACK=Y,seq=y+1),然后自己关闭,发送到服务端让服务端收到也关闭接受。 这样的一个过程,自己的理解,希望能帮到大家! 来源: CSDN 作者: Mr_天先生 链接: https:/

tcp,udp区别以及应用场景

痞子三分冷 提交于 2020-03-03 16:46:46
TCP与UDP区别 1. 基于连接vs无连接 TCP是面向连接的协议,而UDP是无连接的协议。这意味着当一个客户端和一个服务器端通过TCP发送数据前,必须先建立连接,建立连接的过程也被称为TCP三次握手。 2. 可靠性 TCP提供交付保证,这意味着一个使用TCP协议发送的消息是保证交付给客户端的,如果消息在传输过程中丢失,那么它将重发。UDP是不可靠的,它不提供任何交付的保证,一个数据报包在运输过程中可能会丢失。 3. 有序性 消息到达网络的另一端时可能是无序的,TCP协议将会为你排好序。UDP不提供任何有序性的保证。 4. 速度 TCP速度比较慢,而UDP速度比较快,因为TCP必须创建连接,以保证消息的可靠交付和有序性,他需要做比UDP多的事。这就是为什么UDP更适用于对速度比较敏感的应用。TCP适合传输大量数据,UDP适合传输少量数据。 5. 重量级vs轻量级 TCP是重量级的协议,UDP协议则是轻量级的协议。一个TCP数据报的报头大小最少是20个字节,UDP数据报的报头固定是8个字节。TCP报头中包含序列号,ACK号,数据偏移量,保留,控制位,窗口,紧急指针,可选项,填充项,校验位,源端口和目的端口。而UDP报头只包含长度,源端口号,目的端口号,校验和。 6. 流量控制和拥塞控制 TCP有流量控制和拥塞控制。UDP没有流量控制和拥塞控制。 7. TCP是面向字节流

JavaSE基础加强之网络编程(七)

你。 提交于 2020-03-03 16:26:08
概述 (一)网络通信概述 (二)TCP协议 (三)综合案例:文件上传 (一)网络通信概述 demo01: 软件结构 C/S结构 :全称为Client/Server结构,是指客户端和服务器结构。常见程序有QQ、迅雷等软件。 B/S结构 :全称为Browser/Server结构,是指浏览器和服务器结构。常见浏览器有谷歌、火狐等。 demo02: 网络通信协议: TCP/IP TCP/IP协议: 传输控制协议/因特网互联协议( Transmission Control Protocol/Internet Protocol),是Internet最基本、最广泛的协议。它定义了计算机如何连入因特网,以及数据如何在它们之间传输的标准。它的内部包含一系列的用于处理数据通信的协议,并采用了4层的分层模型,每一层都呼叫它的下一层所提供的协议来完成自己的需求。 上图中,TCP/IP协议中的四层分别是应用层、传输层、网络层和链路层,每层分别负责不同的通信功能。 链路层 :链路层是用于定义物理传输通道,通常是对某些网络连接设备的驱动协议,例如针对光纤、网线提供的驱动。 网络层 :网络层是整个TCP/IP协议的核心,它主要用于将传输的数据进行分组,将分组数据发送到目标计算机或者网络。 运输层 :主要使网络程序进行通信,在进行网络通信时,可以采用TCP协议,也可以采用UDP协议。 应用层

nginx服务器Linux内核参数优化

ⅰ亾dé卋堺 提交于 2020-03-03 14:52:53
由于默认的Linux内核参数考虑的是最通用的场景,这明显不符合用于支持高并发访问的Web服务器的定义,所以需要修改 Linux 内核参数,使得Nginx可以拥有更高的性能。 在优化内核时,可以做的事件很多,不过,我们通常会根据业务特点来进行调整,当Nginx作为静态Web内容服务器、反向代理服务器或是提供图片缩略功能(实时压缩图片)的服务器时,其内核参数的调整都是不同的。这里只针对最通用的、使Nginx支持更多并发请求的TCP网络参数做简单说明。 首先,需要修改/etc/sysctl.conf来更改内核参数,例如,最常用的配置: 在CODE上查看代码片派生到我的代码片 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #原有字段 net.ipv4.tcp_syncookies = 1 #新增字段 fs. file -max = 999999 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_keepalive_time = 600 net.ipv4.tcp_fin_timeout = 30 net.ipv4.tcp_max_tw_buckets = 5000 net.ipv4.ip_local_port_range = 1024 61000 net.ipv4.tcp_rmem = 10240 87380 12582912