您的位置:首页 > 理论基础 > 计算机网络

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

2017-08-28 22:47 302 查看
本文理清网络开发相关知识。包括各种协议之间的关系。

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三次握手过程

主机A通过向主机B 发送一个含有同步序列号的标志位的数据段给主机B ,向主机B 请求建立连接,通过这个数据段,主机A告诉主机B 两件事:我想要和你通信你可以用此序列号作为起始数据段来回应我.

主机B收到主机A的请求后,用一个带有确认应答(ACK)和同步序列号(SYN)标志位的数据段响应主机A,也告诉主机A两件事:我已经收到你的请求了,你可以传输数据了你要用此序列号作为起始数据段来回应我

主机A收到这个数据段后,再发送一个确认应答,确认已收到主机B的数据段:我已收到回复,我现在要开始传输实际数据了

TCP断开连接四次握手

当主机A完成数据传输后,将控制位FIN置1,提出停止TCP连接的请求

主机B收到FIN后对其作出响应,确认这一方向上的TCP连接将关闭,将ACK置1

由B 端再提出反方向的关闭请求,将FIN置1

主机A对主机B的请求进行确认,将ACK置1,双方向的关闭结束.

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

TCP头部结构



0x04 UDP协议

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

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

UDP头部结构



0x05 TCP与UDP的区别

TCP基于连接,UDP无连接

TCP需要较多系统资源,UDP需要较少系统资源

TCP程序结构较复杂,UDP程序结构简单

TCP流模式,UDP数据报模式

TCP保证数据正确性,UDP更容易丢包

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消息报头(之后文章详解,此处不做说明)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: