赞
踩
计算机网络的五层架构包括应用层、传输层、网络层、数据链路层和物理层。
1)服务器端函数:
(1)socket创建一个套接字
(2)bind绑定ip和port
(3)listen使套接字变为可以被动链接
(4)accept等待客户端的链接
(5)write/read接收发送数据
(6)close关闭连接
2)客户端函数:
(1)创建一个socket,用函数socket()
(2)bind绑定ip和port
(3)连接服务器,用函数connect()
(4)收发数据,用函数send()和recv(),或read()和write()
(5)close关闭连接
应用层 HTTP/TFTP
传输层 TCP/UDP
网络层 IP/ICMP
网络接口层
(1) 检验和:
通过检验和的方式,接收端可以检测出来数据是否有差错和异常,假如有差错就会直接丢弃TCP段,重新发送,TCP在计算检验和时,会在TCP首部加上一个12字节的伪首部。检验和总共计算三个部分:TCP首部、TCP数据、TCP伪首部;
(2) 序列号/确认应答、超时重传:
数据到达接收方之后,接收方会发送一个确认应答,表示已经收到数据段,并且确认序号会说明它下一次需要接收的数据序列号,如果发送方没收到确认应答,那么发送方会进行重发,这个等待时间一般是2 * RTT(往返时间)+一个偏差值,如果一个包多次重发没有收到接收端的确认包,就会强制关闭连接;
(3) 窗口控制与重发控制/快速重传(重复确认应答)
TCP会利用窗口控制来提高传输速度,意思是在一个窗口大小内,不用一定等到应答才能发送下一段数据,窗口大小就是无需等待确认而可以继续发送数据的最大值,如果不使用窗口控制,每一个没收到应答的数据都要重发。
1)滑动窗口协议是传输层进行流控的一种措施,接收方通过通告发送方自己的窗口大小,从而控制发送方的发送速度,从而达到防止发送方发送速度过快而导致自己被淹没的目的。滑动可以理解为缓冲区的大小,告诉发送方,自己还能接受多少数据
TCP的滑动窗口解决了端到端的流量控制问题,允许接受方对传输进行限制,直到它拥有足够的缓冲空间来容纳更多的数据。
2)TCP在发送数据时会设置一个计时器,若到计时器超时仍未收到数据确认信息,则会引发相应的超时或基于计时器的重传操作,计时器超时称为重传超时(RTO) 。另一种方式的重传称为快速重传,通常发生在没有延时的情况下。若TCP累积确认无法返回新的ACK,或者当ACK包含的选择确认信息(SACK)表明出现失序报文时,快速重传会推断出现丢包,需要重传。
TCP慢启动是传输控制协议(TCP)使用的一种阻塞控制机制,也被称为指数增长期。慢启动机制通过以指数增加的速率增加发送窗口的大小来实现流量控制,旨在避免在建立连接初期因发送大量数据而导致的网络拥塞。
在慢启动过程中,发送方将初始的拥塞窗口大小设置为一个较小的值,例如2个数据包大小。每当发送方成功接收到一个确认,拥塞窗口大小就会加倍,这意味着发送方可以发送更多的数据。然而,当拥塞窗口大小达到一个阈值(通常是网络的带宽延迟乘积)时,发送方将进入拥塞避免阶段,此时发送方将以一个较慢的速率递增拥塞窗口大小,通常是每次收到一个确认就增加一个数据包大小。如果在慢启动或拥塞避免阶段,发送方检测到网络拥塞,例如发生丢包,它将减少拥塞窗口的大小,并重新开始慢启动过程。
三次握手和四次挥手
三次握手目的:是为了确认客户端和服务器都能收发
在三次握手过程中,客户端和服务器通过交换SYN和ACK包来确认对方的存在和初始序列号,从而建立TCP连接。注意,握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。
四次挥手目的:是为了确认客户端和服务器都结束收发
在四次挥手过程中,客户端和服务器通过交换FIN和ACK包来逐步断开连接。这种机制确保了双方都能有序地关闭连接,并释放相关资源,
需要注意的是,在断开连接的过程中,客户端需要等待一段时间(通常是2MSL,即最长报文段寿命的两倍)才能最终关闭连接。这是为了防止已失效的连接请求报文段出现在新连接中,确保TCP连接的可靠关闭。
TCP的二次握手是不足以建立可靠连接的。TCP协议中采用三次握手而非二次握手来建立连接,主要是因为二次握手无法解决以下问题:
因此,TCP协议选择使用三次握手来建立连接,以确保数据传输的可靠性、完整性和稳定性。这种设计使得TCP成为一种高度可靠和广泛应用的传输协议。
如果采用三次挥手来断开TCP连接,可能会导致以下问题:
因此,四次挥手是为了更可靠地关闭TCP连接,确保双方都能有序地释放资源并关闭连接。
在连接建立阶段,状态转移如下:
在连接关闭阶段,状态转移如下:
当滑动窗口过小时,可以通过以下方式进行调整:
在TCP协议中,滑动窗口的大小是根据网络拥塞情况动态调整的。当网络出现拥塞时,发送方会减小窗口大小以降低数据发送速率,避免进一步加剧拥塞。相反,当网络负载较轻时,发送方可以增大窗口大小以提高数据传输速率;
具体的调整过程包括慢启动、拥塞避免、快重传与快恢复等机制。慢启动阶段,TCP协议初始设置较小的滑动窗口大小,并随着传输的成功确认逐渐增大窗口大小。拥塞避免阶段,滑动窗口以一定的速率增长,但增长速率更缓慢,以避免引发网络拥塞。当接收方收到失序的数据时,会发送冗余的确认信息给发送方,触发快重传和快恢复机制,在此过程中,发送方将减小滑动窗口大小,以便重新发送丢失的数据,并恢复正常的发送速率。
如果第一次握手消息丢失,那么请求方不会得到ack消息,超时后进行重传,
如果第二次握手消息丢失,那么请求方不会得到ack消息,超时后进行重传,
如果第三次握手消息丢失,那么Server 端该TCP连接的状态为SYN_RECV,并且会根据 TCP的超时重传机制,会等待3秒、6秒、12秒后重新发送SYN+ACK包,以便Client重新发送ACK包,如果重发指定次数之后,仍然未收到 client 的ACK应答,那么一段时间后,Server自动关闭这个连接。
TCP协议是有连接的,有连接的意思是开始传输实际数据之前TCP的客户端和服务器端必须通过三次握手建立连接,会话结束之后也要结束连接,而UDP是无连接的,
TCP首部需20个字节(不算可选项),UDP首部字段只需8个字节,
TCP有流量控制和拥塞控制,UDP没有,网络拥堵不会影响发送端的发送速率,
TCP是一对一的连接,而UDP则可以支持一对一,多对多,一对多的通信,
TCP面向的是字节流的服务,UDP面向的是报文的服务。
域名解析的基本过程如下:
对于本机如何干预域名解析,以下是一些建议:
TCP粘包和拆包是在网络通信中常见的问题,与数据的发送和接收方式密切相关;
TCP粘包是指发送方发送的多个小数据包被接收方一次性接收的情况,这可能是因为发送方发送数据的速度过快,接收方无法及时处理,从而多个数据包被合并成一个大的数据包一起接收。具体来说,当发送方连续发送多个数据包时,TCP协议可能会将这些数据包打包成一个TCP报文发送出去,这样,接收方在读取缓冲区时,可能会发现原本应该分开读取的数据包粘在了一起;
而TCP拆包则是指发送方发送的一个大数据包被接收方拆分成多个小的数据包接收的情况,这可能是由于网络中的路由器、交换机等设备的限制,导致大的数据包在传输过程中被分割成多个小的数据包,接收方需要能够正确地组装这些小数据包以还原原始的大数据包;
TCP粘包和拆包问题通常与网络状况、数据包大小、发送和接收方的处理速度等因素有关,为了避免这些问题,可以采取一些策略,如设置合适的数据包大小、使用应用层协议来处理数据包的边界等;
总之,TCP粘包和拆包是网络通信中需要注意和处理的问题,以确保数据的正确传输和接收。
TCP粘包和拆包问题可以通过以下几种方式来解决:
需要注意的是,这些方法并非完美无缺,每种方法都有其适用的场景和局限性。在实际应用中,需要根据具体的需求和网络环境来选择合适的解决方案。同时,对于复杂的数据传输任务,可能需要结合使用多种方法来更好地解决TCP粘包和拆包问题。
TCP比UDP更可靠的原因主要在于TCP协议设计了一套复杂的机制来保证数据传输的可靠性,具体如下:
相比之下,UDP协议则是一种无连接的协议,它不需要建立连接,也不进行确认应答和重传。因此,UDP在传输数据时可能会出现数据的丢失、乱序等问题,可靠性较差。然而,UDP协议由于其无连接性质和简单性,在某些对实时性要求较高或需要一对多、多对多通信的场景中仍具有优势。
HTTP和TFTP都是网络传输协议。
HTTP,全称Hypertext Transfer Protocol,即超文本传输协议,是用于从WWW服务器传输超文本到本地浏览器的传送协议。它建立在TCP之上,是基于请求与响应范式的、无状态的、应用层的协议。HTTP协议以链接从一个超文本服务器传输到另一个超文本服务器、从一个链接到一个链接从一个资源到另一个资源。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。
TFTP则是Trivial File Transfer Protocol的简称,即简单文件传输协议。它用于在客户机与服务器之间进行简单文件传输,提供不复杂、开销不大的文件传输服务。TFTP建立在UDP之上,提供不可靠的数据流传输服务,不提供存取授权与认证机制,使用超时重传方式来保证数据的到达。
总的来说,HTTP和TFTP在网络传输中各有其用,前者主要用于超文本传输,后者则主要用于简单的文件传输。
客户端在发送最后一个ACK包后,需要等待2MSL(两倍的报文最大生存时间)的原因主要有以下几点:
当需要确保数据的完整性和可靠性时,应使用TCP;而当对实时性要求较高且可以容忍少量数据丢失时,可以使用UDP,不过具体的选择应根据应用的需求和网络环境来确定。
IP(Internet Protocol)即网际互连协议,是TCP/IP体系中的网络层协议。设计IP的目的是提高网络的可扩展性,实现大规模、异构网络的互联互通,并分割顶层网络应用和底层网络技术之间的耦合关系,以利于两者的独立发展。IP为主机提供一种无连接、不可靠的、尽力而为的数据包传输服务。
ICMP(Internet Control Message Protocol)即互联网控制报文协议,是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。这些控制消息主要涉及网络通不通、主机是否可达、路由是否可用等网络本身的消息。虽然ICMP并不传输用户数据,但它对于用户数据的传递起着重要的作用。ICMP协议是一个无连接的协议,它并不提供可靠的数据传输,主要用于在IP网络上进行错误报告和诊断,以便源地址得知数据包传输失败的原因并进行相应的处理。
简而言之,IP协议负责在网络层进行数据包的传输,而ICMP协议则在网络层提供控制和诊断功能,两者共同协作以确保网络数据的正确和高效传输。
字节序,又称端序或端模式,是字节顺序的一种。在多字节数据类型的值中,字节序用于标示存放顺序。常见的字节序有小端字节序(little-endian)和大端字节序(big-endian)。小端字节序将低序字节存储在起始地址处,即最前面的字节是最低有效字节;而大端字节序则是将高序字节存储在起始地址处,即最前面的字节是最高有效字节,这两种字节序在网络通信和数据存储中都有广泛的应用,理解字节序对于正确处理跨平台数据和网络通信中的数据交换至关重要。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。