常用的各种网络协议概念关系整理

来源:互联网 发布:朝鲜留学生在中国 知乎 编辑:程序博客网 时间:2024/06/06 00:41

本文理清网络开发相关知识。包括各种协议之间的关系。

0x01 TCP/IP协议

TCP/IP协议是一个协议簇。里面包括很多协议的。包括UDP,TCP,IP协议。

TCP/IP协议集包括应用层,传输层,网络层,网络访问层。

这里写图片描述

应用层

  • 超文本传输协议(HTTP):万维网的基本协议.
  • 文件传输(TFTP简单文件传输协议):
  • 远程登录(Telnet),提供远程访问其它主机功能,它允许用户登录 internet主机,并在这台主机上执行命令.
  • 网络管理(SNMP简单网络管理协议),该协议提供了监控网络设备的方法,以及配置管理,统计信息收集,性能管理及安全管理等.
  • 域名系统(DNS),该系统用于在internet中将域名及其公共广播的网络节点转换成IP地址.

运输层

  • TCP 传输控制协议
  • UDP 用户数据报协议

网络层

处理分组在网络中的活动,如分组的选路;网络层的协议包括

  • IP协议
  • ICMP协议(Internet互联网控制报文协议)
  • IGMP协议(Internet组管理协议)

链路层

也称数据链路层或网络接口层,包括设备驱动程序和网络接口卡,它们一起处理与电缆的物理接口细节。链路层主要有三个目的

  • 为IP模块发送和接受IP数据
  • 为ARP模块发送ARP请求和接受ARP应答
  • 外RARP发送RARP请求和接受RARP应答

0x02 IP协议

IP协议是TCP/IP协议的核心,所有的TCP,UDP,IMCP,IGCP的数据都以IP数据格式传输。要注意的是,IP不是可靠的协议,这是说,IP协议没有提供一种数据未传达以后的处理机制–这被认为是上层协议–TCP或UDP要做的事情。

下图是IP头部结构,20个字节

这里写图片描述

0x03 TCP协议

TCP(Transmission Control Protocol,传输控制协议)

是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接。

TCP三次握手过程

  1. 主机A通过向主机B 发送一个含有同步序列号的标志位的数据段给主机B ,向主机B 请求建立连接,通过这个数据段,主机A告诉主机B 两件事:我想要和你通信你可以用此序列号作为起始数据段来回应我.
  2. 主机B收到主机A的请求后,用一个带有确认应答(ACK)和同步序列号(SYN)标志位的数据段响应主机A,也告诉主机A两件事:我已经收到你的请求了,你可以传输数据了你要用此序列号作为起始数据段来回应我
  3. 主机A收到这个数据段后,再发送一个确认应答,确认已收到主机B的数据段:我已收到回复,我现在要开始传输实际数据了

TCP断开连接四次握手

  1. 当主机A完成数据传输后,将控制位FIN置1,提出停止TCP连接的请求
  2. 主机B收到FIN后对其作出响应,确认这一方向上的TCP连接将关闭,将ACK置1
  3. 由B 端再提出反方向的关闭请求,将FIN置1
  4. 主机A对主机B的请求进行确认,将ACK置1,双方向的关闭结束.

由TCP的三次握手和四次断开可以看出,TCP使用面向连接的通信方式,大大提高了数据通信的可靠性,使发送数据端和接收端在数据正式传输前就有了交互,为数据正式传输打下了可靠的基础.

TCP头部结构

这里写图片描述

0x04 UDP协议

UDP(User Data Protocol,用户数据报协议)

UDP是一个简单的面向数据报的传输层协议。

UDP头部结构

这里写图片描述

0x05 TCP与UDP的区别

  1. TCP基于连接,UDP无连接
  2. TCP需要较多系统资源,UDP需要较少系统资源
  3. TCP程序结构较复杂,UDP程序结构简单
  4. TCP流模式,UDP数据报模式
  5. TCP保证数据正确性,UDP更容易丢包
  6. TCP保证数据顺序,UDP不保证数据顺序

0x06 游戏中的长短连接

