Python:TCP/IP协议和Socket通信
TCP/IP协议简介
TCP/IP协议是一系列的网络协议的总和,它一共分为四个部分:
应用层、传输层、网络层、链路层
网络层: 有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议
传输层: 有TCP协议与UDP协议
应用层: 有FTP、HTTP、TELNET、SMTP、DNS等协议
TCP和UDP的区别
1. TCP是面向有连接的;UDP是无连接的即发送数据之前是不需要建立连接的
2. TCP传输数据要通过三次握手来建立连接,在断开的时候需要进行四次挥手,在数据传递的时候有重传的机制。传输效率低,但传输的数据更为可靠
UDP因为是无连接的传输效率搞,但是不保证数据的到达,不可靠
3. TCP对系统资源要求比较多,UDP对系统资源要求比较少
TCP的三次握手和四次挥手
三次握手:
第一次:客户端向服务器发送SYN(seq=x),并进入SYN-SEND状态,等待服务器的确认
第二次:服务器接收客户端发的SYN,知道客户端要连接,即发送一个SYN(seq=y) 和 ACK (ACK=X+1) 返回给客户端,此时服务器进入SYN_RCVD状态
第三次:客户端接收到服务器发送给自己的SYN和ACK后,向服务器返回ACK(ACK=y+1) 此时客户端与服务器完成三次握手,建立连接
四次挥手:
第一次:客户端主动关闭连接,发送FIN(seq=u)的报文给服务器,并进入FIN_WAIT_1的状态
第二次:服务器收到客户端发送的FIN报文后,回应一个ACK(ACK=u+1)报文,进入CLOSED_WAIT状态,客户端收到报文后,进入FIN_WAIT_2状态
第三次:服务器再次向客户端发送FIN(seq=v)报文,进入LAST_ACK状态
第四次:客户端收到FIN报文后,向服务器发送ACK(ACK=v+1)报文,进入TIME_WAIT状态,此时客户端与服务器断开连接,完成四次挥手
HTTP简介
HTTP(超文本传输协议)是利用TCP在两台电脑(通常是Web服务器和客户端)之间传输信息的协议
什么是socket
socket(简称 套接字
) 是进程(就是运行中的程序)间通信的一种方式,它与其他进程间通信的一个主要不同是:
它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 socket 来完成通信的
例如: 我们每天浏览网页、QQ 聊天、收发 email 等等
总结:
HTTP协议基于TCP 建立Socket套接字去建立一个TCP/UDP连接,然后TCP/UDP使用IP协议来实现网络之间的连接
如果把IP协议比喻成一个高速公路,它允许其它协议在上面行驶并找到到其它电脑的出口
TCP和UDP是高速公路上的“卡车”,它们携带的货物就是像HTTP,文件传输协议等
原文地址:https://www.cnblogs.com/hxyzy/p/12692985.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 气象编程 | Google Earth Engine for R——提供250+ 实例
- Anaconda安装和使用
- Redhat7安装docker
- 有个笔记本就可以玩一玩Hadoop
- java如何将String转换为Int
- java中如何将数组转换为List
- 从一个多层嵌套循环中直接跳出
- 如何给3个布尔变量,当其中有2个或者2个以上为true才返回true
- 比较java枚举成员使用equal还是==
- java如何将String转换为enum
- Markdown极简入门教程(1)—为什么要学习Markdown
- Markdown极简入门教程(2)—斜体和粗体
- 标题—Markdown极简入门教程(3)
- 链接—Markdown极简入门教程(4)
- 某企业授权渗透报告