计算机网络协议学习笔记

Posted by AceKei on November 14, 2017

OSI模型

开放式系统互联通信参考模型(英语:Open System Interconnection Reference Model,缩写为 OSI),简称为OSI模型(OSI model),一种概念模型,由国际标准化组织提出,一个试图使各种计算机在世界范围内互连为网络的标准框架。定义于ISO/IEC 7498-1。 OSI参考模型把网络通信的工作分为7层,分别为(从上往下):应用层,表示层,会话层,运输层,网络层,数据链路层,物理层。
image

image

应用层Application Layer

提供为应用软件而设计的接口,以设定与与另外应用软件之间的通讯,例如HTTP,HTTPS,SSH,FTP,SMTP,POP3等。

表示层 Presentation Layer

把数据转化成能与接收者的系统格式兼容并适合传输的格式,即把应用层提供的和提供给应用层的数据转化成彼此都能解析的形式。

会话层 Session Layer

负责在数据传输的过程中,建立和维护2台电脑之间的网络通讯的连接。

传输层 Transport Layer

传输层负责承上启下的作用。把传输表头(TH)加至数据以形成数据包。传输表头包含了所使用的协定等传送咨询。例如3次握手和4次挥手。

网络层 Network Layer

负责2台电脑之间可靠的通讯传输,主要功能有:路由选择,网络寻址,流量控制,拥塞控制,网络互连等。

主要任务是实现网络中相邻节点之间的可靠传输,把原始的、有差错的物理传输线路加上数据链路协议后,构成逻辑上可靠的数据链路。

物理层 Physical Layer

是OSI的最底层,是整个系统的基础。物理层涉及通信信道上传输的原始比特流,主要功能是为数据端设备提供传输数据的通路。

TCP/IP 模型

Transmission Control Protocol/Internet Protocol,传输控制协议/因特网互联网协议。是Internet最基本的协议。
该模型有4层:网络接口层,互联网层(IP层),传输层(TCP层),应用层。

image

网络接口层实际上并不是IP协议组中的一部分,但是他是数据包从一个设备的网络层传输到另外一个设备的网络层的方法。整个过程能够在网卡的软件驱动程序中控制。例如以太网,WIFI,MPLS等。

互联网层 IP层

在OIS模型中被称为网络层。互联网层是整个TCP/IP协议中的核心。他的功能是把分组发往目标机或主机中。并且为了尽快的发送分组,可能会沿着不同的路径同时进行分组传递,最终,分组到达的顺序和发送的顺序是可以是不同的,这就需要上层必须对分组进行排序。此外,互联网层除了需要完成路由功能外,还可以完成将不同类型的网络互联的任务。并且,还需要完成拥塞控制的功能。

传输层 TCP层

传输层负责整个应用进程之间建立端到端的连接和可靠的通信。他只存在于端节点中,TCP层涉及2个协议:TCP协议和UDP协议。其中,TCP协议提供面向连接的服务,提供按照字节流的有序、可靠传输,可以实现连接管理、差错控制、流量控制、拥塞控制等。UDP协议提供无连接的服务,用于不需要或无法实现面向连接的网络应用中。

应用层

该层包括所有和应用程序协同的工作,利用基础网络交换应用程序专用的数据协议。应用层是大多数普通与网络相关的程序为了通过网络与其他程序通信所使用的层。这个层的处理过程是应用特有的。

常见网络协议

常见的网络协议有:TCP,UDP,HTTP

TCP协议

TCP(Transmission Control Protocol ,传输控制协议)是面向连接的传输层协议。位于IP层之上,应用层之下。不同主机的应用层之间经常需要可靠的像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。TCP采用字节流传输数据。

TCP报文段格式
包括协议首部和数据2部分,协议首部的固定部分有20个字节,首部的固定部分后面是选项部分。 image

源端口号和目的端口号:
计算机上的进程同其他计算机进程之间的通讯需要通过计算机的端口。而一个计算机的某一个端口只能同时被一个进程占用,所以通过指定源端口和目的端口,即可以实现计算机之间的通讯。源端口和目的端口是16位的,可以知道计算机的端口数量位2^16=65536(每位分别为0或者1,16位即位2^16)。
常见的端口:
FTP:21
SSH:22
HTTPS:443
HTTP:80
MYSQL:3366