短连接
连接->传输数据->关闭连接
HTTP是无状态的,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。
也可以这样说:短连接是指 Socket 连接后发送后接收完数据后马上断开连接。

长连接
连接->传输数据->保持连接 -> 传输数据-> 。。。 ->关闭连接。
长连接指建立 Socket 连接后不管是否使用都保持连接,但安全性较差。

0x07 Socket

socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),
通过Socket,我们才能使用TCP/IP协议。
实际上,Socket跟TCP/IP协议没有必然的联系。Socket编程接口在设计的时候,就希望也能适应其他的网络协议。
所以说,Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,
从而形成了我们知道的一些最基本的函数接口,比如create、 listen、connect、accept、send、read和write等等

socket的抽象层位于应用层和运输层之间。

TCP编程的服务器端一般步骤:
1. 创建一个socket,用函数socket();
2. 设置socket属性,用函数setsockopt(); * 可选
3. 绑定IP地址、端口等信息到socket上,用函数bind();
4. 开启监听,用函数listen();
5. 接收客户端上来的连接,用函数accept();
6. 收发数据,用函数send()和recv(),或者read()和write();
7. 关闭网络连接;
8. 关闭监听;

TCP编程的客户端一般步骤:
1. 创建一个socket,用函数socket();
2. 设置socket属性,用函数setsockopt();* 可选
3. 绑定IP地址、端口等信息到socket上,用函数bind();* 可选
4. 设置要连接的对方的IP地址和端口等属性;
5. 连接服务器,用函数connect();
6. 收发数据,用函数send()和recv(),或者read()和write();
7. 关闭网络连接;

UDP编程的服务器端一般步骤:
1. 创建一个socket,用函数socket();
2. 设置socket属性,用函数setsockopt();* 可选
3. 绑定IP地址、端口等信息到socket上,用函数bind();
4. 循环接收数据,用函数recvfrom();
5. 关闭网络连接;

UDP编程的客户端一般步骤:
1. 创建一个socket,用函数socket();
2. 设置socket属性,用函数setsockopt();* 可选
3. 绑定IP地址、端口等信息到socket上,用函数bind();* 可选
4. 设置对方的IP地址和端口等属性;
5. 发送数据,用函数sendto();
6. 关闭网络连接;

0x08 Http协议

HTTP协议即超文本传送协议(HypertextTransfer Protocol)是一个基于请求与响应模式的、无状态的、应用层的协议,通常基于TCP协议之上。

HTTP请求

由三部分组成:请求行、消息报头、请求正文

请求行格式 Method Request-URI HTTP-Version CRLF

  • Method表示请求方法
  • Request-URI是一个统一资源标识符
  • HTTP-Version表示请求的HTTP协议版本
  • CRLF表示回车和换行(除了作为结尾的CRLF外,不允许出现单独的CR或LF字符)

请求方法(所有方法全为大写)有多种,各个方法的解释如下:
GET 请求获取Request-URI所标识的资源
POST 在Request-URI所标识的资源后附加新的数据
HEAD 请求获取由Request-URI所标识的资源的响应消息报头
PUT 请求服务器存储一个资源,并用Request-URI作为其标识
DELETE 请求服务器删除Request-URI所标识的资源
TRACE 请求服务器回送收到的请求信息,主要用于测试或诊断
CONNECT 保留将来使用
OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求

HTTP响应也由三个部分组成:

状态行、消息报头、响应正文

状态行格式 HTTP-Version Status-Code Reason-Phrase CRLF

  • HTTP-Version表示服务器HTTP协议的版本;
  • Status-Code表示服务器发回的响应状态代码;
  • Reason-Phrase表示状态代码的文本描述。

状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值

1xx:指示信息--表示请求已接收,继续处理2xx:成功--表示请求已被成功接收、理解、接受3xx:重定向--要完成请求必须进行更进一步的操作4xx:客户端错误--请求有语法错误或请求无法实现5xx:服务器端错误--服务器未能实现合法的请求

HTTP消息报头(之后文章详解,此处不做说明)

原创粉丝点击