当前位置: 首页 > Linux

《Linux网络开发必学教程》7_TCP和UDP

时间:2023-04-06 03:04:59 Linux

TCP/IP分层结构应用层:每个应用程序都可以定义(使用)各种这样的协议传输层:确保发送的数据能够到达目标主机并完成数据传输网络层:填写数据数据包地址,选择数据传输路径数据链路层:整合不同连接方式的链路,屏蔽网络差异物理层:具体的连接方式,有线,无线,光纤……TCP/IP工作模式TCP/IP层次结构特点上层层依赖于与下层相邻的能力。下层仅与上层直接相邻。上层不知道下层的工作机制。不管上层传输的数据内容如何,??下层都不提供跨层服务。层次结构中的角色缺一不可。深入理解网络层(IPLayer)IP寻址:IP地址属于网络层地址,用于标识网络上的主机。路由控制:控制数据如何到达主机(如:需要转发哪些路由器)无连接:数据包根据IP地址在网络上传输(不需要与目标主机建立连接)Mac地址:数据链路层使用的硬件地址。Mac地址与网络无关。出厂时已写入网络设备。当主机从网络上接收到一个数据帧时,它首先检查数据帧的MAC地址。如果是发送给本机的数据帧,则接受,然后进行其他处理;否则,该帧将被丢弃,不进行任何其他处理。IP地址和MAC地址IP地址是动态的,不属于特定的硬件(MAC地址属于特定的硬件)IP地址是网络层使用的地址(用于在网络中传送数据包)MAC地址是数据链路层使用的地址(用于确定目标网络中接收数据的主机)路由器记录本网络中主机的IP地址和MAC地址的映射关系(ARP协议完成)IP路由控制为了向目标主机发送数据,所有主机都必须维护一张路由表,路由表记录了IP数据包下一步应该发送到哪个路由器。IP数据转发采用“尽力而为”策略进行IP数据转发。数据的有效性会通过附加信息进行校验,但如果有异常则不会重发,会以包为单位进行转发,不保证到达(发出后会沉入海中)).TCP/IP网络层次结构能否提供可靠的数据传输?传输控制协议(TransmissionControlProtocol)TCP在协议实现方面提供可靠的数据传输。TCP没有“数据包”的概念,实现流式传输(数据如流水,无头无尾)。TCP有内部服务状态,可以准确知道数据是否发送成功,是否接收...TCP可以在行为上进行阻塞控制(当网络环境变差时,可以调整数据发送速度)TCP连接建立https://www.bilibili.com/video..Q:3次交互后,连接就建立了,为什么是3次?答:防止旧的重复连接造成连接混乱。例如,在复杂的网络环境中,客户端可能会连续发送多个请求。如果只设计成双向握手,服务端只能接收一次请求,然后返回请求信息,不知道客户端的请求是否成功。这些过期的请求可能会导致网络连接混乱。因此,它被设计成三次握手。客户端收到服务器返回的SEQ+1的返回报文后,就会知道这个连接是历史连接,于是会发消息给服务器,告诉服务器。所以TCP的三次握手的目的就是为了避免重复连接。那么可以设计成四次握手吗?五次握手?不能?答案是肯定的,但是为了节省资源,三次握手就可以满足实际情况,所以没必要设计四次握手,五次握手等。TCP的天然缺陷(DDoS攻击)客户端收到SYN、ACK后,最后的ACK报文不会回复。这会导致服务器消耗资源,但实际上不会通信。当多个puppet客户端同时向服务器发出“连接请求”时,会耗尽服务器的资源,导致TCP连接断开。Q:四次交互后,连接断开了。为什么是四次?答:因为TCP是全双工通信的第一波:当主动方向被动方发送断开连接请求(即FIN报文)时,只表示主动方不再发送数据包,但主动方仍然可以收到数据报。第二次挥手:此时被动方可能还有相应的数据报文要发送,所以需要先发送ACK报文告知主动方“我知道你的断开连接请求”。这样activeconvenience就不会因为没有收到response而继续发送断开连接请求(即FIN报文)。第三次挥手:被动方处理完数据报文后,向主动方发送FIN报文;这样可以保证数据通信正常可靠地完成。被动方发送FIN报文后,进入LAST_ACK阶段(超时等待)。第四次挥手:如果主动方及时发送ACK报文确认连接中断,则被动方直接释放连接,进入可用状态。UDP的特点:完全继承网络层无连接的工作模式,直接指定IP地址和端口发送数据监听固定端口,只要有数据就全部接收,不管网络情况如何,as只要有数据,都可以发送,不管数据是否到达UDP使用场合对数据不敏感,要求实时的场合(如:直播,实时游戏),有更好的场合网络环境(如:物联网家庭),需要深度定制协议的场合(如:“不丢包”UDP协议)TCP和UDP的区别TCP:瓶子的嘴是在嘴上吗?瓶子到嘴了吗?瓶子到嘴了吗?好的,我给你倒杯水。UDP:给你给你,我懒得管你拿不拿。