壹:tcp协议:可靠传输

一: 3次握手,建立链接;4次挥手,断开链接

3次握手,建立链接:图解 ,这样双向通路就建立完成了。

在建立链接时,并没有数据传输,所以中间两部可以合在一起,也就是3次握手,建立了链接(图1)

此时,有一个问题,客户端给服务端发完包以后,服务端又回一个包,那么客户端如何知道,

服务端回的这个包是基于上一次的请求信息而来的。所以需要一个记号,也就是seq=x,从而解决

上述的问题(图2)。

4次挥手,断开链接:图解 , 建成链接之后,就该基于双向通路进行数据的传递了。

而且说明一点:tcp协议传输数据更加可靠,这是因为tcp协议 “有求必应”,也就是客户端给服务端发一个包,

服务端一定要回一个包,要有一个回应。所以数据更不容易丢失,才更加可靠。

断开链接,由于要考虑到数据的发送是否已经完成,所以需要4步,才断开链接,例(图3),客户端数据发送完成,

请求断开链接(fin=1),但是此时服务端数据可能并没有完成,所以不能合成3步。

                       

二: tcp协议的相关状态:状态可以在cmd中去查看,命令:netstat  -an  |findstr  ?(例:TCP)

(LISTENING,ESTABLISHED,……)

客户端上可以查看到什么样的状态信息:客户端一旦发送完一个请求信息syn=1以后,客户端立马会进入一个状态,

叫syn_send的状态。服务端在收到这个请求信息之前,服务端会首先处于一个状态,叫listen状态,一旦服务端

收到一个syn=1请求信息后,服务端就会从listen状态立马进入一个叫syn_rcvd的状态(received),代表收到请

求信息了。服务端收到请求信息后,服务端开始给客户端回数据,客户端一旦收到这个确认信息后,客户端会立

马进入到一个叫ESTABLISHED的状态(链接已经建立成功),那这个数据包回到服务端,服务端一旦收到ack=1

的确认信息后,服务端也会进入到一个叫ESTABLISHED的状态。

所以(图4) tcp三次握手在客户端会看到哪些状态,syn_send和ESTABLISHED,

在服务端会看到哪些状态,listen,syn_rcvd和ESTABLISHED

如果想要用上面的命令netstat..去捕捉这些状态的话,

在客户端中,通常只能捕捉到ESTABLISHED状态,因为tcp三次握手速度非常快,客户端在发送完请求信息后,

瞬间就进入到了ESTABLISHED状态,所以几乎不可能捕捉到syn_send状态。

在服务端中,通常只能捕捉到listen和ESTABLISHED状态,也是因为速度太快....

(图5)tcp断开链接的几种状态:

三:syn洪水攻击:就是黑客模拟大量的假的客户端来向服务端发送正常的syn请求,发送给服务端以后,服务端就要响应回去,

然后等待着客户端的回应,然而这是黑客模拟的假的客户端,并不会回应了,所以服务端的资源一直被占用着,这时

syn_rcvd的状态就会大量涌现。

四:半连接池(backlog):服务端有一个半连接池,专门用来存请求信息,就是一个队列,先进先出,客户端来一个请求,

就把请求放到半连接池中,注意,放的是请求数,不是链接数。当然如果遭受syn洪水攻击,就应该调高半

连接池的大小,但这并不能从根本上解决问题,因为半连接池占用的是内存空间,所以最大也不会大过内存

空间,所以如果流量足够大的情况下,半连接池的作用就没有用了。

贰:socket(套接字)介绍:socket是应用层与传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供

应用层调用已实现进程在网络中通信。

基于tcp协议通信的套接字(简单版本)   例:

tcp协议以及socket介绍的更多相关文章

  1. 网络编程——基于TCP协议的Socket编程,基于UDP协议的Socket编程

    Socket编程 目前较为流行的网络编程模型是客户机/服务器通信模式 客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求.如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服 ...

  2. 基于TCP 协议的socket 简单通信

    DNS 服务器:域名解析 socket 套接字 : ​ socket 是处于应用层与传输层之间的抽象层,也是一组操作起来非常简单的接口(接受数据),此接口接受数据之后,交由操作系统 为什么存在 soc ...

  3. 自学Python-基于tcp协议的socket

    自学Python之路-Python基础+模块+面向对象自学Python之路-Python网络编程自学Python之路-Python并发编程+数据库+前端自学Python之路-django 自学Pyth ...

  4. Python基础系列讲解——TCP协议的socket编程

    前言 我们知道TCP协议(Transmission Control Protocol, 传输控制协议)是一种面向连接的传输层通信协议,它能提供高可靠性通信,像HTTP/HTTPS等网络服务都采用TCP ...

  5. 闲来无事,写个基于TCP协议的Socket通讯Demo

    .Net Socket通讯可以使用Socket类,也可以使用 TcpClient. TcpListener 和 UdpClient类.我这里使用的是Socket类,Tcp协议. 程序很简单,一个命令行 ...

  6. TCP协议下Socket的基础编程类型

    套接字的基本操作有: 创建(socket).命名(bind).侦听(listen).连接(accept).关闭(shutdown).发送(send).接受(recv). 下面逐个分析: 一.创建(so ...

  7. 基于TCP协议的socket编程

    什么是socket Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面, ...

  8. 基于网络编程 TCP协议 及 socket 基本语法

    socket是什么 Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面, ...

  9. 网络编程: 基于TCP协议的socket, 实现一对一, 一对多通信

    TCP协议  面向连接 可靠的 面向字节流形式的 tcp是基于链接的,必须先启动服务端,然后再启动客户端去链接服务端 TCP协议编码流程: 服务器端:                 客户端 实例化对 ...

随机推荐

  1. python学习之旅(十五)

    Python基础知识(14):函数(Ⅴ) 一.装饰器 decorator:本质上就是函数,可以增强函数的功能. 定义起来虽然有点复杂,但使用起来非常灵活和方便 1.不修改被装饰函数的源代码 2.不修改 ...

  2. Python------mysql数据库

    import pymysql #一.直接连接mysql数据库'''coon=pymysql.connect(host='192.168.*.*',user='root',password='12345 ...

  3. Bom 字符串的问题

    不含 BOM 的 UTF-8 才是标准形式",的确是这样,无BOM使用得更多些,所以个人还是推荐一般情况下用无BOM的形式吧,除非有问题的时候,再考虑换有BOM的.Windows系统保存的都 ...

  4. day4_局部变量和全局变量

    一.介绍: 定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域. 局部变量意思就是在局部生效的,出了这个变量的作用域,这个变量就失效了 全局变量的意思就是在整个程序里面都生效的,在程 ...

  5. FQ原理

    笔者在nginx反向代理篇讲了正向代理和反向代理的区别,今天着重讲其中的FQ是实现原理. 一.普遍的两种方式 1.vpn vpn它将客户端的IP数据报经过加密和二次封装后转发出去,客户端通过vpn上网 ...

  6. python数据结构-如何统计序列中元素的频度

    如何统计序列中元素的频度 问题举例 如何找出随机序列[1, 5, 6, 5, 3, 2, 1, 0, 6, 1, 6]中出现频度最高的3个元素? 如何统计某篇英文文章中词频最高的5个单词? 将序列转换 ...

  7. 数据库连接池 maxActive,maxIdle,maxWait参数

    maxActive 连接池支持的最大连接数,这里取值为20,表示同时最多有20个数据库连接.设 0 为没有限制.maxIdle 连接池中最多可空闲maxIdle个连接 ,这里取值为20,表示即使没有数 ...

  8. 12.C# 接口和抽象类的区别

    1.抽象类 声明方法的存在而不去实现它的类叫做抽象类,抽象类用abstract关键字声明.抽象类主要用来规定某些类的基本特征,继承它的子类必须实现抽象类的抽象成员,否则这个子类也为抽象类. publi ...

  9. metasploit安装,按官网说明

    mkdir -p $HOME/git cd $HOME/git git clone git@github.com:YOUR_USERNAME_FOR_GITHUB/metasploit-framewo ...

  10. JavaScript 数组插入元素并排序

    1.插入类排序 插入类排序的思想是:在一个已排好序的序列区内,对待排序的无序序列中的记录逐个进行处理,每一步都讲待排序的记录和已排好的序列中的记录进行比较,然后有序的插入到该序列中,直到所有待排序的记 ...