HTTP、TCP、UDP、Socket解读

网络编程

1、导读

记得上大学时上过《计算机网络基础》专门课,当时真是单纯善良无知,觉得我以后又不搞网络这一块的东西,没必要好好学习计算机网络这们课程,只要考试通过就行了。但是工作后的我发现,不管是我们是不是做软件开发,都会多多少少接触接触到计算机网络,因为计算机网络无处不在。平时生活中我们要接触到路由器,交换机,dns,ping,修改dns等等这些基本的操作,作为软件开发者,我们要接触到tcp、udp、http、tcp连接三次握手,断开四次挥手、socket等等这些专业点的知识,真是这些专业点的知识真是书到用时方恨少啊,接下来我们就好好复习吧。

OSI是Open System Interconnection的缩写,意为开放式系统互联。国际标准化组织(ISO)制定了OSI模型,该模型定义了不同计算机互联的标准,是设计和描述计算机网络通信的基本框架。OSI模型把网络通信的工作分为7层,分别是物理层数据链路层美洲杯在哪买球,、网络层传输层会话层表示层应用层

记忆方法:记住前面的第一个字

物 数 网 传 会 表 应

这七层每一层都有自己的作用,作用如下图分解:

美洲杯在哪买球 1

这里写图片描述

相关概念

  • OSI七层模型:开放系统互连参考模型。它从低到高分别是:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。

  • TCP/IP:在OSI七层模型的基础上简化抽象出来的一套网络协议簇,现在得到了广泛使用。

  • TCP:传输控制协议

    • 有连接的,数据是安全有保障的

    • 传输的速度稍慢,三次握手、四次挥手、数据检查

  • UDP:用户数据报协议

    • 无连接的,数据是不可靠的

    • 传输的速度比较快

  • IP地址:唯一的一台计算标识

    • 查看:ipconfig
  • ping:检查网络连通性

    • 使用:ping IP/域名
  • 端口号:每个应用可以拥有唯一的端口号

    • 范围:0~65535

    • 系统:0~1024,常用的应用所占用

      • http:80

      • https:443

      • smtp:25

      • ftp:21

      • ssh:22

      • mysql:3306

      • redis:6379

    • 自己:大于1024

  • 网络编程核心:

    • IP 端口

    • 库:socket

2、Http

HTTP(HyperText Transfer Protocol、超文本传输协议)是OSI七层中应用层的协议。

TCP协议

  • 说明:面向连接、数据可靠(校验重发)、三次握手、四次挥手、传输速度较慢

  • 原理:见tcp.png

  • 示例:见01-tcp-http.py

  • TCP协议的服务器与客户端:见02-tcp-server.py03-tcp-client.py

协议解释:

HTTP 是基于 TCP/IP协议的应用层协议。它不涉及数据包(packet)传输,主要规定了客户端和服务器之间的通信格式,默认使用80端口。

有人说HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等),我觉这句话有问题,HTTP要是定义为协议那么http只是一种规定规则,规定了客户端的URI请求格式以及服务端数据响应格式,要说HTTP请求这个概念久比较笼统了,客户端发送一次HTTP请求,经过OSI的七层协议的组装、传输、拆分、传输等一些操作,最终可以获得我们想要的数据。

UDP协议

  • 说明:面向无连接的、数据不可靠、传输速度较快,适应于对数据要求不严格的情况

  • 原理:见udp.png

  • 示例:模拟飞秋发送数据,见04-udp-feiqiu.py

  • UDP协议的服务器与客户端:见05-udp-server.y06-udp-client.py

用途描述:

解决客户端和服务端的数据如何包装,包装两端最后得到的数据可以被识别。

StringIO与BytesIO

  • 说明:这些类型的对象可以与open返回的对象一样操作,但是操作的内存中的数据

  • 方法:getvalue用于获取所有数据

关系描述:

TPC/IP协议是传输层协议,主要解决数据 如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据,而socket则是对TCP/IP协议的封装和应用(程序员层面上)。实际上http协议就是建立在tcp/ip协议之上的。,几乎每一种语言都有自己的Http实现,当然也有自己的Socket实现,比如Golang、Java,在自己的net包里都可以找到源代码。使用TCP协议是需要连接三次握手,断开连接三次挥手的。

HTTP 是无状态协议,它不对之前发生过的请求和响应的状态进行管理。也就是说,无法根据之前的状态进行本次的请求处理。但是使用Cookie和Session可以保存状态和识别。HTTP只能是由客户端发起,服务端是无法主动想客户端发送数据的。

2、TCP

TCP(Transmission Control Protocol,传输控制协议)是OSI七层中传输层的协议。

协议解释:

TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。 理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接前,TCP 连接都将被一直保持下去。断开连接时服务器和客户端均可以主动发起断开TCP连接的请求 。

安全体现在哪儿?
连接安全:三次握手 四次挥手,具体请参考:TCP详解
数据安全:TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。

用途描述:

解决网络中的数据可以安全无错的传送

关系描述:

HTTP协议是基于TCP的,由于HTTP请求是一次请求一次应答,由于请求和应答都只有一次,所以就必须保证数据的安全性,在这一次的传送中不好丢失数据,所以HTTP是要基于更加安全的TCP协议而不是UDP协议,Socket连接可以基于TCP也可以基于UDP,看具体的业务的需求了。HTTP请求使用基于TCP的Socket连接

TCP发送的包有序号,对方收到包后要给一个反馈,如果超过一定时间还没收到反馈就自动执行超时重发,因此TCP最大的优点是可靠。一般网页(http)、邮件(SMTP)、远程连接(Telnet)、文件(FTP)传送就用TCP 。

美洲杯在哪买球 2

TCP交互流程图

3、UDP

UDP (User Datagram Protocol,用户数据报协议)是OSI参考模型中无连接的传输层协议.

协议解释:

UDP用户数据报协议,是一个无连接的简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。

用途描述:

解决网络中的数据可以高效的传送

本文由美洲杯在哪买球发布于计算机教程,转载请注明出处:HTTP、TCP、UDP、Socket解读

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。