1.TCP协议

Tcp是一种面向连接的、可靠的、基于IP的传输层协议,由IETF的RFC 793规定。IP报文中TCP的协议号是6。

当应用层向TCP层发送8位数据流进行网间传输时,TCP将数据流分成适当长度的段。最大传输段大小通常由计算机所连接的网络的数据链路层的最大传输单位来限制。之后,TCP将数据包传输到IP层,IP层通过网络将数据包传输到接收实体的TCP层。

为了保证消息传输的可靠性,TCP给每个包赋予一个序列号,序列号也保证了发送给接收实体的包的有序接收。然后,接收实体向成功接收的字节发回相应的确认。如果发送实体在合理的往返延迟内没有接收到确认,则相应的数据将被重传。

在数据正确性和合法性方面,TCP使用一个校验和函数来检查数据是否有错误,并在发送和接收时计算校验和;同时,md5认证可以用来加密数据。

为了保证可靠性,采用了超时重传和捎带确认机制。

在流量控制中,采用滑动窗口协议,规定窗口中未确认的数据包需要重传。

在拥塞控制中,采用了TCP拥塞控制算法。该算法主要包括三个主要部分:1)加法增加和乘法减少;2)起步慢;3)响应超时事件。

TCP/IP

Tcp/IP是为广域网设计的工业标准协议集。是阿帕网研究机构开发的。

TCP/IP的标准是在一系列称为RFC的文件中公布的。文件由技术专家、工作队或RFC编辑和修订。文档发布时,会分配一个RFC编号,如RFC 959、RFC 793、RFC 791等。原RFC一直保留,从未更新。如果文档被修改,文档将以新的编号发布。因此,确保您拥有某个主题的最新RFC文档非常重要。通常在RFC开始时,会有相关RFC的更新、勘误表、过时信息,提醒读者信息的时效性。

用户数据报协议

UDP协议全称是用户数据报协议,在网络中用来处理类似TCP协议的数据包,是一种无连接协议。在现场视察模型中,第四层,即传输层,位于IP层之上。UDP的缺点是不提供分组、组装和排序,也就是说,当一条消息被发送时,不可能知道它是否安全完整地到达。UDP用于支持需要在计算机之间传输数据的网络应用程序。很多客户端/服务器模式的网络应用,包括网络视频会议系统,都需要使用UDP协议。UDP协议自问世以来已经使用了很多年。虽然它最初的辉煌已经被一些类似的协议所掩盖,但即使在今天UDP仍然是一种非常实用可行的网络传输层协议。

TCP和UDP的区别

TCP协议面向连接,UDP协议面向非连接。

TCP协议传输速度慢,UDP协议传输速度快

TCP有丢包重传机制,UDP没有;

TCP协议保证数据的正确性,UDP协议可能会丢包。

3 TCP首部

TCP的报头格式图如右图所示:

-sourceport是源端口,16位。

-目的端口是目的端口,16位。

-序列号是传输数据包中第一个字节的序列号,32位。

-确认号是确认序列号,32位。

-数据偏移量是数据偏移量,4位,该字段的值是TCP报头的长度乘以4。

-标志位:6位,URG表示紧急指针字段有意义;

确认表示确认号字段有意义

PSH表示推送功能,RST表示重置TCP连接

同步意味着同步消息

FIN表示没有要发送的数据

Window表示接收缓冲区的空 idle 空间隔,16位,用于告诉TCP连接对等体它可以接收的最大数据长度。

-校验和是16位的校验和。

-紧急指针是紧急指针,16位。仅当设置了URG标志位时,该字段才有意义,指示紧急数据相对于序列号的偏移量。

4TP连接

TCP连接建立

TCP是互联网中的传输层协议,使用三次握手协议建立连接。当主动方发出SYN连接请求时,等待对方应答

TCP的三次握手

SYN+ACK,最后对对方的SYN进行ACK确认。这种建立连接的方法可以防止错误连接,TCP使用的流量控制协议是大小可变的滑动窗口协议。

TCP三次握手过程如下:

客户端向服务器发送同步消息,并进入同步发送状态。

一旦接收到同步消息,服务器响应同步确认消息,并进入同步_接收状态。

当从服务器接收到同步消息时,客户端响应确认消息,并进入建立状态。

三次握手完成后,TCP客户端和服务器成功建立连接,数据传输即可开始。

TCP连接终止

建立连接需要三次握手,而终止连接需要四次握手,这是由TCP半关闭造成的。具体流程如下图所示。

TCP连接的终止

一个应用进程首先调用close,表示结束执行“主动关闭”。然后,这一端的TCP发送一个FIN子段,表示数据已经发送。

收到该FIN的对端进行被动关闭,该FIN由TCP确认。

注意:FIN的接收也作为文件尾被传递给接收应用程序进程,文件尾被放置在已经排队等待应用程序进程接收的任何其他数据之后,因为FIN的接收意味着接收应用程序进程在相应的连接上没有额外的数据要接收。

一段时间后,接收这个文件终止符的应用进程会调用close关闭其套接字。这导致它的TCP也发送一个FIN。

收到最终FIN的原发送方TCP确认FIN。

由于每个方向都需要一个FIN和一个ACK,因此通常需要四个子部分。

注意:

“通常”是指在某些情况下,步骤1中的FIN与数据一起发送,步骤2和步骤3中发送的子部分来自执行被动关闭的一端,这些子部分可以合并为一个子部分。

在第2步和第3步之间,可以从被动收盘结束到主动收盘结束进行数据流转,称为“半收盘”。

当Unix进程主动终止或非自愿终止时,所有打开的描述符都会关闭,这也会导致在任何仍然打开的TCP连接上发出FIN。

客户端或服务器都可以执行主动关机。通常情况下,客户端执行主动关闭,但有些协议,如HTTP/1.0,是由服务器主动关闭的。

5TCP如何提供可靠性

TCP提供了面向连接的可靠的字节流服务。面向连接意味着使用TCP的两个应用程序在相互交换数据包之前必须建立一个TCP连接。这个过程和打电话很像。先拨号响铃,等对方拿起电话打招呼,再说明是谁。在TCP连接中,只有两方相互通信。广播和多播不能用于TCP。

TCP通过以下方式提供可靠性:

1.应用程序数据被分成TCP认为最适合传输的数据块。这与UDP完全不同,应用程序生成的数据长度将保持不变。从TCP传输到IP的信息单位称为消息段或段。

2.当TCP发送一个数据段时,它会启动一个计时器,等待目的地确认收到该数据段。如果没有及时收到确认,将重新传输消息段。当TCP从TCP连接的另一端接收数据时,它会发送一个确认。TCP具有延迟确认的功能。如果该功能未打开,将立即得到确认。当功能开启时,计时器触发以确认时间点。

3.TCP将保留其报头和数据校验和。这是一种端到端校验和,旨在检测传输过程中数据的任何变化。如果收到的数据段的校验和有错误,TCP将丢弃该数据段,并且不确认收到该数据段。

4.由于TCP数据段是作为IP数据报传输的,所以IP数据报的到达可能是无序的,所以TCP数据段的到达也可能是无序的。如果需要,TCP会对接收到的数据重新排序,并按照正确的顺序交给应用层。

5.由于IP数据报将被复制,所以TCP的接收端必须丢弃复制的数据。

6.TCP还可以提供流量控制。TCP连接的每一端都有一个固定大小的缓冲区空。TCP的接收端只允许另一端发送接收端缓冲区可以接受的数据。这将防止速度较快的主机造成速度较慢的主机的缓冲区溢出。

两个应用程序通过TCP连接交换由8-8位字节组成的字节流。TCP不在字节流中插入记录标识符。我们称之为字节流服务。如果一方的应用程序先传输10个字节,再传输20个字节,再传输50个字节,那么另一方就不知道发送方每次发送多少字节。只要您的接收缓存未满,TCP接收器就会接收任意数量的数据。一端将字节流式传输到TCP连接,相同的字节流将出现在TCP连接的另一端。

另外,TCP不解释字节流的内容。TCP不知道传输的数据字节流是二进制数据、ASCⅱⅱ字符、EBCDIC字符还是其他类型的数据。字节流的解释由TCP连接双方的应用层来解释。

这种处理字节流的方式类似于Unix操作系统处理文件的方式。Unix内核不解释应用程序读或写什么,而是把它交给应用程序处理。对于Unix内核来说,它无法区分二进制文件和文本文件。

2.HTTP协议

超文本传输协议是一种数据传输协议,它规定了浏览器和网络服务器之间的通信规则,并通过互联网传输网络文档。

HTTP协议的主要特点可以概括如下:

1.支持客户端/服务器模式。支持基本认证和安全认证。

http协议简介

2.简单快捷:当客户向服务器请求服务时,只需要传输请求方法和路径。常用的请求方法有GET、HEAD和POST。每种方法都指定了客户和服务器之间不同类型的联系。因为HTTP协议简单,HTTP服务器的程序规模小,所以通信速度很快。

3.灵活性:HTTP允许传输任何类型的数据对象。正在传输的类型由内容类型标记。

4.HTTP 0.9和1.0使用非持久连接:每个连接仅限处理一个请求,服务器在处理完客户请求并收到客户回复后断开连接。这样可以节省传输时间。

HTTP 1.1使用持久连接:一个连接可以传输多个对象,而不是为每个web对象创建一个新的连接。

5.无状态:HTTP协议是无状态的。无状态意味着协议没有用于事务处理的内存。缺少状态意味着,如果后续处理需要先前的信息,则必须重新传输,这可能导致每个连接传输的数据量增加。

另一方面,当服务器不需要之前的信息时,其响应更快。

4请求信息

发出的请求信息包括以下内容:

●请求行,如GET /images/logo.gif HTTP/1.1,表示从/images目录请求文件logo.gif。

●标题,如接受-语言:en

●空行

●可选的邮件正文请求行和标题必须标有

5请求方法

在HTTP/1.1协议中定义了八种方法,以显示Request-URI指定的资源的不同操作模式:

选项-返回服务器支持的特定资源的HTTP请求方法。您也可以通过向网络服务器发送“*”请求来测试服务器的功能。

HEAD-向服务器请求与GET请求一致的响应,除了响应体不会被返回。这种方法可以在不传输整个响应内容的情况下获得包含在响应消息报头中的元信息。

获取-向特定资源发出请求。注意:GET方法不应该用在会产生“副作用”的操作中,比如web app。原因之一是GET可能被网络蜘蛛随机访问。

POST-将数据提交到指定资源进行处理的请求。数据包含在请求正文中。开机自检请求可能会导致创建新资源和/或修改现有资源。

上传最新的内容到指定的资源位置。

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

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

CONNECT-HTTP/1.1协议是为可以将连接更改为管道模式的代理服务器保留的。

补丁-用于对资源进行局部修改,添加到RFC5789。

方法名称区分大小写。当请求所针对的资源不支持相应的请求方法时,服务器应该返回状态代码405。当服务器不识别或不支持相应的请求方法时,它应该返回状态代码501。

HTTP服务器至少要实现GET和HEAD方法,其他方法可选。当然,方法支持的所有实现都要符合下面方法的语义定义。另外,除了以上方法,具体的HTTP服务器也可以扩展自定义方法。

6响应标题

客户端向服务器发送一个请求,服务器用一个状态行来响应。响应的内容包括消息协议的版本、成功或错误代码、服务器信息、实体元信息和必要的实体内容。根据响应类别,服务器响应可以包含实体内容,但并非所有响应都有实体内容。本节仅简要描述响应标题。

响应头的第一行

响应头的第一行,也称为状态行,具有以下格式:

框架HTTP-版本空状态-代码空原因-短语CRLF

HTTP- Version就是HTTP版本的意思,比如HTTP/1.1。状态码是结果码,由三个数字表示。原因短语是一个简单的文本描述,用来解释状态代码的具体原因。状态码用于机器自动识别,原因短语用于人工理解。状态代码的第一个数字代表响应类别,可以采用五个不同的值。后两个数字没有分类功能。状态码的第一个数字代表响应的类型,接下来的两个数字描述在这种类型的响应下发生的具体情况。有关详细信息,请参见HTTP状态代码。

响应标题字段

服务器需要传递很多附加信息,不能放在状态行。因此,需要单独定义响应头字段来描述附加信息。响应报头字段主要描述服务器的信息和请求-URI的信息。如需响应头、实体头和实体的示例,请参考:服务器头文件响应

1.《网络协议 常用网络协议简介》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《网络协议 常用网络协议简介》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/caijing/1805883.html