序列号:
表示本报文段所发送数据的第一个字节的编号。在TCP连接中,所有传送的字节流的每一个字节都会被按照顺序进行编号。由于序列号由32位表示,所有每2^32个字节,就会出现序号回绕,从0重新开始。

确认号:
表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。

TCP首部长度:
由于TCP首部包含一个长度可变的选项部分,所以TCP首部长度是来定义TCP报文段的长度。该字段是4个字节。

URG:
表示该报文段中发送的数据是否包含紧急数据。URG=1,表示有。后面的紧急指针字段只有当URG=1时才生效。

ACK:
表示前面的确认号字段是否有效。ACK=1,表示有效。只有当ACK=1的时候,前面的确认号字段才有效。TCP规定,当连接建立后,ACK必须为1.

**PSH: ** 告诉目标收到报文段后,是否立刻把数据上送给上层。如果PUSH=1,立刻上送,而不是缓存。

RST:
只有当RST=1时才生效。当收到RST=1的报文,说明与主机的连接出现了严重的错误,例如主机宕机,必须释放连接,然后重新建立连接。或者上送给主机的数据存在问题,主机拒绝响应。

SYN:
在建立连接时,用来同步的序号。当SYN=1,ACK=0时,表示请求建立连接的报文段。当SYN=ACK=1,表示同意建立连接。当SYN=1,说明这是一个请求建立连接或同意建立连接的报文。只有在前2次握手中SYN才置为1。

FIN:
标记数据是否发送完毕。如果FIN=1,说明发送完成,可以释放连接。

窗口大小:
表示现在需要发送的数量。

检验和:
提供额外的可靠性。

紧急指针:
标记紧急数据在数据字段中的位置。

选项部分:
最大长度可以根据TCP首部长度进行推算。

3次握手和4次挥手

3次握手流程图
image

服务器属于正常运行状态的时候,客户端发起请求,服务器收到回复,称为第一次握手;服务器收到请求,回复客户端,客户端收到响应,此为第二次握手;客户端确认服务器处于正常状态,向服务器发出请求,此为第三次握手。通俗点说,
我:我要发东西给你啦! 你:好的,知道啦,你可以发了。 我:OK,我发过去了。

4次挥手流程图
image

客户端数据发送完毕后,向服务器发出我数据全部传输完成的标识(第一次挥手),服务器收到后,发出我已经知道的标识(第二次挥手),然后服务器处理数据之后,再次向客户端发出我已经将数据接收并处理完成的标识并关闭连接(第三次挥手),客户端收到回复后,响应服务器说知道了,我们彼此可以关闭连接的标识,然后客户端会等待2MSL后, 关闭连接(第四次挥手)。

UDP协议

用户数据报协议U ser Datagram Protocol,是一个简单的面向数据报的传输层协议,正式规范为RFC 768。
在TCP/IP模型中,UDP为网络层以上和应用层以下提供一个简单的接口。UDP只提供数据的不可靠传递,他一旦把应用程序发给网络层的数据发送出去,就不保留数据的备份。

image

image

UDP报头包括了4个字段,每个字段占用2个字节(即16个二进制位)。在IPv4中,“来源连接端口”和“检验和”是可选字段。在IPv6中,只有来源连接端口是可选字段。

报文长度
该字段指定UDP报头和数据总共占用的长度。可能的最小长度是8字节,因为UDP报头已经占用了8字节。由于这个字段的存在,UDP报文总长不可能超过65535字节(包括8字节的报头,和65527字节的数据)。实际上通过IPv4协议传输时,由于IPv4的头部信息要占用20字节,因此数据长度不可能超过65507字节(65,535 − 8字节UDP报头 − 20字节IP头部)。
在IPv6的jumbogram中,是有可能传输超过65535字节的UDP数据包的。依据RFC 2675,如果这种情况发生,报文长度应被填写为0。

检验和
校验和字段可以用于发现头部信息和数据中的传输错误。该字段在IPv4中是可选的,在IPv6中则是强制的。如果不使用校验和,该字段应被填充为全0。

HTTP/HTTPS

HTTP

HTTP,HyperText Transfer Protocol,超文本传输协议,是一种用于分布式、协作式和超媒体信息系统的应用层协议[1]。HTTP是全球资讯网的数据通信的基础。

请求方法

HTTP/1.1协议中共定义了八种方法(也叫“动作”)来以不同方式操作指定的资源:

GET

向指定的资源发出“显示”请求。使用GET方法应该只用在读取资料,而不应当被用于产生“副作用”的操作中,例如在Web Application中。其中一个原因是GET可能会被网络蜘蛛等随意访问。参见安全方法

与GET方法一样,都是向服务器发出指定资源的请求。只不过服务器将不传回资源的本文部份。它的好处在于,使用这个方法可以在不必传输全部内容的情况下,就可以获取其中“关于该资源的信息”(元信息或称元资料)。

POST

向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求本文中。这个请求可能会建立新的资源或修改现有资源,或二者皆有。

PUT

向指定资源位置上传其最新内容。

DELETE

请求服务器删除Request-URI所标识的资源。

TRACE

回显服务器收到的请求,主要用于测试或诊断。

OPTIONS

这个方法可使服务器传回该资源所支持的所有HTTP请求方法。用’*‘来代替资源名称,向Web服务器发送OPTIONS请求,可以测试服务器功能是否正常运作。

CONNECT

HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密伺服器的连结(经由非加密的HTTP代理伺服器)。

版本

HTTP/0.9

已过时。只接受GET一种请求方法,没有在通讯中指定版本号,且不支持请求头。由于该版本不支持POST方法,因此客户端无法向服务器传递太多信息。

HTTP/1.0

这是第一个在通讯中指定版本号的HTTP协议版本,至今仍被广泛采用,特别是在代理服务器中。

HTTP/1.1

持久连接被默认采用,并能很好地配合代理服务器工作。还支持以管道方式在同时发送多个请求,以便降低线路负载,提高传输速度。

HTTP/1.1相较于HTTP/1.0协议的区别主要体现在:

  • 缓存处理
  • 带宽优化及网络连接的使用
  • 错误通知的管理
  • 消息在网络中的发送
  • 互联网地址的维护
  • 安全性及完整性

HTTP/2

主条目:HTTP/2 当前版本,于2015年5月作为互联网标准正式发布。

状态码

所有HTTP响应的第一行都是状态行,依次是当前HTTP版本号,3位数字组成的状态代码,以及描述状态的短语,彼此由空格分隔。

状态代码的第一个数字代表当前响应的类型:

  • 1xx消息——请求已被服务器接收,继续处理
  • 2xx成功——请求已成功被服务器接收、理解、并接受
  • 3xx重定向——需要后续操作才能完成这一请求
  • 4xx请求错误——请求含有词法错误或者无法被执行
  • 5xx服务器错误——服务器在处理某个正确请求时发生错误

协议例子

以请求 https://wsk1103.github.io/ 为例子

请求信息

发出的请求信息(message request)包括以下几个:

  • 请求行(例如GET /images/logo.gif HTTP/1.1,表示从/images目录下请求logo.gif这个文件)
  • 请求头(例如Accept-Language: en)
  • 空行
  • 其他消息体

请求行和标题必须以作为结尾。空行内必须只有而无其他空格。在HTTP/1.1协议中,所有的请求头,除Host外,都是可选的。

客户端请求

image
(末尾有一个空行。第一行指定方法、资源路径、协议版本;第二行是在1.1版里必带的一个header作用指定主机

服务器应答

image

HTTPS

超文本传输安全协定(英语:Hypertext Transfer Protocol Secure,缩写:HTTPS,常称为HTTP over TLS,HTTP over SSL或HTTP Secure)是一种透过计算机网路进行安全通讯的传输协议。HTTPS经由HTTP进行通讯,但利用SSL/TLS来加密封包。HTTPS开发的主要目的,是提供对网站伺服器的身份认证,保护交换资料的隐私与完整性。

HTTPS和HTTP的区别主要为以下四点:

  • https协议需要到ca申请证书,一般免费证书很少,需要交费。
  • http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
  • http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
  • http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。